之前玩Cocos的时候是不用抗锯齿的,因为2D游戏横平竖直,没什么锯齿。那会就听说做3D游戏一定是要打开AA的。但是现在做3D游戏也有几年了,结果项目里面还是不怎么开AA,原因是因为手游的性能问题。不开AA的话锯齿真的蛮严重的,所以还是用一篇文章研究一下各种AA的效果和性能,方便以后做个权衡。

首先先转载两篇文章电影级高画质!3D游戏抗锯齿技术解析孰优孰劣比比看,7种抗锯齿效果对比

由浅入深 图像边缘锯齿的由来

我们知道,电脑画面是由一个个小像素所构成的。虽然这些像素非常的小,不过每一个像素都覆盖了这一画面上的某一个区域。我们可以将这些像素比作通向虚拟世界的一扇一扇窗户,而电脑的任务就是决定每一个像素的颜色以使得我们通过这些窗户能看到一幅最美的画面。

aa

不过渲染的速度也是一幅“实时”图片的所需要考虑的一个重要因素,因此通常像素的色彩都通过对该像素内的某一点进行采样得到的颜色所决定的(即我们所谓的点采样Point Sampling)。不幸的是,为了提高速度而采取的这种做法可能使得所采样的单个点的色彩不能体现出整个像素所覆盖区域的色彩状况。当这种情况出现在物体的边缘的时候就非常明显了。

aa aa

有一些像素“跨”在物体的边缘,该像素内部的色彩是有一定比例的,而且在外部的显示我们也希望体现出这一比例。物体的边缘两边却会呈现出不同的颜色。点采样技术将会使得整个像素呈现出边缘两边的某一种颜色。而这样对物体边缘的着色无论是着上前景色或是背景色中的哪一种色,由于像素间色彩的突然跳变,都自然而然的会呈现出锯齿状。

我们知道CRT、LCD以及等离子显示器都是用像素来显示图片,在显示图片的时候,经常有多种颜色,但是一个像素只能显示一种颜色,所以经常是一个像素显示一种颜色,而它旁边的则显示另一种颜色,这样就会形成锯齿状的边缘。

这种情况就是我们所说的锯齿(Aliasing)了。这是由于这一个像素的面积正好覆盖在了边缘上,两边都有它的存在。一个更好的办法就是将前景色和背景色进行混合从而造出第三种颜色来填充色一像素。这种方法能有效的改进图像边缘的表现效果,换一种说法就是实现了“抗”锯齿的作用。

aa aa aa aa

抗锯齿(Anti-aliasing):标准翻译为“抗图像折叠失真”。由于在3D图像中,受分辨的制约,物体边缘总会或多或少的呈现三角形的锯齿,而抗锯齿就是指对图像边缘进行柔化处理,使图像边缘看起来更平滑,更接近实物的物体。它是提高画质以使之柔和的一种方法。

aa

如今最新的全屏抗锯齿FSAA(FullSceneAnti-Aliasing)可以有效的消除多边形结合处(特别是较小的多边形间组合中)的错位现象,降低了图像的失真度。全景抗锯齿在进行处理时,须对图像附近的像素进行采样,以达到不同级别的抗锯齿效果。简单的说也就是将图像边缘及其两侧的像素颜色进行混合,然后用新生成的具有混合特性的点来替换原来位置上的点以达到柔化物体外形、消除锯齿的效果。

抗锯齿基本可以理解为一个数学算法:计算一个像素应该被分配的“平均颜色”。要计算“平均颜色”就需要取样,样本空间越大,图片质量越好,需要的计算时间也越长。

