辐射度量学与渲染方程
为了实现真实感图形渲染,我们已经掌握了 Blinn-Phong 光照着色模型以及 Whitted 风格的光线追踪模型,但这些模型都有各自的局限性。
Blinn-Phong 光照着色模型是局部性的,无法模拟真实的物理效果,比如软阴影、间接光照等。Whitted 风格的光线追踪模型虽然模拟了光线的反射与折射,得到了较为符合物理规律的渲染结果,但对于漫反射表面(如粗糙的玻璃、磨砂金属)仍然无能为力——它只能处理完美的镜面反射与折射。
为了实现更加遵循物理规律的渲染,图形学引入了辐射度量学(Radiometry)的相关知识。辐射度量学是一门从物理和能量角度定量研究电磁辐射(包括可见光)在空间中传播、反射、吸收和发射的学科。在基于物理的渲染(PBR, Physically Based Rendering)和路径追踪(Path Tracing)时代,辐射度量学是最基础也最重要的工具。
接下来,我们将从辐射度量学的核心物理量出发,逐步推导出 BRDF 和渲染方程,为之后理解全局光照与路径追踪做铺垫。
辐射度量学
辐射度量学是研究各种电磁辐射强弱的学科,包含一系列可以测量电磁辐射的量及其单位,涵盖可见光波段。
核心物理量
1. 辐射能量(Radiant Energy) —
- 物理含义:光子所携带的总能量。
- 单位:焦耳(
, Joules)
2. 辐射通量(Radiant Flux /
Power) —
- 物理含义:单位时间内发射、传播或接收的总能量,也就是光源的功率。
- 单位:瓦特(
, Watts),即 - 公式:
3. 辐射强度(Radiant Intensity) —
- 物理含义:单位立体角上的辐射通量。它描述了点光源向某个方向发射能量的”集中程度”。
- 单位:
(瓦特每球面度) - 公式:
如何理解“立体角( )”?
我们可以完全类比二维平面里的弧度(
平面弧度(Radians):
- 定义:圆的一段弧长
与半径 的比值:
- 直观理解:弧长等于半径时,对应的弧度就是
。整个圆周的弧长是 ,所以整个圆的总弧度是 。
空间立体角(Steradians):
- 定义:球面上的一块表面积
与半径平方 的比值:
- 计量单位:球面度(
) - 直观理解:当球面上的这块面积大小刚好等于
时,它对应的立体角就是 。因为整个球体的表面积是 ,所以整个球面的总立体角是 。
微分立体角 的计算
根据立体角的定义
我们在球面上用经线和纬线切出一个微小的”矩形”,只要算出了这个小矩形的长和宽,就能得到
在球坐标系中,我们用两个角度来定位方向:
:与 轴(法线)的夹角(天顶角 / 纬度变化)。 :在 平面上的投影与 轴的夹角(方位角 / 经度变化)。
对于角度
对于角度
于是我们可以得到微小面积
把
可以发现,最终的公式中半径
4. 辐照度(Irradiance) —
- 物理含义:单位面积上接收到的辐射通量。描述了一个表面”有多亮”——但这里的”亮”是从接收能量的角度而言的。
- 单位:
(瓦特每平方米) - 公式:
辐照度的数值大小与光线入射角度有关:光线越倾斜(与表面法线夹角越大),单位面积上接收到的辐照度就越小。因此公式中需要乘以光线方向与表面法线夹角的余弦值,这就是 Lambert 余弦定律。
5. 辐射率(Radiance) —
- 物理含义:单位立体角、单位投影面积上的辐射通量。它是辐射度量学中最核心的量,也是渲染方程中直接使用的量。直观地说,辐射率就是你在某个方向看到的一束光线的”亮度”。
- 单位:
(瓦特每球面度每平方米) - 公式:
对于
角度一:
一条光束(方向已定),照射到特定大小的表面上。此时:
角度二:
一个表面(面积已定),从某个特定的方向接收 / 发射能量。此时:
辐照度 与辐射率 的关系
- 从
到 (积分):如果一个表面接收到了来自四面八方(整个半球空间)的光线照射,想知道这个表面单位面积上到底一共堆积了多少能量(即辐照度 ),就需要把所有方向进来的辐射率 全部累加(积分)起来:
- 从
到 (微分):如果我们不看全方向,只看其中某一条特定方向的光线对表面做出的微小贡献,公式就是:
把公式移项变形,得到
BRDF(双向反射分布函数)
BRDF(Bidirectional Reflectance Distribution
Function,双向反射分布函数)是连接入射光和反射光的桥梁。它告诉你:从某个特定方向
核心公式:
这个公式的含义可以分为三部分理解:
- 输入端(分母
):材质表面实际接收到的微观能量。它由入射辐射率 和入射角余弦 共同决定。 - 材质加工(BRDF
):表面接收到这部分能量 后,材质本身的物理特性(粗糙度、金属度等)决定了能量如何被重新分配。 - 输出端(分子
):经过材质的重新分配,最终沿着观察方向 射出来的亮度。
BRDF 的两个重要性质:
- 非负性:
(反射的能量不可能为负) - 互易性(Helmholtz 互易律):
,即入射方向和观察方向可以互换。这也是”双向”一词的由来。
渲染方程
有了 BRDF,我们就可以计算从某个特定方向入射的光有多少比例被反射到观察方向。如果我们将所有方向的入射光的反射贡献全部积分起来,就能得到最终反射到眼睛(或相机)的光线强度。
不考虑自发光时,反射辐射率等于所有入射光贡献的积分:
代入
如果考虑材质表面自身的发光(自发光),就可以得到完整的渲染方程:
其中:
:沿方向 射出的总辐射率。 :表面自身沿方向 发出的辐射率(自发光项,对非光源表面此项为 )。 - 积分项:所有入射光
经过 BRDF 反射后对 方向的贡献之和。 :表面法线方向的上半球空间。
这个方程就是计算机图形学中最著名的方程——渲染方程(Rendering Equation)。
算子形式的渲染方程
对于渲染方程,我们可以用算子表示法来简化表达:
其中:
:最终场景中所有的辐射率场(包括物体自发光和反射光的总和)。 :物体自发光场(即原方程中的 )。 :反射算子(Reflection Operator)。它将积分 、BRDF 以及夹角余弦 这一整套反射物理过程全部封装在一起。 对应的就是”对输入的 进行一次全方位的反射计算”。
我们通过移项可以得到
(注:这里的
利用泰勒展开,可以得到:
这个展开式直接揭示了光线追踪的物理本质:
:看到光源本身(零次弹射)。 :光线从光源发出,经过 1 次反射进入人眼(直接光照,Direct Illumination)。 :光线经过 2 次反射进入人眼(间接光照,弹跳两次)。 :光线弹跳 次后进入人眼。随着 增大, 的贡献通常逐渐减小(能量衰减),最终趋于 。
这也解释了为什么现实世界中的阴影很少是完全黑的——即使光源被遮挡,经过多次弹射的间接光仍然会照亮阴影区域。
总结
辐射度量学、渲染方程与全局光照之间的关系可以这样理解:
- 辐射度量学提供了精确描述光线传输的“物理语言”——定义了能量、通量、强度、辐照度、辐射率等一系列精确的物理量。
- BRDF 描述了材质如何响应光照——入射光被表面反射后如何分布在各个方向上。
- 渲染方程将所有物理量统一为一条积分方程——完整描述了场景中光线的平衡状态。
这次的插图来自画师 K.Hati
图片地址:https://www.pixiv.net/artworks/66090768