基于着色器的抗混叠方法是否使传统的多采样过时?

在这里查看FXAA的分析,以及SMAA的页面

现在,这些方法有一个缺点,就是它们不能像物理上精确的方式提高质量,就像多重采样一样(我的意思是它通过超级栅格化从几何体中提取出子像素细节),但它们是削减定期光栅化结果的视觉伪影的一种了不起的方法。

举个例子:我运行了一个Nvidia GTX 260,它从工厂中适度地超频,这是一个技嘉超级超频模式。 我也运行一个1920×1200的屏幕。

在玩“战地风云3”的时候,有时候很难保持好的帧速率,但是我注意到近来在速度方面有了一些普遍的提高,这使得今天的游戏比起发布之后的游戏要好一些。

关键是,在我的全分辨率下,4xMSAA甚至2xMSAA造成的性能下降在这个游戏中是非常明显的,因为它需要所有的能力。 不过,FXAA后期处理抗锯齿几乎是免费的! 一个月或两个月前,我发现自己在大多数时间以窗口模式运行游戏,因为它以这种方式实现了更好的帧率。 但是现在我发现,禁用MSAA并使用FXAA几乎可以完全消除边缘人为现象,而不会影响MSAA的性能。

我发现着色器 – 后期处理AA在线条接近水平或接近垂直的时候非常适合制作平滑的边缘,而且还可以用薄的物体,如链接中的电线杆上的电缆。 在静止图像上,直到您将MSAA调整到16x时,才能获得类似的平滑质量。

然而,着色器 – 后处理AA不会消除时间混叠伪像:即使边缘被很好地平滑,它们在跨越像素边界时“跳跃”。

发生这种情况的原因是因为shader-AA没有实际几何覆盖数据的知识,这是MSAA和朋友基本上所依据的。 当边缘穿过像素边界时,我们的平滑边将“跳跃”一个像素的长度,而不是如我们在16xMSAA / CSAA中看到的那样平滑地混合进去。 CSAA对此特别有用,因为它的分辨率高于MSAA。

所以考虑到这一切,我不认为基于shader的抗锯齿方法是取代传统的方法。 不过,我认为在几乎所有情况下,它们都是一种非常酷的改善图像质量的方法。 它们具有不需要不同的渲染缓冲存储格式的好处。

我认为,今后在游戏中应用反锯齿的最好方法是将覆盖率采样AA和后处理AA结合起来。

杰夫·阿特伍德(Jeff Atwood)声称FXAA在一夜之间使MSAA / CSAA过时。 你怎么看? 还有哪些其他方法可以比较传统抗锯齿和基于着色器的抗锯齿?

一般来说,是的,像FXAA这样的后处理抗锯齿技术正在使MSAA不那么受欢迎。

正如你所提到的,MSAA的性能非常高,主要是由于读取/写入渲染目标所需的内存带宽增加。 当然,对于那些渲染目标来说,它们也会消耗更多的内存 – 对于那些通常拥有大量内存的PC玩家来说,这并不是什么大事,但对于游戏机来说却是非常重要的。 要在控制台上执行MSAA,需要在graphics的其他方面做出巨大的牺牲。 对于正在变得越来越普遍的递延着色渲染器来说,MSAA也很难得到正确的工作。 与此同时,FXAA速度很快,通常不需要任何额外的内存,而且很容易locking到现有的渲染stream水线上。 难怪游戏开发者们纷纷涌向它!

而且,随着屏幕分辨率的提高,在许多情况下,MSAA对于FXAA的视觉质量好处将会减less。 这里有一篇关于不同种类的视力的有趣的文章,当MSAA真的有所作为。

最后,当然,我们希望屏幕分辨率这么高,根本不需要AA。 那已经有相当的几年了。 但是MSAA在后处理AA之前会死亡很长时间。