2. 西安邮电大学 计算机学院, 西安 710061
2. School of Computer Science & Technology, Xi'an University of Posts and Telecommunications, Xi'an Shaanxi 710061, China
计算机图形的走样主要发生在光栅化[1]和纹理映射[2]过程中, 分别被称为几何走样和纹理走样。早期为了消除几何走样, 研究者提出了超采样反走样(Super Sampling Antialiasing, SSAA)算法[3]。SSAA是一种全屏反走样(Full Scene Anti-Aliasing,FSAA)技术, 它将屏幕上所有的像素细分成子像素, 用子像素颜色的平均值作为该像素的颜色, 经过SSAA处理后的图形质量好, 一般用作衡量标准。但是, SSAA的计算量和存储代价较大, 不适用于图形的实时反走样, 因此, 研究人员又相继提出了多重采样反走样(MultiSampling Anti-Aliasing, MSAA)[4]、覆盖采样抗锯齿(Coverage Sampling Anti-aliasing, CSAA)技术[5]和增强质量反走样(Enhanced Quality Anti-Aliasing, EQAA)[6], 这些算法存储代价和计算量都有所减少, 但处理反走样的效果不如SSAA。纹理反走样通常采用纹理滤波的方式, 主要有最近邻采样、双线性插值[7]、MIPmapping[8]、三线性插值[9]和各向异性滤波[10]等。
延迟渲染(Deferred Shading)技术[11-13]将像素的几何信息(位置坐标、纹理坐标、法线向量等)存储在中间缓存G-buffer中, 然后从G-buffer中读取信息并进行光照等处理。与传统的渲染方式相比, 延迟渲染推迟了光照计算, 极大提高了渲染速度, 是目前比较流行的一种渲染技术。为了与延时渲染技术相适应, 近些年来, 业界提出对渲染后的像素进行反走样处理, 取得了较好的效果。通常这个阶段采用的反走样技术被称为后处理反走样技术, 而在光栅化和纹理映射阶段采用的反走样技术被称为前处理反走样技术。
本文对后处理反走样算法中主流的形态学反走样算法进行了研究, 通过对边缘检测阈值的改进和纹理存储面积的优化, 提高了反走样效果并且降低了内存占用。
1 形态学反走样技术相关工作2009年Intel工程师Reshetov[14]将形态学引入到了计算机反走样领域, 提出了形态学反走样(MorphoLogical Anti-Aliasing, MLAA)技术。MLAA根据相邻像素之间的颜色差值提取边缘轮廓, 对提取出的边缘轮廓与预定的模式匹配, 利用模式计算权值进行颜色混合。最初的MLAA只能在CPU上进行处理, 速度比较慢。
MLAA算法的优点是独立于图形流水线, 对边缘像素进行抗锯齿处理, 算法简单且易于实现; 其缺点是无法处理因采样不足造成的走样现象, 受光照的影响较大。但是MLAA是具有代表性的边缘反走样技术, 后续研究者在此基础上提出了多种改进算法。2009年,NVIDIA提出了快速近似反走样(Fast approXimate Anti-Aliasing, FXAA)技术, FXAA与MLAA类似, 对图像边缘进行抗锯齿处理, 速度快, 但反走样效果无法与硬件反走样相比; 2010年,Jimenez等[15]提出了实用性MLAA(Practical MLAA)技术, 为了与MLAA区分, 本文命名为Jimenez's MLAA, 该算法是MLAA的改进算法, 可对实时性图像进行抗锯齿处理, 但仍存在模糊现象。2013年Intel公司改进了Jimenez's MLAA, 提出了一种子像素形态学反走样(Sub-pixel Morphological Antialiasing, SMAA)技术[17], 该技术可与硬件反走样技术(如SSAA)相抗衡, 能得到较高品质的图像质量。但SMAA算法采用固定阈值, 能提取的图像轮廓较少; 同时存储了不必要的面积纹理, 存储面积较大。
本文提出了一种改进的形态学反走样算法, 引入了动态阈值, 严格限制了像素边界条件, 使算法可以提取出更多的边界细节; 同时剔除了不必要的面积纹理, 减少了面积纹理的存储。本文在Microsoft DirectX SDK下实现了改进算法, 实验结果表明:本文提出的改进算法可提取更多更清晰的轮廓线, 存储减少了51.93%。
2 改进的形态学反走样算法 2.1 算法概述同Jimenez's MLAA和SMAA算法一样, 本文算法可分为边缘提取、面积计算和颜色混合等三个步骤, 具体流程见图 1。
1) 边缘提取。SMAA算法的边缘检测算法有三种方式:亮度检测、颜色检测和深度检测。SMAA设定固定的阈值提取边缘像素, 造成部分几何边界无法被提取。本文提出自适应阈值的边缘检测算法, 以提取出更多的图像边缘信息。
2) 权值计算。将检测到的边缘轮廓线与预设几何模式进行匹配, 通过距离搜索长度对应的面积纹理(面积表示混合权值)进行颜色混合。本文提高了存储的面积纹理空间效率, 减少了内存占用。
3) 颜色混合。本文采用与SMAA算法一样的混合方式。
2.2 边缘提取算法阈值的改进SMAA的三种边缘提取算法中, 提取颜色信息可以提取出色度差产生的走样边缘, 但计算量偏大; 深度信息虽然能够快速提取出边缘信息, 但容易丢失边缘信息; 亮度信息边缘提取算法与前两者相比, 能够提取出边缘信息, 代价比深度信息大。
SMAA利用式(1) 将场景中像素的颜色值RGB转化为亮度信息, 然后在根据局部对比调整判定边缘像素。在式(1) 中采用归一化的颜色空间, 即R、G、B的取值范围为0~1。
$L=0.212\ 6R+0.715\ 2G+0.072\ 2B$ | (1) |
图 2说明了边界信息, 灰色圆点所在的像素表示待检测的当前像素, ct、cb、cl和cr分别表示上下左右四个相邻像素的亮度值与当前像素亮度值的差值。c2l和c2t分别表示左方和上方第一个像素与第二个像素之间的亮度差。SMAA算法只对左方像素和上方像素进行标记, 相应的右方和下方像素的信息可从其他像素得到。
SMAA将ct和cl分别与固定阈值T(T∈[0.05, 0.2])比较[16], 如果ct和cl都小于T, 则相应的el和et布尔值都为0, 那么判定该像素为非边缘像素, 直接对下一个像素进行判断; 否则对该像素进行进一步的判定, 选取ct、cb、cl、cr、c2l和c2t中的最大值, 如式(2) 所示, 并通过式(3) 判定该像素是左方边缘像素或上方边缘像素。如果e′l的布尔值为1, 表明当前像素和左方像素不连续, 标记为左方边缘像素; 如果e′t的布尔值为1, 表明当前像素和上方像素不连续, 标记为上方边缘像素; 如果e′l和e′t的布尔值都为1, 表明当前像素同时和左方像素和上方像素不连续, 被标记与左方和上方边缘像素。
${{c}_{\max }}=\max ({{c}_{t}},{{c}_{b}},{{c}_{l}},{{c}_{r}},{{c}_{2t}},{{c}_{2l}})$ | (2) |
$\left\{ _{{{{{e}'}}_{t}}={{e}_{t}}\wedge ({{c}_{t}}>0.5{{c}_{\max }})}^{{{{{e}'}}_{l}}={{e}_{l}}\wedge ({{c}_{l}}>0.5{{c}_{\max }})} \right.$ | (3) |
该方法利用固定阈值, 不能根据场景的实际复杂程度进行边缘提取, 造成部分几何边界无法被提取出来, 如图 3所示。
本文引入动态阈值T′=α·Lc作为判定像素边界条件, 其中:Lc是当前像素的亮度, α是调整因子。当α的取值范围设定为[0.05, 0.2]时, 一定有T′=α·Lc≤T, 即动态阈值一定小于T, 因为α和Lc均是小于1的实数。动态阈值导致了像素边界的判定条件更加严格, 这样提取出的边缘轮廓更接近实际场景。从图 3~4可以看出:本文算法能够提取更多的边缘, 而SMAA容易丢失这些几何特征。
SMAA算法中预设的几何模式主要分为正交和对角线模式两种类型, 分别用于处理倾向于水平、垂直和倾斜方向上的走样现象。如图 5(a)所示, 根据正交边检测出的几何模式有16种, 每种几何模式的主边长度可能是[1, 16]内的整数, 因此16种模式就需要存储16×16=256种情况的面积。预设定的几何形状有L-Shapes、U-Shapes和Z-Shapes三种。如果对图 5(a)中的模式0、5、10、15进行面积混合, 容易产生走样, 因此对这四种模式不作任何处理, 相应的区域面积为0;模式7、11、13、14与预设的三种几何形状不匹配, 计算面积时按照Z-Shapes进行处理;模式11、13的面积计算和混合方式与模式9一样;模式7、14的面积计算和混合方式与模式6相同。SMAA需要对这16种几何模式进行面积存储, 共需要存储16×16=256种情况的面积。
根据上面的分析, 可以优化面积模式的存储, 如表 1所示, 对面积为0的模式0、5、10、15不进行存储, 直接返回值0。将模式11、13的面积和模式9存储到一个面积纹理中, 将模式7、14的面积和模式6存储到一个面积纹理中。优化后, 需要存储8×16=128种模式, SMAA需要256种面积存储情况,本文算法只需要128种面积存储情况。
预设的正交模式相应的面积存储空间降低了50%, 极大地减少了所需内存。
3 结果对比实验的计算机环境是Intel core i7 3.4 GHz CPU、16 GB内存、64位操作系统、NVIDIA GTX560 GPU。在Windows 7系统下的Microsoft Visual Studio 2010环境下,使用Python语言实现面积纹理,用Microsoft DirectX SDK和HLSL着色语言实现了所提出的算法。
3.1 边缘提取算法结果对比本文算法采用自适应阈值的方式进行边缘提取, 能够更好地提取出场景的几何轮廓, 减少几何边缘轮廓的走样现象。从图 6所示的边缘轮廓线提取结果可看出,本文算法能够提取出图像更多的边缘轮廓和几何轮廓。
本文算法对面积纹理存储进行改进, 对正交模式和对角线模式中不需要进行存储的面积进行剔除。本文算法和SMAA面积纹理大小的对比结果:SMAA算法的面积纹理大小为1 138 KB,而本文算法面积纹理的大小为547 KB。本文算法与SMAA算法相比,降低了51.93%的存储比例。
3.3 反走样效果比较本文算法能够提取出更好的几何轮廓和图像轮廓, 可以对SMAA中不能检测到的几何边缘进行抗锯齿处理。
从图 7所示的反走样效果图可看出,圆形窗户的外部边框(方框处)的边缘锯齿明显相对平缓、光滑,圆形窗户的内部边框(椭圆处)的边缘锯齿相对也有一定的改善。本文算法处理后的圆形窗户边缘的锯齿状现象明显减弱。
从图 8中放大烟囱的左下角可以明显看出,本文算法处理后的抗锯齿效果较好。
本文分析了SMAA算法的不足, 并提出用一个像素的亮度与调整因子的乘积作为动态阈值来判定该像素是否为轮廓;同时, 合并了不同模式但是面积计算和混合方式相同的存储, 有效地减少了面积纹理的存储。实验结果表明:本文算法比SMAA算法可以提取更多更清晰的轮廓线, 存储面积减少了51.93%。本文算法可以集成在大型三维场景软件中, 提高场景的真实感, 减少运行存储。但是, 相对于SMAA, 由于提出轮廓信息多, 因此, 所需要的反走样处理时间就长。未来可以考虑用硬件实现本文提出的改进算法, 提高处理速度。
[1] | 杜慧敏, 郝哲, 王鹏超, 等. 三角形的光栅化与反走样算法[J]. 西安邮电大学学报, 2015, 20(3): 33-38. (DU H M, HAO Z, WANG P C, et al. Rasterization and anti-aliasing algorithm for triangles[J]. Journal of Xi'an University of Posts and Telecommunications, 2015, 20(3): 33-38.) |
[2] | 李增忠. 纹理映射技术的研究[D]. 西安: 西安电子科技大学, 2005. (LI Z Z. Research on texture mapping technology [D]. Xi'an: Xidian University, 2005.) |
[3] | CROW F C. A comparison of antialiasing techniques[J]. IEEE Computer Graphics & Applications, 1981, 1(1): 40-48. |
[4] | LAINE S, AILA T. A weighted error metric and optimization method for antialiasing patterns [EB/OL]. [2017-01-10]. http://dx.doi.org/10.1111/j.1467-8659.2006.00919.x. http://dl.acm.org/citation.cfm?doid=3072959.3073693 |
[5] | YOUNG P. Coverage sampled antialiasing. [EB/OL]. NVIDIA. [2016-10-26]. http://www.nvidia.com/object/coverage-sampled-aa.html. |
[6] | AMD. EQAA modes for AMD 6900 series graphics cards [EB/OL]. [2016-11-01]. http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/EQAA%20Modes%20for%20AMD%20HD%206900%20Series%20Cards.pdf. |
[7] | BLINN J. Hyperbolic interpolation[J]. IEEE Computer Graphics & Applications, 1992, 12(4): 89-94. |
[8] | WILLIAMS L. Pyramidal parametrics[J]. ACM SIGGRAPH Computer Graphics, 1983, 17(3): 1-11. DOI:10.1145/964967 |
[9] | EWINS J P, WALLER M D, WHITE M, et al. MIP-map level selection for texture mapping[J]. IEEE Transactions on Visualization & Computer Graphics, 1998, 4(4): 317-329. |
[10] | EWINS J P, WALLER M D, WHITE M, et al. Implementing an anisotropic texture filter[J]. Computers & Graphics, 2000, 24(2): 253-267. |
[11] | SHISHKOVTSOV O. Deferred shading in S. T. A. L. K. E. R. in GPU Gems 2. [M]. Upper Saddle River: Addison Wesley Professional, 2005: 143-166. |
[12] | HARGREAVES S. Deferred shading [EB/OL]. [2016-11-02]. http://amd.wpengine.com/wordpress/media/2012/10/D3DTutorial_DeferredShading.pdf. http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/D3DTutorial_Crytek.pdf |
[13] | KOONCE R. Deferred Shading in Tabula Rasa[M]. Upper Saddle River: Addison Wesley Professional, 2007: 429-457. |
[14] | RESHETOV A. Morphological antialiasing [EB/OL]. [2017-01-10]. http://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/readings/reshetov09_mlaa.pdf. http://www.cs.cmu.edu/afs/cs/academic/class/15869-f11/www/readings/reshetov09_mlaa.pdf |
[15] | JIMENEZ J, MASIA B, ECHEVARRIA J I, et al. Practical morphological antialiasing [M]//ENGEL W. GPU Pro 2: Advanced Rendering Techniques. Boca Raton, Florida, USA: CRC Press, 2011. |
[16] | JIMENEZ J, ECHEVARRIA J I, SOUSA T, et al. SMAA: enhanced subpixel morphological antialiasing[J]. Computer Graphics Forum, 2012, 31(2): 355-364. |
[17] | PERSSON E. Second-depth antialiasing [M]//ENGEL W. GPU Pro 4: Advanced Rendering Techniques. Boca Raton, Florida: CRC Press, 2013: 201-212. |