本文档解释了 Godot 引擎中的 3D 渲染系统,重点介绍场景如何处理和渲染。它涵盖了渲染管线、材质系统以及不同组件如何协同工作以显示 3D 内容。有关着色器的具体信息,请参见着色器系统。
Godot 中的 3D 渲染系统将 3D 场景数据转换为屏幕上的渲染图像。该管线包括几何体处理、材质应用、光照、阴影和后处理效果。
来源
RasterizerSceneGLES3 类是使用 OpenGL ES 3 渲染 3D 场景的核心组件。它管理
来源
渲染器使用渲染列表在绘制对象之前对其进行组织
RENDER_LIST_OPAQUE:用于不透明对象RENDER_LIST_ALPHA:用于透明对象RENDER_LIST_SECONDARY:用于阴影和其他对象对象根据渲染通道的不同标准进行排序
来源
几何体实例代表场景中的 3D 对象。GeometryInstanceGLES3 类管理
渲染时,几何体实例经过处理以创建适合 GPU 提交的表面数据。
来源
材质系统定义了对象的视觉外观,控制着颜色、反射率、纹理应用等属性。
来源
BaseMaterial3D 提供了一整套属性来控制材质外观
| 类别 | 属性 | 描述 |
|---|---|---|
| 基础 | albedo_color, albedo_texture | 控制材质的基础颜色 |
| 金属度 | metallic, metallic_specular, metallic_texture | 定义材质的金属外观 |
| 粗糙度 | roughness, roughness_texture | 控制反射模糊度 |
| 普通用户 | normal_enabled, normal_scale, normal_texture | 控制表面细节而无需额外几何体 |
| 自发光 | emission, emission_energy_multiplier, emission_texture | 控制材质发出的光线 |
| 边缘光 | rim, rim_tint, rim_texture | 边缘高光效果 |
| 清漆 | clearcoat, clearcoat_roughness, clearcoat_texture | 次要透明层效果 |
| 各向异性 | anisotropy, anisotropy_flowmap | 非均匀镜面反射 |
| 次表面 | subsurface_scattering_strength, subsurface_scattering_texture | 光线在材质内部散射 |
| 传输 | transmittance_color, transmittance_depth | 光线穿透材质 |
来源
BaseMaterial3D 使用一套特性和标志系统来启用不同的渲染功能
来源
BaseMaterial3D 支持各种渲染模式以控制对象的显示方式
| 模式 | 选项 | 描述 |
|---|---|---|
| 透明度 | DISABLED, ALPHA, ALPHA_SCISSOR, ALPHA_HASH, ALPHA_DEPTH_PRE_PASS | 透明像素的处理方式 |
| 混合模式 | MIX, ADD, SUB, MUL, PREMULT_ALPHA | 材质与背景的混合方式 |
| 剔除模式 | BACK, FRONT, DISABLED | 哪些三角形被剔除 |
| 深度写入 | OPAQUE_ONLY, ALWAYS, DISABLED | 何时写入深度信息 |
| 着色模式 | UNSHADED, PER_PIXEL, PER_VERTEX | 光照计算的执行方式 |
| 漫反射模式 | BURLEY, LAMBERT, LAMBERT_WRAP, TOON | 漫反射光线散射算法 |
| 镜面反射模式 | SCHLICK_GGX, TOON, DISABLED | 镜面高光的计算方式 |
来源
Godot 支持三种类型的光源
来源
阴影在主场景渲染之前以单独的通道进行渲染
来源
着色器定义了材质在 GPU 级别的渲染方式。Godot 3D 渲染系统使用灵活的着色器系统,它
场景着色器结构包括
着色器使用预处理指令根据材质属性启用/禁用特性。
来源
着色器系统根据特性标志创建着色器的专用版本
来源
主渲染过程将所有组件连接在一起
准备阶段:
填充渲染列表:
渲染通道:
后处理:
来源
天空和环境系统提供大气效果和全局光照
来源
3D 渲染系统通过以下方式与 Godot 的场景系统集成
RasterizerSceneGLES3 接收由场景系统准备的场景数据,并将其转换为渲染命令。
来源
Godot 的 3D 渲染系统提供了一个强大、灵活的框架来渲染 3D 场景。通过将多功能材质系统与高效的几何体处理和强大的着色器框架相结合,它能够在不同硬件上保持良好性能的同时,生成高质量的视觉效果。
渲染管线设计为可扩展的,允许随着图形技术的进步添加新功能和技术。场景管理、几何体处理和材质处理之间明确的分离使得系统模块化且易于维护。