PBR 光源模型:点光源与面积光
March 24, 2026About 2 min
PBR 光源模型:点光源与面积光
现实里没有真正的「点」光源,所有光都有形状——灯泡、灯管、窗户。点光源(punctual light)对图形学很友好,一个位置加一个强度就完事,但它并不真实,也拟合不了现实光照。这篇讲两类光源在 PBR 里怎么建模:点光源的衰减处理,以及面积光的几种主流近似。
点光源:给平方衰减加个窗
真实光照强度按距离平方衰减:
问题是这个函数永远到不了 0。渲染时我们负担不起「每个光源影响全场」的开销,需要一个明确的作用半径,超出就不算。
常见做法是给衰减函数加窗(windowed falloff):让美术指定一个半径 r,光强在 r 处平滑归零,而大部分区间的形状保持不变。UE4 用的窗函数是:
分子那个 d < r 时接近 1、几乎不改变原始衰减,逼近 r 时快速拉到 0,且一阶导也连续(不会在边界出现硬切的亮度突变)。分母用 d² + 1 而不是纯 d²,是为了避免距离趋近 0 时强度爆炸。加窗之后既保住了物理感,又给了引擎一个可裁剪的有限影响范围。
面积光:难点在于任意 BRDF
到了 PBR,面积光是让材质「看起来可信」的关键一环——高光会拉成光源的形状,而不是一个假的圆点。麻烦在于:用任意 BRDF 去积分一个面积光,非常难算。业界有几条路子,各有局限:
- 解析解:对球形、四边形光源用 Lambert BRDF 求解析解。缺点是光源不能带纹理,BRDF 也被限死在 Lambert。
- 重要性采样(GPU Pro 5《Physically Based Area Lights》):能配任意 BRDF,但精度不够,噪声和偏差是问题。
- LTC(Linearly Transformed Cosines,线性变换余弦):对多边形、圆盘、球形、线光源做近似,支持光源带纹理,甚至有配合实时光追 + 降噪做软阴影的方案。
LTC 是目前面积光实时渲染里效果最好的一档。它的思路是:把复杂的 BRDF 形状用一个可积分的余弦分布经过线性变换来近似,从而把面积光积分变成有闭式解的形式,实时可算。
延伸阅读
- LTC 原理与推导:Real-Time Polygonal-Light Shading with Linearly Transformed Cosines(Heitz et al.)
- 面积光重要性采样:GPU Pro 5, Chapter Physically Based Area Lights
材质侧的 BRDF 模型见 Disney BRDF 材质模型;经验光照模型见 光照模型 Lighting Model。