随意启动一款 3D 游戏,打开图形设置界面,你大概率能发现一个选项——「抗锯齿」。你可能参考了网上的设置教程,切换到了 TAA,抑或是 MSAA、DLSS 等的设置选项,画面看起来似乎更好了。那么这些字母的含义究竟是什么,「抗锯齿」又在背后做了哪些操作?

我们所在的世界是连续的 —— 想象你用一支笔在纸上随意画一个实心三角形,无论你从哪个角度观察,这个三角形在现实中都是连续的。
但光栅显示器(也就是我们每天面对的各类手机、电脑屏幕)天生并不具备这种连续性。如果你使用微距镜头对着手机或电脑屏幕拍一张照片,不难发现,屏幕上的图像并不是由真正连续的线条和色块组成的,而是由一个个排列整齐的像素构成的。每个像素只能显示一个颜色值。

问题也就出现在这里:当一条连续的斜线、曲线或物体边缘被显示到屏幕上时,它必须通过光栅化,被采样转换成一格一格的像素。原本连续的图形,被迫用离散的像素来近似表示。

这种「用离散量表示连续量」所引起的失真现象,就叫做「走样」。锯齿的出现,其实就是走样的一种典型表现。
在游戏中,锯齿是影响体验的一大因素,未经过任何抗锯齿处理的画面,边缘往往会显得十分粗糙。

需要说明的是,Anti-Aliasing 在学术界更常使用的中文译名为「反走样」,而锯齿(Jaggies)只是走样现象的一种具体表现,走样现象还包括摩尔纹、远处细线闪烁、物体运动时的跳动等。考虑到国内游戏社区和游戏画质设置中更常使用「抗锯齿」这一说法,下文均以「抗锯齿」指代 Anti-Aliasing。
我们已知,锯齿现象本质上来自连续图像被离散采样后的失真。换句话说,只要屏幕仍然由一个个像素组成,只要游戏画面仍然需要被转换成像素来显示,这种问题就不可能被彻底消除。因此,「抗锯齿」的实质是通过一系列技术手段让显示的画面骗过我们的大脑,在视觉上更接近连续图像。
接下来,笔者主要从硬件与算法两方面进行说明。
最简单的方法莫过于提高同一显示面积下显示器的分辨率。既然图像是由一个个像素组成,那我们只需要提高显示器的像素密度,也就是我们在数码评测中经常会听到的一个名词:PPI,即 Pixel Per Inch,就能让人眼难以看清边缘的锯齿。
这其实很好理解。假设我们要在屏幕上显示同一条斜线,如果屏幕分辨率很低,这条斜线只能由少量像素拼接而成,会产生非常明显的阶梯状锯齿;但如果屏幕分辨率足够高,同样长度的斜线可以由更多、更细小的像素组成,每一级阶梯都会变得更小,锯齿自然也就没那么容易被看见。

这也是为什么同样一张图片在低分辨率屏幕上可能会显得边缘粗糙,而在高 PPI 的手机屏幕上却显得细腻许多。锯齿并不是消失了,而是被压缩到了更小的尺度,小到超过了人眼在正常观看距离下的分辨能力。
从这个角度看,提高分辨率确实是一种非常直接的「物理解决方法」:它单纯通过更密集的像素,让离散采样造成的阶梯状锯齿变得不明显。
不过,这种方法也有明显的代价。更高的分辨率意味着同一帧画面需要计算更多像素。例如,从 1080p 提升到 4K,横向和纵向分辨率各翻一倍,总像素数量变为原来的四倍。对于游戏来说,这意味着 GPU 需要在同样的时间内处理更多像素、执行更多着色计算,也会带来更大的显存带宽压力。
这就引出了另一种思路:既然单纯堆高显示器分辨率成本很高,那我们能不能在渲染阶段使用一些技巧,让有限的像素看起来更接近连续图像?
这就是抗锯齿算法要做的事情。
前文提到,图像是通过采样转换成像素进而显示在屏幕上的,自然地,我们可以在采样阶段上进行操作。可能出乎你意料的是,抗锯齿算法是通过一种特殊的「模糊」算法来产生更平滑、视觉上更清晰的图像。对于在白色背景中的黑色矩形,通过在矩形边界附近掺入一些灰色像素,可以柔化由黑到白的尖锐变化。
既然一个像素最终只能显示一个颜色,那我们就不要只看图形有没有经过这个像素,而是考虑这个像素覆盖区域内的更多信息。
想象一条黑色直线穿过一块白色背景。如果我们只看像素中心点,那么某个像素的中心点落在线上,它就会被显示成黑色;如果中心点没有落在线上,它就会被显示成白色。这样一来,边缘就会显得非常生硬,锯齿也会很明显。
但现实情况往往不是这么简单。很多像素并不是完全属于黑色直线,也不是完全属于白色背景,而是被直线覆盖了一部分。既然如此,我们就可以根据这个像素被覆盖的程度,给它一个介于黑色和白色之间的颜色。
这就是区域采样的基本想法,不再把一个像素看成一个没有面积的点,而是把它看成一个有面积的小区域。随后,我们再把这个虚拟的小区域继续细分,比如分成 9 块、16 块,甚至更多小格。
接下来要做的事情就很直观了:看图形覆盖了这些小格中的多少部分。如果一个像素中的小格大部分都被黑色线条覆盖,那么这个像素就应该更接近黑色;如果只有少数小格被覆盖,那么这个像素就应该更接近白色;如果刚好覆盖了一半左右,那么它就可以显示成介于黑白之间的灰色。
这样一来,原本生硬的边缘就会出现一些过渡色。斜线仍然是由像素组成的,但通过不同深浅的灰色,让人眼感受到更平滑的边缘。
说了那么多,我们来举一个简单的例子:

