抗锯齿
Antialiasing
渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。
采样与滤波理论
- 采样定理:采样频率必须大于信号最高频率的两倍(奈奎斯特极限),且信号必须是带限的。
- 用点采样渲染三维场景几乎从不带限:三角形边缘、阴影边界产生无限高频,足够小的物体可能完全采样不到。所以点采样无法完全避免混叠。纹理是例外:可以算出纹理频率与像素采样率之比,过高时预先带限(6.2.2 节)。
- 重建滤波器面积必须为 1:盒式(最近邻,最差,阶梯状)、帐篷(线性插值,连续但斜率突变)、sinc(理想低通,但无限宽且有负值,实际罕用)。常用滤波器介于两者之间;不希望有负瓣时用类高斯滤波器。
- 重采样:放大时直接对重建信号重新采样;缩小时要用 加宽滤波器,相当于先模糊再降分辨率。
通用框架
每个样本有位置和权重 (和为 1),实时系统通常用均匀权重。默认的每像素中心一个样本是 的特例。
各类方法
| 方法 | 原理 | 特点 |
|---|---|---|
| SSAA / FSAA | 高分辨率渲染再滤波,如 2560×2048 渲染后对 2×2 求平均得 1280×1024 | 简单;每个子样本都要完整着色并存深度,昂贵 |
| 累积缓冲 | 同分辨率、更高精度缓冲,多次渲染并偏移半像素 | 每帧重渲染多次,适合不要求性能的高质量出图 |
| MSAA | 每像素多个位置样本各存颜色和深度,但每个片元只运行一次像素着色器 | 比超采样快;只对几何覆盖多采样 |
| CSAA / EQAA | 覆盖样本多于存储的颜色/深度数,如 EQAA 2f4x:4 个样本各用 1 位索引 2 组颜色深度 | 省内存;超出容量时样本被标为未知;多数场景很少有像素含 3 个以上差异很大的不透明片元 |
| TAA | 每帧在投影矩阵上加微小平移改变子像素位置,混合前几帧 | 单帧不加样本,代价低 |
| 形态学 (MLAA/FXAA/SMAA) | 后处理寻找边缘并按估计覆盖率混合邻像素 | 内存和计算开销适中,与管线解耦 |
MSAA 细节
- 片元覆盖全部样本时在像素中心着色;只覆盖部分时,质心采样 (centroid) 把着色位置移到被覆盖区域内,避免采到三角形外(如纹理边缘之外),但可能使导数计算错误。
- resolve:把样本颜色平均成像素颜色,默认用盒式滤波。高动态范围颜色通常要在 resolve 前先做色调映射,否则会有伪影;这较贵,可用近似。
- 现代 GPU 可用像素/计算着色器访问 MSAA 样本,使用自定义且可跨像素的重建滤波器。Pettineo 发现宽 2–3 像素的三次 smoothstep 和 B 样条滤波器总体最好;更宽的滤波器减少混叠但损失锐度,且更慢。
- 《Forza Horizon 2》为最高质量选择了 4× MSAA,尽管 EQAA 有性能优势。
时间抗锯齿
- 通常只混合 2–4 帧。对旧帧做指数衰减权重时,静止场景可能闪烁,所以常对上一帧与当前帧等权平均。
- 也可用时间采样生成较低分辨率图像再放大;需要大量样本的光照方法可以每帧少采样,靠多帧混合。
- 问题:快速移动的物体或镜头会产生鬼影(拖尾)。对策:只对慢速物体做 TAA;或用重投影——物体把运动向量写入速度缓冲,用它找到上一帧对应位置的颜色,丢弃不太可能属于同一表面的样本(见时间重投影)。
- 延迟着色与 MSAA 不兼容,这是 TAA 被广泛采用的原因之一。
- NVIDIA 的 TXAA、MFAA 结合了更好的重建滤波器和 TAA;也有 TAA 结合可变采样和眼动补偿用于 VR。
采样模式
- 人眼对接近水平、竖直的边缘锯齿最敏感,其次是 45°。
- 旋转网格 (RGSS):四个样本在 4×4 子网格中各占一行一列(N-rooks 的一种),比规则 2×2 网格对近水平/竖直边能表现更多灰阶。但 N-rooks 本身不够:样本全在对角线上时对平行于对角线的边很差。
- 好的模式要避免样本聚集、分布均匀:分层采样结合抖动、Halton 序列、泊松圆盘。GPU 厂商通常把 MSAA 模式固化在硬件里;TAA 的模式可每帧自由设定,Karis 发现简单的 Halton 序列优于任何 GPU 提供的 MSAA 模式。
- 规则网格遇到细小重复图案会产生摩尔纹;随机采样把重复的混叠变成人眼更能容忍的噪声;每像素不同的模式(交错采样)效果更好。
- Quincunx:四个角样本与相邻像素共享、中心样本权重 1/2,平均每像素只需两个样本,近似帐篷滤波,比两样本 FSAA 好得多。也可用于 TAA:每帧交替偏移半像素。
- FLIPQUAD:把 RGSS 样本移到像素边缘并让相邻像素镜像,两样本达到接近 RGSS(四样本)的质量;Drobot 测试五种两样本 TAA 模式时它最好。
形态学抗锯齿
- 依赖深度、法线等额外缓冲的方法(SRAA)或由渲染器提供边缘位置的解析方法(GBAA、DEAA)效果更好,但只处理几何边缘。只用颜色的方法还能处理阴影、高光和后处理产生的边缘。
- 边缘估计可以给出比样本计数更多的混合层级:4 样本只有 5 级。
- 失败情况:颜色差低于阈值时检测不到边;三个以上表面重叠的像素难以解释;高对比高频内容容易漏边;文字质量通常会下降;拐角可能被圆化;曲线受"边是直的"假设影响;单像素变化可能导致帧间跳变。
- 只能用已有信息:比像素细的电线、绳子在没覆盖像素中心的地方会断开,只有多采样能解决。执行时间随内容变化,草地可能是天空的 3 倍。
- 最流行的是 FXAA 和 SMAA(都有免费源码),SMAA 还能访问 MSAA 样本;开销一般为每帧 1–2 ms,"因为游戏愿意花的就是这么多"。两者都可结合 TAA。
其他手段
- 让阴影更软、高光更平滑以减少混叠;把电线等物体加粗到保证每处至少覆盖一个像素。
- 保守光栅化和 ROV 为解析式边缘抗锯齿提供了新可能。
PBRT 的视角:像素滤波的两种估计方式(PBRT 4e 5.4.3)
像素值定义为滤波后的图像函数 (式 5.10, 积分为 1),用点样本估计 (式 5.11)。
| 均匀采样 + 溅射(pbrt 前三版) | 滤波器重要性采样(pbrt-v4) | |
|---|---|---|
| 做法 | 在整张图上均匀取样,每个样本按 的权重贡献给滤波半径内的多个像素:(式 5.12) | 每个像素独立地按 的分布在自身周围取样,样本只属于一个像素 |
| 优点 | 一个样本的计算惠及多个像素 | 不破坏采样器在像素内精心安排的样本结构;不同线程永远不会写同一像素;方差尖峰只污染一个像素,更容易修 |
| 缺点 | 即使图像是常数, 也只在期望上等于 1,会产生噪声;混入邻近像素的样本会破坏样本结构 | 滤波器有负瓣时符号项同样带来方差 |
| 两种方式最终都用加权重要性采样估计器 ,(式 5.13),用少量偏差换取消除上述方差。滤波器本身的设计在第 8 章讨论。这与上文的实时做法不同:MSAA 和 TAA 的 resolve 通常是固定的盒式或少量抽头滤波,而不是按滤波器分布放置样本。 |
GEA 的视角:抗锯齿方法速览(卷 II 11.3.13)
GEA 把锯齿归因于用离散传感器网格去采样本来连续的二维光信号;几乎所有抗锯齿方法的效果都是把三角形边缘与周围像素混合"软化"(卷 II 11.3.13)。书中逐个介绍:
| 方法 | GEA 的描述 | 代价与评价 |
|---|---|---|
| FSAA / SSAA | 渲染到比屏幕大的缓冲再降采样;4× 时宽高各两倍 | 显存 4 倍、像素着色 4 倍,"实际中很少用" |
| MSAA | 覆盖测试和深度测试在每像素 N 个子样本上做(N 常为 2、4、5、8、16),像素着色器每像素只跑一次,颜色只写入被覆盖的子样本槽;深度、模板、颜色缓冲都是 N 倍大,最后对 N 个槽求平均降采样 | 着色开销与不抗锯齿相同;与 FSAA 显存相同但带宽少得多 |
| CSAA | NVIDIA 对 MSAA 的优化:4× CSAA 只跑一次像素着色器,深度测试和颜色存储用 4 个子样本,覆盖测试却用 16 个"覆盖子样本" | 边缘接近 8× 或 16× MSAA,代价是 4× MSAA |
| MLAA / FXAA | 正常分辨率渲染后扫描找阶梯图案再模糊;FXAA 是 NVIDIA 的类似优化技术 | 只处理最严重的区域 |
| SMAA | 结合形态学方法与多重/超采样策略,得到更准确的亚像素特征 | 与 FXAA 一样便宜但更不模糊,作者认为"可以说是当今最好的 AA 方案" |
| TAA | 每帧每像素只采样一次,但采样位置在像素内抖动(随机或按预定图案),混合多帧 | 质量可比超采样,但容易鬼影和模糊 |
| DLSS | NVIDIA 深度学习超采样:每帧渲染较低分辨率,生成式神经网络"补全"出看似高分辨率的图像,像 TAA 一样利用之前的帧 | 大幅减少单帧高分辨率渲染时间,也可用于生成抗锯齿图像 |
| PSSR | PS5 Pro 的机器学习放大技术,与 DLSS 类似 | 图像比 DLSS 略软 |
与本页 RTR4 内容的关系:
- MSAA 的三步分解(覆盖测试、深度测试、像素着色)与本页「MSAA 细节」一致;GEA 补充了 N 倍缓冲的"槽"模型,并借 Alvy Ray Smith 的《A Pixel Is Not A Little Square》强调光栅化是对连续信号的采样(见 光栅化)。
- CSAA 的参数与本页表中 CSAA/EQAA 的描述角度不同但不矛盾。
- 原书问题(11.3.13.3):NVIDIA 没有"4× CSAA"这个模式。CSAA 按覆盖样本数命名:16x CSAA 才是"4 个颜色/深度/模板样本 + 16 个覆盖样本",8x CSAA 是 4 + 8,8xQ、16xQ 用 8 个颜色样本(NVIDIA "Coverage Sampled Antialiasing" 白皮书表 1,GeForce 8800)。GEA 描述的配置对应的是 16x CSAA,其性能与 4× MSAA 相近这一点是对的。
- GEA 列出的 MSAA 样本数含"5",但 D3D/Vulkan 的标准多重采样数是 2 的幂(1、2、4、8、16);"5 个样本"大概指 NVIDIA Quincunx 这类用 5 个采样点做滤波的 2× 模式,并非 5 倍存储的 MSAA(MS Learn
D3D11_STANDARD_MULTISAMPLE_PATTERN;VulkanVkSampleCountFlagBits)。 - GEA 称 DLSS 使用"生成式神经网络"。DLSS 2/3 的超分辨率部分是基于运动向量和历史帧的卷积自编码器、DLSS 4 改用 transformer,本质是时域重建/放大;"生成"新帧的是另一个功能(帧生成),不要混为一谈(NVIDIA DLSS 技术说明)。
- "SMAA 是当今最好的 AA 方案"是 GEA 作者的个人判断;RTR4 没有给出这样的排序。DLSS、PSSR 属于本页 RTR4 部分没有覆盖的新内容。采样理论本身 GEA 留到卷 II 15.2 节再讲。
GEA 的视角:音频中的采样定理(卷 II 15.2、15.3.2)
GEA 第 15 章从音频角度讲了同一套采样理论,可以与本页互相印证:
- 采样使频谱沿频率轴周期复制;采样率足够高时副本不重叠,用低通滤波器保留原始频谱即可精确重建;采样率太低副本重叠,就是走样(卷 II 15.3.2.1)。本页的"采样频率必须大于信号最高频率两倍"是同一条件。
- 人耳频带约 20 Hz–20 kHz,所以音频略高于 40 kHz 采样就够;语音带宽窄,电话用 8 kHz(卷 II 15.3.2.1)。图形中的"信号"(几何边缘、高频纹理)通常不是带限的,所以需要本页的预滤波、超采样等手段;音频则可以在采样前用模拟低通把信号带限(这是对比归纳)。
- D/A 转换后同样要加低通滤波去掉电压阶跃引入的高频,相当于图形中的重建滤波(卷 II 15.3.2.2)。
- 术语差异:本页称两倍条件为"奈奎斯特极限";GEA 把满足定理的最低采样频率叫"奈奎斯特频率",而常见用法中"奈奎斯特频率"指采样率的一半,见 数字音频技术。
卷积、傅里叶变换和滤波器的数学见 信号与线性时不变系统。
PBRT 的视角:离线渲染器的采样理论与像素重建滤波(PBRT 4e 第 8 章)
上文 RTR4 讲实时抗锯齿(MSAA、TAA、形态学),本节从离线光线追踪器的角度补充:像素值怎样从连续的图像函数得到,以及重建滤波器怎样选。
理想采样与重建(8.1.1–8.1.3)
- 采样等于乘以冲激串(shah);其频谱是周期为 的冲激串,所以采样后的频谱是原频谱每隔 复制一份。样本越稀,频谱副本越密,重叠就产生走样:高频冒充低频。
- 理想重建是在频域用盒函数只保留中央副本,即在空域与 sinc 卷积。sinc 无限宽,而且对走样了的样本会产生 Gibbs 振铃;盒式重建在频域相当于乘 sinc,既切不干净中央副本,又混入其他副本的高频。
- 不带限的信号无论采样多密都会走样;任何含不连续的函数(几何边缘、硬阴影边界)都不是带限的。因此只能减轻走样:自适应超采样(难以可靠判断哪里需要加样本)、预滤波(纹理过滤就是这种做法)、以及把走样变成噪声的非均匀采样。
- 渲染中的走样来源:几何边缘、小于样本间距的小物体(动画中闪烁)、未正确过滤的纹理、细小高光、硬阴影边界(比几何边缘更难检测)。
像素不是小方块(8.1.4)
图像像素是图像函数在离散点上的点采样,没有面积(Alvy Ray Smith 1995);可以先对图像函数做区域滤波再点采样。PBRT 采用 Heckbert(1990)的坐标约定:连续坐标 转离散坐标用 ,反过来用 ,于是离散范围 对应连续范围 ,免去到处加减 。这和 D3D10 以后"像素中心在半整数"的约定一致(另见 光栅化)。
抖动把走样变成噪声(8.1.6)
用功率谱密度 (PSD) 分析采样模式:好的模式在低频能量小、高频接近常数(蓝噪声)。抖动采样的期望 PSD 在原点有冲激、低频接近 0、高频趋于 1,因此把结构化的走样变成高频噪声,人眼更能接受。白噪声(独立均匀随机)在所有频率能量相同,不能把走样推向高频。各种采样器的比较见 低差异序列。
重建滤波器(8.8)
PBRT 把"重建 + 去除奈奎斯特以上频率"合成一个滤波函数,在每个像素上用加权重要性采样估计(5.4.3,见上文)。滤波器不必积分为 1(估计器自归一化),但要能返回积分值和重要性采样方法 Sample(),返回位置和权重 。
| 滤波器 | 定义要点 | 采样方式 | 特点 |
|---|---|---|---|
| 盒式 | 区域内等权 | 精确采样,权重恒为 1 | 几乎最差:高频漏进结果(后走样),正弦信号重建很差 |
| 三角(帐篷) | 斜率 的两个线性函数相乘 | 精确(可分离,SampleTent) | 略好于盒式 |
| 高斯(默认) | ,在半径处归零 | 查表 FilterSampler | 稍模糊,但能掩盖残余走样 |
| Mitchell–Netravali | 分段三次,参数 ,推荐 | 查表(直接采样要解四次方程) | 负瓣使边缘锐利,过大则振铃;像素值可能为负,需钳制 |
| Lanczos 窗口 sinc | 查表 | 振铃比无窗 sinc 少得多,正弦重建很好 |
FilterSampler 以每单位滤波宽度 32 个样本把滤波器制成表,并且用同一张分段常数表来计算权重,使 恒为 ,否则权重波动会变成图像方差(书中图 8.50 两点相差 10 倍)。查表下标直接用采样返回的整数坐标,而不是把浮点位置再乘回表大小,因为 。
自行验证:Mitchell 一维核满足 处 、 连续,且 与 无关(符号积分)。
与上文的分歧
| 话题 | RTR4(上文) | PBRT 4e |
|---|---|---|
| 滤波器归一化 | 重建滤波器面积必须为 1 | 不要求:像素估计器 自归一化,只需能返回积分 |
| 首选滤波器 | 介于帐篷与 sinc 之间,不希望有负瓣时用高斯等 | 默认高斯;Mitchell 最锐利;认为盒式"几乎最差" |
| 采样模式 | Karis 发现 Halton 优于 GPU 内置 MSAA 模式(用于 TAA 抖动) | 未加扰的 Halton 在图像平面上会产生结构化误差(书中图 8.30),推荐 Owen 加扰或 ZSobol 蓝噪声 |
| 术语 | 两倍条件称"奈奎斯特极限",与 GEA 的"奈奎斯特频率"不同(见上文) | 把"最低采样频率"()称为 Nyquist frequency,与 GEA 一致,而与常见用法(采样率的一半)不同 |
原书问题(8.1 节,已解码网页 SVG 并数值验证;2026-10-13 按书中自己的傅里叶约定(常规频率 )与 sinc 定义()逐条复核,均成立,无撤回)
- 式 (8.7) 抖动采样的 PSD:书中为 ,其中 sinc 按表 8.1 定义为 。用 400 组、每组 4000 个抖动点做蒙特卡洛估计(), 处测得 0.188、0.619、0.945,与 的 0.189、0.595、0.910 吻合,而书中公式给出 0.05、0.189、0.385。正确形式应为 。理论推导:抖动偏移 的特征函数模为 。
- 式 (8.6) 抖动采样函数: 中只有一个随机数 (SVG 中为空下标的 ),这样只是把整个规则网格平移一次,不是抖动。应为每个样本各自的 。
- 式 (8.5) 理想重建:书中为 ,前面又定义 。只有 时才对;一般间距 下应为 。复核数值:、(带限,满足采样定理)、 时真值 0.76649,书中公式得 1.53296(恰为 倍),修正式得 0.76649。
- 表 8.1 冲激串的变换对:书中写 。按书中自己的定义 ,由泊松求和公式应得 ,即 ,差一个常数因子 (数值验证: 时 , 为高斯)。"周期互为倒数"的结论不受影响。
- 预滤波核 :本节 是采样频率,截止在 的理想低通核是 ; 的截止频率是 ,与本节定义不一致。按书中自己的约定(式 8.1 、表 8.1 )有 ,通带为 ,所以 的通带是 ,是奈奎斯特频率 的两倍。但书中说的"奈奎斯特极限"指的是两倍条件,用词有歧义,因此仍记为存疑。
- 8.8.5 高斯积分:书中 ,对其求导得 ,符号相反;应为 (符号计算验证)。
- 8.1.6 "乘积的 PSD 等于 PSD 的卷积"(2026-10-13 审读新增):书中写 ,并说它"直接由式 (8.3) 得出"。式 (8.3) 给出的是 ,取模平方后 一般不等于 ,因为相位被丢掉了。反例( 上的傅里叶级数):,,;,,而 。用 PSD 卷积描述采样后的频谱,只在对随机采样模式取期望时近似成立,不是确定性恒等式。
- 以上各条在 pbr-book-website 与 pbrt-v4 的 issue 中均未找到。
出处
- realtime_rendering_4ed.pdf 第 5 章 Shading Basics
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 11 章 11.3.13 节
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 15 章 15.2、15.3.2 节
- PBRT 4e source excerpt: chapter 05 (Cameras and Film)
- Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 5 章 5.4.3 节,pbr-book.org/4ed/Cameras_and_Film
- PBRT 4e source excerpt: chapter 08 (Sampling and Reconstruction)
- Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 8 章 8.1、8.8 节,pbr-book.org/4ed/Sampling_and_Reconstruction