Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

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