当前位置:首页 > 装机升级 > 显卡 > 新闻
拒绝锯齿 GeForceGTX670实战FXAA游戏
  • 2012-6-20 15:10:58
  • 类型:转载
  • 来源:中关村在线
  • 网站编辑:admin
【电脑报在线】阳光明媚的热带海滩,硝烟弥漫的血腥战场,阴暗诡谲的地下迷宫或者风景如诗的乡野村庄,游戏中的哪些美景最能吸引你的注意力呢?放心,它们都不如一个小小的普遍存在的东西更能吸引你的注意力,这件东西不仅存在于所有3D游戏当中,而且也许会一直存在下去。
    阳光明媚的热带海滩,硝烟弥漫的血腥战场,阴暗诡谲的地下迷宫或者风景如诗的乡野村庄,游戏中的哪些美景最能吸引你的注意力呢?放心,它们都不如一个小小的普遍存在的东西更能吸引你的注意力,这件东西不仅存在于所有3D游戏当中,而且也许会一直存在下去。不管我们面前的光影制作的多么真实,模型世界多么完美,这样小东西总能随时随地的跳出来破坏掉你享受游戏的心情,并且向你大声宣布“这一切都是假的”。

    这个小东西,叫做“锯齿”。

    


    真实的画面,除了光影以及色彩效果之外,最重要的构成要素就是其中物体的外形。模型是否精确自然,关系到了每一个观察者对画面的最直接感受。当游戏中的花草树木,亭台楼阁,山峦谷壑甚至是MM妙曼的腰肢边缘忽然出现一根“锯条”时,你绝对不可能认为那是真实的。锯齿就像是挥之不去的梦魇,一直并且似乎要永远的萦绕在每一个希望实现“视觉虚拟现实”的人的心头。

    

    看着这些锯齿状的电线和车辆外壳,你还会觉得真实么?

    为了更加真实的画面,人们不得不绞尽脑汁把锯齿消除掉。这个过程消除锯齿的过程就是我们所说的抗锯齿,也就是AA。即便如战地3,Crysis2,上古卷轴5之类的当今游戏界画面的翘楚,也依旧要内建多种抗锯齿方案。执行游戏的GPU也随着架构的发展而不断的推出全新的抗锯齿方式,并且为抗锯齿准备了多到令人发指的性能。MSAA、CSAA、MLAA、FXAA甚至是伴随着GK104架构全新出现的TXAA,我们的游戏硬件发展史好像就是一部抗锯齿的奋斗史一般。

    

    抗锯齿开启与否的画面差异

    在今天的文章中,我们将会为大家带来这部奋斗史的一小部分,也就是较新FXAA的一些细节,它是由NVIDIA研发的一种可以以极小性能损失为代价获得出色锯齿消去结果,同时对各种API以及图形硬件,甚至是AMD的硬件都具有良好兼容性的全新操作方式,它的出现甚至极大地改变了抗锯齿技术的发展前景。我们将会看到它与传统操作方式的异同,以及它在全新的GeForceGTX670上的真实表现。

    但在这之前,我们似乎应该先了解一些更加重要的东西,比如说锯齿到底是从哪里来的。

     

    ●图像锯齿的由来

    我们所看到的图像的基本构成单位是像素,而像素的形状则是一个又一个的小方格,当两个相邻像素存在巨大的颜色反差时,这两个像素中间就会出现一条非常显眼的颜色分界线。颜色分界线带来的界面效应是区分物体边缘的重要标识。

    


    AA过程,本质上就是界面过渡性的调整

    对于垂直和水平出现的像素分界来说,由于其本身的范围非常均一,因此并不会造成界面效果之外的效应,但当像素分界以斜线的形式出现时,效果就完全不一样了。斜向像素分界线,正是困扰3D图形界多年的问题——锯齿。

    

    最简单的方法体验锯齿

    打开你的画笔,尝试着画一条最简单的斜线,然后放大看看。是的,非常不幸,这就是让人讨厌的锯齿,外号“狗牙”。

    

    不同锯齿以及FSAA过滤方法

    锯齿的存在极大的影响了图形效果的表达,本来应该平滑的几何模型表面,在光栅化并变成像素图元之后变得不再平滑,这极大地影响了人们观赏图形时的感受。所有影响人们观赏图形的因素最终都要被干掉,这正是图形界发展的根本动力。为了消除锯齿感给图形造成的影响,我们有了Anti-Aliasing,也就是俗称的抗锯齿操作。

     

    ●MSAAVSFXAA

    既然锯齿的产生源自斜向分布像素之间的反差所生成的颜色分界线,那么淡化这条分界线就成了抗锯齿的首选方案。分界线的碍眼是因为他极强的对比性,那么我们如果将分界线周围数个像素的颜色提取出来进行混合,然后重新赋予分界线周围这些像素“中和”后的颜色,不就能让原本非常突兀的颜色分界线变成自然平顺的颜色过渡,并借以消灭碍眼的锯齿了么?没错,事实上这正是通行的抗锯齿操作方式的最简洁描述。

    


    抗锯齿操作方式——采样,然后混合

    目前最常见的抗锯齿方式来自MSAA,MSAA全称MultiSamplingAnti-Aliasing,意思就是多重采样抗锯齿过程的起点开始于对图像的放大,我们首先要将整个图像放到帧缓存中进行放大,然后需要比较精确的对颜色反差巨大的物体边缘部分的像素及其周围的像素进行提取和混合,形成比原来更加自然但也更加模糊的颜色过渡,最后再将图像缩小回原来的尺寸以便消除颜色过渡产生的模糊现象。

    

    抗锯齿示例

    由于放大缩小操作需要大量帧缓存来进行映射和缓冲,所以MSAA过程对显存容量以及带宽的消耗是非常巨大的。尽管MSAA仅对Z-Buffer和StencilBuffer进行操作,但这种操作仍旧成为了目前图形应用中对显存带宽要求最为巨大的部分之一。过高的显存带宽需求不仅限制了大部分显卡在游戏中的帧数表现,更让开发者不得不对显存带宽有所顾忌进而放弃使用分辨率更高的材质。为了解决这一矛盾,FXAA出现了。

    

    FXAA操作过程

    FXAA全称FastApproximateAnti-Aliasing,意为快速近似抗锯齿,我们可以将之理解成MSAA操作过程的高度近似。FXAA是一种典型的边缘检查取样操作,属于Shader的一种特殊应用,它的基本原理与MSAA相同,都是通过提取像素界面周围的颜色信息并完成混合来消除高对比度界面所产生的锯齿,但作为后效处理(Post-Processing)的一部分,它将像素的提取和混合过程交由GPU的ALU内执行,因此其所占用的显存带宽要大大低于传统的在ROP中进行的MSAA。另外,由于它并不依赖DirectCompute进行执行,因此不仅可以全兼容DX9~DX11等多种API,而且AMD显卡一样可以进行执行。

     

    ●GeForceGTX670实战FXAA测试

    既然FXAA可以被理解成MSAA的高度近似,同时对于显存带宽的需求更低,那FXAA能否为显卡带来更好的性能表现呢?它的图形质量与MSAA又有着怎样的区别呢?接下来,就让我们以战地3以及GeForceGTX670为例,来测试一下FXAA对性能和图形质量的影响吧。

    我们将测试场合定在了战地3第二关,也就是碎剑者行动关卡开始后不久的小巷内,该场景除拥有多样化的光照以及复杂模型之外,还具有大量空中走线以及斜向分布的栅栏等容易产生锯齿的条状图形区域。接下来,就让我们来看一下GeForceGTX670在该场景中的帧数表现吧。

    


    战地3测试之FXAA

    

    GeForceGTX670在不同AA模式下的性能表现

    测试结果显示,开启4倍MSAA对GeForceGTX670造成了不小的性能冲击。相比于MSAA,开启FXAA可以获得超过30%的性能提升,而开启FXAA与不开启任何AA相比,其性能损失则小到5%以内。可以说从性能的角度出发,FXAA是相当不错的选择,它提供了几乎无损的抗锯齿性能表现。那么这种性能表现,是否是以牺牲画质为代价来获得的呢?

    

    FXAA效果对比,左为FXAA,右为4MSAA

    

    FXAA效果对比,左为FXAA关闭,右为开启

    在对图像进行放大之后,我们可以很轻松的发现FXAA的处理特点。以图像整体质感来说,两者的差距并不明显,FXAA的材质清晰度虽然较之MSAA要稍逊一筹,对于完全消除一部分特定斜向角度物体上的锯齿也没有特别好的办法,但在某些特定细节,比如说点、线等特殊物体方面却有着更好的画面表现。

    

    战地3测试场景

    通过测试不难发现,FXAA可以很好的利用线程间隙来调度GPU内的ALU资源完成抗锯齿工作,用不严谨的类比来形容,FXAA可以充分的利用GPU流水线中的气泡,让闲置的ALU单元重新得到任务,进而提高了GPU的线程密度和单元复用率。这种见缝插针式的对线程间隙的利用并不明显干扰正常的图形过程,因此对GPU的性能几乎不产生直接的影响。GeForceGTX670在使用FXAA替代MSAA运行战地3之后,其平均帧数提升相当巨大,这对可玩性的提升是明显的。FXAA牺牲了细微的画面清晰度,但就整体而言,FXAA的抗锯齿质量以及运动状态下的图形表现并不输给MSAA,同时在相当一部分点线分布物体的场合还可以获得更佳的图像效果。因此,我们认为FXAA是一种很有前途的抗锯齿方案。

    
 

我来说两句(0人参与讨论)
发表给力评论!看新闻,说两句。
匿名 ctrl+enter快捷提交