Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

渲染器概述

参见

本页概述了 Godot 的渲染器,重点介绍它们之间在渲染特性上的差异。有关渲染器的更多技术细节,请参阅 内部渲染架构

介绍

Godot 4 包含三个渲染器:

  • Forward+。最先进的渲染器,仅适合桌面平台,桌面平台默认使用。该渲染器使用 VulkanDirect3D 12Metal 作为渲染驱动,使用 RenderingDevice 后端。

  • Mobile(移动)。特性更少,但渲染简单场景的速度更快。适用于移动平台和桌面平台。移动平台默认使用该渲染器。该渲染器使用 VulkanDirect3D 12Metal 作为渲染驱动,使用 RenderingDevice 后端。

  • Compatibility(兼容),有时被称作 GL Compatibility(GL 兼容)。最低级的渲染器,适合低端桌面和移动平台。在 Web 平台上默认使用。此渲染器使用 OpenGL 作为渲染后端。

渲染器、渲染驱动与 RenderingDevice

渲染层示意图。兼容性渲染器运行在 OpenGL 驱动上。 Forward+ 和移动渲染器运行在 RenderingDevice 上, 后者可以使用 Vulkan、Direct3D 12 或 Metal 作为渲染驱动。

Godot 的渲染抽象层。

渲染器,也叫渲染方法,决定了可用的特性。大多数情况下,这是你唯一需要考虑的事情。Godot 的渲染器包括 Forward+MobileCompatibility

渲染驱动通过图形 API 告诉 GPU 该做什么。Godot 可以使用 OpenGLVulkanDirect3D 12Metal 渲染驱动。并非每个 GPU 都支持所有渲染驱动,因此并非每个 GPU 都支持所有渲染器。Vulkan、Direct3D 12 和 Metal 是现代的低级图形 API,需要较新的硬件支持。OpenGL 是一个较旧的图形 API,可在大多数硬件上运行。

RenderingDevice 是一个渲染后端,是渲染器与渲染驱动之间的抽象层。Forward+ 和 Mobile 渲染器使用它,这些渲染器有时被称为“基于 RenderingDevice 的渲染器”。

选择渲染器

选择渲染器是一个复杂的问题,取决于你的硬件以及目标开发平台。作为参考:

以下情况选择 Forward+

  • 你的目标平台是桌面端。

  • 你的硬件较新,支持 Vulkan、Direct3D 12 或 Metal。

  • 你在开发 3D 游戏。

  • 你想使用最先进的渲染特性。

以下情况选择 Mobile

  • 你的目标平台是较新的移动设备、桌面 XR 或桌面端。

  • 你的硬件较新,支持 Vulkan、Direct3D 12 或 Metal。

  • 你在开发 3D 游戏。

  • 你想要使用高级渲染特性,但会受到移动硬件的限制。

以下情况请选择 Compatibility

  • 你的目标平台是较旧的移动设备、较旧的桌面设备或独立式 XR 设备。Compatibility 渲染器支持的硬件范围最广。

  • 你的目标平台是 Web。此时 Compatibility 是唯一的选择。

  • 你的硬件较旧,不支持 Vulkan。此时 Compatibility 是唯一的选择。

  • 你在开发 2D 游戏,或者不需要高级渲染特性的 3D 游戏。

  • 你想要在所有设备上获得最佳性能,且不需要高级渲染特性。

请记住,每个游戏都各有不同,以上仅供参考。例如,即便你拥有最新的 GPU,也可能想要选择 Compatibility 渲染器,以支持最广泛的硬件。或者,你可能想为 2D 游戏使用 Forward+ 渲染器,从而使用计算着色器等高级特性。

切换渲染器

在编辑器中,点击右上角的渲染器名称就可以切换渲染器。

在不同渲染器之间切换时,可能需要手动调整场景、光照和环境,因为每个渲染器都有所不同。通常来说,在 Mobile 和 Forward+ 渲染器之间切换所需的调整较少,而在 Compatibility 与 Forward+ 或 Mobile 渲染器之间切换则需要更多调整。

自 Godot 4.4 起,当使用 Forward+ 或 Mobile 渲染器时,如果设备不支持 Vulkan,引擎将回退到 Direct3D 12,反之亦然。如果尝试回退的驱动也不受支持,或者 RenderingDevice 后端不受支持,引擎将回退到 Compatibility 渲染器。这样项目仍然可以运行,但由于渲染器功能有限,视觉效果可能与预期有所不同。你可以在项目设置中取消勾选渲染 > 渲染设备 > 回退至 OpenGL 3 来禁用此行为。

