Games101 Ray Tracing 3 辐射度量学 与 BRDF(双向反射分布函数)
图形学中使用辐射度量学(Radiometry),主要是为了更符合物理规律地描述光线和光照。
1. 传统光线追踪的局限性
Whitted-style 光线追踪支持漫反射、镜面反射、折射。
- 基本流程:寻找最近的点 -> 计算阴影 -> 处理反射/折射 -> 颜色混合(三者权重叠加)。
- 主要缺点:
- 把所有光源当为点光源,只能生成硬阴影(Hard Shadows)。
- 缺乏全局光照(Global Illumination),例如红墙边的白球是不会反射出红色的(Color Bleeding 现象)。
- 只能支持完美的镜面反射/折射(Glossy 材质),对于磨砂质感无法模拟。
注:Blinn-Phong 模型是一个经验模型,基于这种模型的 Whitted-style 本质上也是不准确的。
2. 前置知识:立体角与辐射度量学
2.1 球面与立体角微元
对于球面,设竖直偏角为 \(\theta\),水平偏角为 \(\varphi\)。

- 面积微分:弧长 = \(r \times \text{角度}\)。图中红线为 \(r \, d\theta\),蓝线为 \(r \sin\theta\),绿线为 \(r \sin\theta \, d\varphi\)。\[dA = (r \, d\theta) \cdot (r \sin\theta \, d\varphi) = r^2 \sin\theta \, d\theta \, d\varphi \]
- 单位立体角微分:面积 = 立体角 \(\times\) \(r^2\)。\[d\omega = \frac{dA}{r^2} = \sin\theta \, d\theta \, d\varphi \]
2.2 辐射度量学核心物理量
- Radiant Energy (辐射能量 \(Q\) 或 \(J\)):单位为焦耳(J)。
- Radiant Flux (辐射通量 \(\Phi\)):单位时间内的能量(功率),单位 W 或 lm。
- Radiant Intensity (辐射强度 \(I\)):单位立体角的能量,单位 W/sr 或 lm/sr。
- Irradiance (辐照度 \(E\)):单位面积的能量,单位 W/m² 或 lm/m²。
- Radiance (辐射率 \(L\)):单位立体角、单位投影面积的能量,单位 W/(m²·sr) 或 lm/(m²·sr)。
2.3 Radiance 和 Irradiance 的关系
- Irradiance (单位面积的能量功率):\(E = \frac{d\Phi}{dA}\)
- Radiance (单位面积单位立体角的能量功率):\(L = \frac{d^2\Phi}{dA \, d\omega \cos\theta}\)
(分母中的 \(\cos\theta\) 是为了转化成垂直于光照方向的有效面积)

对于每一个面积微元 \(dA\),设半球空间为 \(H^2\):
对两边在半球空间积分,得到 Irradiance:
3. 正式内容:BRDF 与渲染方程
3.1 BRDF(双向反射分布函数)
首先理解一下 BRDF 是怎么理解光线的:每一个微分面积元在接收到一定方向的光照 \(dE(\omega_i)\) 后,会将其发射到不同的角度 \(dL(\omega_r)\)。
核心理解:入射的光线和反射的光线本质相同,在这里光线不是单独存在的,是递归存在的。就像自然界的光一样,每一束光(除了发光物体)都是经过反射得到的。
BRDF 描述的就是光线从不同方向入射之后,向不同方向反射的比例情况,表示为出射 Radiance 与入射 Irradiance 的比值:

那么出射射线可表示为(将上式变形并积分):
物理意义:入射光线(Radiance)在经过 BRDF 处理后,在半球空间(单位面积上)的积分。
3.2 Rendering Equation(渲染/绘制方程)
但是只有反射是没有光的,还要加上物体自身的自发光。在出射光线上加上物体的自发光 \(L_e\)(\(n \cdot \omega_i\) 为法向量与入射方向的点乘,即 \(\cos\theta\)):
公式理解:在面自身发光的基础上,加上其他所有到达这个单位面积的光线的和,最后进行出射。在这里,将所有光源都泛化视为面光源。
3.3 渲染方程的算子化简与物理意义
将方程进行算子化简:
这里把对入射光线的一部分操作(取 \(\cos\theta\) 并乘 BRDF 进行积分)抽象化简为算子 \(K(u,v)\) 的表达。
进一步化简,把对入射光线的所有操作都合并为运算符 \(K\):
根据前面我们对 BRDF 的理解,入射光线和出射光线本质上是同一种东西,所以可以将 \(L\) 提取出来:
对上式进行泰勒展开/二项式展开:
最终式的物理理解:
我们得到的最终出射光线 \(L\),都来源于光源 \(E\) 的综合。这些光在经过直接照射(\(E\))或多次反射(\(K^nE\))后汇聚到了出射光线上。
- \(E\):光源直接发光
- \(KE\):直接光照(光栅化也就是做到了 \(E + KE\))
- \(K^2E\):一次间接光照(弹射一次)
- \(K^3E\):二次间接光照
- ...
弹射/处理的次数越多(加越多次),画面越接近真实,最终能量会收敛到一个固定值。这也解释了闫令琪老师最初说的“越亮越牛逼”(因为计算了更多的全局光照能量,弥补了传统光栅化丢失的间接光)。
附注:关于推导中泰勒展开部分的解释
在代数中,当 \(x \in (-1, 1)\) 时,有一个经典的泰勒展开(等比数列求和公式的逆向):
在矩阵或算子空间中,单位矩阵为 \(I\)。所以 \((I - K)^{-1}\) 就可以类比展开为:
将其代入 \(L = (I - K)^{-1} E\),就得到了 \(L = (I + K + K^2 + K^3 + \dots)E = E + KE + K^2E + \dots\)

浙公网安备 33010602011771号