Voxel GI
2026/9/7大约 2 分钟
Voxel GI
系列简介
这是一个围绕 Voxel-based Global Illumination 的实现型系列。文章从全局光照与体素场景表示出发,逐步建立 Compute Shader 体素化、体素光照注入、Voxel Cone Tracing、Screen Trace、时空滤波和合成的完整认知,并把这些概念落到 Unity 6 的 URP Render Graph 数据流上。
实现版本
- Unity 6.3(6000.3.16f1)
- URP 17.3.0
- UPM 包:
com.qstx.voxelgi0.1.0 - 事实基线提交:
d5a0253915a4094b1db1e804b394ff9dee619836 - 管线调度:Render Graph
- 场景写入:Compute Shader 体素化
- 本地 UPM 包:
Packages/com.qstx.voxelgi - 示例场景:
Packages/com.qstx.voxelgi/Samples/SampleScene/SampleScene.unity
Renderer Feature 只对 Base Game Camera 入队:相机需要是 CameraType.Game 且 CameraRenderType.Base。运行时能力检查不是按平台名称硬编码,而是要求 SystemInfo.supportsComputeShaders、SystemInfo.supports3DTextures,以及 GraphicsFormat.R16G16B16A16_SFloat 的 GraphicsFormatUsage.LoadStore(RGBA16F UAV)支持;任一条件不满足时整项 GI 关闭并只报告一次错误。
参数口径
以下三类数值不能混读:代码默认值来自 VoxelGISettings.cs,示例场景值来自 Voxel GI Volume Profile.asset,计算示例值只用于文章中的手算表。
| 来源 | 当前值与含义 |
|---|---|
| 代码默认值 | enable=false、voxelResolution=128、updateMode=EveryFrame;间接光为 secondBounce=true、Medium、maxSteps=8、FirstStep=1、StepScale=1、Cone 全角 120°;屏幕端为 Medium、maxSteps=16、Cone 全角 120°,temporalFilter=false。 |
| 示例场景值 | voxelResolution=128、保守体素化开启且 conservativeScale=1.5、updateMode=OnChange;间接光 VeryLow/8 步/全角 120°;屏幕端 VeryLow/32 步/全角 150°;Temporal 开启,当前帧权重 0.369,Halton 长度 64。 |
| 计算示例值 | 第 05 篇单独标注的演示组合:R=128、FirstStep=1、StepScale=2、Cone 全角 120°。其中 StepScale=2 是合法范围内的非默认值,不代表代码默认或示例场景覆盖。 |
系列目录
系列正文分为“原理与实现”以及“性能、优化与展望”,共八篇。[已发布] 表示文章已经可以阅读,[规划] 表示后续计划。
原理与实现
[已发布]01 Voxel GI:原理与管线[已发布]02 体素空间与 3D GBuffer[已发布]03 Compute 体素化[已发布]04 体素光照注入[已发布]05 Voxel Cone Tracing[已发布]06 Screen Trace[已发布]07 时空滤波与合成
性能、优化与展望
[规划]08 性能优化与技术展望
项目仓库
项目源码仓库:qstx/VoxelGI-URP。博客中的实现说明以该仓库内的本地 UPM 包为准。
