概念页
预计算辐射传输
Precomputed Radiance Transfer
预计算传输 (PRT) 假设几何不变、只有光照变化,预先计算"输入光照 → 场景辐射亮度分布"的传输函数,运行时注入直接光再应用传输。它依赖光传输的线性性:各"基础光源"的单位响应按当前强度加权求和即得完整反弹光照。变体包括 Sloan 的 SH 环境光 PRT、点光源簇 PRT,以及 Enlighten 一类的表面间传输(RTR4 11.5.3 节)。
基本思想
预计算光照很美但完全静态:拉开窗帘(局部几何变化)可能照亮整个房间(全局光照变化)。PRT 只允许光照变化,可预先分析相互反射、次表面散射等物体间效应而不涉及实际辐射亮度值。相比完全烘焙,它有明显运行时开销。
书中例子:房间里三台只能显示单色、亮度可变的显示器。分别预计算每台以单位亮度点亮时整个房间(直接+间接)的光照;因光传输线性,最终光照为
是第 个屏幕的单位贡献, 为当前亮度(或颜色)。这定义了一个向量空间, 是基向量;开关、调亮度、换颜色都只需乘加。
Sloan 等的原始 PRT
- 光源是无限远环境光,用 SH 基函数作为"单位光照"。运行时把环境光投影到 SH,系数乘对应单位响应再相加。
- 注入光照用的基与存储结果用的基可以不同,例如用 SH 描述输入、用环境立方体存储各方向接收量。
- 两种情况:
- 接收端是标量辐照度:要求表面完全漫反射且法线固定(不能用法线贴图),传输是输入 SH 向量与空间变化的传输向量的点积。
- 接收端是入射辐射亮度的 SH:可与任意 BRDF 卷积、支持法线贴图,传输是 SH→SH 的矩阵乘。三阶 SH 每点需 9×9 矩阵,彩色要三个,内存惊人。
- 次年 Sloan 等用主成分分析 (PCA) 压缩:传输系数在高维空间中聚集在低维子空间(类比沿直线分布的三维点只需存沿线距离),把 25×25 矩阵从 625 维降到 256 维;降维有损,于是先聚类再分别做 PCA(聚类 PCA),并优化簇边界避免不连续。LDPRT 允许有限变形。
游戏中的 PRT
在昼夜和天气动态变化的户外游戏中尤其流行:
- 《孤岛惊魂 3/4》:源基为二阶 SH,接收基为自定义四方向基。
- 《刺客信条 4》:源只有一个基函数(太阳颜色),但为一天中不同时刻预计算传输——相当于源基定义在时间维而非方向维;接收基同《孤岛惊魂》。
- Kristensen 等:为散布在场景中的大量点光源预计算 PRT,光源聚类、接收几何分区(每区受不同子集影响)以压缩;运行时任意位置的光由最近的预计算光插值。《孤岛惊魂 3》用它生成间接光。基本形式只支持点光源,扩展到其他类型时成本随光源自由度呈指数增长。
表面间传输与 Enlighten
- 另一大类预计算的是表面之间的传输,输入是一组表面的出射辐射亮度(或辐照度),因此光源类型无关紧要:直接光可来自阴影、辐照度环境贴图或 AO/方向遮蔽,任何表面设定出射亮度即成面光源。
- Enlighten (Geomerics) 是最流行的此类系统(细节未完全公开)。只在光传输时假设场景为朗伯,处理的光路为
LD*(D|S)E,最后一个表面不必是漫反射。 - 预处理计算"源元素"到"接收元素"的传输。最简单时源是点、接收辐照度,传输系数就是互相可见性;运行时给出各源的出射亮度,用预计算可见性和位置朝向数值积分反射方程,完成一次反弹。大部分间接光来自第一次反弹,已足够可信;再把结果作为输入运行一次得到第二次反弹,通常分摊在多帧中进行(上一帧输出作为下一帧输入)。
- 点源连接太多,可把法线和颜色相近的点聚成簇,此时传输系数就是辐射度中的形状因子。它不同于经典辐射度:每次只算一次反弹、不解线性方程组,借鉴渐进辐射度的收集 (gathering) 思想。
- 接收端可用任意方向基收集,结果可配合法线贴图或提供低光泽镜面。
- 变体:Sugden 与 Iwanicki 量化 SH 传输系数并以调色板索引存储;Jendersie 等建源面片层次,子节点立体角过小时引用上层;Stefanov 先把表面辐射亮度传到体素化场景,再以体素为源。
- 理想的源面片划分取决于接收位置。Silvennoinen 与 Lehtinen 不显式创建源面片:在场景中稀疏放置环境贴图,投影到 SH 后"虚拟地"投回环境,接收点记录对每个 SH 基函数投影的可见量,于是每个接收点都有自己的一组源,远处表面自然合并;接收点偏好近处探针,数据用聚类 PCA 压缩。
- Lehtinen 等:源和接收都是体积的,可在任意三维点查询,便于静态/动态一致,但计算昂贵。Loos 等:在模块化单元格内对不同侧墙配置预计算传输,拼接并扭曲单元近似场景,先传到单元边界再传给邻居;快到能在移动平台运行,但质量可能不够。
GEA 的视角:PRT(卷 II 12.5.11、12.6.1)
- 动机:想在逐像素光照里用更高级的 BRDF,但它们大多运行时太贵,或者需要光栅化引擎在不做光线追踪时拿不到的信息。PRT 的思路是离线算好所需 BRDF 的结果,存成光栅化时能用的格式(卷 II 12.5.11)。
- 一般的 BRDF 是定义在半球上的复杂函数,需要紧凑表示。常见做法是把出射亮度存成入射照度的线性组合,用球谐函数或小波序列等高效格式编码,相当于把标量函数 表示成平移缩放的正弦波组合的三维版本。细节 GEA 留给参考文献,并提到 DirectX SDK 里有 PRT 示例程序。
- GEA 把 PRT 归为受辐射度方法启发的混合方案:离线在场景离散点上计算光照,运行时使用预计算的辐射信息(卷 II 12.6.1,见 渲染方程)。
- 与本页的差异:GEA 把 PRT 说成"预计算 BRDF 的结果";本页 RTR4 的表述是预计算传输(物体对入射光的遮挡、相互反射等,即"入射光照 → 出射亮度"的线性映射)。GEA 的说法过于简化,PRT 预计算的重点是传输函数而不只是 BRDF。
出处
- realtime_rendering_4ed.pdf 第 11 章 Global Illumination
- Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
- Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.5.11、12.6.1 节
相关页面
图形学渲染方程Rendering Equation渲染方程 (Kajiya, 1986) 把"某点接收到的光就是其他点发出或反射的光"写成递归积分,概括了光从光源出发经任意次反弹到达眼睛的所有路径。反射方程是它的受限特例。离线用辐射度 (Radiosity) 或蒙特卡洛路径追踪求解;实时渲染则靠简化和预计算逼近它(RTR4 第 11 章)。图形学球面函数基Spherical Basis Functions要让环境光照超越常数项,需要表示"每个入射方向的辐亮度"这样的球面函数。把函数转成某种表示叫投影,从表示求值叫重建。本页对比表格形式、环境立方体、球面高斯、球谐函数,以及专门为半球设计的 AHD、Half-Life 2 基和 H-basis。图形学预计算光照与光照贴图Precomputed Lighting & Light Maps烘焙 (baking) 是把辐射度或路径追踪等离线 GI 结果预先算好存起来,运行时直接查询。静态几何参与预计算并完整交互,动态物体只作接收者。数据可以是辐照度,也可以带方向(SH、H 基、AHD、球面高斯、环境立方体等),存储在光照贴图、顶点或体积/探针中,各有接缝、漏光、内存等取舍(RTR4 11.5.1、11.5.2、11.5.4 节)。图形学方向遮蔽Directional Occlusion方向遮蔽用比单个 AO 标量更有表现力的方式记录"哪些方向被挡住",例如地平线角、可见性锥(环境孔径)、球面有向距离或球谐。它主要用于面光源和环境光照的软遮蔽,以及凹凸细节自阴影、超大地形等阴影贴图分辨率不够的场合;对点光源,专门的阴影技术质量更好(RTR4 11.4 节)。图形学动态漫反射全局光照Dynamic Diffuse Global Illumination烘焙动辄数小时,拖慢美术迭代,几何在运行时变化或由用户创建时甚至无法预计算。动态漫反射 GI 方法无需预处理或预处理快到每帧可做,主要有:基于虚拟点光源的反射阴影贴图 (RSM)、光传播体积 (LPV)、体素锥追踪 (VXGI) 以及屏幕空间补充(RTR4 11.5.5–11.5.9 节)。图形学图形栈与渲染引擎架构Graphics Stack & Rendering Engine Architecture渲染引擎要解决的"渲染问题"是:给定由场景元素、虚拟光源和虚拟相机组成的虚拟世界,生成相机看到的二维彩色图像。GEA 把它拆成可见性问题和光照问题,按解法把引擎分为光线追踪、深度缓冲光栅化、辐射度和混合四类;光栅化引擎通常采用立即模式的两层结构:下层是图形管线,上层是负责剔除、提交几何和设置着色器参数的应用层。本页讲这套整体架构,管线内部见 渲染管线。