BK / GRAPHICS NOTES
IMAGE QUALITY / 10

抗锯齿:为像素补回丢失的覆盖信息

锯齿不是线条画得不够平滑,而是连续信号被低频率采样后产生的混叠。不同抗锯齿方法都在尝试增加样本,或从空间和时间邻域重建遗漏信息。

阅读约 9 分钟前置:光栅化、纹理采样难度:进阶

01 / 一个像素中心看不见全部覆盖

如果每个像素只测试中心点,细小几何和斜边可能在相邻像素间忽隐忽现。高于采样上限的空间频率会伪装成较低频率,表现为阶梯、摩尔纹和运动闪烁。

单样本边缘与多样本覆盖比较1 SAMPLE / PIXELMULTI SAMPLE / PIXEL
多个子像素样本能估计边缘覆盖比例,使最终解析颜色呈现渐变。
像素颜色 ≈ 像素覆盖区域内连续图像的平均值

理想做法是在采样前用低通滤波移除无法表示的高频,但实时渲染中几何、着色和运动持续变化,只能用有限样本近似。

02 / SSAA 与 MSAA 增加空间样本

SSAA:更高分辨率完整渲染

超级采样以更高分辨率执行全部着色,再缩小到目标分辨率。它能处理几何边缘和着色器内部高频,质量直接,但片元着色、带宽和内存代价很高。

MSAA:共享片元着色结果

多重采样抗锯齿在每个像素保存多个覆盖和深度样本,但通常只执行一次片元着色,再按覆盖解析。这对几何轮廓高效,却不能解决纹理、法线或程序化着色内部的混叠。

方法几何边缘着色混叠主要代价
SSAA很好很好完整高分辨率渲染
MSAA很好有限多样本深度与颜色
无抗锯齿最低

03 / 后处理方法从最终图像寻找边缘

FXAA 根据局部亮度变化识别高对比边缘,并沿边缘方向平滑。它速度快、接入简单,对几何和着色边缘都能生效,但可能模糊文字和细节,也无法真正恢复亚像素几何。

SMAA 使用更精细的边缘模式识别和权重计算,通常比 FXAA 保留更多细节,代价也略高。此类方法只读取当前帧,不需要运动向量与历史缓冲。

后处理抗锯齿是在结果上推断原因。它看到的是已经发生混叠的图像,因此便宜、通用,但信息恢复能力有上限。

04 / TAA 把连续帧变成更多样本

时间抗锯齿每帧轻微抖动投影,让像素落在不同子像素位置;再用运动向量把上一帧结果重投影到当前帧,与当前样本累积。

historyUV = currentUV + motionVector
result = blend(currentSample, reprojectedHistory)

静止区域能随时间获得许多样本,细节和稳定性通常优于单帧方法。但遮挡关系变化、透明物、动画材质和错误运动向量会造成拖影。

  • 历史颜色钳制避免旧颜色超出当前邻域范围。
  • 响应式遮罩减少快速变化区域的历史权重。
  • 抖动序列应覆盖均匀且避免明显周期。
  • 相机切换或分辨率变化时要重置历史。

时间升采样

现代升采样技术以低分辨率渲染当前帧,再利用抖动、运动向量和历史帧重建高分辨率输出。它同时承担抗锯齿与性能优化,但更依赖稳定的输入数据。

05 / 根据内容与管线选择

场景需求可优先考虑注意事项
像素风、锐利 UI最近邻或局部无 AA避免无意模糊设计语言
前向渲染、几何边缘为主MSAA透明与着色混叠另行处理
移动设备、预算紧FXAA / SMAA关注细节损失
现代三维场景、运动稳定性TAA / 时间升采样必须提供可靠运动向量
离线高质量大量随机采样计算时间换精度
没有万能方案。先区分混叠来源是几何覆盖、纹理缩小、镜面高频还是时间闪烁,再选择对应过滤与采样策略。