Rendering Lecture 6:The Rendering Equation

Course: 渲染基础 Rendering Basics Date: November 29, 2025 11:07 AM (GMT+8)

✨ Rendering Lecture 6:The Rendering Equation


🏛 1. 光传输的整体直觉

一个完整的光照过程包含:

  • 光源发射光子
  • 光子击中表面
  • 表面根据材质反射、散射
  • 光子多次反弹在场景内部传播
  • 最终有部分光子到达相机

光在场景中不断被反射、吸收、衰减,因此我们需要一种方法去 模拟无穷多的反弹路径

有三种方式描述这件事:

  1. 🌞 从光源发射光子(Forward / Photon-based view)
  2. 📷 从相机追踪路径(Backward / Camera-based view)
  3. 🔁 递归积分(Recursive Radiance Equation)
  4. 🔄 算子形式(Operator Form)
  5. 🔗 路径积分(Path Integral Form)

这些都是同一件事的不同视角。


🌈 2. 从光源视角:光子在场景中的传播

光子路径的示意:

  1. 光源 → 某表面
  2. 表面 → 另一个表面
  3. 光经过无数次反射
  4. 最后抵达相机像素

每一次反射会产生:

  • ✂️ 光能损失(吸收、散射)
  • 🎨 材质过滤(BRDF)
  • 🔻 衰减因子相乘(cosine、距离平方等)

“沿光前进”模拟称为 Photon Mapping、Radiosity 等等。


📷 3. 从相机视角:Importance(重要性)追踪

相机也可以“发出”重要性,逆向模拟光线:

  1. 相机发出一条射线
  2. 击中场景一点 X
  3. 以 X 为中心对半球积分
  4. 找到所有能够影响该点的光
  5. 累积所有光线贡献
  6. 路径最终抵达光源才会产生亮度贡献

这里的重要性会随着反弹衰减,与光线传播是对偶关系(adjoint)。

这两种方向(光前进 vs 重要性后退)是完全对称的。


⚡ 4. Radiance(辐射亮度)的基本概念

Radiance 是 Rendering Equation 的核心物理量。

在某个点 x 朝某方向 v 的出射亮度:

L(xv) L(x \rightarrow v)

由两种成分组成:

  1. 自发光(光源的直接贡献)
  2. 反射光(来自其他方向的光)

反射光由材料 BRDF × 入射光 × cosθ 积分得到。


🎯 5. Rendering Equation 的基本形式(半球积分)

某点 x 朝方向 v 的出射亮度:

Lo(x,v)=Le(x,v)+hemispherefs(x,v,ω)Li(x,ω)(nω)dω L_o(x, v) = L_e(x, v) + \int_{\text{hemisphere}} f_s(x, v, \omega)\,L_i(x, \omega)\,(n \cdot \omega)\,d\omega

包含:

  • L_e:该点朝方向 v 的自发光
  • f_s:BRDF
  • L_i:入射光
  • (n·ω):余弦项
  • :从半球取样

这部分是最常见、最直觉的形式。


🔁 6. 引入递归:入射光其实是别处的出射光

入射光来自另一个点 x₂:

Li(x,ω)=Lo(x2,ω) L_i(x, \omega) = L_o(x_2, -\omega)

因此 Rendering Equation 是 递归的

  • 要计算 X 的光 → 需要计算另一个点的光
  • 那个点又依赖其他点
  • 重复无穷次

这使得光传输成为一个 无限维度的递归问题


🔥 7. 递归结构展开(Bounce-by-bounce)

递归可以展开成:

  • 第 0 次反射:自发光
  • 第 1 次反射:一次弹射到别处
  • 第 2 次反射:两次弹射
  • … 无限次

每一次反射都乘上:

  • BRDF
  • cosθ
  • 1/r²
  • 可见性(是否被遮挡)

物理上:

  • 光越弹越弱
  • 材质越粗糙 → 衰减更明显
  • 材质越镜面化 → 需要更长路径才能收敛(玻璃、水、金属)

📦 8. Radiance 的微分定义(光能如何流动)

辐射亮度定义涉及:

  • 面积微元 dA
  • 投影面积 dA_proj(考虑了 cosθ)
  • 微分立体角 dω
  • 光子数目(或能量量)

能量从一个微表面传向另一个微表面的通量由:

dΦ=L(x2x1)(n2ω2)(n1ω1)x1x22dA2dA1 d\Phi = L(x_2 \rightarrow x_1)\,\frac{(n_2\cdot\omega_2)(n_1\cdot\omega_1)}{|x_1 - x_2|^2}\,dA_2\,dA_1

光在真空中不拐弯,因此:

  • 从 x2 → x1 的能量
  • 等于 x1 从方向 ω1 收到的能量

这导致一种对称性,是 Rendering Equation 的基础。


🔄 9. Operator Form(算子形式)

将光传输写成线性算子:

L=Le+T(L) L = L_e + T(L)

其中:

  • L:场景中所有的光分布(函数)
  • Le:光源的自发光
  • T:光传输算子(BRDF 散射 × 光线传播)

形式类似线性方程:

x=a+Bx x = a + Bx

迭代解法:

x0=a,x1=a+Bx0,x2=a+Bx1,  x_0 = a,\quad x_1 = a + Bx_0,\quad x_2 = a + Bx_1,\ \dots

最终收敛到:

x=(IB)1a x = (I - B)^{-1} a

作用:

  • 清楚分离“光从材料反射”和“光在空间传播”的两个阶段
  • 为 radiosity、光子密度场、路径积分类算法提供统一框架

