GPU 驱动的全局光照工程 2026:SSGI、DDGI、Surfel GI 统一取舍
把屏幕空间 GI、动态差分 GI、surfel 三种 GI 范式放到同一张决策矩阵,讨论它们在 GPU 驱动管线、移动端降级、显存预算与艺术家可控性上的工程真相,给独立工作室一套三档混合实现路线。
约 37 分钟阅读11,076 字18 次阅读博主

把屏幕空间 GI、动态差分 GI、surfel 三种 GI 范式放到同一张决策矩阵,讨论它们在 GPU 驱动管线、移动端降级、显存预算与艺术家可控性上的工程真相,给独立工作室一套三档混合实现路线。

一句话摘要:把屏幕空间全局光照、动态差分全局光照、surfels 三种 GI 范式放到同一张决策矩阵上,讨论它们在 GPU 驱动管线、移动端降级、显存预算与艺术家可控性上的工程真相,给独立工作室一套可落地的"三档混合"实现路线。
实时光线追踪的硬件渗透率在 2025-2026 年走到了一个尴尬的分水岭。桌面端 NVIDIA RTX 50 系与 AMD RX 8000 系基本完成了从"可选"到"默认配置"的过渡,但移动端 Mali Immortalis G720、Adreno 750 这一代虽然加入了硬件 BVH 遍历单元,实际能跑得动的软光追加速结构依然只有桌面 1/8 到 1/12 的吞吐;SteamDeck、ROG Ally 这一类 PC 掌机又是一个特殊地带——硬件规格介于桌面与移动之间,功耗上限决定了它们不能跑完整的 RT 反射 + RT 阴影 + RT AO 三件套。于是"GI 该用哪种算法"这个问题,在 2026 年仍然没有一个通用的答案,它分裂成了三个子问题:
这三个问题对应三套完全不同的工程取舍,任何一篇只讲一种方案的博客都会让读者产生"为什么我的项目不能照搬"的错觉。这篇文章的目标是把三种范式——SSGI(Screen Space Global Illumination)、DDGI、Surfel GI——放到一张决策矩阵里,讨论它们在 GPU 驱动管线下的取舍,然后给出一套"三档混合"的实现路线,让独立工作室在不动硬件的前提下,把 GI 质量从"能看"提升到"能出片"。
为什么是 GPU 驱动管线?因为 2026 年所有现代渲染器都已经默认走 Mesh Shader + Visibility Buffer + GPU Culling 的 GPU Driven Pipeline(GDP)。传统 GI 算法假设场景已经在 GPU 端做过 culling、排序、合批,如果新管线还按 CPU 端的场景图去遍历光源 probe、surfel、screen-space tile,就会在 GPU-CPU 同步上反复卡死。这一代 GI 范式的工程真相,本质上是"在 GDP 上怎么高效采样世界信息"的真相。
把任何一种 GI 算法形式化,都可以拆成四元组 (World Representation, Sampling Strategy, Accumulation, Reconstruction):
把这四元组套到 SSGI、DDGI、Surfel GI 三者上:
| 算法 | World Representation | Sampling Strategy | Accumulation | Reconstruction |
|---|---|---|---|---|
| SSGI | 屏幕空间深度 + GBuffer | 屏幕空间 ray march + 半分辨率 | 单帧 + 后处理 blur | 双边滤波 + temporal jitter |
| DDGI | 3D 探针 grid (irradiance + depth moments) | 探针八方向 trace + cone trace | 探针内多帧混合 + 上层 reprojection | 双线性 / 三线性插值 |
| Surfel GI | Surfel cloud (点云 + 法线 + albedo + radiance) | surfel splatting / cone tracing | 多帧 surfel 注入 + decay | screen-space splatting |
每一列的取舍都是独立决策:SSGI 在 Representation 和 Sampling 上最廉价(已经在屏幕上的数据),但 Accumulation 受限于单帧,Reconstruction 必须靠 temporal blur 撑场面;DDGI 把 Representation 提早到探针生成阶段,后面所有步骤都可以走空间复用,但探针更新是 GPU 端的另一个完整 pass;Surfel GI 把 World Representation 显式存成一个稀疏结构,后续采样和重建都走 splatting,在内存和带宽上比前两者可控性更高。
这一张表,就是后续所有决策的骨架。
SSGI 的核心思想直白:既然屏幕深度图上已经存了所有可见表面的位置,直接对着这张图做 ray march,从第一个 hit point 取 albedo + normal 计算一次反射 + 一次漫反射,就拿到了一帧的全局光照贡献。这个范式在 2018 年 Crytek 的 SEED 团队提出,2020 年起 Unity HDRP、UE5 都有内置实现。
但工程真相是:SSGI 在静态室内场景里效果惊艳,在户外大场景里几乎不可用。原因是屏幕空间 ray march 的"长度"受限于屏幕深度图的覆盖范围——当着色点 P 在墙边、要反射对面的建筑外墙时,ray march 直接射穿了 depth 边界,变成"反射的是天空"的伪影。Crytek 给出的规避方案是"reflection fallback to reflection probe",但这个 fallback 在大户外就变成了"哪里都是 probe 模糊"。
另一个工程真相是 SSGI 的 screen-space bias 几乎无法完全消除:即使做了 half-resolution、做了 temporal jitter、做了 back-projection 校验,屏幕边缘的高光反射和反射地面之间的接触阴影仍然会有明显的"断开"。在 2025-2026 年这一代实现里,主流做法是把 SSGI 的结果当作"高频细节补充",低频漫反射 GI 交给 DDGI 或 light probe,这其实是把 SSGI 降级成了"环境光遮蔽增强器"——而这恰好是它最稳定的应用场景。
把 SSGI 当 AO 增强器用,工程实现成本是三种范式里最低的:一个 half-res ray march pass + 一个 bilateral blur pass + 一个 temporal reprojection pass,GPU 时间在桌面端旗舰卡上 0.6-1.2ms,移动端 2-4ms(half-res + 4 tap),这个预算在大多数 3A 项目里是可接受的。但千万不要把 SSGI 当成独立的 GI 方案——它必须配 probe 或 DDGI 做低频兜底。
DDGI 的核心思想是把世界空间离散成一个稀疏的 3D 探针 grid(典型 1.5m 到 3m 间距),每个探针在每帧(或每 N 帧)从探针中心向八面体 6 个方向(或 14 个方向)做 ray trace,记录下:
着色点 P 在 GI 阶段,对最近的 8 个探针做三线性插值,采样方向对应的 cubemap 像素,再乘以 P 自身的 BRDF,得到该方向的一次间接漫反射贡献。
DDGI 的工程真相有四个关键点:
把 DDGI 当作桌面端中高端 GPU 的默认 GI 范式,在显存(每个探针 6×8×8×4 byte irradiance + 6×4 byte mean distance + 6×4 byte mean distance² = 1.6KB, 4096 探针 = 6.5MB)和 GPU 时间(0.6-1.5ms 探针更新 + 0.3ms 着色采样)上是甜蜜点。它最大的弱点是对高频细节不敏感:反射不出屏幕上的高光镜像、捕捉不到 GI 反弹的高频花纹,这些细节必须再叠一层 SSGI 或 SSR 来补。
Surfel GI 的核心思想是把世界表面离散成一个 surfel cloud(每个 surfel = 位置 + 法线 + 半径 + albedo + radiance + 入射光通量累积),每帧从场景几何注入新 surfel,旧 surfel 衰减,形成了一个动态进化的"GI 缓存"。着色点 P 在 GI 阶段,做一次 cone tracing,沿着 cone 内对所有 surfel 做 splatting 加权采样。
Surfel GI 的工程真相:
Surfel GI 在移动端的优势是显式的:显存预算可控(16-64MB 比 DDGI 的 6.5MB 多,但比传统 lightmap 的 100-300MB 少一个数量级)、带宽稳定(surfel 是稀疏点云而非稠密纹理)、trace 成本低(cone tracing 而非 ray tracing)。它的弱点是surfels 之间会有"洞"——大面积纯漫反射场景里,surfel 覆盖不到的空白处会变黑。这需要补一层低频的 SH probe 或 spherical harmonic fallback。
把 SSGI、DDGI、Surfel GI 三个范式画到一个三角形上,顶点分别是:
这个三角是 2026 年所有 GI 工程取舍的几何骨架。任何一种"最佳方案"的宣称,都是在某个顶点组合下的局部最优——
把这张三角投影到 GPU 驱动管线上,会发现三种 GI 范式其实在显存/带宽 vs 几何覆盖率 vs 稳定性这个 3D 空间里是互补的,而不是互斥的。工程真相是没有一种独立的 GI 算法能同时拿满三个顶点,3A 项目里最常见的做法是把三种 GI 范式做成"三档混合":
这三档的混合策略由 GPU profiler 实时驱动:近景 GI 质量如果帧时间超标,自动降级 SSGI 频率;远景 GI 质量如果显存带宽超标,自动降低 surfel 注入速率。
把上一节的理论落到代码与团队流程上,有以下五条具体可执行的工程推论:
推论 1:GI 模块必须从一开始就走 GI manager 接口抽象,而不是 hardcode 一种算法。任何 hardcode 的 GI 实现,都会在项目后期变成"换硬件就重写"的工程债。GI manager 对外暴露 sample(P, dir),内部可插拔 SSGI / DDGI / Surfel / SH probe 四种 backend,项目早期跑 SH probe 起步、中期升级 DDGI、终期加 SSGI 高频补充。
推论 2:DDGI 探针 grid 必须支持运行时重网格化。玩家角色走过的区域、动态破坏的几何、动态天气变化的 GI 分布,都会让静态 grid 的探针分布不再最优。运行时重网格化的成本是 0.3-0.8ms(compute shader 做八叉树重建 + 探针属性迁移),但能避免"明明角色走出了阴影但 GI 还显示阴影"的伪影。
推论 3:Surfel GI 的 surfel 注入必须按 meshlet 而非按 mesh 粒度。Meshlet 是 GDP 流水线里的天然粒度单元,每个 meshlet 平均 64-128 三角面,从 meshlet 顶点位置注入 surfel 可以保证 surfel 分布与渲染几何分布一致,避免出现"屏幕上有建筑但 GI 没收到贡献"的 bug。
推论 4:SSGI 的 half-resolution 策略必须根据硬件 tier 动态调整。桌面端旗舰卡走 1/2 resolution,中端卡走 1/4 resolution + 1 个 tap,移动端走 1/4 resolution + 仅 AO(放弃反射 GI)。这三档分辨率的切换由 GPU benchmark 在启动时跑一次决定,后续按需调整。
推论 5:艺术家工作流必须支持 GI 的可视化调试。没有 GI 可视化调试,艺术家就只能凭感觉调 lightmap、probe、surfel 密度,效率极低。GI 可视化调试至少要包括:屏幕空间贡献分解图(SSGI 单独显示、DDGI 单独显示、surfel 单独显示、SH probe 单独显示)、探针贡献热力图、surfel cloud 3D 视图。这三个视图加起来大约 300-500 行 GPU 代码,但能把 GI 调优时间从 2 周缩短到 3 天。
推论 6:GI 模块必须有运行时统计与回退机制。当玩家在场景里触发一些极端事件(爆炸、闪光、场景突变),GI 的历史 buffer 可能瞬间失效,这时候如果继续叠加 SSGI/DDGI/Surfel 的混合结果,屏幕会出现 1-2 秒的"GI 闪烁"。工程上必须在每帧统计三种 GI backend 的方差贡献,当方差超过阈值时自动降级到纯 SH probe(无 temporal、无 spatial 混合),持续 30-60 帧后再渐进式恢复。这种"自适应 GI 稳定性"模块大约 200-300 行 CPU+GPU 代码,但能消除几乎所有玩家能感知的 GI 闪烁 bug。
推论 7:probe 与 surfel 的显存布局要按 platform tier 分档。桌面端旗舰卡走 DDGI 1.5m 间距 4096 探针(6.5MB)+ Surfel 1M 个(64MB)+ SSGI 1/2 res(2MB back buffer);桌面端中端卡走 DDGI 3m 间距 1024 探针(1.6MB)+ Surfel 256k(16MB)+ SSGI 1/4 res(0.5MB);移动端走 SH probe 256 个 9-float SH(9KB)+ Surfel 64k(4MB)+ 关闭 SSGI。这三档的 GPU 代码可以是同一份,只是 shader uniform 与 buffer 大小按 tier 切换,不需要三套独立实现。
推论 8:GI 必须支持 volumetric 拓展,但单独跑一个 pass。体素 GI(Voxel Cone Tracing)在 2018 年曾经是热门方向,但因为显存爆炸(全场景 8-bit 体素约 80-200MB)、边界漏光、动态物体支持差,在 2026 年基本被弃用。但体素 GI 在云、烟、雾的参与介质 GI 里仍然不可替代——独立工作室如果项目里有大量体积介质(比如地牢探索里的浓雾、室内场景的烟尘),需要单独实现一个体积 GI pass,与表面 GI 分开跑,共享 SH probe 但走完全不同的 sample 路径。
到这里还没讨论一个问题:为什么不直接烘焙 lightmap?2026 年的工程真相是 lightmap 在静态场景里仍然是最高质量的 GI 来源,没有任何运行时算法能在质量上击败 32-bit float 的离线烘焙。但 lightmap 有三个工程硬伤:
所以 2026 年的工程真相是:lightmap 是 3A 桌面端静态场景的"质量天花板",但不是"默认选择"。默认选择是 runtime GI 三档混合,lightmap 作为离线 fallback。当 GPU 帧时间预算允许时,可以临时切换到 lightmap-only 模式(比如过场动画、截图模式),其他时候走运行时 GI。
如果你的团队是 5-20 人规模、单款项目预算 6-18 个月、目标平台覆盖桌面端中端 + 移动端,以下是一套可执行的 GI 落地路线:
第 1 个月(0.3-1 个 FTE 月):搭建 GI manager 抽象层,实现 SH probe 作为默认 backend。SH probe 是 9 个 float 的每探针存储 + 0.05ms 着色成本,适合项目早期"先把场景搭起来再说"。这一步的目标不是 GI 质量,而是把 GI 模块从"无"变成"有"。
第 2-3 个月(1-2 FTE 月):在 SH probe 之上叠加 SSGI 的 AO 增强版本。SSGI 的 AO 增强版本只需要 half-res + 4 tap ray march + bilateral blur,代码量 200-400 行,GPU 时间 0.3-0.5ms,效果立竿见影。这一步的目标是用最低成本提升 GI 质量,验证 GI manager 的多 backend 切换接口。
第 4-6 个月(2-3 FTE 月):在桌面端中高端 GPU(GTX 1070 / RX 580 以上)启用 DDGI backend,移动端保留 SH probe + SSGI AO。DDGI 的工程成本主要在探针 grid 的放置算法 + 探针更新 compute shader,代码量 800-1500 行。这一步的目标是桌面端达到 3A 级别的 GI 质量,移动端保持稳定。
第 7-9 个月(2-3 FTE 月):在需要大量动态几何的项目里启用 surfel GI,作为 DDGI 的补充。Surfel GI 的工程成本最高(注入、衰减、cone tracing、splatting,加起来 2000-4000 行 GPU 代码),只在确实需要它的项目里启用。这一步的目标是完成"三档混合"的最终档,覆盖最难场景。
第 10 个月及以后:持续优化。具体包括 DDGI 探针重要性权重调优、surfel 注入与 culling 联动、SSGI 与 TSR/XeSS/FSR 的协同(避免 temporal blur 互相干扰)。这一步没有截止日期,会一直持续到项目发布后。
写到最后,有几个可能影响 2026-2027 年 GI 工程走向的观察,留给读者思考:
观察 A:神经网络的 GI 加速正在从"演示"走向"可用"。NVIDIA 的 ReSTIR Neural Radiance Cache、Meta 的 NeRF-based GI,都在 2025-2026 年间从论文走向引擎集成。但目前的神经网络 GI 仍然需要预训练 + per-scene 微调,工程上不容易集成到通用引擎里。预计 2027-2028 年才会有第一个商业引擎内置"开箱即用"的神经 GI backend。
观察 B:硬件 BVH 单元的移动端渗透率仍然有限。Mali Immortalis G720 的 RT 单元在 2024 年量产,但实际游戏能跑出的 RT 吞吐只有桌面 RTX 3060 的 1/8 到 1/12。移动端硬件 RT 的"实用化"还需要 2-3 代硬件迭代。
观察 C:Surfel GI 可能会被"虚拟几何 GI"取代。Nanite-style 虚拟几何在 2026 年开始下沉到中端桌面卡,如果虚拟几何进一步下沉到移动端,GI 范式可能会直接用"对虚拟几何做 cone tracing"取代"对 surfel 做 cone tracing"。这是更长期的方向,不确定何时成熟。
观察 D:SH probe 仍然是不可替代的"最小可行 GI"。即使在 3A 项目里,SH probe 也作为"低频兜底"在 DDGI 或 surfel GI 失效时承担最后的责任。SH probe 的工程价值不在于质量,而在于永远可用。
观察 E:GI 与时序超分(TSR/DLSS/FSR/XeSS)的冲突会越来越明显。时序超分本身就要读取历史帧的颜色与深度 buffer,如果 GI 也写历史帧 buffer(为了 temporal reprojection),两边就会互相"吃掉"对方的时间稳定性——超分以为上一帧的 GI 已经稳定了,实际上 GI 还在变;GI 以为超分会补回上一帧的细节,实际上超分把 GI 的抖动直接当噪声抹掉了。2026 年的工程真相是 GI 与时序超分必须共享同一个 history buffer,或者至少在 GI 写入历史 buffer 之前,先告知时序超分"GI 还在收敛,这一帧不要用它做时间外推"。这个交互在 UE5.4 Lumen 和 Unity HDRP 2026.1 都已经显式处理,但独立工作室自研 GI 时一定要引以为戒。
观察 F:跨平台 GI 的工程预算正在反向变化。2022-2024 年的趋势是"桌面端 GI 越来越豪华,移动端 GI 越来越简陋",2026 年的趋势开始反向——因为桌面端硬件迭代放缓(4 年一代架构、3 年一代制程),桌面端 GI 已经接近"够用"的天花板;而移动端 SoC 在 2025-2026 年的硬件跃进(Mali G720、Adreno 750、苹果 M3)让移动端 GI 预算从 1-2ms 跃升到 3-5ms。独立工作室如果目标平台同时覆盖桌面端和移动端,建议把 GI 工程的 60% 预算投到移动端,40% 投到桌面端——这是一个反直觉但符合 2026 年硬件现实的取舍。
把这四个观察画到第六节的三角上,会发现 GI 工程的长期演进方向是:SH probe 永远在底层兜底,SSGI/DDGI/Surfel GI 三角互相补完,神经网络 GI 作为可选的"加速器"而不是"替代品"。这也是 2026 年所有严肃渲染工程师的共识。
Conversation
0 条