高清渲染管线 (High Definition Render Pipeline) 中的抗锯齿
锯齿是当数字采样器采样现实世界的信息并尝试对其进行数字化时产生的一种副作用。例如,对音频或视频进行采样时,锯齿意味着数字信号的形状与原始信号的形状不匹配。
当比较音频源在最高频率下或视频源在其最小细节条件下的原始信号和数字信号时,这是最明显的。常规信号处理会使用奈奎斯特频率来避免锯齿,但这对于图像渲染不太切实可行,因为它非常耗费资源。
光栅化过程产生一些锯齿的示例。
为了防止锯齿,高清渲染管线 (HDRP) 具有多种抗锯齿方法,每种方法都有其自身的效果和资源消耗量。可用的抗锯齿方法包括:
- 快速近似抗锯齿 (Fast approximate anti-aliasing, FXAA)。
- 时间抗锯齿 (Temporal anti-aliasing, TAA)。
- 亚像素形态抗锯齿 (Subpixel morphological anti-aliasing, SMAA)。
- 多重采样抗锯齿 (Multi-sample anti-aliasing, MSAA)。
使用抗锯齿
抗锯齿是依赖于摄像机的效果,这意味着您可以让摄像机使用不同的抗锯齿方法。如果优先级较低的辅助摄像机能够以较低的资源消耗量使用较低质量的抗锯齿效果,则此功能很有用。
快速近似抗锯齿 (FXAA)
FXAA 在像素级别平滑边缘。这是 HDRP 中消耗资源最少的抗锯齿技术,会让最终图像稍微模糊。不太适合用于包含大量镜面反射光照的场景。
要为摄像机选择 FXAA,请执行以下操作:
- 在 Scene 视图或 Hierarchy 中选择摄像机,然后在 Inspector 中查看该摄像机。
- 在 General 部分中,从 Anti-aliasing 下拉选单中选择 Fast Approximate Anti-aliasing (FXAA)。
时间抗锯齿 (TAA)
TAA 使用历史缓冲区中的帧来平滑边缘,比 FXAA 更有效。在运动中的边缘平滑效果方面要好得多,但你必须为此启用运动矢量。有关如何在 HDRP 中设置运动矢量的信息,请参阅运动矢量。因为 TAA 是时间性的,所以在极端情况下(例如游戏对象在与其形成对比的表面前方快速移动)经常会产生重影瑕疵。
注意:启用 TAA 有助于改善某些效果(例如环境光遮挡或体积光效)的质量。
要为摄像机选择 TAA,请执行以下操作:
- 在 Scene 视图或 Hierarchy 中选择摄像机,然后在 Inspector 中查看该摄像机。
- 在 General 部分中,从 Anti-aliasing 下拉选单中选择 Temporal Anti-aliasing (TAA)。
在多个 Game 视图中使用相同的摄像机 (Camera) 游戏对象时,由于历史缓冲区系统的限制,TAA 可能无法正常工作。但是,使用不同摄像机的多个 Game 视图将能够正常工作。
限制
在编辑器中,如果多个 Game 视图中使用相同的摄像机,由于历史缓冲区系统的限制,TAA 可能无法正常工作。但是,如果使用多个 Game 视图,并且每个 Game 视图使用独特的摄像机,则 TAA 可以正常工作。
亚像素形态抗锯齿 (SMAA)
SMAA 在图像的边界中查找图案,并根据找到的图案混合这些边界上的像素。这种抗锯齿方法的效果比 FXAA 更为清晰,非常适合于平面、卡通或干净利落的艺术风格。
要为摄像机选择 SMAA,请执行以下操作:
- 在 Scene 视图或 Hierarchy 中选择摄像机,然后在 Inspector 中查看该摄像机。
- 在 General 部分中,从 Anti-aliasing 下拉选单中选择 Subpixel Morphological Anti-aliasing (SMAA)。
多重采样抗锯齿 (MSAA)
MSAA 对每个像素中的多个位置进行采样,并将这些样本合并以生成最终像素。MSAA 在解决锯齿问题方面比其他技术更出色,但消耗的资源也要高得多。至关重要的是,MSAA 可以解决空间锯齿问题。MSAA 是一种硬件抗锯齿方法,可与后期处理效果等其他方法结合使用。一种例外情况是时间抗锯齿,因为时间抗锯齿使用了运动矢量,而 MSAA 不支持运动矢量。
要在 HDRP 项目中启用 MSAA,请执行以下操作:
- 打开 HDRP 资源。
- 在 Rendering 部分中,将 Lit Shader Mode 设置为 Both 或 Forward Only。HDRP 仅支持用于前向渲染的 MSAA。
- 使用 Multisample Anti-aliasing Quality 下拉选单来定义 HDRP 评估 MSAA 时为每个像素计算的样本数量。选择 None 可禁用 MSAA 支持。
使用 MSAA 时,请注意以下事项:
- 增加样本数会使 MSAA 效果更加耗费资源。
- 启用 MSAA 时,HDRP 不会禁用以下功能,而是使用非 MSAA 深度,这可能会导致边缘出现问题:
- MSAA 不适用于以下功能。在您启用 MSAA 时,HDRP 会禁用以下功能:
- 屏幕空间反射 (SSR)。
- 屏幕空间阴影。
- 时间抗锯齿。
- 失真。
- 由贴花拼凑的法线缓冲区。
- MSAA 不会影响以下功能。HDRP 不会禁用以下效果,只是不会为它们处理 MSAA:
- 光线追踪不支持 MSAA。如果在项目中使用光线追踪,则无法使用 MSAA。
在 Unity 项目中启用 MSAA 后,还必须在 Frame Settings 中为所有摄像机启用该功能。你可以全局执行此操作,也可以对单个摄像机执行此操作。要全局启用 MSAA,请选择 Project Settings > Frame Settings > HDRP Default Settings。要针对每个摄像机启用 MSAA,请启用 Forward Lit Shader Mode,然后启用 MSAA within Forward 复选框。如需了解在哪里可以找到全局和局部帧设置,请参阅 Frame Settings 文档。
增大 MSAA Sample Count 值会产生更平滑的抗锯齿,但也会降低性能。以下一些示例显示了不同 MSAA Sample Count 设置的视觉效果:
MSAA Sample Count 设置为 None。
MSAA Sample Count 设置为 MSAA 2X。
MSAA Sample Count 设置为 MSAA 4X。
MSAA Sample Count 设置为 MSAA 8X。