0. Lumen 在解决什么问题

Lumen 是虚幻引擎 5 中的动态全局光照(GI)与反射方案,目标是在可交互帧率下,让间接光、天空光、自发光与反射随场景与光源变化而更新,而不依赖预烘焙 Lightmap。

和离线烘焙相比,它的代价是:近似、有噪声、有分辨率与距离上的折中;和纯路径追踪相比,它的特点是:高度工程化——用多种加速结构与缓存把“多反弹光照”压进毫秒级预算。


1. 整体心智模型:不是一条管线名字,而是一套系统

可以把 Lumen 理解成三层协作:

  1. 场景表示(Scene Representation)
    距离场、高度场、表面缓存等近似几何与材质,供光线/锥体查询“往哪走、打到什么颜色”。
  2. 光照求解(Lighting Solve / Gather)
    在屏幕空间与 world space 里做最终汇聚(Final Gather)、**辐射缓存(Radiance Cache)**等,把多 bounce 的间接光折合成可采样的结果。
  3. 与主渲染整合
    结果喂给延迟/前向材质系统,并与阴影、Nanite、虚拟阴影贴图(VSM)等协同。

官方文档与白皮书里常强调的:Lumen 是混合多种技术的系统,不同平台、不同质量档位会走不同子路径(软件追踪 vs 硬件光追等)。


2. 关键数据结构(理解原理的抓手)

2.1 网格距离场(Mesh Distance Fields, MDF)

  • 每个静态网格可生成有符号距离场(近似),表示到表面的最短距离。
  • 优点:GPU 上锥体追踪(Cone Tracing)或球体追踪成本低,适合粗粒度遮挡与 GI 探针式查询。
  • 局限:依赖网格质量与分辨率;细小几何、薄墙、复杂镂空可能漏光或穿模,需要调 World Settings / 资产设置或换表示。

2.2 高度场与场景表示(Heightfields / Lumen Scene)

Lumen 需要一份可快速查询的“简化场景”:除距离场外,还有与地形、实例化相关的表示(具体组合随版本与设置变化)。直觉上:用比完整三角形网格更粗的体积/表面近似,换追踪速度

2.3 Surface Cache(表面缓存 / Card)

间接光需要知道“表面长什么样、反什么颜色”。Lumen 用表面缓存把物体表面划成卡片(Cards)上的 texel,缓存反照率、法线、发射等信息,供 GI 与反射采样。

  • 为什么重要:没有稳定的表面参数,间接光只能糊成一片或闪烁。
  • 常见现象:新物体、缩放很大的物体、法线很硬的拐角,可能出现漏更新或接缝——往往与 Card 覆盖、更新频率、分辨率有关。

2.4 Radiance Cache(辐射缓存)

在空间中放置低分辨率的辐射体素/探针式缓存,存储入射辐射的大致分布,用于加速多 bounce 或远距离间接光,减少每像素全路径的开销。


3. GI 的大致路径:从相机到“间接光颜色”

典型一帧里(概念顺序,非严格源码调用栈):

  1. 可见性 + 主光:太阳/点光等先通过阴影与直接光照贡献。
  2. 屏幕空间信息:当前帧 GBuffer 提供深度、法线、材质。
  3. Lumen Final Gather:对需要 GI 的像素,向半球方向发射锥体/射线,在 Surface Cache + 距离场/高度场 上查询命中与辐射。
  4. 时间累积与空间滤波:用历史帧与邻域滤波压噪声(因此快速运动或切场景时可能出现拖影或短暂不稳定)。
  5. 与反射、天空光合并:反射可走单独追踪路径,但同样依赖类似的场景表示与缓存。

要点:Lumen 的 GI 是在近似几何 + 缓存辐射上做查询,而不是对每像素做完整路径追踪。


4. Lumen Reflections(反射)在做什么

反射与 GI 共享大量基础设施(场景表示、缓存),但目标不同:镜面/光泽方向上的可见性与颜色

  • 粗糙反射:更依赖锥体宽度、滤波与缓存分辨率。
  • 锐利反射:对几何近似误差更敏感,容易出现穿帮或模糊
  • 硬件光追(若启用):可用 RT 改善反射与部分 GI 质量,代价是 GPU 成本与平台支持。

在工程上常看到:GI 用软件路径可接受,反射开硬件 RT 换质量,或全软件以保帧率——这是典型的质量/性能权衡。


5. 软件追踪 vs 硬件光线追踪

维度 软件路径(距离场等) 硬件 RT
几何保真 近似,薄墙/细节易出问题 更接近真实网格
平台 面广 需支持 RT 的 GPU
成本 主要吃计算与带宽 RT 单元 + BVH 等
调参 距离场精度、Lumen 场景细节 质量档位、混合模式

Epic 的设计哲学是:默认在多数机器上可玩,再向高端硬件渐进增强


6. 和 Lightmass、传统 RTGI 的关系

  • Lightmass:烘焙 GI,质量高、完全静态,与 Lumen 目标不同
  • Screen Space GI / SSR:信息来自屏幕,背后缺失会穿帮;Lumen 用 world space 表示补洞,但仍是近似。
  • 纯路径追踪:理论干净,实时全分辨率多 bounce 不现实;Lumen 用缓存 + 低频空间结构换实时。

7. 实践中容易踩的坑(原理层面的解释)

  • 漏光 / 室内天光过强:距离场解析度不够、门/窗太薄、World 里 Lumen 场景细节过低。
  • 间接光闪烁:表面缓存更新跟不上动画网格、Nanite/非 Nanite 切换、时间滤波与运动矢量不一致。
  • 反射糊、拖影:反射分辨率、历史累积、粗糙度与追踪步长的折中。
  • 性能尖峰:反射质量、Radiance Cache 更新范围、硬件 RT 开关、大场景卡片数量。

调参时建议:先锁定是“几何表示问题”还是“缓存/分辨率问题”,再动对应那一类设置,避免全盘拉高 Quality。


8. 推荐学习顺序

  1. 官方文档:Lumen 技术指南(中英文档会随版本更新,以你使用的 UE 版本为准)。
  2. 白皮书与演讲:搜索 Unreal Engine Lumen SIGGRAPHLumen Technical Overview,看数据结构与帧流程图示。
  3. 引擎内验证:开 Lumen Visualize(可视化模式)观察 Surface Cache、Radiance、Tracing 等通道,把文档里的名词和画面一一对应。
  4. 结合你已有的渲染管线笔记(如光栅化、延迟着色),对比 “GBuffer → 光照积分” 在 Lumen 里多了哪些离线/近似步骤。

9. 小结

  • Lumen = 近似场景表示(距离场/高度场/表面缓存) + 辐射与最终汇聚 + 时间/空间滤波,在实时约束下模拟动态 GI 与反射。
  • 学原理时不必死记每一个 Pass 名称,而应掌握:光从哪来、存在哪、怎么查、误差从哪来
  • 版本差异大,以当前 UE 小版本的官方文档与可视化调试为准

若你希望我在这篇后面补一节「与项目相关的调参清单」(例如室内关卡、开放世界、VR 帧预算),可以说明你的目标平台与 UE 版本号,我可以按场景单独整理一版。