光照与烘焙

自动关联目录:光照与烘焙

覆盖说明:本篇合并了原方案里的 光照与烘焙 与 反射与 GI 两篇——核心内容已在 Lumen 与 后处理与体积 中覆盖,本篇只做决策与代价层面的横向对比,不重复写。

1. 定位

光照方案的选择是 UE 项目里最早、也最难改的一个决定:它决定了资产制作流程、运行时成本、以及能不能热更。

一句话定位:**先在"烘焙"和"动态(Lumen)"之间做选择,再谈具体参数。**这个选择一旦做错,后期返工量极大。

2. 三种可动性(Mobility)

可动性直接光阴影间接光运行时成本
Static烘焙进 lightmap烘焙烘焙几乎为零
Stationary动态动态(传统路径)烘焙中等
Movable动态动态动态(Lumen 或没有)最高

关键变化(已核实,见 VSM):启用虚拟阴影贴图后,Stationary 光源的直接光与阴影按动态计算(等同 Movable),只有间接漫反射仍来自烘焙 lightmap。

另一个关键事实(见 Lumen):启用 Lumen 后,Static 光源完全不可用——它们整个存在 lightmap 里,而 Lumen 会禁用预计算静态光照贡献并隐藏所有光照贴图。

3. 方案对比

全局光照

方案质量运行时成本是否需要烘焙适用场景
烘焙(Lightmass / GPU Lightmass)静态场景很好几乎为零是移动端、固定光照、性能预算紧
Lumen GI全动态、无限反弹固定 GPU 开销否次世代主机与高端桌面,需要动态光照
SSGI一般低否(但官方建议与烘焙叠加)作为烘焙的补充
Ray Tracing GI高高否已弃用

反射

方案特点成本
Reflection Capture放置式,静态,便宜低(烘焙后)
Lumen Reflections全动态、全粗糙度范围中—高
SSR屏幕空间,画面外信息丢失低
Ray Tracing Reflections质量最高已弃用

阴影

方案适用
烘焙阴影Static 光,运行时免费
传统 CSM / 逐物体阴影不用 Nanite 的项目(Nanite 不支持 pre-shadow 与 inset shadow)
虚拟阴影贴图用 Nanite 就必须用它或全 Movable 光(见 VSM)
Distance Field Shadows方向光的远距离阴影,与 VSM 并行用于非 Nanite 几何
光追阴影质量最高,优先级高于 VSM

4. 烘焙的代价(常被低估)

代价说明
烘焙时间大场景以小时计;GPU Lightmass 能显著加速
包体光照贴图是实打实的资源体积
内存光照贴图常驻
迭代速度改一盏灯要重新烘焙,美术反馈周期变长
不能动态变化昼夜循环、可破坏光照都做不了
与 Nanite 的关系官方建议:不用 Lightmass 烘焙 GI 时关闭 Generate Lightmap UVs(省时间也省一套 UV)

关掉静态光照的额外收益(见 Lumen):Allow Static Lighting 关闭后省掉一部分 shader permutation,并且允许 Material Ambient Occlusion 与 Lumen GI 一起工作。

5. 参数与控制台变量

设置 / CVar作用
Allow Static Lighting(项目设置)关闭可省 permutation 并启用 Material AO
Force No Precomputed Lighting(World Settings)移除已有 lightmap(需重建光照并保存关卡)
Generate Lightmap UVs(导入)不用烘焙 GI 时应关闭
Lighting Quality(构建)Preview / Medium / High / Production
r.Lightmass.* / GPU Lightmass 设置烘焙质量与速度
r.SSGI.*SSGI 质量
r.DistanceFieldAO.*DFAO(Lumen 会取代它)
stat lightmap / Lightmap Density 视图光照贴图密度检查
r.Shadow.*阴影相关(VSM 系列见 VSM)

6. 代价与权衡

选择收益代价什么时候不该用
烘焙运行时免费、移动端唯一现实选择烘焙时间、包体、不能动态需要昼夜循环/可破坏环境时不可行
Lumen免烘焙、全动态固定 GPU 成本,且互斥于静态光照低端平台、移动端
SSGI便宜只能看到屏幕内,需与烘焙叠加单独使用会有明显缺信息
Reflection Capture便宜静态、位置敏感,反射内容是"环境"不是"当前画面"需要反射动态物体时不行
SSR便宜画面外全丢反射画面外内容时不可用
光追 GI / 反射质量最高官方已弃用新项目不应基于它设计

7. 踩坑与排查

坑现象怎么验证
开了 Lumen 后烘焙光没了全变暗设计如此(见 Lumen);要保留烘焙就只用 Lumen Reflections
Stationary 光的阴影行为变了切 VSM 后VSM 下 Stationary 直接光按动态算,只有间接是烘焙的
用了 Nanite 但阴影不对阴影缺失Nanite 不支持 pre-shadow / inset shadow → 必须用 VSM 或 Movable 光
光照贴图还在占包体关了 Lumen 但没清需要 Force No Precomputed Lighting + 重建 + 保存
烘焙极慢项目大用 GPU Lightmass;检查 Lightmap Density 是否过高
反射里看不到画面外用了 SSR换 Lumen 或加 Reflection Capture
包体异常光照贴图大降 Lightmap 分辨率、减少 lightmap 物体
开了 Lumen 但 Material AO 无效不生效需要先关 Allow Static Lighting 腾出 GBuffer 空间
导入 Nanite 网格特别慢导入耗时长不用烘焙 GI 就关 Generate Lightmap UVs

8. 排查顺序

1. 先确认选的是哪条路线:烘焙 还是 Lumen?
   └─ 这个决定错了,后面所有调参都是白费
2. 烘焙线:Lightmap Density → 烘焙质量 → 包体/内存
3. Lumen 线:走 [Lumen](/add078a2.html)
4. 阴影问题:
   ├─ 用了 Nanite?→ 必须 VSM 或 Movable
   └─ 没用 Nanite?→ 传统路径或 VSM(见 VSM 篇的适用性判断)
5. 反射问题:先判断是不是"画面外信息缺失"→ 是就换方案

参考