功能比较

这不是各渲染器特性的完整列表。如果某个特性未在此列出,则表示它在所有渲染器中均可用,尽管在某些渲染器上可能运行得更快。有关 Godot 所有特性的列表,请参阅特性列表

支持 RenderingDevice 的硬件是指能够运行 Vulkan、Direct3D 12 或 Metal 的硬件。

总体比较

特性

兼容

移动端

Forward+

硬件要求

较旧或低端。

较新或高端。需要支持 Vulkan、Direct3D 12 或 Metal。

较新或高端。需要支持 Vulkan、Direct3D 12 或 Metal。

在新硬件上运行

✔️ 是。

✔️ 是。

✔️ 是。

在较旧和低端硬件上运行

✔️ 是。

✔️ 是,但比 Compatibility 慢。

✔️ 是,但在所有渲染器中最慢。

在不支持 RenderingDevice 的硬件上运行

✔️ 是。

❌ 否。

❌ 否。

目标平台

移动平台、低端桌面平台、Web。

移动平台、桌面平台。

桌面平台。

桌面

✔️ 是。

✔️ 是。

✔️ 是。

移动端

✔️ 是(低端)。

✔️ 是(高端)。

⚠️ 支持,但优化较差。请改用 Mobile 或 Compatibility。

XR

✔️ 是。推荐用于独立头戴设备。

✔️ 是。推荐用于桌面头戴设备。

⚠️ 支持,但优化较差。请改用 Mobile 或 Compatibility。

Web

✔️ 是。

❌ 否。

❌ 否。

2D 游戏

✔️ 是。

✔️ 是,但对 2D 而言,Compatibility 通常已足够好。

✔️ 是,但对 2D 而言,Compatibility 通常已足够好。

3D 游戏

✔️ 是。

✔️ 是。

✔️ 是。

特性集

2D 和核心 3D 特性。

大多数渲染特性。

所有渲染特性。

2D 渲染特性

✔️ 是。

✔️ 是。

✔️ 是。

核心 3D 渲染特性

✔️ 是。

✔️ 是。

✔️ 是。

高级渲染特性

❌ 否。

⚠️ 是,受限于移动设备硬件。

✔️ 是。支持所有渲染特性。

新特性

⚠️ 部分新的渲染特性会加入 Compatibility。这些特性会在 Mobile 和 Forward+ 之后添加。

✔️ 大多数新的渲染功能都会被添加到 Mobile(移动端)渲染器中。Mobile 渲染器通常能像 Forward+(前向+)渲染器一样,获得新的功能。

✔️ 所有新特性都会加入 Forward+。作为新开发的重点,Forward+ 会优先获得新特性。

渲染开销

基础开销较低,但扩展开销较高。

中等基础开销,中等扩展开销。

基础开销最高,扩展开销较低。

渲染驱动

OpenGL。

Vulkan、Direct3D 12 或 Metal。

Vulkan、Direct3D 12 或 Metal。

灯光和阴影

详见 3D 灯光和阴影

特性

兼容

移动端

Forward+

光照方法

前向单次渲染。带有阴影的灯光采用多通道方法,并且混合精度较低。

前向单次渲染。

Clustered forward.

最大 OmniLight 数

每个网格 8 个。可以增加。

每个网格 8 个,每个视图 256 个。

每个集群 512 个。可以增加。

最大 SpotLight 数量

每个网格 8 个。可以增加。

每个网格 8 个,每个视图 256 个。

每个集群 512 个。可以增加。

最大 DirectionalLight 数量

8

8

8

OmniLight 和 SpotLight 的 PCSS

❌ 不支持。

✔️ 支持。

✔️ 支持。

DirectionalLight 的 PCSS

❌ 不支持。

❌ 不支持。

✔️ 支持。

灯光投影纹理

❌ 不支持。

✔️ 支持。

✔️ 支持。

全局光照

详情见全局光照简介

特性

兼容

移动端

Forward+

ReflectionProbe

✔️ 支持,每个网格 2 个。

✔️ 支持,每个网格 8 个。

✔️ 支持,无限制。

LightmapGI

