光照贴图生成:从几何求交到漫反射辐照度烘焙的工程实践

📅 发布时间:2026/9/7 10:13:20
光照贴图生成:从几何求交到漫反射辐照度烘焙的工程实践
一、开场:光照贴图到底在「烘焙」什么如果你玩过《我的世界》或者早期的 3A 游戏(比如《使命召唤 4》),你可能注意过一个细节——光线在静态物体上似乎「凝固」了。墙角的阴影不会随太阳移动而变化,走廊里的漫反射光照在角色走过时也纹丝不动。这些「凝固的光」就是光照贴图(Lightmap)。它本质上是把场景中每个表面点接收到的漫反射光照,离线烘焙成一张纹理,运行时直接采样——既省了实时光追的开销,又保留了光照的物理细节。但「烘焙」这个词很模糊。光子怎么变成像素?几何求交怎么参与?递归光线又是什么意思?本文的目的就是从零实现一个 C# 版的微型 Lightmapper,逐段拆解每个模块的单一职责,让光照贴图的「魔法」在你眼中变成一连串可验证的工程动作。读完本文,你将拥有:一套完整可编译运行的 C# 光线追踪 + 烘焙代码(约 300 行);对「辐照度」「半球积分」「递归光线」「漫反射 BRDF」等术语的工程级理解;把代码嵌入 Unity Editor 做离线烘焙工具的完整思路;对比市面主流 Lightmapper(Unity Enlighten/Progressive GPU、UE5 Lightmass、Blender Cycles)的能力边界。二、整体架构:七大模块的依赖图一个完整的 Lightmapper 说到底是这些模块,按依赖顺序从底往上搭: