Games101 Ray Tracing 3 辐射度量学 与 BRDF(双向反射分布函数)

图形学中使用辐射度量学(Radiometry),主要是为了更符合物理规律地描述光线和光照

1. 传统光线追踪的局限性

Whitted-style 光线追踪支持漫反射、镜面反射、折射。

  • 基本流程:寻找最近的点 -> 计算阴影 -> 处理反射/折射 -> 颜色混合(三者权重叠加)。
  • 主要缺点
    1. 把所有光源当为点光源,只能生成硬阴影(Hard Shadows)。
    2. 缺乏全局光照(Global Illumination),例如红墙边的白球是不会反射出红色的(Color Bleeding 现象)。
    3. 只能支持完美的镜面反射/折射(Glossy 材质),对于磨砂质感无法模拟。

:Blinn-Phong 模型是一个经验模型,基于这种模型的 Whitted-style 本质上也是不准确的。


2. 前置知识:立体角与辐射度量学

2.1 球面与立体角微元

对于球面,设竖直偏角为 \(\theta\),水平偏角为 \(\varphi\)

image

  • 面积微分:弧长 = \(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\) 是为了转化成垂直于光照方向的有效面积)

image

对于每一个面积微元 \(dA\),设半球空间为 \(H^2\)

\[dE(p,\omega_i) = L(p,\omega_i) \cdot \cos\theta \cdot d\omega \]

对两边在半球空间积分,得到 Irradiance:

\[E(p) = \int_{H^2} L(p,\omega_i) \cdot \cos\theta \, d\omega \]


3. 正式内容:BRDF 与渲染方程

3.1 BRDF(双向反射分布函数)

首先理解一下 BRDF 是怎么理解光线的:每一个微分面积元在接收到一定方向的光照 \(dE(\omega_i)\) 后,会将其发射到不同的角度 \(dL(\omega_r)\)

核心理解:入射的光线和反射的光线本质相同,在这里光线不是单独存在的,是递归存在的。就像自然界的光一样,每一束光(除了发光物体)都是经过反射得到的。

BRDF 描述的就是光线从不同方向入射之后,向不同方向反射的比例情况,表示为出射 Radiance 与入射 Irradiance 的比值

image

\[f_r(\omega_i \to \omega_r) = \frac{dL(p,\omega_r)}{dE(p,\omega_i)} = \frac{dL(p,\omega_r)}{L(p,\omega_i)\cos\theta \, d\omega} \]

那么出射射线可表示为(将上式变形并积分):

\[L(p,\omega_r) = \int_{H^2} L(p,\omega_i) \, f_r(\omega_i \to \omega_r) \cos\theta \, d\omega \]

物理意义:入射光线(Radiance)在经过 BRDF 处理后,在半球空间(单位面积上)的积分。

3.2 Rendering Equation(渲染/绘制方程)

但是只有反射是没有光的,还要加上物体自身的自发光。在出射光线上加上物体的自发光 \(L_e\)\(n \cdot \omega_i\) 为法向量与入射方向的点乘,即 \(\cos\theta\)):

\[L(p,\omega_r) = L_e(p,\omega_r) + \int_{\Omega^+} L(p,\omega_i) \, f_r(p,\omega_i,\omega_r) \, (n \cdot \omega_i) \, d\omega_i \]

公式理解:在面自身发光的基础上,加上其他所有到达这个单位面积的光线的和,最后进行出射。在这里,将所有光源都泛化视为面光源。

3.3 渲染方程的算子化简与物理意义

将方程进行算子化简:

\[l(u) = e(u) + \int l(v) K(u,v) dv \]

这里把对入射光线的一部分操作(取 \(\cos\theta\) 并乘 BRDF 进行积分)抽象化简为算子 \(K(u,v)\) 的表达。

进一步化简,把对入射光线的所有操作都合并为运算符 \(K\)

\[L = E + KL \]

根据前面我们对 BRDF 的理解,入射光线和出射光线本质上是同一种东西,所以可以将 \(L\) 提取出来:

\[L - KL = E \implies (I - K)L = E \]

\[L = (I - K)^{-1} E \]

对上式进行泰勒展开/二项式展开:

\[L = E + KE + K^2E + K^3E + \dots \]

最终式的物理理解
我们得到的最终出射光线 \(L\),都来源于光源 \(E\) 的综合。这些光在经过直接照射(\(E\))或多次反射(\(K^nE\))后汇聚到了出射光线上。

  • \(E\):光源直接发光
  • \(KE\):直接光照(光栅化也就是做到了 \(E + KE\)
  • \(K^2E\):一次间接光照(弹射一次)
  • \(K^3E\):二次间接光照
  • ...

弹射/处理的次数越多(加越多次),画面越接近真实,最终能量会收敛到一个固定值。这也解释了闫令琪老师最初说的“越亮越牛逼”(因为计算了更多的全局光照能量,弥补了传统光栅化丢失的间接光)。


附注:关于推导中泰勒展开部分的解释

在代数中,当 \(x \in (-1, 1)\) 时,有一个经典的泰勒展开(等比数列求和公式的逆向):

\[\frac{1}{1-x} = 1 + x + x^2 + x^3 + \dots \]

在矩阵或算子空间中,单位矩阵为 \(I\)。所以 \((I - K)^{-1}\) 就可以类比展开为:

\[(I - K)^{-1} = I + K + K^2 + K^3 + \dots \]

将其代入 \(L = (I - K)^{-1} E\),就得到了 \(L = (I + K + K^2 + K^3 + \dots)E = E + KE + K^2E + \dots\)

posted @ 2026-03-16 22:33  石磨豆浆  阅读(74)  评论(0)    收藏  举报