Skip to content

光线追踪(辐射度量学、渲染方程与全局光照)

前两章解决了光线追踪的两个基础问题:如何让一条光线找到最近交点,以及如何用加速结构减少不必要的求交。到这里,我们已经知道“相机看见了哪个表面点”。

接下来的问题是:这个表面点沿相机方向应该发出多少光?

在早期着色章节中,我们用环境光、漫反射和高光近似表面颜色。那套模型适合建立直觉,但如果要理解路径追踪、全局光照、PBR 和渲染方程,就需要把“颜色”换成更精确的物理量:光能如何从一个方向进入表面,又如何被表面分配到另一个方向。


辐射度量学 (Radiometry) 是描述光能传播的度量体系。它不关心人眼感知的明亮程度,而是用物理量描述电磁辐射能量如何在空间、面积和方向中分布。

在渲染中,我们需要它回答几类问题:

  • 光源总共发出多少能量?
  • 某个表面单位面积接收多少光?
  • 从某个方向看过去,单位面积、单位立体角中有多少光?
  • 表面如何把入射光反射到出射方向?

如果只说“这个点很亮”,信息是不够的。我们需要知道亮度来自哪个方向、覆盖多大面积、被什么材质反射、最终朝哪个方向离开。


本章只需要先掌握三个最重要的量。

辐射通量 (Radiant Flux) 表示单位时间内传输的总能量,记作 Φ\Phi,单位是瓦特 (W):

Φ=dQdt\Phi = \frac{dQ}{dt}

可以把它理解成“光源总功率”。例如一个点光源发出的总光能越多,辐射通量越大。

辐照度 (Irradiance) 表示单位面积接收到的辐射通量,记作 EE

E=dΦdAE = \frac{d\Phi}{dA}

它描述“这个表面点接收到了多少光”。同一束光斜着照到表面时,会被摊到更大的面积上,所以有效辐照度会乘上余弦项:

Ecosθ=nωiE \propto \cos\theta = n \cdot \omega_i

这正是 Lambert 漫反射中 max(nl,0)\max(n \cdot l, 0) 的物理来源。

辐亮度 (Radiance) 记作 LL,描述单位投影面积、单位立体角中的辐射通量:

L=d2ΦdAdωL = \frac{d^2\Phi}{dA^\perp d\omega}

它是渲染中最核心的量。相机像素最终看到的,概念上就是沿某条光线到达相机的辐亮度。


在二维平面里,角度衡量一段圆弧占整个圆的比例;在三维空间里,立体角 (Solid Angle) 衡量一块方向区域占单位球面的比例,记作 ω\omega,单位是球面度 (sr)。

如果从某个表面点看向一个面光源,光源越大、越近,它占据的方向范围越大,立体角也越大。渲染方程中的积分不是在普通面积上积分,而是在表面点上方半球的所有入射方向上积分:

Ω\int_{\Omega}

这里 Ω\Omega 通常表示以表面法线为中心的上半球。每个方向 ωi\omega_i 都可能带来入射辐亮度 LiL_i


BRDF (Bidirectional Reflectance Distribution Function,双向反射分布函数) 描述表面如何把来自入射方向 ωi\omega_i 的光反射到出射方向 ωo\omega_o

它通常记作:

fr(x,ωi,ωo)f_r(x, \omega_i, \omega_o)

其中:

  • xx 是表面点。
  • ωi\omega_i 是入射方向。
  • ωo\omega_o 是出射方向,也就是朝向相机或下一条光线的方向。
  • frf_r 的值描述从 ωi\omega_iωo\omega_o 的反射比例和方向分布。

不同材质的 BRDF 形状不同。理想漫反射会把光均匀散射到半球;镜面材质会把光集中反射到一个方向附近;粗糙金属会形成较宽的高光瓣。

理想 Lambert 漫反射的 BRDF 是常数:

fr=ρπf_r = \frac{\rho}{\pi}

其中 ρ\rho 是反照率 (Albedo)。除以 π\pi 是为了保证能量守恒:表面不能反射出比入射更多的能量。


有了辐亮度、入射方向、BRDF 和余弦项,就可以写出经典的渲染方程 (Rendering Equation)

Lo(x,ωo)=Le(x,ωo)+Ωfr(x,ωi,ωo)Li(x,ωi)(nωi)dωiL_o(x, \omega_o) = L_e(x, \omega_o) + \int_{\Omega} f_r(x, \omega_i, \omega_o) L_i(x, \omega_i) (n \cdot \omega_i) d\omega_i

逐项理解:

  • Lo(x,ωo)L_o(x, \omega_o):从表面点 xx 沿方向 ωo\omega_o 离开的辐亮度。
  • Le(x,ωo)L_e(x, \omega_o):表面自己发出的光,例如灯管或发光材质。
  • Li(x,ωi)L_i(x, \omega_i):从方向 ωi\omega_i 到达表面点的入射辐亮度。
  • fr(x,ωi,ωo)f_r(x, \omega_i, \omega_o):表面把入射光反射到出射方向的规则。
  • (nωi)(n \cdot \omega_i):入射方向与表面法线的余弦项。
  • Ω\int_{\Omega}:对上半球所有入射方向求和。

