一、锯齿从哪里来
三维场景在空间上是连续的,而屏幕是由离散像素组成的。一个细斜边穿过像素时,如果只判断“这个像素被覆盖/未覆盖”,边缘就会呈现阶梯状。
MSAA 的核心思路是在一个像素内保留多个子采样点的覆盖信息。边缘像素可以只覆盖其中一部分采样点,最终在 Resolve 时得到更平滑的过渡。
二、MSAA 实际做了什么
以 4x MSAA 为例,可以把一个像素理解为有 4 个覆盖样本。三角形边缘经过时,不同样本的覆盖结果可能不同:
无 MSAA:像素只有“覆盖”或“未覆盖” 4x MSAA:像素有 4 个覆盖样本 0/4 覆盖 -> 完全背景 2/4 覆盖 -> 边缘过渡 4/4 覆盖 -> 完全前景
MSAA 的重点是改善几何边缘与深度/模板相关的采样质量。它不天然解决所有闪烁问题,例如高频纹理、Shader 内部的高频变化、粒子噪声或后处理造成的时间性抖动。
三、Alpha Test 物体为什么仍容易有锯齿
树叶、草、栅栏等常用透明度阈值来裁掉像素。普通 Alpha Test 往往仍是“要么全画、要么不画”,边缘会很硬。
Alpha To Coverage 可以将 alpha 值映射为 MSAA 覆盖掩码,让半透明边缘在多个子样本之间形成过渡。它对植被类 边缘可能有帮助,但需要注意:
- 覆盖掩码可能带来抖动或颗粒感;
- 不同设备、不同混合和后处理组合的观感可能不同;
- 它不是透明排序问题的通用解法;
- 必须在实际内容和目标设备上验证。
四、MSAA 的成本从哪里来
MSAA 不是“只多一点计算”。它可能增加:
- 多采样 Render Target 的显存占用;
- 写入、读取和 Resolve 的带宽;
- 深度/模板处理成本;
- 某些渲染路径下多目标附件的额外开销;
- 高分辨率和复杂后处理下的 GPU 压力。
因此,4x 并不一定比 2x 更适合移动端。画面差异、目标帧率和 GPU 时间必须一起衡量。
五、怎样做一个可信的对比实验
固定下列条件,只变化抗锯齿方案或采样数:
| 固定项 | 示例 |
|---|---|
| 设备与温度 | 同一设备、相近电量、相同散热状态 |
| 场景 | 细斜边、植被、远景、高对比边缘 |
| 镜头 | 相同位置、朝向和运动轨迹 |
| 画质 | 分辨率、阴影、后处理、帧率上限一致 |
| 采样窗口 | 同样的预热和稳定采样时长 |
输出至少包含:GPU 时间、总帧时间、帧率/低帧、显存或图形内存、功耗/温度趋势,以及同一镜头的视觉 对比图。
仅凭一张静态截图判断方案优劣不够。某些方案在静态画面很干净,却在转动镜头时更容易闪烁。
六、与其他抗锯齿方案如何取舍
| 方案 | 典型特点 | 需要重点验证 |
|---|---|---|
| MSAA | 对几何边缘有效,成本与采样/带宽有关 | GPU 时间、内存、植被和透明边缘 |
| 后处理 AA | 实现相对灵活,可能变软 | 清晰度、UI、细节保留 |
| 时域 AA | 可缓解时间性锯齿,但依赖历史信息 | 拖影、抖动、运动画面 |
| 超采样/动态分辨率 | 以分辨率换质量 | 带宽、功耗、目标帧率 |





