中EN
概念页

预计算光照与光照贴图

Precomputed Lighting & Light Maps

烘焙 (baking) 是把辐射度或路径追踪等离线 GI 结果预先算好存起来,运行时直接查询。静态几何参与预计算并完整交互,动态物体只作接收者。数据可以是辐照度,也可以带方向(SH、H 基、AHD、球面高斯、环境立方体等),存储在光照贴图、顶点或体积/探针中,各有接缝、漏光、内存等取舍(RTR4 11.5.1、11.5.2、11.5.4 节)。

限制与分工

预计算意味着几何、光源、材质运行时不能变:不能改昼夜、不能炸墙。很多应用可以接受:建筑可视化只让用户走动,游戏也会限制玩家行为。场景分为静态物体(投影、红地毯反射红光)和动态物体(角色、装饰、载具,只接收不遮挡、不产生间接光,一般较小,可用屏幕空间 AO 等补充遮蔽)。因光源效果相互独立,动态光可直接叠加在烘焙光照上。

辐照度预照明

  • 对平面朗伯表面,辐照度加表面颜色就完整描述了响应。《雷神之锤》(1996) 预计算静态光直接光以提速;《雷神之锤 II》(1997) 加入间接光,是第一个用 GI 算法(基于辐射度)的游戏,低分辨率正好匹配辐射度模糊的低频阴影。
  • 辐照度通常与反照率贴图分开存:颜色贴图高频、平铺、复用,光照低频不能复用,分开大大节省内存。
  • 如今很少单用辐照度:它针对固定法线计算,不能配合法线贴图,也只能用于平面,无法给动态几何用。

方向预照明

表示系数特点 / 使用
三阶 SH9/通道质量极好,存储带宽高
二阶 SH4/通道便宜,丢失细节、对比度低、法线贴图不明显;正好装进 RGBA
《光环 3》(Chen)18提取主光(颜色+方向)单独存,残差用二阶 SH,接近三阶质量(27→18)
H 基 (Habel 等)6只编码半球,6 个系数接近三阶 SH;需要切线空间定向,纹理分辨率要足以适应切线空间变化
《半条命 2》基9三个方向各存颜色
AHD(环境/高光/方向)《使命召唤》系列、《最后生还者》
Crytek(《孤岛惊魂》)6切线空间平均光方向 (2) + 颜色 (3) + 方向性因子 (1);Unity 某模式类似
球面高斯(《教团:1886》)5–9 瓣存入射辐射亮度而非辐照度;与余弦卷积得漫反射,与镜面瓣卷积得低光泽高光
环境立方体6 存 3 用6 个夹取 cos² 瓣,局部支撑无振铃,质量近二阶 SH
环境骰子12 存 6 用二十面体顶点方向的 cos² 与 cos⁴ 组合,质量近三阶 SH
  • SH 和 H 基会振铃,预滤波可缓解但会使光照变平滑;在低端平台和 VR 上成本可能太高。
  • AHD 类表示是非线性的,在纹素或顶点间线性插值数学上不正确,阴影边界等主方向剧变处会出伪影;但环境与方向部分对比强,法线贴图效果更突出,方向部分还可当低光泽材质的廉价镜面来源。
  • 需要任意方向光照(给动态物体)时要用全球面表示;球面高斯覆盖全球面需要约两倍的瓣数。上述环境立方体/骰子等在《半条命 2》《使命召唤》《孤岛惊魂 3》《全境封锁》《刺客信条 4》等游戏中使用。

