论文部分内容阅读
抗锯齿技术是3D技术发展中的重要分支。在显示精确度不高的情况下,抗锯齿技术为用户提供了尽可能接近设计人员预想的画面表现,特别在物体边缘、纹理表面等这些画面中特别醒目的地方。不过目前的抗锯齿技术还存在缺陷,质量好的抗锯齿技术资源消耗特别巨大、而一些资源消耗较低的抗锯齿技术则存在这样那样的缺陷(如纹理无法抗锯齿处理等),还有更重要的一点是,部分抗锯齿技术由于本身计算方法问题,无法和一些新技术共存。因此,科学家们—直在寻找更新的算法,来在尽可能降低性能消耗的情况下提供更高的抗锯齿质量,并利用新的算法来拓展抗锯齿技术的适用性。SRAA正是这样的一种新技术,它巧妙的算法和原理,给未来的抗锯齿技术带来了新的发展方向。
3D渲染技术在不停地发展,比如对多光照处理的计算中,目前很多游戏开始使用延迟渲染技术。这是一种相当有名的新技术,在PS3的应用中大放异彩。延迟渲染将复杂的光照算法应用在较大的场景上,将本来需要3D化计算的光照数据转为2D计算,在取得比较好效果的情况下,节省了不少计算资源,并简化了程序操作。
另一种特别出名的技术是MSAA(多重采样抗锯齿)。MSAA的设计面向前向渲染方式(和延迟渲染不同)。在前向渲染中,MSAA选择图像中与像素边界存在交错的部分片(fragment)进行处理,然后将计算好的颜色值写入像素中所有被片覆盖到的样本。由于片是二维的,且通常较小,在很多实例中,着色操作可以被近似地看作无变化。因此MSAA用较小的性能损耗提供了与超级采样相媲美的画质。
但问题就来了。延迟渲染是在帧缓冲区的最终样本上执行,此时片已经不再可用。特别是这些片已经丢失了样本的来源信息。在这种情况下,MSAA不得不“退化”成暴力的超级采样抗锯齿,对画面中的所有像素进行采样,它的优点便被掩盖了。因此有一些采用延迟渲染技术的游戏,如《极品飞车10:热力追踪》,干脆就不提供抗锯齿选项。曾经也有科学家设想过,如果有一种方法可以检测像素是否来自同一表面,并记录这些“片”的信息,这样一来就可以在延迟渲染中启用MSAA。但问题是,这种策略没有想象的那么容易,并且还需要为这些像素存储大量的来源数据,可能会降低效能,因此无法实现。
延迟渲染是好技术,但没有抗锯齿可是万万不行的。此时另外一种抗锯齿的登场,让大家看到一些希望,这就是MLAA(Morphological Antialiasing),直译为形态抗锯齿。MLAA利用相邻像素的边缘检测进行抗锯齿计算。这种方法仅依赖于图像的最终颜色,因此兼容性相当出色,可以被使用在各种渲染方法中。无论是向前渲染还是延迟渲染都可。但MLAA本身也存在问题:由于仅仅使用颜色数据来判断抗锯齿边缘,因此MLAA的应用可能导致无法辨识到底哪些边缘需要进行抗锯齿计算。特别是一些不需要抗锯齿的地方,如文字,表格等,可能都由于不当抗锯齿而显得圆滑甚至怪异。
这样的结果令人恼火,由于计算方法的冲突,延迟渲染技术和MSAA技术无法同时使用。这就意味着程序人员必须在有效率的光照计算和有效率的抗锯齿计算中“二选一”。目前的情况是:为了在延迟光照的条件下实现抗锯齿,要么使用超级采样抗锯齿(S SAA)——其性能损失和分辨率成线性关系,属于相当耗费资源的“暴力计算”,要么执行形态抗锯齿(MLAA),它可以将图像“智能模糊”,并给予你圆滑而难看的字体边缘。
如图1所示,我们为大家进行了一个各型抗锯齿技术的对比。这里有五张图,其中a表示正在进行采样的原始图像。b图为经过采样后的图像,可以看到在斜边和圆边处出现了大量的锯齿。特别需要注意的是,右下角有两个长方体重叠在一起,它们是不需要抗锯齿操作的。c图是经过MLAA抗锯齿后的图像,可见斜边和圆边被抗锯齿处理了,但问题是不需要抗锯齿的重叠长方形被模糊了,这就是MLAA技术存在的“边缘一把抓”的问题。d图是通过新型SRAA抗锯齿处理的图形,可见抗锯齿效果还不错,并且长方体没有被错误抗锯齿。最后的e图是正确进行处理的抗锯齿对比图,用于对比c图和e图抗锯齿效果。可见MLAA有错误抗锯齿情况,效果一般,而SRAA则效果相当接近e图。那么SRAA是怎样获得这样优秀的表现呢?
提高几何体采样精度SRAA技术揭秘
为了解决无法与延迟渲染的共存问题,科学家们进行了更多的思考。从技术发展的方向来看,延迟渲染技术本身由于结构问题,不可能做出更改以适应MSAA抗锯齿的需求。问题最容易突破的点其实在MLAA的实现方法上,换句话来说MLAA抗锯齿本身就有问题,它对屏幕全部色彩信息进行处理计算,无法区分内容。因此对MLAA进行改进,或者说将MLAA的计算思想进行扩展,延伸并加以改进,得到一种更新的抗锯齿技术就成为当前比较重要的问题。
在这种情况下,科学家们找到了一种新技术,这就是今天需要介绍的子像素重构抗锯齿技术,它的英文是Subpixel Reconstruction Antialiasing forDeferred Shading,简称为SRAA。
SRAAm对MLAA做出了重大改进。SRAA技术的关键是:对着色点的采样使用接近屏幕分辨率的级别,对于几何体的采样则提高精度,然后使用重构过滤器来提供一个近似估计的超分辨率图像,这个超分辨率图像会被过滤处理后,成为与原始屏幕分辨率相同的图像,这就是我们需要的抗锯齿处理效果。从目前的实验来看,SRAA能够用少得多的着色操作,来实现逼近SSAA的画面质量,在画质损失不大的情况下,相当对每子像素着色的操作能够加速4~16倍之多。所以,这是一项相当有希望的新技术。
SRAA在抗锯齿的选择上与MSAA和MLAA都有不同。SRAA42由几何样本处理而来,它独立于边缘定位,避免了特定种类的过度模糊,由于几何样本相较全着色计算而言开销较小,所以SRAA的性能可以与MLAA甚至无抗锯齿的情形相提并论。尽管MLAA仅仅处理最终图像,但是它的运行时间仍然不是恒定的,而是随着边缘数目而波动,这使得MLAA很难在要求固定后期特效处理时间的实际游戏当中一展身手。
另外,SRAA还与CSAA有相似之处,它利用了额外的可见性样本来提升边缘质量。不过,CSAA也只能使用在向前渲染中。因为延迟渲染中,会将片和覆盖面的对应关系消除,此时CSAA就不能进行处理。
特别需要指明的是,SRAA中的关键操作是联合双边滤波向上采样。许多光照算法在低分辨率图形上操作,然后使用向上采样的方法来重构符合屏幕分辨率的最终图像。这种方法面临着两个主要问题:欠采样和时间相干性生。如果某个低分辨率下的特征被忽略或者欠采样了,最终生成图像的缺陷就会非常大。欠采样还会使得这些算法容易遭受时间相干性问题的困扰。这些方法都比较偏好于处理平滑的,低频率的输入数据,如间接照明等。在SRAA的计算中, 需要使用特殊的过滤器来避免这些问题。
重构子像素SRAA算法浅析
从这一节开始,我们将介绍一些有关SRAA技术的算法方面的内容。这部分内容不容易理解并且枯燥,适合具备一定图形学知识的专业人士阅读。如果读者没有读下去的兴趣,我们建议你可以参照第三部分的对比图片’来直接了解SRAA技术所带来的抗锯齿效果。
1.综述
SRAA技术利用了一个现象来进行处理:在延迟渲染中,通过对几何采样的采用来实现高质量抗锯齿时,着色操作得要比几何操作更慢,这里的几何采样是指捕捉表面信息。在我们设计的情形里,指一个表面分片的法线和位置信息,以及包含了颜色信息的着色采样。相比传统SSAA使用的“超分辨率”几何图形数据,SRAA创造了适合于过滤处理为原始屏幕分辨率的高分辨率着色数据。
为了达到这个目的,SRAA需要对传统渲染流水线做出两个改动,首先,应用程序必须生成子像素精度的法线和位置信息。其次,应用程序必须在着色之后,后期处理之前执行重构过程并利用G一缓冲区的信息精细修改渲染结果。这个重构步骤的输出是一个与所需屏幕分辨率相同的、已进行过抗锯齿处理的着色缓冲区。这样做是为了方便图像能被正常地执行后期处理。着色缓冲区分辨率通常与屏幕分辨率相同或者略高,但是比几何缓冲区要低得多。
目前SRAA采用的重构步骤使用了双边滤波的变种,近似于Ward和Heckbert在1992年的论文里提出的辐照快取(irradiance caching)方法,下一部分的算法介绍中,会有这种滤波计算的介绍。
在图2中展示了SRAA的算法是如何重新构建子像素的。图中固定半径内所有已着色的像素都被考虑进来,并且使用双边过滤权值进行了插值。在每个样本参与重构了之后,我们将它们聚合起来,使用“boxfilter”处理得到该像素的最终值。如果需要面对更复杂的多重过滤,比如三角形kernel,这种方法也可以用于执行像素重构。需要注意的是,更复杂的过滤必须小心地处理,因为样本数量较少,需要控制在过滤器的支持范围内。
另外,由于过滤器支持的半径已是固定的,因此重构子像素所使用的着色样本数目是可变的。这种可变性设计将会减少G-缓冲区的总负载,并允许我们将指令重新排序以提升高速缓冲存储器的命中率。一般来说,过滤半径设置得非常小可以避免模糊,并将纹理查找的数目维持在一个合理的水平上。相比较之下,较大的过滤半径在理论上能增加重构的质量,但是也增加了最坏条件下的误差。因此我们建议仅使用一个直接相邻的着色样本,这使得结果的误差在可适应的范围内。
2.距离的计算
在计算距离时,SRAA技术会将位置改变和法线改变都考虑进来。因为一些边缘仅仅能被法线检测到,而另一些边缘仅能被位置检测到。因此,联合位置和法线计算,就可以覆盖所有的边缘。
SRAA在计算中,将位置和法线通过特殊的计算公式进行联合处理,并定义一个因子。这个因子用于平衡双边过滤器的权重。通过改变过滤器权值,SRAA算法拥有多种在图形质量和性能之间平衡的方法。SRAA能够通过简单地比较深度值,而不是计算平面方程来估计源和目标问的距离(传统的平面方程估计方法很难正确处理弯角和凹槽)。SRAA的算法中,可以通过计算中移除某些数值来取得和平面方程估计法同样的目地并节约大量的性能。这种方法可以减少大约50%的数据带宽需求,并简化计算过程。当然,这只是一个相对的平衡方法,需要用户在性能和质量方面做出选择。
3.SRAA的局限性等问题
由于着色的耗费是总渲染时间中比例最重的一部分,因此SRAA生成的附加缓冲区不能再引入过大的消耗,否则G-缓冲区生成将会花费大量的重构时间。举例来说,如在1280×720的分辨率下,将G一缓冲区提升至2560×1440所生成的额外样本花费了1.4毫秒的时间,反锯齿过程又花费了1,1毫秒。那么,这个“肥胖”的G-缓冲区消耗的时间就是1.1毫秒。如果渲染器在光照上花费的时间多于0.75毫秒,那么在着色计算上节省的资源就能抵消这种时间耗费。
目前的SRAA算法也存在一个主要局限:SRAA在那些样式均一的图形区域输出结果不够理想甚至比较模糊。这是因为在这些区域里没有法线和深度的变化,设定的过滤器权值就不起作用,整个处理过程就退化成为一次区域狭窄的模糊效果。解决方法是通过在过滤器权值中引入屏幕空间衰减来减少模糊,但仍然有一些模糊不可避免。这种问题并非SRAA独有,而是所有通过多重采样来进行重构的过滤器的普遍问题。这个缺陷可能可以通过对这些区域进行预先识别和剔除的操作来进行修正。
另外,SRAA中最好不要在16倍分辨率下使用交错覆盖(interleaving mask)功能。由于被强制地在2×2的像素块上进行渲染以处理纹理过滤,因此当前的硬件是无法利用交错覆盖功能的。更近一步地,在1280×720分辨率下,一个16倍的G一缓冲区需要88MB的空间,而其中的75%从来不会被我们的算法读取,数据空间被浪费,这也是需要处理的问题。
4.细节和效率优化
过滤器对于纹理读取和算术运算要求较高,对于一个4×SRAA重构而言,SRAA需要读取G-缓冲区每像素58次(16×SRAA则是194次),求值25次(16×SRAA则是81次)。因此我们依靠NVIDIA的Fermi架构里提供的一级缓存和纹理缓存来减少带宽压力。为了最大化缓存性能,在处理时最好将输入数据分离,这样可以从一级缓存与纹理缓存两个地方读取,享受两个缓冲器提供的带宽和容量。特别是对于“肥胖”的G一缓冲区格式而言,这一点帮助特别大。
目前尚未有SRAA技术使用在任何游戏中,下面展示的图形都是原文作者提供的经过SRAA处理后的图像,其中一部分对比给出了在使用其他抗锯齿下的效果。
在图3中,我们对SRAA与MLAA的几何体细节进行了比较。在图片的上半部分中,物体的挂钩的特征都属于欠采样状态,因此在输入信号中没有检测到连续的边缘。但问题在于MLAA移除了这些边缘,令细节损失,而SRAA使用的G-缓冲区敏感地捕捉到了这些信息,所以边缘被SRAA正确重构了。图片的下半部分中SRAA相比MLAA图像更为忠于原始状态,并且没有过多无用像素出现。而在图4中,展示了一个由文中介绍的算法来处理的、具备高度复杂的几何信息的场景。图中可见精细的屋顶,楼梯扶手等大量几何体,可以看出,这些几何体都可以被SRAA~理地处理。在抗锯齿精度方面,这幅图像使用了顺序栅格超级采样,这意味着G一缓冲区实际上是以两倍的分辨率来生成的。
从图5中我们可以看出,最左边为图片的原始输入状态,输出为中间的1×屏幕 分辨率 SRAA,以及右边的普通16×抗锯齿参考图。SRAA的质量在边缘处体现得淋漓尽致。例如,具有较宽的边缘特征的天花板,管道,楼梯扶手,但在奈奎斯特速率以下时,SRAA的质量则跌至谷底,如板条箱上较薄的镶边,楼梯内侧的角落等处。
在图6中,我们借助“寒霜2”游戏引擎特别突出了一些关于高纹理细节与alpha—tested几何体的有趣实例。SRAA并没有为图像加入过剩的模糊,如我们在水泥墙上看到的一样,栅栏和alpha-teste几何体都被SRAA正确地处理了。从图像效果来看,在大多数几何体上,SRAA取得了接近16×超级采样的图像质量。
在图7中,靠左边的图,使用了单着色样本以及若干几何样本的SRAA来进行处理。而中间的则采用了16×几何采样下的SRAA,实际图形效果表现性能表现已经接近了最右侧那张使用16×SSAA处理的参考图。
SRAA技术是一种新的抗锯齿算法,它通过利用子像素的几何信息来进行重构,达到减轻锯齿的目的。SRAA在现在的GPU_上只需几毫秒就能执行完毕,这使得它可以担负起实时渲染的工作,并且它还充分利用了未来GPU上将大幅增长的计算能力和带宽。
在兼容性方面,这个算法可以与延迟渲染等多种渲染模式相结合,兼容性表现很优秀,性能方面可以承受更多的几何采样与着色采样。与MIJAA不同,SRAA的时间与空间开销与场景无关(MLAA复杂度随场景复杂度的变化而变化),只是在处理G-缓冲区时,花费的时间会随场景复杂度增长。
我们认为,接下来的一步将会是SRAA与MLAA二者理念的结合。SRAA使用了相对“廉价”的几何信息来提升“昂贵”的着色渲染结果的质量,能够带来出色的边缘抗锯齿效果。MLAA则是用启发式方式时常造成过度模糊,但是它能够解决SRAA无法处理的边缘着色问题,包括纹理,阴影,镜面高光边界。一个结合了启发式着色权值与精确几何权值的算法,也许能够实现比这两者中的任何一个都要更高的渲染质量。未来的新算法将取得SRAA和MLAA各自优势,不远的未来,我们就将在一些的游戏上看到新型抗锯齿技术的应用,进入一个完全没有锯齿的虚拟世界。
3D渲染技术在不停地发展,比如对多光照处理的计算中,目前很多游戏开始使用延迟渲染技术。这是一种相当有名的新技术,在PS3的应用中大放异彩。延迟渲染将复杂的光照算法应用在较大的场景上,将本来需要3D化计算的光照数据转为2D计算,在取得比较好效果的情况下,节省了不少计算资源,并简化了程序操作。
另一种特别出名的技术是MSAA(多重采样抗锯齿)。MSAA的设计面向前向渲染方式(和延迟渲染不同)。在前向渲染中,MSAA选择图像中与像素边界存在交错的部分片(fragment)进行处理,然后将计算好的颜色值写入像素中所有被片覆盖到的样本。由于片是二维的,且通常较小,在很多实例中,着色操作可以被近似地看作无变化。因此MSAA用较小的性能损耗提供了与超级采样相媲美的画质。
但问题就来了。延迟渲染是在帧缓冲区的最终样本上执行,此时片已经不再可用。特别是这些片已经丢失了样本的来源信息。在这种情况下,MSAA不得不“退化”成暴力的超级采样抗锯齿,对画面中的所有像素进行采样,它的优点便被掩盖了。因此有一些采用延迟渲染技术的游戏,如《极品飞车10:热力追踪》,干脆就不提供抗锯齿选项。曾经也有科学家设想过,如果有一种方法可以检测像素是否来自同一表面,并记录这些“片”的信息,这样一来就可以在延迟渲染中启用MSAA。但问题是,这种策略没有想象的那么容易,并且还需要为这些像素存储大量的来源数据,可能会降低效能,因此无法实现。
延迟渲染是好技术,但没有抗锯齿可是万万不行的。此时另外一种抗锯齿的登场,让大家看到一些希望,这就是MLAA(Morphological Antialiasing),直译为形态抗锯齿。MLAA利用相邻像素的边缘检测进行抗锯齿计算。这种方法仅依赖于图像的最终颜色,因此兼容性相当出色,可以被使用在各种渲染方法中。无论是向前渲染还是延迟渲染都可。但MLAA本身也存在问题:由于仅仅使用颜色数据来判断抗锯齿边缘,因此MLAA的应用可能导致无法辨识到底哪些边缘需要进行抗锯齿计算。特别是一些不需要抗锯齿的地方,如文字,表格等,可能都由于不当抗锯齿而显得圆滑甚至怪异。
这样的结果令人恼火,由于计算方法的冲突,延迟渲染技术和MSAA技术无法同时使用。这就意味着程序人员必须在有效率的光照计算和有效率的抗锯齿计算中“二选一”。目前的情况是:为了在延迟光照的条件下实现抗锯齿,要么使用超级采样抗锯齿(S SAA)——其性能损失和分辨率成线性关系,属于相当耗费资源的“暴力计算”,要么执行形态抗锯齿(MLAA),它可以将图像“智能模糊”,并给予你圆滑而难看的字体边缘。
如图1所示,我们为大家进行了一个各型抗锯齿技术的对比。这里有五张图,其中a表示正在进行采样的原始图像。b图为经过采样后的图像,可以看到在斜边和圆边处出现了大量的锯齿。特别需要注意的是,右下角有两个长方体重叠在一起,它们是不需要抗锯齿操作的。c图是经过MLAA抗锯齿后的图像,可见斜边和圆边被抗锯齿处理了,但问题是不需要抗锯齿的重叠长方形被模糊了,这就是MLAA技术存在的“边缘一把抓”的问题。d图是通过新型SRAA抗锯齿处理的图形,可见抗锯齿效果还不错,并且长方体没有被错误抗锯齿。最后的e图是正确进行处理的抗锯齿对比图,用于对比c图和e图抗锯齿效果。可见MLAA有错误抗锯齿情况,效果一般,而SRAA则效果相当接近e图。那么SRAA是怎样获得这样优秀的表现呢?
提高几何体采样精度SRAA技术揭秘
为了解决无法与延迟渲染的共存问题,科学家们进行了更多的思考。从技术发展的方向来看,延迟渲染技术本身由于结构问题,不可能做出更改以适应MSAA抗锯齿的需求。问题最容易突破的点其实在MLAA的实现方法上,换句话来说MLAA抗锯齿本身就有问题,它对屏幕全部色彩信息进行处理计算,无法区分内容。因此对MLAA进行改进,或者说将MLAA的计算思想进行扩展,延伸并加以改进,得到一种更新的抗锯齿技术就成为当前比较重要的问题。
在这种情况下,科学家们找到了一种新技术,这就是今天需要介绍的子像素重构抗锯齿技术,它的英文是Subpixel Reconstruction Antialiasing forDeferred Shading,简称为SRAA。
SRAAm对MLAA做出了重大改进。SRAA技术的关键是:对着色点的采样使用接近屏幕分辨率的级别,对于几何体的采样则提高精度,然后使用重构过滤器来提供一个近似估计的超分辨率图像,这个超分辨率图像会被过滤处理后,成为与原始屏幕分辨率相同的图像,这就是我们需要的抗锯齿处理效果。从目前的实验来看,SRAA能够用少得多的着色操作,来实现逼近SSAA的画面质量,在画质损失不大的情况下,相当对每子像素着色的操作能够加速4~16倍之多。所以,这是一项相当有希望的新技术。
SRAA在抗锯齿的选择上与MSAA和MLAA都有不同。SRAA42由几何样本处理而来,它独立于边缘定位,避免了特定种类的过度模糊,由于几何样本相较全着色计算而言开销较小,所以SRAA的性能可以与MLAA甚至无抗锯齿的情形相提并论。尽管MLAA仅仅处理最终图像,但是它的运行时间仍然不是恒定的,而是随着边缘数目而波动,这使得MLAA很难在要求固定后期特效处理时间的实际游戏当中一展身手。
另外,SRAA还与CSAA有相似之处,它利用了额外的可见性样本来提升边缘质量。不过,CSAA也只能使用在向前渲染中。因为延迟渲染中,会将片和覆盖面的对应关系消除,此时CSAA就不能进行处理。
特别需要指明的是,SRAA中的关键操作是联合双边滤波向上采样。许多光照算法在低分辨率图形上操作,然后使用向上采样的方法来重构符合屏幕分辨率的最终图像。这种方法面临着两个主要问题:欠采样和时间相干性生。如果某个低分辨率下的特征被忽略或者欠采样了,最终生成图像的缺陷就会非常大。欠采样还会使得这些算法容易遭受时间相干性问题的困扰。这些方法都比较偏好于处理平滑的,低频率的输入数据,如间接照明等。在SRAA的计算中, 需要使用特殊的过滤器来避免这些问题。
重构子像素SRAA算法浅析
从这一节开始,我们将介绍一些有关SRAA技术的算法方面的内容。这部分内容不容易理解并且枯燥,适合具备一定图形学知识的专业人士阅读。如果读者没有读下去的兴趣,我们建议你可以参照第三部分的对比图片’来直接了解SRAA技术所带来的抗锯齿效果。
1.综述
SRAA技术利用了一个现象来进行处理:在延迟渲染中,通过对几何采样的采用来实现高质量抗锯齿时,着色操作得要比几何操作更慢,这里的几何采样是指捕捉表面信息。在我们设计的情形里,指一个表面分片的法线和位置信息,以及包含了颜色信息的着色采样。相比传统SSAA使用的“超分辨率”几何图形数据,SRAA创造了适合于过滤处理为原始屏幕分辨率的高分辨率着色数据。
为了达到这个目的,SRAA需要对传统渲染流水线做出两个改动,首先,应用程序必须生成子像素精度的法线和位置信息。其次,应用程序必须在着色之后,后期处理之前执行重构过程并利用G一缓冲区的信息精细修改渲染结果。这个重构步骤的输出是一个与所需屏幕分辨率相同的、已进行过抗锯齿处理的着色缓冲区。这样做是为了方便图像能被正常地执行后期处理。着色缓冲区分辨率通常与屏幕分辨率相同或者略高,但是比几何缓冲区要低得多。
目前SRAA采用的重构步骤使用了双边滤波的变种,近似于Ward和Heckbert在1992年的论文里提出的辐照快取(irradiance caching)方法,下一部分的算法介绍中,会有这种滤波计算的介绍。
在图2中展示了SRAA的算法是如何重新构建子像素的。图中固定半径内所有已着色的像素都被考虑进来,并且使用双边过滤权值进行了插值。在每个样本参与重构了之后,我们将它们聚合起来,使用“boxfilter”处理得到该像素的最终值。如果需要面对更复杂的多重过滤,比如三角形kernel,这种方法也可以用于执行像素重构。需要注意的是,更复杂的过滤必须小心地处理,因为样本数量较少,需要控制在过滤器的支持范围内。
另外,由于过滤器支持的半径已是固定的,因此重构子像素所使用的着色样本数目是可变的。这种可变性设计将会减少G-缓冲区的总负载,并允许我们将指令重新排序以提升高速缓冲存储器的命中率。一般来说,过滤半径设置得非常小可以避免模糊,并将纹理查找的数目维持在一个合理的水平上。相比较之下,较大的过滤半径在理论上能增加重构的质量,但是也增加了最坏条件下的误差。因此我们建议仅使用一个直接相邻的着色样本,这使得结果的误差在可适应的范围内。
2.距离的计算
在计算距离时,SRAA技术会将位置改变和法线改变都考虑进来。因为一些边缘仅仅能被法线检测到,而另一些边缘仅能被位置检测到。因此,联合位置和法线计算,就可以覆盖所有的边缘。
SRAA在计算中,将位置和法线通过特殊的计算公式进行联合处理,并定义一个因子。这个因子用于平衡双边过滤器的权重。通过改变过滤器权值,SRAA算法拥有多种在图形质量和性能之间平衡的方法。SRAA能够通过简单地比较深度值,而不是计算平面方程来估计源和目标问的距离(传统的平面方程估计方法很难正确处理弯角和凹槽)。SRAA的算法中,可以通过计算中移除某些数值来取得和平面方程估计法同样的目地并节约大量的性能。这种方法可以减少大约50%的数据带宽需求,并简化计算过程。当然,这只是一个相对的平衡方法,需要用户在性能和质量方面做出选择。
3.SRAA的局限性等问题
由于着色的耗费是总渲染时间中比例最重的一部分,因此SRAA生成的附加缓冲区不能再引入过大的消耗,否则G-缓冲区生成将会花费大量的重构时间。举例来说,如在1280×720的分辨率下,将G一缓冲区提升至2560×1440所生成的额外样本花费了1.4毫秒的时间,反锯齿过程又花费了1,1毫秒。那么,这个“肥胖”的G-缓冲区消耗的时间就是1.1毫秒。如果渲染器在光照上花费的时间多于0.75毫秒,那么在着色计算上节省的资源就能抵消这种时间耗费。
目前的SRAA算法也存在一个主要局限:SRAA在那些样式均一的图形区域输出结果不够理想甚至比较模糊。这是因为在这些区域里没有法线和深度的变化,设定的过滤器权值就不起作用,整个处理过程就退化成为一次区域狭窄的模糊效果。解决方法是通过在过滤器权值中引入屏幕空间衰减来减少模糊,但仍然有一些模糊不可避免。这种问题并非SRAA独有,而是所有通过多重采样来进行重构的过滤器的普遍问题。这个缺陷可能可以通过对这些区域进行预先识别和剔除的操作来进行修正。
另外,SRAA中最好不要在16倍分辨率下使用交错覆盖(interleaving mask)功能。由于被强制地在2×2的像素块上进行渲染以处理纹理过滤,因此当前的硬件是无法利用交错覆盖功能的。更近一步地,在1280×720分辨率下,一个16倍的G一缓冲区需要88MB的空间,而其中的75%从来不会被我们的算法读取,数据空间被浪费,这也是需要处理的问题。
4.细节和效率优化
过滤器对于纹理读取和算术运算要求较高,对于一个4×SRAA重构而言,SRAA需要读取G-缓冲区每像素58次(16×SRAA则是194次),求值25次(16×SRAA则是81次)。因此我们依靠NVIDIA的Fermi架构里提供的一级缓存和纹理缓存来减少带宽压力。为了最大化缓存性能,在处理时最好将输入数据分离,这样可以从一级缓存与纹理缓存两个地方读取,享受两个缓冲器提供的带宽和容量。特别是对于“肥胖”的G一缓冲区格式而言,这一点帮助特别大。
目前尚未有SRAA技术使用在任何游戏中,下面展示的图形都是原文作者提供的经过SRAA处理后的图像,其中一部分对比给出了在使用其他抗锯齿下的效果。
在图3中,我们对SRAA与MLAA的几何体细节进行了比较。在图片的上半部分中,物体的挂钩的特征都属于欠采样状态,因此在输入信号中没有检测到连续的边缘。但问题在于MLAA移除了这些边缘,令细节损失,而SRAA使用的G-缓冲区敏感地捕捉到了这些信息,所以边缘被SRAA正确重构了。图片的下半部分中SRAA相比MLAA图像更为忠于原始状态,并且没有过多无用像素出现。而在图4中,展示了一个由文中介绍的算法来处理的、具备高度复杂的几何信息的场景。图中可见精细的屋顶,楼梯扶手等大量几何体,可以看出,这些几何体都可以被SRAA~理地处理。在抗锯齿精度方面,这幅图像使用了顺序栅格超级采样,这意味着G一缓冲区实际上是以两倍的分辨率来生成的。
从图5中我们可以看出,最左边为图片的原始输入状态,输出为中间的1×屏幕 分辨率 SRAA,以及右边的普通16×抗锯齿参考图。SRAA的质量在边缘处体现得淋漓尽致。例如,具有较宽的边缘特征的天花板,管道,楼梯扶手,但在奈奎斯特速率以下时,SRAA的质量则跌至谷底,如板条箱上较薄的镶边,楼梯内侧的角落等处。
在图6中,我们借助“寒霜2”游戏引擎特别突出了一些关于高纹理细节与alpha—tested几何体的有趣实例。SRAA并没有为图像加入过剩的模糊,如我们在水泥墙上看到的一样,栅栏和alpha-teste几何体都被SRAA正确地处理了。从图像效果来看,在大多数几何体上,SRAA取得了接近16×超级采样的图像质量。
在图7中,靠左边的图,使用了单着色样本以及若干几何样本的SRAA来进行处理。而中间的则采用了16×几何采样下的SRAA,实际图形效果表现性能表现已经接近了最右侧那张使用16×SSAA处理的参考图。
SRAA技术是一种新的抗锯齿算法,它通过利用子像素的几何信息来进行重构,达到减轻锯齿的目的。SRAA在现在的GPU_上只需几毫秒就能执行完毕,这使得它可以担负起实时渲染的工作,并且它还充分利用了未来GPU上将大幅增长的计算能力和带宽。
在兼容性方面,这个算法可以与延迟渲染等多种渲染模式相结合,兼容性表现很优秀,性能方面可以承受更多的几何采样与着色采样。与MIJAA不同,SRAA的时间与空间开销与场景无关(MLAA复杂度随场景复杂度的变化而变化),只是在处理G-缓冲区时,花费的时间会随场景复杂度增长。
我们认为,接下来的一步将会是SRAA与MLAA二者理念的结合。SRAA使用了相对“廉价”的几何信息来提升“昂贵”的着色渲染结果的质量,能够带来出色的边缘抗锯齿效果。MLAA则是用启发式方式时常造成过度模糊,但是它能够解决SRAA无法处理的边缘着色问题,包括纹理,阴影,镜面高光边界。一个结合了启发式着色权值与精确几何权值的算法,也许能够实现比这两者中的任何一个都要更高的渲染质量。未来的新算法将取得SRAA和MLAA各自优势,不远的未来,我们就将在一些的游戏上看到新型抗锯齿技术的应用,进入一个完全没有锯齿的虚拟世界。