辐射度量学与渲染方程关系图

这条公式的重点不是复杂符号,而是一个朴素问题:从所有方向来的光,经过材质反射后,有多少会朝相机方向离开?

半球上的橙色线表示来自不同方向的入射光。漫反射率控制整体反射能量;粗糙度越低,高光瓣越窄;开启间接光后,弱的蓝色方向会模拟来自环境反弹的入射辐亮度。

上面的组件把半球积分画成可视化直觉。橙色方向表示直接入射光,蓝色虚线表示环境反弹来的间接光,紫色区域表示 BRDF 把光分配到不同出射方向的趋势。


之前的 Blinn-Phong 或 Lambert 模型可以看作渲染方程的简化版本。它们通常只考虑少数几个显式光源,而不是半球上所有方向的入射光。

对于一个方向光,漫反射项可以写成:

LofrLimax(nωi,0)L_o \approx f_r L_i \max(n \cdot \omega_i, 0)

如果使用 Lambert BRDF:

LoρπLimax(nωi,0)L_o \approx \frac{\rho}{\pi} L_i \max(n \cdot \omega_i, 0)

工程中的局部光照模型会继续加入高光项、环境光近似、距离衰减和阴影测试。它们实用且快速,但本质上都在绕开完整半球积分。


全局光照:入射光也来自其它表面

Section titled “全局光照:入射光也来自其它表面”

渲染方程真正有趣的地方在于 Li(x,ωi)L_i(x,\omega_i)。从某个方向来的入射光,可能直接来自光源,也可能是其它表面反射之后再到达当前点。

这意味着渲染方程是递归的:

  1. 当前点需要知道某个方向的入射辐亮度。
  2. 沿该方向反向追踪,会命中另一个表面点。
  3. 那个表面点的出射辐亮度,又由它自己的入射方向积分决定。
  4. 光可以在场景中多次反弹,形成间接照明。

这就是全局光照 (Global Illumination) 的核心。它解释了许多局部光照难以表达的现象:

  • 白墙附近的物体会被墙面反弹光照亮。
  • 红色地毯会把红色间接光染到附近物体上。
  • 阴影区域并不总是纯黑,因为它还能接收其它表面的反射光。
  • 光在狭窄空间中多次反弹,会产生更复杂的明暗层次。

渲染方程包含一个半球积分。对真实场景来说,这个积分通常没有简单解析解,因此需要数值方法。路径追踪 (Path Tracing) 的基本思想是:不枚举半球上的所有方向,而是随机选择一些方向采样,用统计平均近似积分。

概念上可以写成:

Lo1Nk=1NfrLi(nωk)p(ωk)L_o \approx \frac{1}{N}\sum_{k=1}^{N} \frac{f_r L_i (n \cdot \omega_k)}{p(\omega_k)}

其中 p(ωk)p(\omega_k) 是采样方向的概率密度。这个公式会在下一章详细展开。本章只需要先记住:

  • 渲染方程告诉我们要算什么。
  • 路径追踪告诉我们如何用随机采样近似它。
  • 采样越少,噪声越明显;采样越多,结果越稳定,但成本越高。

物理材质不能凭空制造能量。除非表面本身发光,否则反射出去的能量不应超过接收到的能量。这就是能量守恒 (Energy Conservation)

对 BRDF 来说,一个重要约束是:

Ωfr(x,ωi,ωo)(nωo)dωo1\int_{\Omega} f_r(x,\omega_i,\omega_o)(n \cdot \omega_o)d\omega_o \le 1

直觉上,这表示固定一个入射方向后,把所有出射方向的反射贡献加起来,不能超过入射能量。

PBR 材质系统中的许多限制都来自这个思想。例如金属和非金属的反射行为不同,粗糙度会改变高光分布但不应该凭空增加总能量,漫反射和镜面反射也不能简单无限相加。


本章把光线追踪从“可见性查询”推进到“物理光照计算”。

  1. 辐射度量学用物理量描述光能传播;渲染中最重要的量是辐亮度 LL
  2. 辐射通量表示总能量流,辐照度表示单位面积接收多少光,辐亮度表示沿某个方向看到多少光。
  3. 立体角让我们能在方向空间上积分;表面上方半球 Ω\Omega 包含所有可能入射方向。
  4. BRDF 描述材质如何把入射光分配到出射方向,Lambert 漫反射 BRDF 为 ρ/π\rho / \pi
  5. 渲染方程把发光项、入射辐亮度、BRDF、余弦项和半球积分统一起来。
  6. 全局光照来自渲染方程的递归性:入射光可能是其它表面反射来的出射光。
  7. 路径追踪会用随机采样近似渲染方程中的积分,采样数量决定噪声与成本。

下一章会继续展开路径追踪:如何用蒙特卡洛积分估计渲染方程,以及为什么重要性采样能显著降低噪声。