学习教程来自:【技术美术百人计划】图形 4.4 抗锯齿概论

笔记

1. 锯齿是怎么产生的

从几何着色器阶段到光栅化的过程中,产生的走样

2. 基本的抗锯齿

2.1 MSAA(Multisample Anti-aliasing)

增加采样点,再平均

MSAA

多一句,采样点会根据覆盖的情况自动调整(原文This position adjustment is called centroid sampling or centroid
interpolation and is done automatically by the GPU, if enabled.)

2.2 SSAA(Super Sample Anti-aliasing)

渲染4x或更高倍数,再下采样

3. 更多的抗锯齿

MSAA的衍生,时间消耗是其的多倍

3.1 TemporalAA(Temporal Anti-aliasing)

  1. 每帧采样一次,并继承了MSAA的偏移,当前帧平均前几帧的采样结果
  2. 使用motion vector保存帧之间的偏移,判断当前像素是不是具有前几帧的值,没有的话就不能平均(比如新出现的像素)

3.2 FXAA(Fast Approximate Anti-aliasing)

后处理的方式,利用卷积进行边缘检测、模糊,最后混合

3.3 以上速度排序

FXAA->TemporalAA->MSAA->SSAA

3.4 更多其他的抗锯齿

渲染方式 名称
前向渲染 SSAA、MSAA、CSAA、RGSS等
延迟渲染 FXAA、MLAA、SMAA等
时间域上的抗锯齿 TAA、TXAA
基于深度学习的抗锯齿 DLAA

作业

1. 对比各个抗锯齿方案的优劣(从效果、效率2个方面)

2. 各个方案的真机测试

建议:尽量达到瓶颈状态下的测试

我测试了下SSAA FXAA,可能我是高通骁龙865的处理器,2个算法都在0.1ms左右完成了Anti aliasing,帧率上几乎没有变化


FXAA

SSAA

原理上看,SSAA确实平均了一些像素,而FXAA则让边界更加模糊了

SSAA FXAA 无AA

针对我这个场景远看几乎是没有差别的,不过细节上还是有点差别的,比如SSAA只是单纯的增加了采样次数,会导致我的场景中的一些树枝连接不上了,而FXAA则会使得边缘更平滑,也不会造成中断的问题。

FXAA更平滑些

所以我这个场景可能更适合FXAA,这种抗锯齿的算法确实需要针对不同的场景进行一些调整,效果上的优劣要具体问题具体分析了
(目前的话只做了这2个算法的测试,以后碰到具体的情景再慢慢补充这部分吧)