⚠️ 支持烘焙光照贴图的渲染。烘焙需要支持 RenderingDevice 的硬件。

✔️ 支持。

✔️ 支持。

VoxelGI

❌ 不支持。

❌ 不支持。

✔️ 支持。

屏幕空间间接照明(SSIL)

❌ 不支持。

❌ 不支持。

✔️ 支持。

有符号距离场全局光照(SDFGI)

❌ 不支持。

❌ 不支持。

✔️ 支持。

环境和后期处理

详情见环境和后期处理

特性

兼容

移动端

Forward+

雾(深度与高度)

✔️ 支持。

✔️ 支持。

✔️ 支持。

体积雾

❌ 不支持。

❌ 不支持。

✔️ 支持。

色调映射

✔️ 支持。

✔️ 支持。

✔️ 支持。

屏幕空间反射

❌ 不支持。

❌ 不支持。

✔️ 支持。

屏幕空间环境光遮蔽(SSAO)

✔️ 支持。

❌ 不支持。

✔️ 支持。

屏幕空间间接照明(SSIL)

❌ 不支持。

❌ 不支持。

✔️ 支持。

有符号距离场全局光照(SDFGI)

❌ 不支持。

❌ 不支持。

✔️ 支持。

辉光

✔️ 支持。

✔️ 支持。

✔️ 支持。

调整

✔️ 支持。

✔️ 支持。

✔️ 支持。

使用全屏四边形自定义后期处理

✔️ 支持。

✔️ 支持。

✔️ 支持。

使用 CompositorEffect 自定义后期处理

❌ 不支持。

✔️ 支持。

✔️ 支持。

抗锯齿

详情见3D 抗锯齿

特性

兼容

移动端

Forward+

MSAA 3D

✔️ 支持。

✔️ 支持。

✔️ 支持。

MSAA 2D

❌ 不支持。

✔️ 支持。

✔️ 支持。

TAA

❌ 不支持。

❌ 不支持。

✔️ 支持。

FSR2

❌ 不支持。

❌ 不支持。

✔️ 支持。

FXAA

❌ 不支持。

✔️ 支持。

✔️ 支持。

SMAA

❌ 不支持。

✔️ 支持。

✔️ 支持。

SSAA

✔️ 支持。

✔️ 支持。

✔️ 支持。

屏幕空间粗糙度限制器

❌ 不支持。

✔️ 支持。

✔️ 支持。

StandardMaterial 特性

详情见标准 3D 材质与 ORM 3D 材质

特性

兼容

移动端

Forward+

次表面散射

❌ 不支持。

❌ 不支持。

✔️ 支持。

着色器特性

详情见着色参考

特性

兼容

移动端

Forward+

屏幕纹理

✔️ 支持。

✔️ 支持。

✔️ 支持。

深度纹理

✔️ 支持。

✔️ 支持。

✔️ 支持。

法线/粗糙度缓冲区

❌ 不支持。

❌ 不支持。

✔️ 支持。

计算着色器

❌ 不支持。

⚠️ 支持,但在较旧的设备上会有性能损失。

✔️ 支持。

其他特性

特性

兼容

移动端

Forward+

颜色精度

RGBA8。低动态范围,中等精度。

RGB10A2。中等动态范围,低精度。如果启用了 2D HDR,则使用 RGBA16F。

RGBA16F。高动态范围,精度良好。

深度精度

24 位,无反转 Z。中等精度。

24 位,带反转 Z。中等精度。

32 位,带反转 Z。精度高。

去色带

❌ 不支持。

✔️ 支持。

✔️ 支持。

可变速率着色

❌ 不支持。

✔️ 支持。

✔️ 支持。

贴花

❌ 不支持。

✔️ 支持。

✔️ 支持。

粒子尾迹

❌ 不支持。

✔️ 支持。

✔️ 支持。

粒子 SDF 碰撞

❌ 不支持。

✔️ 支持。

✔️ 支持。

景深模糊

❌ 不支持。

✔️ 支持。

✔️ 支持。

自适应和邮箱模式的垂直同步

❌ 不支持。

✔️ 支持。

✔️ 支持。

2D HDR 视口

❌ 不支持。

✔️ 支持。

✔️ 支持。

HDR 输出

❌ 不支持。

✔️ 支持。

✔️ 支持。

RenderingDevice 访问

❌ 不支持。

✔️ 支持。

✔️ 支持。