若你对上面的计算不感兴趣,你也可以参考下面这张图:不难看出,图形在一个像素中占据的大小决定了这个像素所显示的灰度值。

在上述「区域采样」的基础上,又可以分成「非加权区域采样」和「加权区域采样」两种思路。
非加权区域采样比较简单,参考上面两个小例子应该就能看懂。它认为像素内部每一块区域的重要性都是一样的,占据的面积数即为每个像素显示的颜色的评判标准。但问题在于,像素内部不同位置对最终视觉效果的影响并不完全一样。通常来说,越靠近像素中心的位置,越能代表这个像素本身;越靠近像素边缘的位置,影响便稍微弱一些。
于是就有了加权区域采样。
加权区域采样并不是简单地统计覆盖了多少面积,而是会给像素内部不同位置分配不同的权重。靠近中心的区域权重更高,靠近边缘的区域权重更低。这样一来,同样是覆盖三分之一面积,如果图形主要穿过像素中心,它对这个像素颜色的影响就会更强;如果只是擦过像素边缘,影响就会更弱。
而加权区域采样的权重常使用高斯分布函数,底层原理与你所经常听到的的「高斯模糊」其实是类似的。
以上所述概念是抗锯齿的理论基础。接下来,让我们回到游戏,看看这些底层逻辑是如何被工程实践的。
或许你早已被这一大串英文缩写弄得晕头转向:SSAA、MSAA、FXAA、TAA、DLSS、FSR、XeSS……让我们来慢慢理清这些名词背后的意义,并选择出适合你的抗锯齿选项。
其中出现了许多「AA」,为 Anti-Aliasing 的缩写,也就是前文提到反走样的英文名。
这些名词其实都在试图解决同一个问题:在有限的像素和有限的性能预算里,如何让画面看起来更稳定、更平滑、更接近连续图像?
SSAA:英文全称为 Super Sampling Anti-Aliasing,即超采样抗锯齿。如果你理解了前文「区域采样」的概念,那么理解 SSAA 的思路是完全相同的。
所谓「超采样」,就是先把原本一个像素的面积划分为多个虚拟的子区域,增加采样点数量。更通俗地说,它会让游戏先在更高的分辨率下渲染画面,再把这张更大的画面缩小回当前屏幕分辨率。
举个例子,如果你的屏幕分辨率是 1920 × 1080,而游戏内部先以 3840 × 2160 的分辨率进行渲染,再把结果缩小回 1920 × 1080,那么最终屏幕上的一个像素,其实就融合了内部多个像素的信息。

