通常提到抗锯齿我们会想到各种AA算法,SSAA,MSAA,FXAA等。通常来说这些抗锯齿都在渲染管线的光栅化阶段或者光栅化阶段之前(光栅化之前的 “采样计算”(比如 MSAA 的多重采样))就做好了(将三角形等图元转换为像素 / 片元的过程),这个阶段属于渲染管线的 “固定功能阶段”,是 GPU 硬件电路直接固化的逻辑。而不会选择在着色器阶段去进行抗锯齿。但是针对航电系统,硬件抗锯齿单元可能存在性能瓶颈、算力配额不足,甚至部分嵌入式 GPU 的硬件 AA 功能本身就不完整。所以我们可以采取“硬件 AA 为主,Shader 后处理 AA 为辅” 的混合方案。例如:硬件 MSAA 2x + Shader FXAA。
下面介绍一下这几种方案的原理:
FXAA:
NVIDIA 的 Timothy Lottes 开发的单 pass 屏幕空间后处理抗锯齿算法,核心是在渲染完成后对图像做边缘检测与定向混合,适合资源受限场景。
算了懒得总结了:FXAA 这个帖子说得很详细.