🧱 10. Transport Operator(散射与传播)

分为两部分:

S:LiLo S: L_i \rightarrow L_o

负责:

  • BRDF
  • 余弦项
  • 材质行为
P:outgoing radianceincoming radiance P: \text{outgoing radiance} \rightarrow \text{incoming radiance}

负责:

  • 光线传输几何(方向、距离平方)
  • 可见性判断
  • 表面之间的能量传递

总代码构成:

T=PS T = P \circ S

整个模拟过程是 “散射 → 传播 → 散射 → 传播……” 的无限序列。


📐 11. 多次散射的无限级数展开

由算子级数可写:

L=Le+T(Le)+T2(Le)+T3(Le)+ L = L_e + T(L_e) + T^2(L_e) + T^3(L_e) + \dots

对应:

  • 零次反射(直接光源)
  • 一次反射(单次 bounce)
  • 二次反射(双跳间接光)
  • 全局光照的所有跳数

光越反射越弱,因此级数收敛(正常材质满足 ∥T∥ < 1)。

粗糙材质:快速衰减 光滑材质:需要更多反弹项


🧪 12. Cornell Box:一次反射、两次反射的直观示例

分解成:

0️⃣ 只看光源发光 1️⃣ 一次反射(直接光):墙面第一次被点亮 2️⃣ 二次反射(一次 bounce):其他表面被间接染色 3️⃣ 三次及以上反射:颜色继续传播,但变弱

最终叠加所有项才成为真实场景。


🔗 13. Radiosity 等有限元方法的关系

Radiosity 采用:

  • 对场景离散成网格
  • 建立局部能量交换方程
  • 迭代直至收敛

其实就是把算子形式离散化求解。

与路径追踪相比:

  • 更适合漫反射场景
  • 对镜面材质困难
  • 但结构完全统一

🌌 14. Path Integral Form(路径积分形式)

将图像中一个像素的亮度写成对 整个路径空间 的积分:

Ij=all pathsFj(Xˉ)dμ(Xˉ) I_j = \int_{\text{all paths}} F_j(\bar{X})\,d\mu(\bar{X})

每条路径包含:

  • x₀:光源
  • x₁:反射点
  • x_k:相机

路径的贡献包含:

  • ✨ 光源发光项
  • 🔵 各顶点的几何项(可见性、cosines、1/r²)
  • 🎨 材质散射项 BRDF
  • 👁 摄像机响应(importance)

路径长度范围从:

  • 最短:光源—相机
  • 最长:无限反弹(理论)

路径空间是高维空间,Monte Carlo 用随机样本估计。


🧩 15. Geometry Term(几何因子 G)

每一段 xi ↔ xi+1 都有几何因子:

G(xi,xi+1)=V(xi,xi+1)(niωi)(ni+1ωi+1)xixi+12 G(x_i, x_{i+1}) = V(x_i, x_{i+1}) \frac{(n_i \cdot \omega_i)(n_{i+1} \cdot \omega_{i+1})}{|x_i - x_{i+1}|^2}

包含:

  • 可见性(是否遮挡)
  • 发射端余弦
  • 接收端余弦
  • 距离平方衰减

这是路径贡献中最基本的物理几何成分。


🎯 16. 为什么递归形式里看不到 cos 和 1/r²?

原因:

  • 从半球积分时使用 dω(立体角)
  • 而从表面积积分时使用 dA(面积)

立体角 → 面积的变量替换:

dω=cosθr2dA d\omega = \frac{\cos\theta}{r^2}\,dA

因此在一些公式里这些因子“隐藏在变量里”,但实际上是完全一致的。


🔥 17. 路径积分的强大作用

路径积分形式统一了所有光照算法,使其可以:

  • 在一个框架中计算路径概率
  • 允许多重重要性采样(MIS)在路径层面统一处理
  • 支持双向路径追踪(BDPT)
  • 支持 Metropolis Light Transport(MLT)
  • 支持任意复杂反射链

路径积分是现代光线追踪算法的基础抽象。


🌟 18. LISE(Light Integral Solution Expression)与方程组求解

路径积分与算子形式共同说明:

  • 渲染方程的解 = 所有可能路径的光贡献
  • 也是光线在场景里达到平衡的最终状态

路径积分使得任何路径生成策略都能适配同一个数学框架。


📌 19. 各种路径类别(L、D、S、E)标记法

路径顶点类型:

  • L:光源
  • D:漫反射
  • S:镜面反射
  • E:相机(Eye)

例子:

  • LDE:光源 → 漫反射 → 相机(直接光)
  • LDDE:一次 bounce 的间接光
  • LSSSDE:多个镜面反弹后的焦散路径(caustic)

这种表示法帮助分析路径种类,但与算子形式的数学结构不同。


🚀 20. 路径积分总结

路径积分将像素值写成:

像素亮度=所有路径贡献 \text{像素亮度} = \int \text{所有路径贡献}

每条路径包含:

  • 光源发光
  • 多次散射
  • 几何衰减
  • 遮挡
  • 材质过滤
  • 相机响应

Monte Carlo 负责在这个高维空间里 随机取样路径并求平均


🎉 21. Rendering Equation 的三种等价形式总结

  • 最直觉
  • 逐点积累光照
  • 随机追踪路径
  • 把光传输写成 L = Le + T(L)
  • 用线性代数的方式理解全局光照
  • 是 radiosity 等方法的基础
  • 将渲染写成在路径空间的积分
  • 是现代路径追踪、BDPT、MLT 的基础
  • 完美统一不同采样策略

三种形式描述的是 同一个物理过程 的不同视角。