光照贴图 (Light Maps)

  • 统称存储预计算光照的纹理,用 GPU 纹理硬件双线性过滤(非线性表示插值后要修正,如 AHD 的方向需重新归一化)。
  • 通常不用 mipmap:即使高质量应用,一个纹素也至少覆盖约 20×20 cm,几乎用不到更低 mip;另外各 mip 都要保持图块分离会浪费大量空间。
  • 需要唯一参数化:每个三角形在光照贴图上占独立区域。流程:把网格切块(自动启发式或手工,常复用已有 UV 切分)→ 每块独立展开为不重叠的 chart/shell → 打包到一张纹理。
  • 不仅图块不能重叠,过滤足迹也要分开(双线性会读四个邻纹素)。不必依赖用户设定的"间隙"(gutter):在偏移半个纹素的网格上保守光栅化图块,触及的纹素都标为占用,不重叠即保证不渗色。
  • 最优打包是 NP 完全问题,实际用调优的启发式(一张图可能有数十万 chart);若之后要块压缩,可约束一个块内只放相近的值。
  • 接缝:各块独立参数化,切边两侧光照无法完全一致。可把切口放在看不见的地方(费力)、后处理修改切边纹素使两侧插值差最小 (Iwanicki)、用等式约束求解保持平滑的纹素值 (Liu、Ferguson 等),或用保持网格的参数化从根本上消除 (Ray 等)。

顶点存储

质量取决于网格细分程度,细分早定、难以保证;太细又过采样。带方向表示时大量参数要从顶点插值传到像素着色器,GPU 不擅长这种负载,因此很少使用。

体积存储与光照探针

  • 可在空间任意点查询光照,给预计算时不存在的物体用(但它们不会正确反射或遮挡光)。
  • 辐照度体积 (Greger 等):三维网格的每个点放一张辐照度环境贴图,表示五维(3 空间 + 2 方向)辐照度函数;原版用两级自适应网格,也可用八叉树。现在多存进三维纹理以利用硬件过滤,每点常用二阶 SH(4 系数装进一个纹理)、三阶 SH、球面高斯、环境立方体/骰子;AHD 在这里会产生明显伪影;SH 可用 SH 梯度提高质量。
  • 《小小大星球》(Evans):每点只存平均辐照度,在表面点和沿法线稍偏移的点各采一次相减,近似梯度与法线的点积作为方向性,因为体积是动态计算的。
  • 体积也可照亮静态表面:无需光照贴图参数化、无接缝、静态与动态一致,适合延迟着色。缺点是内存按分辨率立方增长(光照贴图为平方),只能用低得多的分辨率;自适应层次结构更省但有依赖读取,比规则网格慢。
  • 漏光:一个体素内可能同时有明亮室外和昏暗室内的表面,导致室外出现暗斑或室内出现亮斑。常用对策:沿法线偏移采样位置、调整三线性权重、手工改几何;Hooker 加裁剪平面把体积影响限制在凸多面体内。
  • 四面体化探针(Cupisz 推广,Unity 使用):不规则点云做 Delaunay 四面体化。查找时从起始四面体出发,按重心坐标朝最负坐标所对的邻居移动,直到找到所在四面体(可缓存上一帧结果或用粗网格给出起点);只需插值四个值(三线性需八个),但没有硬件加速。细长四面体会产生伪影;四面体不跟随墙体结构,同样会穿墙插值,需要手工补探针或给探针加可见性信息。
  • 术语:这些采样点叫光照探针 (light probes),注意不要与第 10 章指"记录远处光照的环境贴图"的 light probe 混淆。
  • 静态物体用光照贴图、动态物体用体积很常见,但两者外观可能不一致,可通过正则化(在不同表示间平均)缓解。
  • 烘焙时要剔除无效样本:网格常有顶点埋在几何内或自相交,在这些位置计算会导致变暗或漏光(Kontkanen 与 Laine、Iwanicki 与 Sloan 讨论了启发式)。AO 和方向遮蔽也可用以上所有方式存储。

