既然锯齿的产生源自斜向分布像素之间的反差所生成的颜色分界线,那么淡化这条分界线就成了抗锯齿的首选方案。分界线的碍眼是因为他极强的对比性,那么我们如果将分界线周围数个像素的颜色提取出来进行混合,然后重新赋予分界线周围这些像素“中和”后的颜色,不就能让原本非常突兀的颜色分界线变成自然平顺的颜色过渡,并借以消灭碍眼的锯齿了么?没错,事实上这正是通行的抗锯齿操作方式的最简洁描述。
抗锯齿操作方式——采样,然后混合
目前最常见的抗锯齿方式来自MSAA,MSAA全称MultiSampling Anti-Aliasing,意思就是多重采样抗锯齿过程的起点开始于对图像的放大,我们首先要将整个图像放到帧缓存中进行放大,然后需要比较精确的对颜色反差巨大的物体边缘部分的像素及其周围的像素进行提取和混合,形成比原来更加自然但也更加模糊的颜色过渡,最后再将图像缩小回原来的尺寸以便消除颜色过渡产生的模糊现象。
抗锯齿示例
由于放大缩小操作需要大量帧缓存来进行映射和缓冲,所以MSAA过程对显存容量以及带宽的消耗是非常巨大的。尽管MSAA仅对Z-Buffer和Stencil Buffer进行操作,但这种操作仍旧成为了目前图形应用中对显存带宽要求最为巨大的部分之一。过高的显存带宽需求不仅限制了大部分显卡在游戏中的帧数表现,更让开发者不得不对显存带宽有所顾忌进而放弃使用分辨率更高的材质。为了解决这一矛盾,FXAA出现了。
FXAA操作过程
FXAA全称Fast Approximate Anti-Aliasing,意为快速近似抗锯齿,我们可以将之理解成MSAA操作过程的高度近似。FXAA是一种典型的边缘检查取样操作,属于Shader的一种特殊应用,它的基本原理与MSAA相同,都是通过提取像素界面周围的颜色信息并完成混合来消除高对比度界面所产生的锯齿,但作为后效处理(Post-Processing)的一部分,它将像素的提取和混合过程交由GPU的ALU内执行,因此其所占用的显存带宽要大大低于传统的在ROP中进行的MSAA。另外,由于它并不依赖Direct Compute进行执行,因此不仅可以全兼容DX9~DX11等多种API,而且AMD显卡一样可以进行执行。
三秦IT网的官方微信:更多资讯请关注:三秦IT网官方微博