这样做的好处非常直观:原本一个像素只能得到一次采样结果,现在它可以综合多个采样结果。边缘处原本非黑即白的突兀变化,就会因为这些采样结果的混合而产生过渡色,看起来也就更加平滑。
SSAA 的优势在于效果非常全面。因为它不是只处理物体轮廓,而是让整张画面都获得了更多采样信息。所以它不仅可以改善角色边缘、建筑轮廓上的锯齿,也能在一定程度上缓解纹理走样、远处细节闪烁、高光噪点等问题。
但它的缺点也同样明显:性能开销太大。SSAA 可以说是最简单粗暴、但在高质量实时渲染也最难以实际应用的方法。因此,SSAA 多应用于需要极高画质的离线渲染操作。
MSAA 则是在这个基础上做了一次性能与效果的平衡。
MSAA:英文全称为 Multisample Anti-Aliasing,即多重采样抗锯齿。它和 SSAA 一样,也会在一个像素内部设置多个采样点,但它并不会像 SSAA 那样对整张画面进行完整的高分辨率渲染,而是主要关注几何边缘。
当一个三角形边缘穿过某个像素时,MSAA 会通过多个采样点判断这个像素到底有多少部分被三角形覆盖。比如一个像素内部有 4 个采样点,其中 2 个落在三角形内部,2 个落在外部,那么这个像素就可以被理解为「大约有一半被覆盖」。最后在合成颜色时,在最终合成时,它会根据这个覆盖比例混合前景和背景颜色,从而得到更柔和的边缘过渡。这样一来,MSAA 就能用比 SSAA 更低的成本,改善物体轮廓上的锯齿。

下图即为经过 MSAA 处理的结果,不难看出,图形整体的显示都更加平滑了。

这也是为什么在早期游戏中,MSAA 曾经是一个非常常见的抗锯齿选项。它在性能和画质之间取得了不错的平衡,尤其适合处理清晰的几何边缘。
但随着现代游戏画面变得越来越复杂,走样问题也不再只来自三角形边缘。复杂材质、透明贴图、屏幕空间反射、毛发、植被等都会带来新的问题。于是,单靠 MSAA 已经越来越难解决所有问题。
SSAA 和 MSAA 都是在渲染过程中处理锯齿,而 FXAA 和 SMAA 的思路则要更「后期」一些。它们并不会真的增加场景中的采样点,也不会让游戏重新渲染一张更高分辨率的画面,而是在画面已经被渲染完成之后,把最终图像当成一张普通图片来分析。
FXAA :英文全称为 Fast Approximate Anti-Aliasing,即快速近似抗锯齿。顾名思义:Fast,足够快;Approximate,并不追求完全精确,而是用一种近似方法尽可能修补画面中的锯齿。NVIDIA 的 FXAA 白皮书 也将其描述为一种高性能、高质量的屏幕空间抗锯齿近似方法。
它的基本思路并不复杂:既然锯齿通常会出现在颜色变化比较剧烈的边缘,那我们就可以直接在渲染好的图像中寻找这些高对比度区域。找到这些区域之后,FXAA 就会沿着边缘方向对像素进行一定程度的平滑。
说到底,FXAA 是在一张已经渲染好的二维图像中根据图像里的颜色变化,猜测哪里可能需要被处理。结果可能是:锯齿确实少了一些,但画面也可能因此糊成一团。
SMAA :英文全称为 Subpixel Morphological Anti-Aliasing,即次像素形态学抗锯齿。它同样是在画面渲染完成之后进行处理,但相比 FXAA,它会更认真地分析边缘形态,而不是简单地把高对比区域都柔化一遍。
SMAA 会尝试识别画面中的边缘模式。比如一条斜线到底应该沿着哪个方向被平滑,哪些地方应该保留锐利边缘,哪些地方才需要混合过渡。相比 FXAA,它的判断会更细致一些。所以在很多情况下,SMAA 会比 FXAA 更能保留画面清晰度。
综上,FXAA 和 SMAA 对明显的几何边缘锯齿比较有效,但面对现代游戏里更复杂的锯齿问题时,就会显得有些力不从心。
到了现代游戏中,更常见的抗锯齿方案变成了 TAA。
TAA 的英文全称是 Temporal Anti-Aliasing,即时域抗锯齿。这里的「Temporal」指的是时域。它的核心思路是混合历史帧与当前帧的信息进行处理。
当然,游戏画面一直在动,不能直接把上一帧叠到当前帧上。于是 TAA 通常还需要运动向量和深度信息。运动向量告诉算法上一帧里的某个像素,在当前帧大概的位置。深度信息则帮助算法判断这个像素是否被覆盖与更新。
在这个过程中,游戏还会对每一帧的采样位置做轻微偏移。当前帧采一个位置,下一帧采另一个位置,再把这些不同帧的信息累积起来。这样一来,虽然每一帧本身的采样数量有限,但经过时间上的积累,画面就可以变得更稳定。
这也是 TAA 在现代游戏里如此常见的原因,它不仅能处理几何边缘,还能缓解远处细节闪烁、植被抖动、高光噪点等时间上的走样问题。
由于它依赖历史帧,如果信息判断错误,就可能出现拖影、残影和模糊。比如角色快速移动、镜头快速转动、细小物体突然出现或消失时,TAA 可能会把上一帧的内容错误地带到当前帧里。NVIDIA 在介绍自适应 TAA 的技术文章中也提到,传统 TAA 的弱点包括 Blurring 和 Ghosting,也就是模糊和拖影。
因此,TAA 在玩家口中的的评价常常很分裂 —— 它确实能让画面稳定许多,但如果实现不好,也会让画面变得发糊,甚至在运动中留下明显残影,尤其是对于需要快速反应操作的游戏来说。
提到 DLSS,大家就应该比较不陌生了。
DLSS 的英文全称是 Deep Learning Super Sampling,即深度学习超级采样。它的实现路径和前述的几个技术相差较大。DLSS 的主要目标不是传统意义上的抗锯齿,而是在较低渲染分辨率下重建出更高分辨率的画面,从而降低 GPU 压力、提高帧率。在这个重建过程中,显卡初始渲染的原始图像是较为模糊的,恰好相当于平滑了锯齿。
不过,DLSS 也并非是当前的生成式 AI ,凭空就能画图。它依赖游戏引擎提供的运动向量、深度等信息,也依赖 NVIDIA 训练好的神经网络模型。重建质量越高,画面就越稳定、越清晰;但如果场景过于复杂,或者运动信息不准确,也可能出现重建错误、边缘伪影和细节闪烁。
DLAA 则可以理解为 DLSS 思路的另一个分支。借助基于 AI 的抗锯齿技术,提供更高的图像质量。DLAA 与 DLSS 使用同样的超分辨率技术,在原生分辨率图像的基础上,更大限度地提升图像质量。
DLSS 主要的操作是:低分辨率渲染 + 重建到高分辨率,重点是优化性能表现;而 DLAA 是 Deep Learning Anti-Aliasing,即深度学习抗锯齿,更注重的是画面的极致表现。NVIDIA 官方将 DLAA 描述为一种基于 AI 的抗锯齿技术,并说明它使用与 DLSS Super Resolution 相同的技术,在原生分辨率下构建更高质量的图像。

