学习教程来自:【技术美术百人计划】图形 4.4 抗锯齿概论
笔记
1. 锯齿是怎么产生的
从几何着色器阶段到光栅化的过程中,产生的走样
2. 基本的抗锯齿
2.1 MSAA(Multisample Anti-aliasing)
增加采样点,再平均
多一句,采样点会根据覆盖的情况自动调整(原文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)
- 每帧采样一次,并继承了MSAA的偏移,当前帧平均前几帧的采样结果
- 使用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,帧率上几乎没有变化
原理上看,SSAA确实平均了一些像素,而FXAA则让边界更加模糊了
针对我这个场景远看几乎是没有差别的,不过细节上还是有点差别的,比如SSAA只是单纯的增加了采样次数,会导致我的场景中的一些树枝连接不上了,而FXAA则会使得边缘更平滑,也不会造成中断的问题。
所以我这个场景可能更适合FXAA,这种抗锯齿的算法确实需要针对不同的场景进行一些调整,效果上的优劣要具体问题具体分析了
(目前的话只做了这2个算法的测试,以后碰到具体的情景再慢慢补充这部分吧)