菜单

3D 渲染

相关源文件

本文档解释了 Godot 引擎中的 3D 渲染系统,重点介绍场景如何处理和渲染。它涵盖了渲染管线、材质系统以及不同组件如何协同工作以显示 3D 内容。有关着色器的具体信息,请参见着色器系统

渲染管线概述

Godot 中的 3D 渲染系统将 3D 场景数据转换为屏幕上的渲染图像。该管线包括几何体处理、材质应用、光照、阴影和后处理效果。

渲染流程

来源

核心组件

RasterizerSceneGLES3

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 支持三种类型的光源

  1. 平行光:来自遥远光源(如太阳)的平行光线
  2. 全向光:向所有方向发光的点光源
  3. 聚光灯:具有方向和范围的锥形光

来源

阴影渲染

阴影在主场景渲染之前以单独的通道进行渲染

来源

着色器系统

着色器定义了材质在 GPU 级别的渲染方式。Godot 3D 渲染系统使用灵活的着色器系统,它

  1. 根据材质特性编译着色器变体
  2. 缓存已编译的着色器以提高性能
  3. 为不同的渲染通道提供专用版本

场景着色器结构

场景着色器结构包括

  • 顶点着色器部分:变换顶点并为片段着色器准备数据
  • 片段着色器部分:计算最终像素颜色

着色器使用预处理指令根据材质属性启用/禁用特性。

来源

着色器专用版本

着色器系统根据特性标志创建着色器的专用版本

来源

场景渲染过程

主渲染过程将所有组件连接在一起

  1. 准备阶段:

    • 更新环境数据
    • 设置光照和阴影
    • 处理几何体实例
  2. 填充渲染列表:

    • 根据材质属性收集和排序几何体
    • 准备不透明、透明和阴影列表
  3. 渲染通道:

    • 渲染阴影通道
    • 渲染不透明对象
    • 渲染透明对象
  4. 后处理:

    • 应用色调映射等效果
    • 处理抗锯齿
    • 应用雾效和其他环境效果

来源

天空和环境

天空和环境系统提供大气效果和全局光照

来源

与 Godot 场景系统的集成

3D 渲染系统通过以下方式与 Godot 的场景系统集成

  1. Node3D 集成:将 3D 场景节点转换为可渲染实例
  2. 视口系统:控制场景的可见部分
  3. 相机系统:定义渲染的视点和投影
  4. 资源管理:加载和管理纹理及其他资产

RasterizerSceneGLES3 接收由场景系统准备的场景数据,并将其转换为渲染命令。

来源

结论

Godot 的 3D 渲染系统提供了一个强大、灵活的框架来渲染 3D 场景。通过将多功能材质系统与高效的几何体处理和强大的着色器框架相结合,它能够在不同硬件上保持良好性能的同时,生成高质量的视觉效果。

渲染管线设计为可扩展的,允许随着图形技术的进步添加新功能和技术。场景管理、几何体处理和材质处理之间明确的分离使得系统模块化且易于维护。