3A游戏里的 “抗锯齿” 是啥?这么多种“抗锯齿”设置选哪个?选对 = 画质翻倍!
可能不是非常明显,但如果你离近仔细观察立方体的边缘,你就应该能够看到锯齿状的图案。如果放大的话,你会看到下面的图案:
这很明显不是我们想要在最终程序中所实现的效果。你能够清楚看见形成边缘的像素。这种现象被称之为走样(Aliasing)。有很多种抗锯齿(Anti-aliasing,也被称为反走样)的技术能够帮助我们缓解这种现象,从而产生更平滑的边缘。
具体到实时渲染领域中,可以将锯齿(走样)分为以下三种:
几何走样(Geometry Aliasing),几何物体的边缘有锯齿,是对几何边缘采样不足导致。
着色走样(Shading Aliasing),渲染方程也是一个连续函数,对某些部分(比如法线,高光等)在空间变化较快(高频部分)采样不足也会造成走样,比较明显的现象就是高光闪烁或高光噪点。
时间走样,主要是对高速运动的物体采样不足导致。比如游戏中播放的动画发生跳变等。
锯齿是如何产生的?
在计算机图形学中,锯齿的产生是由于采样错误引发的。这种错误通常发生在光栅化过程中,即当三维空间中的连续物体被离散化为由像素表示的图像时。
由于显示器上的像素是离散化的点,而几何图形是连续的坐标连接实现的,因此在图形的边缘必然会产生锯齿。特别是在屏幕分辨率较低的情况下,这种离散化更为明显,导致锯齿效果更加显著。
锯齿的生成原理可以追溯到采样理论,即当信号变化的速度太快(主要指高频信号变化太快),而采样的速度太慢时,最终结果就会导致采样错误,从而产生锯齿状边缘。
为什么需要抗锯齿?
抗锯齿是一种用于消除锯齿或混叠的图形技术。而锯齿效应,是游戏引擎将平滑的 3D 形状渲染到以像素为基础的2D图形帧时产生的伪影。
显示器上的像素是按网格排列的,像素是完全正方形的,因此当屏幕上出现对角线、曲线时,就会产生块状、阶梯状的效果,呈现出锯齿状,这在物体的外边缘最为明显。
从渲染模型到2D帧的理想状态
没有抗锯齿情况下,每个像素一个采样,锯齿现象就出现了
抗锯齿技术,就是通过更高分辨率采样或后期处理帧,来帮助消除这些伪影,检测边缘并弱化锯齿效应,从而使得玩家看到的游戏图像效果更为平滑,更接近原始建模和渲染的效果,消除“违和感”。
如上图可以看出,为啥高端硬件都在追求高分辨率的游戏性能。因为在分辨率较高的情况下,锯齿问题较少:同一游戏,4K图像的锯齿比 1080p 图像少,原因很简单,因为组成图像的像素密度较高,像素越多,圆形看起来就越圆。
主流抗锯齿技术
抗锯齿技术大致可以分为两类:空间抗锯齿 和后处理抗锯齿。近年来,基于AI的超分辨率技术也成为了解决这一问题的前沿方案。
其核心原理与演进关系如下图所示:
flowchart TD
A[抗锯齿技术] --> B[空间抗锯齿
渲染时]
A --> C[后处理抗锯齿
渲染后]
A --> D[AI超分辨率+抗锯齿
渲染后]
B --> B1[SSAA
超级采样抗锯齿]
B1 --> B2[MSAA
多重采样抗锯齿]
C --> C1["FXAA
快速近似抗锯齿"]
C --> C2["TAA
时序抗锯齿"]
D --> D1["DLSS
(NVIDIA)"]
D --> D2["FSR
(AMD)"]
D --> D3["XeSS
(Intel)"]
B2 -.-> C2
C2 -.-> D1
1. 空间抗锯齿 (Spatial AA)
这类技术在渲染过程中解决问题。
a. SSAA (Super-Sampling Anti-Aliasing) - 超级采样抗锯齿
原理:这是最原始、最暴力、效果最好的方法。它先将场景渲染到一个比输出分辨率高N倍的缓冲区(例如,4x SSAA 就是先渲染到 4倍 分辨率的缓冲区),然后对这个高分辨率图像进行下采样(Averaging) 到最终输出分辨率。
效果:极佳。
代价:性能开销巨大。渲染4xSSAA需要消耗4倍的着色器计算量和显存带宽,几乎已被游戏淘汰,但仍是对抗锯齿算法进行质量衡量的“黄金标准”。
b. MSAA (Multi-Sampling Anti-Aliasing) - 多重采样抗锯齿
原理:SSAA的优化版。它认识到SSAA的浪费之处:颜色计算(昂贵的片段着色器)只需要执行一次,但覆盖率计算(光栅化)可以多次进行。
MSAA只为每个像素计算一次颜色(在像素中心)。但会在每个像素内采集多个覆盖样本点(如2, 4, 8个)。这些样本点只存储深度和覆盖信息,不存储颜色。
如果一个三角形只覆盖了像素的一部分,那么只有被覆盖的样本点会贡献最终颜色。最终像素颜色是“三角形颜色 * 覆盖率 + 背景颜色 * (1 - 覆盖率)”。
效果:对几何边缘(Aliasing)效果很好,是长期以来DirectX游戏的标准。
缺点:无法解决着色锯齿(Shading Aliasing),比如纹理上的高频细节依然会闪烁(这需要各向异性过滤等技术)。在延迟渲染(Deferred Rendering) 架构中难以高效实现,因为G-Buffer存储多个样本的成本很高。对Alpha Tested(透明纹理)的边缘效果不好。
2. 后处理抗锯齿 (Post-Process AA)
这类技术在完成渲染后,对最终图像进行处理来平滑锯齿。
a. FXAA (Fast Approximate Anti-Aliasing) - 快速近似抗锯齿
原理:一个纯粹的图像空间后处理过滤器。它不关心3D几何,只是在最终的2D图像上寻找高对比度的边缘(这些地方很可能有锯齿),然后模糊这些边缘。
优点:速度极快,开销极低,适用于所有平台(包括手机)。
缺点:由于是全局模糊,可能会使整个图像变得过于柔和,损失一些纹理细节。有时会错误地平滑掉一些本不该平滑的细节(如文字、纹理细节)。
b. TAA (Temporal Anti-Aliasing) - 时序抗锯齿
原理:现代游戏的标配和最主流技术。它不仅仅是空间上的,更是时间上的。
它在每一帧,对每个像素轻微地抖动(Jitter) 摄像机投影矩阵(相当于以亚像素的精度轻微移动整个画面)。
将当前帧的渲染结果与上一帧的抗锯齿结果进行混合(History Accumulation)。通过这种多帧积累,每个像素在时间维度上都获得了多个样本,从而重构出一个更平滑、更高精度的图像。
优点:开销很低,效果却非常好,能平滑几何边缘和着色锯齿。为许多其他高级效果(如动态分辨率渲染)奠定了基础。
缺点:鬼影(Ghosting):如果当前帧的物体与历史帧的位置不匹配(快速移动的物体、摄像机突然转动),混合就会出错,产生拖影。
抖动(Shimmering):对某些细微、高频的细节(如远处的栅栏)可能处理不佳。需要额外的技术(如运动矢量、历史颜色钳制)来减轻副作用。
3. 基于AI的超分辨率/抗锯齿 (AI Upscaling/AA)
这是目前最前沿的技术,本质上重新定义了“抗锯齿”。
a. DLSS (Deep Learning Super Sampling) - NVIDIA
原理:NVIDIA的杀手锏。它在超级计算机上预先训练好一个神经网络模型,这个模型被集成到显卡驱动中。
游戏以较低的分辨率渲染(例如1080p),同时提供当前帧和运动矢量等信息给AI。
AI模型(在RTX显卡的Tensor Core上运行)分析这些数据,智能地重建并输出一张高质量的高分辨率图像(例如4K)。
效果:由于是从低分辨率重建,本身就消除了锯齿。效果极佳,甚至常常优于原生渲染,而且性能大幅提升(帧数更高)。
要求:需要专用的AI硬件(NVIDIA RTX系列的Tensor Core)。
b. FSR (FidelityFX Super Resolution) - AMD
原理:AMD的开源方案。FSR(特别是FSR 2.0+)是一种先进的空间升频算法,它不依赖AI硬件。
和DLSS类似,也是以低分辨率渲染,然后通过复杂的算法重建高分辨率图像。它分析当前帧和历史帧的颜色和运动数据,进行边缘感知的上采样和锐化。
优点:开源、跨平台,可以在几乎所有显卡(包括NVIDIA和Intel)上运行。
效果:效果非常出色,虽略逊于DLSS 3,但已是目前最好的软件方案。
总结与对比
抗锯齿技术是现代图形渲染中不可或缺的一部分,它通过消除锯齿现象,提升了图像的质量和用户体验。
随着技术的不断进步,抗锯齿方法也在不断演化,未来将会有更多创新的解决方案出现,以满足日益增长的视觉质量需求。
无论是在游戏、电影、图像处理还是用户界面设计中,抗锯齿技术都将继续发挥重要作用。返回搜狐,查看更多