让我们深入分析项目的详细结构:
1. 核心 C# 实现 (Features/Runtime/
):¶
DDGIFeature.cs
- DDGI 渲染特性的主要实现- 继承自
ScriptableRendererFeature
- 实现探针系统的核心逻辑
- 管理光线追踪加速结构
- 处理探针的辐照度和距离场更新
- 实现探针分类和重定位系统
- 管理各种光照类型(定向光、点光源等)
- 继承自
DDGICustomBounds.cs
- 自定义 DDGI 体积边界定义Overrides/
- URP 渲染管线重写组件 - DDGI:主要用来显示在URP的Volume上面
2. 计算着色器 (Features/Resources/Shaders/
):¶
- 探针系统核心着色器:
- `DDGIProbeClassification.compute` - 探针分类计算
- `DDGIRelocateProbe.compute` - 探针重定位逻辑
- `DDGIUpdateDistance.compute` - 距离场更新
- `DDGIUpdateIrradiance.compute` - 辐照度更新
- `DDGIReduction.compute` - 探针数据归约处理
- 光线追踪着色器:
- `DDGIRayTracing.raytrace` - DDGI 光线追踪核心实现
- `LitRayTracing.raytrace` - 标准 PBR 光线追踪
- `LitRayTracing.shader` - 光线追踪材质着色器
- 可视化着色器:
- `DDGIVisualize.shader` - DDGI 探针可视化
- 着色器库 (`Lib/`):
- 包含 15 个支持文件,可能是各种着色器函数库
3. 资源文件:¶
- `Features/Resources/Meshes/` - 包含 2 个网格资源文件
4. 场景实现:¶
- `Scenes/ClassicSponza/` - 演示场景
- 使用经典 Sponza 场景展示 DDGI 效果
- 包含场景特定的光照设置和探针配置
技术实现细节:
-
探针系统:
- 使用体积化探针网格
- 每个探针存储:
- 辐照度数据 (Irradiance)
- 距离场数据 (Distance Field)
- 探针状态数据 (Probe Data)
- 变化率数据 (Variability)
-
光线追踪系统:
-
使用 Unity 的 RayTracing 系统
- 支持多种光源类型:
- 定向光 (DirectionalLight)
- 点光源 (PunctualLight)
- 天空光照系统,支持:
- Skybox 立方体贴图模式
- 渐变天空模式
- 纯色天空模式
-
探针优化技术:
-
动态探针分类
- 自适应探针重定位
- 探针历史记录系统用于平滑过渡
- 探针数据归约处理
-
渲染管线集成:
-
完全集成到 URP 渲染管线
- 使用
ScriptableRendererFeature
系统 - 支持自定义渲染过程