GEA 的视角:静态光照、烘焙与光照探针(卷 II 12.5.3–12.5.4、12.9.3)

  • 静态光照与烘焙:最快的光照计算是根本不算,所以能离线做的尽量离线做。可以把 Phong 反射预先算在网格顶点上存成漫反射顶点色,也可以逐像素预算存成光照贴图,运行时把它投射到场景物体上(卷 II 12.5.3)。在资产调理阶段完成的这些计算统称静态光照,包括烘焙顶点光照、光照贴图和预计算辐射传输系数(通常用球谐函数表示)(卷 II 12.9.3,见 预计算辐射传输)。
  • 为什么不直接烘进漫反射贴图(卷 II 12.5.3):
    1. 漫反射纹理常在场景中平铺、重复使用,烘进去不现实;
    2. 通常每个光源生成一张光照贴图,只对相关几何应用相关的光照贴图;
    3. 光照贴图可以用与漫反射贴图不同(往往更低)的分辨率;
    4. "纯"光照贴图比混入漫反射色的版本压缩得更好。
  • 与本页 RTR4 的差异:GEA 描述的是"每个光源一张光照贴图"的组织方式;本页上文 RTR4 的光照贴图存的是预计算的辐照度或方向性光照(可以是所有光源的总和),重点在唯一参数化、打包与接缝。两者并不矛盾,但 GEA 的说法偏向早期、按光源拆分的做法,RTR4 未作此假设。
  • 光照探针:光照贴图只描述表面,描述不了物体之间的空间,所以只能用于地形、建筑等静态物体;动态物体若用另一套简化光照,会和背景明显不协调。光照探针在场景空间中按网格离线计算高质量光照,运行时动态物体查询最近的几个探针,以较低成本得到与静态几何一致的光照(卷 II 12.5.4)。
  • 探针的问题:结果有时不可信,例如物体接收到关着的门另一侧探针的光。要解决就得额外判断哪些探针从每个动态物体的视角"可见"。这对应本页上文的漏光问题;按可见性加权探针的做法也见 动态漫反射全局光照。
  • GEA 把光照贴图和 PRT 看作受辐射度方法启发的预计算光照(卷 II 12.6.1,见 渲染方程)。
  1. realtime_rendering_4ed.pdf 第 11 章 Global Illumination
  2. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.5.3–12.5.4、12.9.3 节

相关页面

