2D 抗锯齿

参见

Godot 同样支持 3D 抗锯齿。参看 3D 抗锯齿 页面。

前言

由于分辨率有限,以 2D 渲染的场景可能会出现锯齿现象。 这些伪影通常以几何边缘上的“楼梯”效果的形式出现,并且在使用诸如 Line2DPolygon2DTextureProgressBar 等节点时最为明显。 2D 中的自定义绘图 对于不支持抗锯齿的方法也可能会出现锯齿现象。

在下面的示例中,你可以看到边缘呈现出块状:

图像缩放 2 倍并进行近邻滤波,使混叠现象更加明显。

图像缩放 2 倍并进行近邻滤波,使混叠现象更加明显。

为了解决这个问题,Godot 支持多种在 2D 渲染中启用抗锯齿的方法。

Line2D 和自定义绘图中的反锯齿属性

这是推荐的方法,因为在大多数情况下,这种方法对性能的影响较小。

Line2D 具有 Antialiased(抗锯齿)属性,可以在检查器中启用。此外,2D 中的自定义绘图 中的一些方法支持提供可选的 antialiased 参数,可以在调用函数时设置为 true

这些方法不需要启用 MSAA,这使得它们的 基准 性能成本很低。换句话说,如果你在某个阶段没有绘制任何抗锯齿几何图形,则不会产生永久性的额外性能消耗。

这些抗锯齿方法的缺点是需要生成额外的几何图形。如果要生成每帧都需要更新的复杂 2D 几何图形,这可能会成为程序的性能瓶颈。此外,Polygon2D、TextureProgressBar 和几种自定义绘图方法都不具备抗锯齿属性。对于这些节点,可以使用 2D 多采样抗锯齿来代替。

多重采样抗锯齿(MSAA)

在 2D 中启用 MSAA 之前,必须先了解 MSAA 的操作对象。2D 中的 MSAA 遵循与 3D 中类似的限制。虽然它不会带来任何模糊,但其应用范围是有限的。2D MSAA 的主要应用包括:

  • 几何边缘,如直线和多边形绘图。

  • 精灵边缘 仅限于与纹理边缘接触的像素 。这适用于线性过滤和最近邻插值过滤。使用图像透明度创建的精灵边缘不受 MSAA 影响。

MSAA 的不足之处在于它只对边缘进行操作。这是因为 MSAA 增加了覆盖采样的数量,而不是颜色采样的数量。然而,由于颜色采样的数量并没有增加,片段着色器仍然只会为每个像素运行一次。因此,MSAA 不会影响以下类型的锯齿:

  • 最近邻过滤纹理 的混叠现象(像素艺术)。

  • 自定义 2D 着色器造成的锯齿。

  • 使用 Light2D 时的镜面反射锯齿。

  • 文字渲染中的锯齿。

可以通过更改项目设置中**渲染 > 抗锯齿 > 质量 > MSAA 2D** 的设置值来启用 MSAA。重要的是要更改 MSAA 2D 的设置值,而不是 MSAA 3D,因为它们是完全独立的设置项。

左侧为无抗锯齿,右侧为不同级别的多重采样抗锯齿MSAA比较。左上角包含一个Line2D节点,右上角包含2个TextureProgressBar进度条节点。底部包含8个精灵,他们中的4个与边缘接触(绿色背景),另外4个不与边缘接触(Godot标志):

../../_images/antialiasing_msaa_2x.webp ../../_images/antialiasing_msaa_4x.webp ../../_images/antialiasing_msaa_8x.webp