保守形态抗锯齿 (CMAA) - 2014 年 3 月更新
由 Leigh D. (Intel) 发布于 2014 年 3 月 18 日
本文摘自英特尔公司的 Leigh Davies 在 IDZ 发表的一篇博文,重点介绍了 Leigh 及其同事 Filip Strugar 被称为保守形态抗锯齿的全新抗锯齿技术工作成果。 以下为博文内容以及可供您检查的项目
本例演示了一项被称为保守形态抗锯齿的基于图像的全新抗锯齿技术,可在此处下载。 该技术最初由英特尔的 Filip Strugar 发用于 Codemasters® 的 GRID2,是一款针对传统多样抗锯齿 (MSAA) 的高性能替代方案,能够解决现有抗锯齿技术艺术问题。 本例支持在一个实时渲染的场景下针对现有图像对比 CMAA 与多项流行的技术和硬件 MSAA。 该场景使用简单的 HDR 技术渲染,包括基本动画,支持用户不同的技术如何处理失真以及图像静态部分。
MSAA 长久以来就被用于减少电脑游戏中的和显著改善其视觉。 基本 MSAA 的运行方式是,每像素运行一次像素着色器,以高于正常分辨率的分辨率(通常为 2 倍到 8 倍)运行覆盖和遮挡测试,然后合并结果。 虽然速度明显高于超级采样,但它与无抗锯齿处理相比仍花费较多的成本,并且难以借助技术来实施例如,本例使用了自定义全屏通以获得正确的后 HDR 色调映射 MSAA [Humus 关于 ShaderX6 的文章] [6]。
MSAA 的替代方案是使用基于图像的抗锯齿 (PPAA)它通过形态抗锯齿 (MLAA) 的 GPU 端口 [Reshetov 2009] [1],以及“增强型子像素形态反锯齿”(SMAA) [2] 和 NVidia 的“快速近似抗锯齿” (FXAA) [3] 等。 相于 MSAA,这些 PPAA 技术易于在 MSAA(例如延迟光照及其他不基于几何的抗锯齿)但缺乏足够的子像素准确度且临时稳定性较低的场景中运行。 它们还会引起可感知的纹理和文本模糊,因为边缘检测算法很难区分有意的颜色不连续与渲染不当导致的不想要的。
目前最流行的两种 PPAA 算法是:
- SMAA 是一种基于 MLAA 的算法,但具备多项创新和改进,质量/性能。 它可实施高级模式识别和局部对比度调整,较为昂贵的可使用临时超级采样来降低临时不稳定性并改进质量。 本文中提及的 SMAA 算法版本最新的公共代码 v2.7。
- FXAA 产生效果的速度较快。 但是,FXAA 的颜色不连续性形状检测功能较为简单,易引起的(通常是不想要的)图像模糊。 默认情况下,它的 kernel 大小相有限,因此不能充分地对边缘较长的形状进行抗锯齿处理,同时kernel 大小会影响性能。 除非另有说明,否则本文提及的 FXAA 算法版本是 v3.8(除 3.8 外,示例中添加了最新的 v3.11)。
在本例中,我们将介绍一项名为保守形态抗锯齿 (CMAA) 的新技术。 CMAA 可满足现有技术目前无法满足的两个要求:
- 在集成 GPU 等中低 GPU 硬件上高效运行,同时提供高质量的抗锯齿解决方案。 在采用 15 瓦第四代英特尔® 酷睿™ 处理器以 1600x900 的分辨率开发技术时,满足 300 万的预算要求。
- 最大限度减少,从而在大量应用中替代 2xMSAA,其中包括文本、图案重复、几何图形(电线、网格围栏、植物)和图像移动等最糟糕的场景。
在英特尔第四代 显卡硬件及更高版本上,CMAA 的计算成本介于 FXAA 和 SMAA 1x 之间(其成本是默认的 FXAA 3.11 的 0.9-1.2 倍,是 SMAA 1x 的 0.45-0.75 倍)。 与 FXAA 相比,CMAA 提供了显著增强的图像质量和临时稳定性,因为它可正确处理达 64 个像素的边缘线,而且采用一个只处理对称不连续的算法以避免不想要的模糊(因此更为)。 与 SMAA 1x 相比,CMAA 的抗锯齿能力较弱,因为它处理的形状类型较少,但仍能减少模糊变形并高临时稳定性(受轻微帧间图像变化的影响较小)。
CMAA 包含四个基本逻辑步骤(实施时顺序可以改变):
- 图像颜色不连续分析(随后存储在一个本地压缩的“边缘”缓冲区中)。 使用的方法并非为 CMAA 所独有。
- 使用一个小 kerne提取主导边缘。 (现有算法的独特。)
- 处理简单的形状。
- 处理对称的长边形状。 (原始 MLAA 形状处理算法。)
第 1 步: 图像颜色不连续分析(边缘)
边缘检测通过使用以下方法对比邻近颜色来进行:
- 将 sRGB 色域中的每通道 Luma 加权色差加(默认)
- 通过 sRGB 色域中的输入计算亮度值(较快)
- 加权欧距离 [6](质量最高,速度最慢)
如果邻近像素值的差高于预设的(通过经验来确定),便会存在边缘(不持续)问题。
第 2 步: 本地主导边缘检测(或非主导边缘修剪)
这一步与 SMAA 中的“局部对比度调整”和 FXAA 中的“局部对比度测试 ”类似,但使用的 kernel 较小。 对于第 1 步所检测的每个边缘,应高于的颜色增量值 (dEc) 与邻近边缘的颜色增量值 (dEn):
这一较小的本地调整 kernel 大小在扩大有效边缘检测范围方面不够有效。 但是,它却能更有效地防止小形状(例如文本)模糊、减少不明显边缘带来的局部形状干扰、避免型 kernel的(从不模糊到模糊的可见 kernel 大小)且拥有更高的性能。
第 3 步: 处理简单的形状
在第 1 步中检测、在第 2 步中优化的边缘可用于假设光栅化之前底层边缘的形状(虚拟形状)。 对于简单的形状处理,所有像素都会被分析以确定是否存在 2、3 和 4 边缘的锯齿形状,然后应用颜色转移以与虚拟形状颜色覆盖相匹配并实现局部抗锯齿效果(图 4)。 由于这一颜色转移并不总是对称的,变形量会被最大限度降低到子像素大小。
4a. 形状光栅化像素步骤(大多为三角形边缘)。 该检测所使用的标准详见图 5。 处理了四个 Z 形方向( 90°)。
4b. 对于每个检测的 Z 形,左侧/右侧边缘的长度通过追踪两边的水平(对于两个水平的 Z 形)边缘来确定,如果两边不存在水平边缘或一个垂直边缘(图 6)。
4c. 前一步中的边缘长度用于重建虚拟形状边缘的位置并(对 Z 形的两边)应用颜色转移以与每个像素上的覆盖相匹配。 这一步会覆盖第 3 步中在相同像素上完成的所有抗锯齿处理。
这一方法的内在对称性更好地了整个图像的平均颜色和形状、临界情形并更好地了原始形状,同时临时稳定性。 一个像素(或几个像素)变化不会引起大幅度的颜色转移和形状修改(与 SMAA 1X、FXAA 3.8/3.11 和的 MLAA 技术相比)。
示例用户界面允许直接可从下拉菜单中选择的多项抗锯齿技术。 使用缩放框(可在用户界面启用并通过右键单击放置),可查看所有技术的具体细节。 对于 CMAA 和 SAA,会显示更多调试信息算法所检测的实际边缘;滑块支持您调整用于边缘检测的值;就 CMAA 而言,边缘和非主导边缘移除都可修改。
如果应用运行时禁用了垂直同步 (vsync),便可查看修改对性能造成的影响。 GPU 性能指标会显示在应用的上角,同时显示渲染场景的总成本以及抗锯齿所花费的时间。 查看统计数据时,应禁用缩放框和边缘视图等额外的调试,因为它们会通过强制使用次优的代码路径降低性能。 在“显示边缘”启用时通过缩放框查看 CMAA 时,缩放框还将以动画形式展示应用 CMAA 至图像的效果,这不会影响其余内容的显示。
为准确分析每项技术,可使用“Run benchmark for: …”按钮来激活自动多帧采样和对比,结果(与基础的非抗锯齿版本相比的增量成本)会在运行完成后显示在一个消息框内。
除显示多种效果对实时场景的影响外,该应用还支持加载静态图像效果;目前支持的文件格式是 PNG。 合成的示例图像可见示例媒体库(图 9)。 尝试使用 2x 和 4x MSAA 运行示例将没有效果,因为它们通常会影响图像来源,但是 CMAA、SMAA、FXAA 和 SAA 都能应用到图像上。 这一特性任何考虑在示例中使用任何技术的人加载来自自己应用的图像,并试验多个参数。
以下数字展示了多组质量和性能比较:
参考资料:
[1] MLAA,Reshetov, A. (2009 年)。 《形态抗锯齿》。 自《HPG’09: Proceedings of the
Conference on High Performance Graphics》,2009 年,第 109–116 页,美国纽约 ACM
[2] SMAA,Jorge Jimenez、Jose I. Echevarria、Tiago Sousa 和 Diego Gutierrez,2012 年,
JIMENEZ2012_SMAA,
《SMAA:增强形态抗锯齿》(SMAA: Enhanced Morphological Antialiasing),计算机绘图论坛(欧洲
图形学会报,2012 年)
[3] NVidia《快速近似抗锯齿》(FXAA),Timothy Lottes (2011 年),
http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
[4] Venceslas Biri、Adrien Herubel 和 Stephane Deverly。 2010 年。 《GPU 上的实形态抗锯齿》(Practical morphological
antialiasing on the GPU)。 自《ACM SIGGRAPH 2010 Talks》SIGGRAPH 。 ACM,美国纽约
,第 45 篇文章,共 1 页。 DOI=10.1145/1837026.1837085
http://doi.acm.org/10.1145/1837026.1837085 http://igm.univ-mlv.fr/~biri/mlaa-gpu/MLAAGPU.pdf
[6] 关于 ShaderX6 的 《D3D10 中面向高质量 HDR 抗锯齿的后色调映射》(Post-tonemapping resolve for high quality HDR antialiasing in D3D10)