图形学渲染方程Rendering Equation渲染方程 (Kajiya, 1986) 把"某点接收到的光就是其他点发出或反射的光"写成递归积分,概括了光从光源出发经任意次反弹到达眼睛的所有路径。反射方程是它的受限特例。离线用辐射度 (Radiosity) 或蒙特卡洛路径追踪求解;实时渲染则靠简化和预计算逼近它(RTR4 第 11 章)。图形学球面函数基Spherical Basis Functions要让环境光照超越常数项,需要表示"每个入射方向的辐亮度"这样的球面函数。把函数转成某种表示叫投影,从表示求值叫重建。本页对比表格形式、环境立方体、球面高斯、球谐函数,以及专门为半球设计的 AHD、Half-Life 2 基和 H-basis。图形学环境光遮蔽Ambient Occlusion环境光遮蔽 (AO) 是余弦加权后半球上未被遮挡的比例,用来在光照缺乏方向变化时仍给出形状线索(缝隙变暗)。它由 Landis 在 ILM 为《珍珠港》开发,可离线烘焙,也可在物体空间或屏幕空间动态计算(SSAO、HBAO、GTAO 等)。AO 适合漫反射和平滑环境光,不适合点光源或小面光源的可见性(RTR4 11.3 节)。图形学预计算辐射传输Precomputed Radiance Transfer预计算传输 (PRT) 假设几何不变、只有光照变化,预先计算"输入光照 → 场景辐射亮度分布"的传输函数,运行时注入直接光再应用传输。它依赖光传输的线性性:各"基础光源"的单位响应按当前强度加权求和即得完整反弹光照。变体包括 Sloan 的 SH 环境光 PRT、点光源簇 PRT,以及 Enlighten 一类的表面间传输(RTR4 11.5.3 节)。图形学动态漫反射全局光照Dynamic Diffuse Global Illumination烘焙动辄数小时,拖慢美术迭代,几何在运行时变化或由用户创建时甚至无法预计算。动态漫反射 GI 方法无需预处理或预处理快到每帧可做,主要有:基于虚拟点光源的反射阴影贴图 (RSM)、光传播体积 (LPV)、体素锥追踪 (VXGI) 以及屏幕空间补充(RTR4 11.5.5–11.5.9 节)。图形学法线贴图与凹凸贴图Normal & Bump Mapping凹凸贴图是一类在像素着色中修改着色法线来表现中尺度细节的技术:几何法线不变,只改变光照计算使用的法线,从而在不增加几何的情况下显得更立体。最常用的形式是切线空间法线贴图,需要每顶点的切线框架;法线贴图的过滤是难点。图形学纹理过滤与 MipmapTexture Filtering & Mipmap纹理在屏幕上被放大时需要插值,被缩小时一个像素覆盖许多纹素,必须预先滤波才能避免混叠。放大用最近邻、双线性或双三次;缩小的主流方案是 mipmap + 三线性插值,斜视角下用各向异性过滤减少过度模糊。注意:过滤纹理值只在输入与着色结果线性相关时等价于过滤最终颜色。图形学纹理压缩Texture Compression固定码率纹理压缩由 GPU 实时解码:减少显存占用、增大有效缓存、降低访问带宽,也能在同样内存下用更大纹理。BC (DXTC) 系列是桌面标准,ETC/EAC、PVRTC、ASTC 用于移动平台。它们都是有损的,压缩慢、解压快;法线贴图需要专门处理。图形学对象空间与纹理空间着色Object- & Texture-Space Shading对象空间/纹理空间着色把着色计算的频率与几何采样(光栅化)的频率解耦:在物体的参数化(纹理图表)上计算着色并存入纹理,最终光栅化时只查表。思想源自 Pixar 的 Reyes 离线渲染器的微多边形着色。它能消除 quad 过度着色、按屏幕覆盖率控制着色量、在帧间复用着色结果,甚至让着色以低于光栅化的帧率异步运行;代价是物体必须有唯一的 uv 图表、先着色后遮挡带来浪费等。游戏开发 · UE5Lumen 全局光照与反射Lumen Global Illumination & ReflectionsLumen 是 UE5 默认的全动态全局光照 (Global Illumination, GI) 与反射系统:先做屏幕空间追踪,未命中再对"Lumen 场景"做软件光追(有符号距离场)或硬件光追,命中点的光照从按网格离线放置的卡片 (Card) 构成的表面缓存 (Surface Cache) 中查询,表面缓存的直接与间接光照分摊到多帧更新,从而得到无限次漫反射弹射和全粗糙度范围的反射。图形学局部反射探针Localized Reflection Probes镜面全局光照需要高角分辨率但只关心反射方向附近的小立体角。实时中最流行的方案是在场景中稀疏放置局部环境贴图(反射探针),配合反射代理体做视差校正;它实现简单、快、美术可控,但有拉伸和漏光问题。另有体素锥追踪和平面反射等替代方案(RTR4 11.6–11.6.4 节)。游戏开发 · UE5光源类型与静态光照Light Types & Static LightingUE 有五种光源:定向光、天空光、点光、聚光和矩形光。每个光源有三种移动性 (Mobility):静态 (Static) 只烘焙进光照贴图;固定 (Stationary) 烘焙间接光,同时能为可移动物体投射动态阴影,但一个物体最多受 4 个固定光源影响;可移动 (Movable) 完全动态。烘焙由 Lightmass(CPU 版或基于 DXR 的 GPU 版)完成,Lightmass 重要性体积用来把光子集中到可玩区域。游戏开发资产管线与工具链Asset Conditioning Pipeline & Tools游戏引擎的输入数据来自美术使用的数字内容创作 (DCC) 工具,但 DCC 格式几乎从不直接用于游戏,必须经过资产调理管线 (Asset Conditioning Pipeline, ACP) 导出、处理并按平台打包。围绕它还有世界编辑器、记录资产元数据的资源数据库,以及几种工具架构(独立工具、与引擎共享底层、编辑器内嵌于引擎、Web 界面),各有取舍。游戏开发游戏世界与游戏对象Game World & Game Objects游戏由玩法 (gameplay) 而不是技术定义;游戏机制 (game mechanics) 是支配游戏中各实体交互的规则,以及目标、成败标准、玩家能力、非玩家实体和整体流程(GEA 引用的论文称实现玩法的软件系统为游戏的 G 因子)。大多数游戏世界由静态元素和动态元素组成,划分为若干世界块,并由高层游戏流程组织玩家目标;动态元素通常实现为游戏对象 (GO),引擎提供的建模设施称为游戏对象模型,且分为工具侧和运行时两套(GEA4 卷 II 16、16.1–16.2)。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原