Godot 引擎的渲染系统负责将图形绘制到屏幕上、管理材质和着色器,以及提供将 3D 和 2D 场景转换为渲染输出的管线。本文档描述了 Godot 渲染系统的架构、组件和流程。有关 3D 渲染或着色器语言等特定渲染功能的信息,请参阅 3D 渲染和 着色器系统。
Godot 的渲染系统遵循多层架构,高层 API 与底层渲染后端之间有清晰的分离。
渲染系统包含以下主要组件:
来源:drivers/gles3/rasterizer_scene_gles3.h149-152 drivers/gles3/rasterizer_canvas_gles3.h147-150 servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h1-6 servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.h1-6
渲染管线将场景数据转换为屏幕上显示的帧。
渲染管线涉及以下关键步骤:
来源:drivers/gles3/rasterizer_scene_gles3.cpp107-171 servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp31-40
材质定义了物体渲染时的外观。Godot 拥有多种材质类型,并有清晰的继承层次结构。
材质系统负责以下职责:
来源:scene/resources/material.h39-65 scene/resources/material.cpp39-187 scene/resources/material.cpp582-643 doc/classes/BaseMaterial3D.xml1-12
着色器定义了每个像素如何渲染。Godot 提供了一个完整的着色器管线。
着色器系统的关键组件包括:
来源:servers/rendering/shader_language.h47-80 servers/rendering/shader_language.cpp42-248 servers/rendering/shader_compiler.cpp1-10 servers/rendering/shader_compiler.h1-10
Godot 支持多种渲染后端,以适应不同的平台和需求。
GLES3 后端使用 OpenGL ES 3.0,适用于广泛的设备。
主要功能包括
来源:drivers/gles3/rasterizer_scene_gles3.cpp31-33 drivers/gles3/rasterizer_canvas_gles3.cpp31-47 drivers/gles3/storage/material_storage.cpp31-45
RD 后端是一个更现代、更高效的渲染器。
主要功能包括
来源:servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp31-38 servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp31-38 servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp31-43
Godot 支持多种着色器类型,每种都有特定的用途。
| 着色器类型 | 目的 | 特性 | 流水线阶段 |
|---|---|---|---|
| Spatial (空间) | 3D 渲染。 | PBR、光照、阴影。 | 顶点、片段。 |
| Canvas Item (画布项) | 2D 渲染。 | 精灵、UI、特效。 | 顶点、片段。 |
| Particles (粒子) | 粒子特效。 | 基于 GPU 的粒子。 | 顶点、片段。 |
| Sky (天空) | 天空渲染。 | 环境、程序化天空。 | 顶点、片段。 |
| Fog (雾) | 体积雾。 | 大气效果。 | 顶点、片段。 |
着色器管线具有特定的处理步骤:
来源: servers/rendering/shader_types.cpp1-10 servers/rendering/shader_language.cpp30-165 drivers/gles3/shaders/scene.glsl1-20 drivers/gles3/shaders/canvas.glsl1-20
材质经过几个阶段才能为渲染做好准备
材质处理管线包括
来源: drivers/gles3/storage/material_storage.cpp44-173 servers/rendering/renderer_rd/storage_rd/material_storage.cpp1-20 scene/resources/material.cpp39-64 scene/resources/material.cpp189-325
渲染系统通过数据流过程与场景树集成
集成涉及以下关键步骤
来源: drivers/gles3/rasterizer_scene_gles3.cpp107-110 drivers/gles3/rasterizer_canvas_gles3.cpp107-116 servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp103-122
渲染系统包含多项优化
来源: drivers/gles3/rasterizer_scene_gles3.cpp361-438 servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp40-100
Godot 的渲染系统提供了一种灵活、模块化的图形渲染方法。它支持针对不同平台和用例的多种后端,拥有一个清晰的 API,将高级场景管理与底层渲染实现分离。该系统设计得易于扩展,并支持 2D 和 3D 渲染,采用统一的架构。