AA分为很多种:传统的抗锯齿技术“全屏抗锯齿/FSAA”,包含超级采样抗锯齿(SSAA)多重采样抗锯齿(MSAA)覆盖采样抗锯齿(CSAA)可编程过滤抗锯齿(CFAA)。之后又出现了基于后处理的MLAAFXAATXAASMAA(Patrick:从性价比上来说,FXAA性价比最高,其次就是SMAA和MSAA,其中MSAA效果最好。所以目前手游上用的最多的就是FXAA(比如崩坏3)。FXAA算法也有很多种,目前我使用的是NVdia的FXAA)

  • 超级采样抗锯齿(SSAA)
  • 超级采样抗锯齿(Super-Sampling Anti-aliasing,简称SSAA)此是早期抗锯齿方法,比较消耗资源,但简单直接,先把图像映射到缓存并把它放大,再用超级采样把放大后的图像像素进行采样,一般选取2个或4个邻近像素,把这些采样混合起来后,生成的最终像素,令每个像素拥有邻近像素的特征,像素与像素之间的过渡色彩,就变得近似,令图形的边缘色彩过渡趋于平滑。再把最终像素还原回原来大小的图像,并保存到帧缓存也就是显存中,替代原图像存储起来,最后输出到显示器,显示出一帧画面。

    aa

    这样就等于把一幅模糊的大图,通过细腻化后再缩小成清晰的小图。在显示尺寸不变的情况提高分辨率,让单个像素变得极小,这样就能够大幅减轻画面的锯齿感了。如果每帧都进行抗锯齿处理,游戏或视频中的所有画面都带有抗锯齿效果。而将图像映射到缓存并把它放大时,放大的倍数被用于分别抗锯齿的效果。不过是由于对整个显示画面的放大,因此它消耗的显示资源也是非常大的。

    超级采样抗锯齿中使用的采样法一般有两种:顺序栅格超级采样(Ordered Grid Super-Sampling,简称OGSS),采样时选取2个邻近像素。旋转栅格超级采样(Rotated Grid Super-Sampling,简称RGSS),采样时选取4个邻近像素。

  • 多重采样抗锯齿(MSAA)
  • MSAA是MultiSampling Anti-Aliasing的英文缩写,指多重采样抗锯齿,原理是寻找出物体边缘部分的像素,然后再把画缩放到当前的显示器上。是SSAA的升级版,MSAA是寻找出物体边缘部分的像素,然后对它们进行缩放处理。由于只是物体的外层像素进行缩放处理,忽略掉了不会产生锯齿的内部像素,所以显卡不会像处理SSAA(超级采样抗锯齿)那样需要庞大的计算量,因此MSAA比起SSAA来更有效。

    下面转载知乎xiaocai的一个回答,原文链接:https://www.zhihu.com/question/58595055/answer/157756410

    关于MSAA可参考官方规格说明文档。对于OpenGL是Khronos维护的:https://khronos.org/registry/OpenGL/index_gl.php,其实里面很多内容在红蓝宝书都有。DX由微软维护,但只通过DX的SDK文档或Rasterization Rules公开了较上层的那部分。

    先贴出OpenGL官方描述:First, each fragment includes a coverage value with the value of SAMPLES bits Second, each fragment includes SAMPLES depth values and sets of associated data, instead of the single depth value and set of associated data that is maintained in single-sample rendering mode. An implementation may choose to assign the same associated data to more than one sample. The location for evaluating such associated data can be anywhere within the pixel including the fragment center or any of the sample locations. The different associated data values need not all be evaluated at the same location. Each pixel fragment thus consists of integer x and y grid coordinates, SAMPLES depth values and sets of associated data, and a coverage value with a maximum of SAMPLES bits.

    整个回答以MSAA4x为例,官方描述是说,每个像素有4bit的coverage mask,以及4个深度值(每个sample各一个),另外还有其他attribute(最简单的就是color),并且是可以拿一份color copy给所有sample(准确地说是只copy给那些mask非0的sample),而这份color可以来自像素中心或者某个sample。(Patrick:个人理解,每个sample应该是去对应的地方去采样,详细的解释如下)

    开启了msaa后,默认每个pixel只执行1次,即Pixel Frequency,也就是说PS只执行算出每个像素中心的color,然后copy给4个sample。当然前面说了,这份copy不一定来自像素中心,也可以是像素的其他位置,例如DX中如果把color的插值方式声明为Centroid,那么当像素中心不在三角形内部(但有Sample在三角形内),则会选择三角形内的Sample,避免“Outerpolate”。Pixel Frequency的好处是PS仍然是1x的,降低消耗,但有时候视觉效果不太好,所以也可以开启Sample Frequency,要求一个pixel的4个sample分别由4个PS负责执行,每个sample计算各自的color。可以参考ARB_sample_shading的说明:https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_sample_shading.txt。

    4xmsaa的默认算法是将每个sample所在位置采样得到的颜色加起来除以4。

    无论Pixel Frequency还是Sample Frequncy,深度始终是4x,即每个sample有自己的深度。还是回到“有效”sample的概念上,深度测试fail的sample是无效的,PS输出的color不会copy给它。如果4个sample的深度测试都fail,那么pixel被discard。

    以4xMSAAMSAA为例。开启时,分辨率x4,即100*100的屏幕,要准备200*200的数据buffer,每个像素的4个sample有各自的color,深度,一口气把整一帧所有的triangle画完,按照sample级别去做Z test(当前像素的Z比buffer里的Z小则测试通过),最终像素的颜色是4个sample的均值,通过Bilinear resolve得到100*100。每个sample的颜色可能来自不同三角形,如下图左边(最终颜色应该是(红+绿)/2)。有多个三角形覆盖同一个sample,当然选择最终Z test pass即离眼睛最近的,如下图右边(最终颜色应该是(红+背景色)/2)。总之就是4个sample color的均值,没被任何三角形覆盖的sample取的自然就是背景色。

    aa aa

    1)PS(Pixel Shader,片段着色器)只负责算出每个像素/sample的color,它并不知道每个像素各自有多少个sample被覆盖、是有效的,其实PS自身都可能把sample给discard。2)裁剪(scissor reject)完再执行是必须的,要得到coverage mask,不仅仅看4个sample中是否被三角形覆盖到(光栅化),还要看是否在scissor内部。比如某个像素4个sample都被triangle覆盖,但可能只有2个sample在scissor里,所以“合成”这个操作是不可能在PS做的,PS不具备需要的信息。3)至少不可能在第一个pass的PS完成resolve,一般底层也很难一个pass到位,因为4x本质上是中间数据的4x,一个pass得到4x的深度、color,但最终展现的是1x的Image,到了Output Merger这个阶段一般不会为了DownSample去加一些资源。所以通常把4x的color写到buffer上,再一个pass(对于上层而言是不可见的)的PS来做Down Sampling,得到每个像素的,即仍然是1x的color。(Patrick:所以多重采样执行的时间点为:光栅化>片段着色器>裁剪测试>msaa)

    Alpha to Coverage是在MSAA Enable是才能起作用的,因为它是通过改变coverage mask来改变color的(通过与操作),A2C是要利用MSAA,不会影响其他结果。将AlphaTest,Alpha to Coverage和Alpha Blend一起比较:Alpha Test顺序无关,但边沿效果差。Alpha Blend边沿效果较好,但要求严格顺序。在一定程度上,Alpha to Coverage可以理解为基于sample级别的Alpha Test,把Alpha转成mask来实现平滑过渡。理解了Alpha Test顺序无关,就理解了Alpha to Coverge顺序无关。

    关于supersample和MSAAMSAA默认是pixel frequency的,开启了sample frequncy时我觉得该算作supersampling了,Stack Overflow有个类似的问题也提到了:Multisampling in pipeline。supersampling和MSAA的区别是PS对每个像素是per-pixel执行还是per-sample执行,MSAA也是对所有位置处理的,并不只是边沿,只是因为三角形内部像素coverage mask为1111,所以最终颜色仍等于像素中心颜色。(Patrick:真的么?我持怀疑态度。。因为也有文档这么说:MSAA只对Z缓存(Z-Buffer)和模板缓存(Stencil Buffer)中的数据进行超级采样抗锯齿的处理。可以简单理解为只对多边形的边缘进行抗锯齿处理。这样的话,相比SSAA对画面中所有数据进行处理,MSAA对资源的消耗需求大大减弱,不过在画质上可能稍有不如SSAA。)

    aa
  • 自适应抗锯齿(AAA)
  • MSAA虽然得到了大量使用,但有一个重要缺陷就是不能处理Alpha材质,因此在一些栅栏、树叶、铁丝网等细长的物体上就不能起作用了。为了解决这种问题,ATI在X1000系列加入了自适应(Adaptive)抗锯齿,通过额外的多重采样甚至是超级采样来强制提升画质。自适应抗锯齿可以专门针对Alpha材质选择性的进行多级或是超级采样,这样就比完全采用SSAA拥有更低的性能损失,画面质量依旧完美!(Patrick:用MSAA的A2C不就可以处理Alpha材质了么)

    aa
  • 覆盖采样抗锯齿(CSAA)
  • 覆盖采样抗锯齿(CoverageSampling Anti-Aliasing,简称CSAA)是NVIDIA G80系列出现时一并出现的抗锯齿技术。它的原理是将边缘多边形里需要采样的子像素坐标覆盖掉,抒原像素坐标强制安置在硬件和驱动程序预告算好的坐标中。这就好比采样标准统一的MSAA,能够最高效率地运行边缘采样,交通提升非常明显,同时资源占用也比较低。(Patrick:所以只适用于NV的显卡?看上去和MSAA一样,不知道具体实现是啥,TODO)

  • 可编程过滤抗锯齿(CFAA)
  • 可编程过滤抗锯齿(Custom Filter Anti-Aliasing)技术起源于AMD的R600家庭。简单地说CFAA就是扩大取样面积的MSAA,比方说之前的MSAA是严格选取物体边缘像素进行缩放的,而CFAA则可以通过驱动和谐灵活地选择对影响锯齿效果较大的像素进行缩放,以较少的性能牺牲换取平滑效果。显卡资源占用也比较小。(Patrick:所以只适用于AMD的显卡?怪不得叫做可编程的,居然还能像素级别选择性的AA,厉害了。。不知道具体实现是啥,TODO)

  • 形态抗锯齿(MLAA)
  • 从G80发布至今,NVIDIA的CSAA技术得到了越来越多游戏开发商的认可,相信很多玩家都注意到了,现在不少游戏都直接在菜单中提供了CSAA选项,N卡用户不用进入驱动控制面板就能非常方便的调用。而AMD的CFAA虽然从HD2000时代已经沿用到了HD5000时代,但几乎无人问津。

    终于到了HD6000时代,AMD抛弃了实用价值并不高的CFAA,开发了一种新的抗锯齿方案——Morphological AA,直译为形态抗锯齿。这种抗锯齿采用了DirectCompute计算技术来进行高效率的后处理器过滤,新的抗锯齿模式适用范围比传统的MSAA更广,而且精度最高可达24x,效率方面比SSAA(超级采样抗锯齿)快很多,与最高精度的CFAA差不多,但画质要更好。(Patrick:所以只适用于AMD的显卡?看上去是顶配PC才能用。最牛的效果+相应的性能。。不知道具体实现是啥,TODO)

    aa
  • 快速近似抗锯齿(FXAA)
  • 虽然FSAA全屏抗锯齿技术十分成熟,但是无论怎样发展,是不能够避免FSAA的其中一个最大的弊端,就是进行抗锯齿的图像会变成模糊,影响视觉效果。而且对于主流的MSAA,打开4倍或以上后帧数会大幅度降低,影响性能。在画质越来越讲究真实的今天,模糊与低效一词是要杜绝的。所以衍生了今天将要重点讨论的新的抗锯齿技术:FXAA以及TXAA。(Patrick:这段话转自http://diy.pconline.com.cn/graphics/study_gra/1208/2922104_all.html#content_page_3,不知道到底FXAA和FSAA哪个模糊了。。)

    快速近似抗锯齿(Fast Approximate Anti-Aliasing)是传统MSAA(多重采样抗锯齿)效果的一种高性能近似值。它是一种单程像素着色器,和MLAA一样运行于目标游戏渲染管线的后期处理阶段,但不像后者那样使用DirectCompute,而只是单纯的后期处理着色器,不依赖于任何GPU计算API。正因为如此,FXAA技术对显卡没有特殊要求,完全兼容NVIDIA、AMD的不同显卡(MLAA仅支持A卡)和DX9、DX10、DX11。

    快速近似抗锯齿FXAA全面详解

    目前可以对FXAA画质测试的软件,只有一款NVIDIA推出的SDK演示程序,该程序可以在不同分辨率下测试MSAA和FXAA的画质表现,其中MSAA可最高设定为4AA,而FXAA则采用了分级调节最高为5级,并且MSAA和FXAA可同时开启,以便进一步消除锯齿,但性能会下降许多。

    不过需要注意的是,形态抗锯齿在景深特效和动态模糊下没有用处。不过FXAA比起FSAA,实现同样的画质,但大幅度降低了运算压力,这在下面的实际性能测试中可以看出。所以,FXAA是代表了未来3D画质与速度兼顾的方向,让玩家不需要纠结于这矛与盾,是一种很有潜质的抗锯齿技术。

    FXAA是渲染的后期工作阶段。这种形态抗锯齿,只需要对边缘的探测和关键像素的选取,不涉及重新取样,这样对系统资源是非常友好的。负担几乎全都在渲染后端那里,shader资源可以得到很大的节约。

    aa

    快速近似抗锯齿(FXAA)画质表现

    aa

    上面是NVIDIA提供的官方Demo中所测试出的画质差异,左边为未开启任何AA的状态,可以看到在栏杆周围的相当明显。中间和右边为分别开启4xMSAA和第3级FXAA的状态可以看到栅栏边缘明显变得平滑许多,并且两者之间的画质差距并不明显。

    快速近似抗锯齿(FXAA)的算法过程

    aa
      (Patrick:那么复杂么,我都没看懂。。,TODO)
    • FXAA将其视作为输入的非线性RGB彩色数据,针对着色器逻辑单元而将这些数据内部转化成为了标量的亮度估计值。
    • 检查局部对比度,以避免处理到非边缘部分。检测到的边缘处于红色,夹杂的偏黄色部分代表检测到的子像素锯齿有多少。
    • 通过局部对比度测试的像素于是被归类为水平 (以金色表示) 或垂直(以蓝色表示) 。
    • 假定选择了边缘的朝向以及与边缘呈90度角且对比度最高的像素对,以蓝色/绿色表示。
    • 该算法沿着边缘的方向搜索正负 (红色/蓝色) 边缘端,沿着边缘检查高对比度像素对的平均亮度有无重大变化。
    • 假定边缘的端、边缘上的像素位置已转化成为与边缘呈90度垂直的子像素位移以减少锯齿,红色/蓝色表示-/+水平位移,而金色/天蓝色表示-/+垂直位移。
    • 考虑到这种子像素偏移,输入的纹理被重新采样。
    • 最后,根据检测到的子像素锯齿有多少,低通滤波器被合成进来。
  • TXAA
  • 至于TXAA,是一项更具潜质的抗锯齿技术。在新Kepler架构显卡GTX680发布的时候,NVIDIA曾宣布一项新的抗锯齿技术即将来临,名为TXAA。

    TXAA的原理就是通过HDR后处理管线从硬件层面上提供颜色矫正处理,后期处理的方式实际上原理和FXAA差不多:整合硬件AA以及类似于CG电影中所采用的复杂的高画质过滤器,来减少抗锯齿中出现的撕裂和抖动现象。

    TXAA的原理就是通过HDR后处理管线从硬件层面上提供颜色矫正处理,后期处理的方式实际上原理和FXAA差不多:整合硬件AA以及类似于CG电影中所采用的复杂的高画质过滤器,来减少抗锯齿中出现的撕裂和抖动现象。

    所以,TXAA是一种新的抗锯齿,是需要重新研发加入TXAA的代码来支持,故当前市面上并没有一款支持TXAA的游戏面世。不过随着NVIDIA的推进,估计TXAA的游戏会越来越多。

    最近NVIDIA发布的R304系列第二款Beta驱动304.79,加入了对NVIDIA TXAA抗锯齿技术的支持,里面提到的《The Secret World》将成为首个支持TXAA技术的游戏(支持将在即将到来的补丁更新后开启)。实际的画质与性能体验如何,到发售后自有分晓。

    目前TXAA分为TXAA1、TXAA2两个级别,TXAA1可以实现8x MSAA的效果,执行效率与2x MSAA相当,而TXAA2则会提供更高的画面品质。(Patrick:需要看到TXAA的算法再说。。因为有小伙伴说txaa是个大坑,好用是好用,但是会搞出一堆问题来,还得相应解决)

    aa
  • SMAA
  • smaa算法网址:

    http://www.zcom.com/article/63151/
    http://www.expreview.com/17878-3.html

  • PostAA
  • 还有就是cryengine用到的PostAA,这个如何实现的,需要看下ce的源码才能搞清楚。也有人说postaa是用smaa算法过来的。

下面我们将通过几种游戏中的实际表现来看不同的抗锯齿的差别。

测试平台

aa

《上古卷轴5:天际》

aa

《质量效应3》

aa

《无主之地》

aa

从《上古卷轴5:天际》中我们看出Adaptive AA甚至是EQAA的表现都还不错,尤其在处理树叶是表现很好,而且性能下降合理。当你下一次启动《天际》或DX 9的孤岛惊魂时,记得将控制中心的AA设置调到Adaptive AA。

虽然表现不是很完美,但在某些情况下MSAA的表现还是值得肯定的。

如果你喜欢一点点模糊的感觉,那么FXAA可以满足你。大多数的FXAA会带来HDR、Bloom以及其他的特效,这让很多人误以为FXAA更好,但不是所有人都喜欢这种特效。虽然它比MLAA好10倍,但是它还是模糊,如果你喜欢清晰效果的话,那么FXAA不适合你。(Patrick:下面也有人说FSAA模糊,不知道到底FXAA和FSAA哪个模糊了。。)

基于AMD MLAA的SMAA的表现真的不是很好,在《质量效应3》中,SMAA的性能表现还不如MLAA。虽然听说在《战地3》中它的表现还不错,不过也只有在《战地3》中还可以。

不是所有的AA都适用于所有的GPU,比如EQAA就不适用于HD69xx系列,而Sparse Grid AA只适用了NVIDIA显卡,Adaptive和SuperSample则是AMD的专有技术。

尘埃2 FXAA多重优势完全释放

《科林麦克雷》系列游戏是为纪念去世的英国拉力赛车手科林·麦克雷(Colin McRae)而制作的,因此在游戏过程中不难见到许多麦克雷过往的身影。与一年一款的极品系列赛车游戏不同,DiRT2距离前作已经两年之久,目前《科林麦克雷:尘埃2》主机版早已上市,几乎登陆所有的主机和掌机平台、好评如潮,而PC版由于支持DX11的缘故,所以被延期数月。

画质对比

aa

性能测试

aa

从对比截图中可以看到当全部关闭AA时,画面极其粗糙严重影响游戏体验。当逐渐开启高倍MSAA时,画质得到显著改善,但性能下降比较明显。当开启FXAA时,画质提升相比MSAA更加明显,单开启FXAA时就已经接近于4xMSAA的水平,4xMSAA+FXAA甚至还要好于8xMSAA。此外在相同画质下,FXAA的性能损失也明显好于MSAA。

鹰击长空 AA对画质影响不高

《鹰击长空》由Ubisoft旗下的Bucharest Studio工作室所研发制作而成,以汤姆克兰西最擅长的近现代国际冲突为背景,加上现代化的军事武器,和五角大厦不愿证实的开发中的先进武器,交织出最激烈的高科技攻防战。而《鹰击长空》也脱离前面几项作品的框架,将战争从地面拉拔到空中,享受广大无界限的战斗空间。

画质对比

aa

性能测试

aa

作为一款空战类游戏,玩家在游戏中能够看清细节的物体似乎也只有自己的战机。在这款游戏中抗锯齿对于画质的影响并不是很高,而性能却出现急速下滑,似乎有些得不偿失。

孤岛惊魂 FXAA效率低于4AA

自《孤岛惊魂》系列的版权被UBI购买之后,该公司蒙特利尔分部就已经开始着手开发新作,本作不但开发工作从Crytek转交给UBI,而且游戏的故事背景也与前作毫无关系,游戏的图形和物理引擎由UBI方面完全重新制作。

画质对比

aa

性能测试

aa

和《尘埃2》的情况相似,关闭抗锯齿时物体边缘的“毛边”相当明显。而开启FXAA之后,画质瞬间达到4xMSAA的水平,不过此时帧数却稍稍低于4xMSAA。

冲突世界 4AA+FXAA无压力

《冲突世界》将带领玩家返回著名的冷战时期,玩家每一个决定均影响游戏中人物和情节。可于游戏中感受不一样的团队精神,与队友于阴森恐怖的战场上一同作战。《苏联进攻》是其最新的资料片,收录全新角色、扮演苏联军队、10套新影片和全新多人联机地图等等。

画质对比

aa

性能测试

aa

即时战略类游戏历来都会对GPU和CPU提出双重要求,在测试中显卡已经不是游戏的瓶颈,在开启高倍MSAA和FXAA时性能下滑并不明显。而在画质方面只有当4xMSAA和FXAA同时开启时,地上的阴影才会呈现出“直线”的效果。

极品飞车15 最高AA也有毛边

EA全新推出的经典竞速游戏续作《极品飞车15:变速2》成为游戏市场最火爆的游戏之一。此前,该系列以每年一部新作的速度发售,每一代新作的推出,玩家们都会对游戏的画质表现、操控体验等方便展开激烈的争论。也正是有了这么多忠实的玩家,才使得这款竞速游戏长盛不衰。

画质对比

aa

性能测试

aa

一直以来《极品飞车》系列游戏的画面锯齿均比较明显,即使在画质选项中将MSAA调至最高,仍然能够明显的看到锯齿,不过好在FXAA可以进一步提升画面质量。

地铁2033 令顶级显卡也汗颜

DX11大作《地铁2033》就使用了DX11级别的景深效果,清晰和虚化合理分配、主次分明,再搭配Tessellation技术的辅助,几乎接近与电影的拍摄效果,看起来有种赏心悦目的感觉。但该游戏由于使用了太多尖端图形技术,所以要求非常苛刻。

画质对比

aa

性能测试

aa

《地铁2033》是少数几个加入AAA自适应抗锯齿的游戏之一,通过截图可以看到要同时开启4xMSAA和FXAA才能令物体边缘呈现出完美的“斜线”,而此时GTX580已经无法流畅运行游戏。

毁灭公爵 选项中原生支持FXAA

从1997到2011,14年的等待,14年的期盼,14年时光荏苒,有人等到了,也有很多人没能等到。这14年对人生来说已经十分漫长,那是一代人人生中最绚烂的日子,但对于一款游戏来说,让玩家等待14年足以令人感到匪夷所思,不过《永远的毁灭公爵》做到了,至少在这点上,它已经堪称神作!

画质对比

aa

性能测试

aa

前面已经讲过《永远的毁灭公爵》是小编测过的第一个在画质选项中加入FXAA的游戏,不过这款游戏对于其他AA的支持并不丰富,只有三个选项可供选择(NO AA、FSAA、FXAA)。

虚幻3引擎游戏 也能开启FXAA

作为“登上封面次数最多的游戏”的后续版本,《刺客信条:兄弟会》在保障严谨故事性的单人任务基础上,首次引入前所未有的多人模式,游戏提供多位不同类型角色,同时还提供了大量全新的武器,在游戏性上将比前作有较大提升。

画质对比

aa

性能测试

aa

和大多数“虚幻3”引擎游戏一样,《刺客信条:兄弟会》无法在游戏中正常开启MSAA,这肯定会令大多数玩家极为不爽。好在FXAA可以在这款游戏中正常开启,并且画质提升也较为明显。

革命尚未成功 FXAA仍须努力

相信细心的网友已经看到在此次测试中,参测的游戏绝大多数都是DX9、DX10游戏,最新DX11游戏却少之又少。实际上这并不是小编在测试中偷懒,而是因为经过小编的仔细测试发现,FXAA并不是在全部游戏中都生效,尤其在大部分DX11游戏中还会出现某些异常情况发生,由此说明现阶段FXAA的兼容性仍然有待提升。

尽管如此通过我们的测试仍然能够看到FXAA的不少闪光点,首先FXAA对于画质的改善相当明显,单独开启FXAA就能得到2xMSAA以上接近于4xMSAA的画质;其次对于显卡性能的消耗较低,接近于2xMSAA的水平,使玩家可以在较少性能损失的情况下,换来更佳的体验;此外FXAA还可以和其他AA技术叠加使用,使画质提升至更高的层次。

希望NVIDIA/AMD能够联合众多游戏厂商将FXAA这一技术大力推广开来,最终使用户可以根据自己的需求在驱动控制面板和游戏设置中任意开启FXAA,以便在游戏中得到最为真实的游戏体验。

Unity的post processAA

能一直看到这里的也是厉害了,我也不知道除了我,还有谁能一直看到这里。

本来我以为这篇文章就这样结束了,但是项目组对AA的效果依然不满意,这就尴尬了,看上去事情比较清晰,MSAA效果比较好,但是比较耗(而且在OpenGL ES 2.0上会和FBO冲突,deferred rendering和部分版本unity的HDR也不支持MSAA),FXAA比较省,但是会有点模糊,效果不如MSAA,两套方案选一套就行,但是项目组提出能不能找到更牛的FXAA,这就很尴尬了。目前我实现的两套FXAA(一套是opengl es cookbook上抄的,一套是nvdia的fxaa)都不满意,下面只能广撒网看看更多的FXAA算法,首先要去看的,就是Unity自带的post process AA。

Unity中的post-processing stack是一组post process的集合,定义这套集合的优势在于:1.可以按照正确的顺序执行多个PP;2.将多个PP放入了一个pass。PP stack建议使用linear + HDR + deferred rendering path。

Fast Approximate Anti-aliasing (FXAA)

FXAA是最省的AA,适用于手机等平台

TAA

TAA更加高级,需要用之前一帧的buffer进行计算,需要平台支持motion vector,这样的边缘AA效果更好,但是更耗。基本用在PC或者console上。

虽然并非全部原创,但还是希望转载请注明出处:电子设备中的画家|王烁 于 2017 年 11 月 22 日发表,原文链接(http://geekfaner.com/unity/blog9_AA.html)