类似的技术还有 AMD 的 FSR 和 Intel 的 XeSS,它们同样致力于在低分辨率下重建高分辨率图像,只是实现路径有所不同,在此就不过多概述。
综上所述,按照技术思路来划分,这些抗锯齿方法大致可以分成几类。
第一类,是最直接的「多采样」思路,代表是 SSAA 和 MSAA。
它们的核心想法是:既然一个像素只采样一次太粗糙,那就在一个像素内部多看几个位置,再把这些结果合成为最终颜色。
第二类,是「后处理」的思路,代表是 FXAA 和 SMAA。
它们并不参与前面的几何采样过程,而是在画面已经渲染完成之后,把最终图像当成一张普通图片来分析,寻找明显的锯齿边缘,再进行平滑处理。
第三类,是「利用时间」的思路,代表是 TAA,以及后来的 DLSS、FSR等技术。
它们不只看当前这一帧,还会参考过去帧的信息,结合运动向量、深度信息和历史画面,把多帧信息重新组合起来,从而得到更稳定的结果,也是在高质量实时渲染中普遍使用的技术。不过严格来说,DLSS 等技术已经不是抗锯齿操作,而是超分辨率和图像重建技术。只是它们在重建过程中也会承担抗锯齿和稳定画面的作用。
记得一开始笔者提到过:我们只要还在使用光栅显示器,就永远无法避免走样现象。
但其实学界和产业界也在探索一些更前沿的显示技术,比如光场显示、全息显示、视网膜投影和激光扫描显示。
虽然这些研究离我们的实际应用还很远,但期待未来的某一天,我们能真正复现并看到「真实的世界」。
本文是一篇针对非图形学领域的读者的科普文,文中避开了分析关于数字图像处理方面的内容,包括但不限于采样、量化与频域等相关知识,对于各个概念的解读更多考虑了易懂性而非学术的严谨性,结合了自身的理解而省略了一些专业领域的复杂分析。
如果你对这篇文章中涉及到的计算机图形学的内容感兴趣,强烈推荐你观看闫令琪教授的 GAMES101,了解更为丰富的图形学世界。
> 简单、好用的 视频下载工具,少数派为你呈现 🚀
> 中断久坐、科学多动,直接跟练让身体更健康 💪🏻