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. 光传输的整体直觉
一个完整的光照过程包含:
- 光源发射光子
- 光子击中表面
- 表面根据材质反射、散射
- 光子多次反弹在场景内部传播
- 最终有部分光子到达相机
光在场景中不断被反射、吸收、衰减,因此我们需要一种方法去 模拟无穷多的反弹路径。
有三种方式描述这件事:
- 🌞 从光源发射光子(Forward / Photon-based view)
- 📷 从相机追踪路径(Backward / Camera-based view)
- 🔁 递归积分(Recursive Radiance Equation)
- 🔄 算子形式(Operator Form)
- 🔗 路径积分(Path Integral Form)
这些都是同一件事的不同视角。
🌈 2. 从光源视角:光子在场景中的传播
光子路径的示意:
- 光源 → 某表面
- 表面 → 另一个表面
- 光经过无数次反射
- 最后抵达相机像素
每一次反射会产生:
- ✂️ 光能损失(吸收、散射)
- 🎨 材质过滤(BRDF)
- 🔻 衰减因子相乘(cosine、距离平方等)
“沿光前进”模拟称为 Photon Mapping、Radiosity 等等。
📷 3. 从相机视角:Importance(重要性)追踪
相机也可以“发出”重要性,逆向模拟光线:
- 相机发出一条射线
- 击中场景一点 X
- 以 X 为中心对半球积分
- 找到所有能够影响该点的光
- 累积所有光线贡献
- 路径最终抵达光源才会产生亮度贡献
这里的重要性会随着反弹衰减,与光线传播是对偶关系(adjoint)。
这两种方向(光前进 vs 重要性后退)是完全对称的。
⚡ 4. Radiance(辐射亮度)的基本概念
Radiance 是 Rendering Equation 的核心物理量。
在某个点 x 朝某方向 v 的出射亮度:
由两种成分组成:
- 自发光(光源的直接贡献)
- 反射光(来自其他方向的光)
反射光由材料 BRDF × 入射光 × cosθ 积分得到。
🎯 5. Rendering Equation 的基本形式(半球积分)
某点 x 朝方向 v 的出射亮度:
包含:
- L_e:该点朝方向 v 的自发光
- f_s:BRDF
- L_i:入射光
- (n·ω):余弦项
- dω:从半球取样
这部分是最常见、最直觉的形式。
🔁 6. 引入递归:入射光其实是别处的出射光
入射光来自另一个点 x₂:
因此 Rendering Equation 是 递归的:
- 要计算 X 的光 → 需要计算另一个点的光
- 那个点又依赖其他点
- 重复无穷次
这使得光传输成为一个 无限维度的递归问题。
🔥 7. 递归结构展开(Bounce-by-bounce)
递归可以展开成:
- 第 0 次反射:自发光
- 第 1 次反射:一次弹射到别处
- 第 2 次反射:两次弹射
- … 无限次
每一次反射都乘上:
- BRDF
- cosθ
- 1/r²
- 可见性(是否被遮挡)
物理上:
- 光越弹越弱
- 材质越粗糙 → 衰减更明显
- 材质越镜面化 → 需要更长路径才能收敛(玻璃、水、金属)
📦 8. Radiance 的微分定义(光能如何流动)
辐射亮度定义涉及:
- 面积微元 dA
- 投影面积 dA_proj(考虑了 cosθ)
- 微分立体角 dω
- 光子数目(或能量量)
能量从一个微表面传向另一个微表面的通量由:
光在真空中不拐弯,因此:
- 从 x2 → x1 的能量
- 等于 x1 从方向 ω1 收到的能量
这导致一种对称性,是 Rendering Equation 的基础。
🔄 9. Operator Form(算子形式)
将光传输写成线性算子:
其中:
- L:场景中所有的光分布(函数)
- Le:光源的自发光
- T:光传输算子(BRDF 散射 × 光线传播)
形式类似线性方程:
迭代解法:
最终收敛到:
作用:
- 清楚分离“光从材料反射”和“光在空间传播”的两个阶段
- 为 radiosity、光子密度场、路径积分类算法提供统一框架
🧱 10. Transport Operator(散射与传播)
分为两部分:
🔹 Local Scattering Operator(局部散射算子 S)
负责:
- BRDF
- 余弦项
- 材质行为
🔹 Propagation Operator(传播算子 P)
负责:
- 光线传输几何(方向、距离平方)
- 可见性判断
- 表面之间的能量传递
总代码构成:
整个模拟过程是 “散射 → 传播 → 散射 → 传播……” 的无限序列。
📐 11. 多次散射的无限级数展开
由算子级数可写:
对应:
- 零次反射(直接光源)
- 一次反射(单次 bounce)
- 二次反射(双跳间接光)
- …
- 全局光照的所有跳数
光越反射越弱,因此级数收敛(正常材质满足 ∥T∥ < 1)。
粗糙材质:快速衰减 光滑材质:需要更多反弹项
🧪 12. Cornell Box:一次反射、两次反射的直观示例
分解成:
0️⃣ 只看光源发光 1️⃣ 一次反射(直接光):墙面第一次被点亮 2️⃣ 二次反射(一次 bounce):其他表面被间接染色 3️⃣ 三次及以上反射:颜色继续传播,但变弱
最终叠加所有项才成为真实场景。
🔗 13. Radiosity 等有限元方法的关系
Radiosity 采用:
- 对场景离散成网格
- 建立局部能量交换方程
- 迭代直至收敛
其实就是把算子形式离散化求解。
与路径追踪相比:
- 更适合漫反射场景
- 对镜面材质困难
- 但结构完全统一
🌌 14. Path Integral Form(路径积分形式)
将图像中一个像素的亮度写成对 整个路径空间 的积分:
每条路径包含:
- x₀:光源
- x₁:反射点
- …
- x_k:相机
路径的贡献包含:
- ✨ 光源发光项
- 🔵 各顶点的几何项(可见性、cosines、1/r²)
- 🎨 材质散射项 BRDF
- 👁 摄像机响应(importance)
路径长度范围从:
- 最短:光源—相机
- 最长:无限反弹(理论)
路径空间是高维空间,Monte Carlo 用随机样本估计。
🧩 15. Geometry Term(几何因子 G)
每一段 xi ↔ xi+1 都有几何因子:
包含:
- 可见性(是否遮挡)
- 发射端余弦
- 接收端余弦
- 距离平方衰减
这是路径贡献中最基本的物理几何成分。
🎯 16. 为什么递归形式里看不到 cos 和 1/r²?
原因:
- 从半球积分时使用 dω(立体角)
- 而从表面积积分时使用 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. 路径积分总结
路径积分将像素值写成:
每条路径包含:
- 光源发光
- 多次散射
- 几何衰减
- 遮挡
- 材质过滤
- 相机响应
Monte Carlo 负责在这个高维空间里 随机取样路径并求平均。
🎉 21. Rendering Equation 的三种等价形式总结
1)递归半球积分(local radiance form)
- 最直觉
- 逐点积累光照
- 随机追踪路径
2)算子形式(operator form)
- 把光传输写成 L = Le + T(L)
- 用线性代数的方式理解全局光照
- 是 radiosity 等方法的基础
3)路径积分(path integral formulation)
- 将渲染写成在路径空间的积分
- 是现代路径追踪、BDPT、MLT 的基础
- 完美统一不同采样策略
三种形式描述的是 同一个物理过程 的不同视角。