下载文章和源代码
英文版下载 MLAA:高效地将抗锯齿处理从 GPU 迁移至 CPU (PDF 1.2MB)
访问 MLAA 示例页可下载源代码。
简介
高效的抗锯齿技术是进行高品质、实时渲染的重要工具。MSAA(多点采样抗锯齿处理)是目前使用的标准技术,但有一些严重的缺点:
- 与延迟照明不兼容,后者在实时渲染中使用得越来越多;
- 高内存和处理开销,这使其在一些流行平台(如索尼 Playstation* PS3*)上的使用受限 [Perthuis 2010]。这种开销还直接与渲染场景的复杂性关联;
- 除非与阿尔法覆盖通道一起使用,否则无法对非几何边界进行平滑处理。
英特尔实验室开发的一项新技术形态学抗锯齿处理(Morphological Antialiasing,MLAA) [Reshetov 2009] 解决了这些限制。MLAA 是一种基于图像的后处理过滤技术,它可以标识不连续模式,并混合这些模式的相邻模式中的色彩来执行有效的抗锯齿处理。它是新一代实时抗锯齿技术的先驱,可与 MSAA 抗衡 [Jimenez et al., 2011] [SIGGRAPH 2011]。
此示例基于由 Reshetov 提供的基于 CPU 的原始 MLAA 实施,并进行了改进以大幅提高性能。这些改进包括:
- 集成一种高效且易用的新任务处理系统,在英特尔? 线程构建模块(Threading Building Blocks,TBB)上实施。
- 集成一种高效且易用的新管道传输系统,用于 CPU 图形任务装载。
- 通过新转置通道改进数据存取模式。
- 增加使用英特尔? SSE 指令以优化中断检测和颜色混合。
MLAA 算法
本节将概述 MLAA 算法的原理;请参阅 [Reshetov 2009] 了解详尽说明。从概念上说,MLAA 分三步处理图像缓冲:
- 查找指定图像中的像素间中断。
- 标识 U 形、Z 形和 L 形模式。
- 混合这些模式的相邻模式中的颜色。
第一步(查找中断)通过将每个像素与其相邻像素比较实现。横向中断通过将像素与其下方相邻像素比较进行识别,纵向中断通过比较像素与其右方相邻像素进行识别。在我们的实施中我们比较了颜色值,但适合应用程序特点的任何其他方法也完全有效。
第一步结束时,如果检测到中断,则相应的每个像素都会用横向中断标志和/或纵向标志进行标记。在下一步中,我们会沿标记的像素来确定中断线(标记有相同中断标志的连续像素序列),并确定它们如何组合成 L 形模式,如下图中所示:
图 1: MLAA 图像处理,图像具有左侧原始图像中所示的 Z 形、U 形和 L 形形状
第三步(即最后一步)是对每个标识的 L 形模式进行混合。
一般的想法是将 L 形形状主线段(下图中的水平绿线)的中点连接到次线段(垂直绿线)的中点(连线为红线)。连线将每个像素分成两个梯形;对于每个像素,对应梯形的面积确定混合权重。例如,在下图中,像素 c5 的梯形面积是 1/3;因此,c5 的新颜色计算方式为 2/3 *(c5 的颜色)+ 1/3 *(c5 下面相邻像素的颜色)。
图 2: 计算混合权重
在实践中,为了确保有平滑的轮廓外观,我们需要最大程度地减少连续 L 形形状结合位置的颜色差异。为此,我们根据结合点周围的像素颜色对中间位置周围的 L 形线段上的连接点进行细微调整。
原文链接:https://software.intel.com/zh-cn/articles/mlaa-efficiently-moving-antialiasing-from-the-gpu-to-the-cpu#