(翻译, 转载)

计算机图形学

在计算机图形学领域, 尤其是虚拟现实图像合成, 最吸引我的特质在于: 这是普通人无需成为物理学家就能参与物理学研究的方式. 我认为图形学是一个更平易近人的领域, 成为图形学专家的时间成本远低于取得物理学博士的时间成本. 但这个领域依然保留了物理学那些令人着迷的核心体验: 探索现实世界的底层"实现细节", 运用严谨数学建模自然现象, 通过实践验证理论成果. 物理定律背后蕴藏着大量优美数学, 而作为物理学子领域的图形学, 同样闪耀着数学之美.

图形学特别关注光的本质. 光作为电磁波的一种形态, 其让我们得以看见世界的根本原因在于电磁波与原子间的散射作用. 当光接触原子时, 电子会在振荡电磁场作用下发生振动(原子核也会振动, 但由于质量远大于电子, 振幅微乎其微). 这些受迫振动的电子又会发射次级电磁波, 与原始波形成干涉. 因此当光穿越原子群时, 其传播状态会发生改变 —— 这种现象我们称之为"散射".

当然, 单个原子的尺度远超出我们的考量范围, 因此在建模时我们将物质视为具有连续散射特性的介质, 通过微分方程和积分来描述大量原子的宏观统计效应.

现实中, 所有光散射本质上都是体积散射. 所谓的"表面散射"并不存在, 因为严格来说"表面"这个概念本身就不存在. 我们已经知道漫反射其实是微观尺度体积散射的宏观表现. 事实上, 镜面反射与折射同样是体积散射的结果… 但要模拟这种现象就需要考虑光的波动性, 在两种介质的光滑界面附近, 散射波的干涉效应会使得只有反射波和折射波得以保留, 其他方向的波则相互抵消. 这样就会呈现出反射和折射的效果. (如果需要深入了解电磁场中电子振动如何产生镜面反射与折射, 推荐阅读 《费曼物理学讲义》 相关章节: 第1卷第31章通过稀薄气体模型推导近似折射; 第2卷第32章运用麦克斯韦方程组处理稠密介质折射; 第2卷第33章推导菲涅尔方程. 费曼在 《QED: 光和物质的奇妙理论》 中也始终以反射折射为典型案例, 并提供了独到的见解.)

但是在图形学中, 我们会忽略光的波动性, 因为可见光波长远小于视觉分辨率, 多数物体在该尺度下呈现平坦特性, 以及常见光源的非相干性(随机偏振与相位), 因此我们可以安全地采用几何光学近似, 将光视为沿直线传播的能量束. 更进一步, 对于不透明物体, 我们通常只需处理其表面散射现象即可.

辐射场

在计算机图形学中, 光被视作一种连续的"物质", 它沿直线在空间中传播, 具有颜色特性, 且不会与自身发生相互作用. 在这个近似得到的定义下, 电磁场可简化为更基础的辐射场, 其定义为:

L : R 3 × S 2 → R 3 L: \mathbb{R}^3 \times S^2 \to \mathbb{R}^3 L:R3×S2→R3

其中左侧的 R 3 \mathbb{R}^3 R3 表示场景的三维空间; S 2 S^2 S2 代表空间中每一点的方向球面; 右侧的 R 3 \mathbb{R}^3 R3 则是色彩空间, 此处采用线性RGB空间.

因此辐射场是一个五维函数: 三维空间坐标加二维方向坐标. 若采用球坐标系表示方向, 则可写作 L ( x , y , z , θ , ϕ ) = ( r , g , b ) L(x, y, z, \theta, \phi) = (r, g, b) L(x,y,z,θ,ϕ)=(r,g,b). 不过我们将遵循惯例简记为 L ( x , ω ) L(x, \omega) L(x,ω), 其中 x x x表示空间点, ω \omega ω为单位方向向量. 直观理解, "辐射亮度"描述的是穿过空间某点、沿特定方向传播的光能总量.

定义辐射场后, 我们可以通过图形学论文中最常见的渲染方程实现其与物体表面的交互:

L ( x , ω ) = L e ( x , ω ) + ∫ S 2 L ( x , − ω ′ )   f ( ω , ω ′ )   ∣ n ⋅ ω ′ ∣   d ω ′ L(x, \omega) = L_e(x, \omega) + \int_{S^2} L(x, -\omega') \, f(\omega, \omega') \, |n \cdot \omega'| \, d\omega' L(x,ω)=Le​(x,ω)+∫S2​L(x,−ω′)f(ω,ω′)∣n⋅ω′∣dω′

该方程将自发辐射 L e L_e Le​ 与经过双向散射分布函数(BSDF)滤波的入射光辐射进行叠加. 对于体积渲染, 还存在另一个渲染方程:

d L ( x + t ω , ω ) d t = L e ( x ) − [ β a ( x ) + β s ( x ) ] L ( x , ω ) + β s ( x ) ∫ S 2 L ( x , ω ′ )   p ( ω , ω ′ )   d ω ′ \frac{dL(x + t\omega, \omega)}{dt} = L_e(x) - [\beta_a(x) + \beta_s(x)]L(x, \omega) + \beta_s(x) \int_{S^2} L(x, \omega') \, p(\omega, \omega') \, d\omega' dtdL(x+tω,ω)​=Le​(x)−[βa​(x)+βs​(x)]L(x,ω)+βs​(x)∫S2​L(x,ω′)p(ω,ω′)dω′

这里同样包含自发辐射项 L e L_e Le​ (表示沿光线单位长度产生的辐射), 并扣除吸收项 β a \beta_a βa​, 同时考虑散射项 β s \beta_s βs​ 的进出贡献. 该微分方程描述了光线经过空间某点时辐射亮度 L L L 的变化率(故有 d L ( x + t ω , ω ) dL(x + t\omega, \omega) dL(x+tω,ω) 表达式) —— 虽然可以沿光线积分得到两点间辐射亮度的关系式, 但在此不作赘述.

您已进入无限维度空间

在极佳近似下, 控制电磁场的方程属于线性微分方程. 因此电磁波遵循"叠加原理": 两个或多个波可以相加或叠加而不会相互干扰. 这意味着电磁波构成一个向量空间. 辐射场集合同样构成向量空间, 其向量特性继承自底层的电磁波.

向量空间就是能够相加和进行标量乘的对象集合. 您熟悉三维空间向量 R 3 \mathbb{R}^3 R3 的加减和缩放操作, 整个辐射场的加减缩放也遵循相同规则(注意: 缩放辐射场是指调节每个点的光强, 而非三维空间的场景缩放). 所有辐射场构成的空间是无限维向量空间, 因为若试图像向量那样展开描述, 辐射场作为任意函数需要无限多个分量——例如空间每个点每个方向的RGB值, 而点和方向的数量本就是无限的! 但不必被无限维特性困扰: 向量空间的所有基本性质仍然适用, 您大可以将其视为熟悉的三维向量.

线性算子的扩展应用

正如三维向量可通过矩阵变换, 广义向量也能通过线性算子操控. 若将函数视为具有无限分量的向量, 那么无限维向量空间上的线性算子就类似于∞×∞矩阵! 这些算子遵循作用向量的加性和乘性:

T ( x + y ) = T x + T y T ( a x ) = a ( T x ) \begin{aligned} T(x + y) &= Tx + Ty \\ T(ax) &= a(Tx) \end{aligned} T(x+y)T(ax)​=Tx+Ty=a(Tx)​

其中 T T T 为线性算子, x , y x,y x,y 为任意向量, a a a 为标量. 这些性质定义了线性算子的本质.

积分和微分就是函数空间上的线性算子. 微积分课程中的基本性质印证了这一点:

d d x [ f ( x ) + g ( x ) ] = d f d x + d g d x d d x [ a f ( x ) ] = a d f d x ∫ [ f ( x ) + g ( x ) ]   d x = ∫ f ( x )   d x + ∫ g ( x )   d x ∫ a f ( x )   d x = a ∫ f ( x )   d x \begin{aligned} \frac{d}{dx}[f(x) + g(x)] &= \frac{df}{dx} + \frac{dg}{dx} \\ \frac{d}{dx}[af(x)] &= a \frac{df}{dx} \\ \int [f(x) + g(x)] \, dx &= \int f(x) \, dx + \int g(x) \, dx \\ \int af(x) \, dx &= a \int f(x) \, dx \end{aligned} dxd​[f(x)+g(x)]dxd​[af(x)]∫[f(x)+g(x)]dx∫af(x)dx​=dxdf​+dxdg​=adxdf​=∫f(x)dx+∫g(x)dx=a∫f(x)dx​

这意味着渲染方程中的积分正是作用于辐射场空间的线性算子! 实际上, 我们可以将这些积分整合为一个大型线性算子 T T T : 表面点使用表面算子, 其他点使用体积算子(记住: 三维空间的每个点对应无限维向量空间的不同维度——因此在不同点执行不同操作的算子, 就像在3D空间中XY平面旋转同时沿Z轴缩放的矩阵).

这个 T T T 算子非常复杂, 远比旋转或缩放操作精妙, 但它与其他线性算子无异. 这使得我们可以将渲染方程写成极其简洁的形式:

L = L e + T L L = L_e + TL L=Le​+TL

多么简洁的表述! 当然, 物理复杂性并未减少 —— 我们只是将所有复杂性隐藏在 L L L 和 T T T 的定义中. 但这种形式的渲染方程有个优势: 更容易看清其基本结构. 虽然完整展开的渲染方程看起来相当复杂, 但它们清晰地分为三个主要成分: 我们要求解的辐射场 L L L (用于最终渲染); 仅包含光源直接辐射的 L e L_e Le​ 以及散射算子 T T T.

不动点修正

由于 L L L在等式两边同时出现, 我们得到的是一个不动点方程. 定义作用于辐射场的函数: f ( ℓ ) ≡ L e + T ℓ f(\ell) \equiv L_e + T\ell f(ℓ)≡Le​+Tℓ, 那么我们需要的 L L L就是这个函数的唯一不动点: f ( L ) = L f(L) = L f(L)=L.

函数 f ( ℓ ) f(\ell) f(ℓ)包含两个操作: 应用散射算子 T T T, 然后加上辐射场 L e L_e Le​. 这意味着在不动点处, 这两个操作达到了平衡: 彼此的效果相互抵消! 当 T T T对辐射场的影响正好被 L e L_e Le​的加入平衡时, 就达到了这种平衡状态. 换句话说, 将 T T T作用于 L L L的效果, 就是从辐射场中减去 L e L_e Le​! 然后我们再加回 L e L_e Le​就又得到 L L L, 从而满足方程.

从物理角度可以这样理解平衡的形成: 实际上辐射场不是静态实体, 而是动态过程. 光不会静止在空间中等待观察, 它持续运动、被吸收, 而光源持续发射. 我们看到的稳定光分布(即辐射场表征的内容), 只有在光的持续发射与吸收达到完美平衡时才会出现, 此时任意点任意方向的光量都不随时间改变.

发射率通常由场景中的光源配置决定, 而吸收率取决于现有光量——例如表面可能吸收50%的入射光. 这意味着当光源开启时, 光量会持续增加, 直到吸收率与发射率精确匹配. 光的传播速度极快, 因此典型场景中的平衡过程在微秒级时间内就能完成.

这种平衡状态的概念内嵌于不动点方程的本质中. 但需要注意的是, 仅仅写出不动点方程并不能保证不动点的存在. 如上所述, 吸收作用是辐射平衡的关键要素——没有吸收, 就没有什么能平衡发射, 随着光源持续注入能量, 场景中的光量将会无限增长.

顺带一提, 这种"能量以固定速率注入, 同时以与现有能量成正比的速率被吸收/耗散"的平衡机制, 还控制着日常生活中的许多现象, 比如炉具能达到的温度, 以及汽车的行驶速度等.

诺伊曼级数

将渲染方程表示为不动点形式还有另一个优势: 数学家对不动点方程的研究由来已久, 已经建立了诸多定理来确定各类函数存在不动点的充分条件, 并常能提供求解方法. 其中最重要的成果当属巴拿赫不动点定理. 该定理指出: 在特定条件下(稍后详述), 函数存在唯一不动点, 且可通过任选空间中的起点进行函数迭代来逼近该点. 即选取初始点 x 0 x_0 x0​后, 计算序列

f ( x 0 ) , f ( f ( x 0 ) ) , f ( f ( f ( x 0 ) ) ) … f(x_0), f(f(x_0)), f(f(f(x_0))) \ldots f(x0​),f(f(x0​)),f(f(f(x0​)))…

该定理保证该序列必然收敛, 且极限就是 f f f的不动点.

将此方法应用于渲染方程: 我们的"点"是辐射场, 函数为 f ( ℓ ) = L e + T ℓ f(\ell) = L_e + T\ell f(ℓ)=Le​+Tℓ. 根据巴拿赫定理, 初始点可任意选择, 故选取最简情况——零辐射场(处处为零的辐射场). 迭代过程如下:

f ( 0 ) = L e f ( f ( 0 ) ) = L e + T L e f ( f ( f ( 0 ) ) ) = L e + T L e + T 2 L e f ( f ( f ( f ( 0 ) ) ) ) = L e + T L e + T 2 L e + T 3 L e   ⋮ \begin{aligned} f(0) &= L_e \\ f(f(0)) &= L_e + TL_e \\ f(f(f(0))) &= L_e + TL_e + T^2 L_e \\ f(f(f(f(0)))) &= L_e + TL_e + T^2 L_e + T^3 L_e \\ &\:\vdots \end{aligned} f(0)f(f(0))f(f(f(0)))f(f(f(f(0))))​=Le​=Le​+TLe​=Le​+TLe​+T2Le​=Le​+TLe​+T2Le​+T3Le​⋮​

显然, 我们要求解的不动点 L L L(即渲染方程的解)就是 L e L_e Le​ 被 T T T 各次幂作用后的无穷级数:

L = L e + T L e + T 2 L e + T 3 L e + ⋯ L = L_e + TL_e + T^2 L_e + T^3 L_e + \cdots L=Le​+TLe​+T2Le​+T3Le​+⋯

该级数被称为诺伊曼级数, 以数学家卡尔·诺伊曼命名(与著名约翰·冯·诺伊曼无关).

由于 T T T 算子实现了场景中所有表面和体积的光散射"一次弹射", 这意味着最终光照等于: 直接发射光 + 一次弹射光(直接光照) + 二次弹射光+……. 级数中每增加一项就相当于多计算一次间接光弹射, 因此这种不动点迭代抽象地描述了路径追踪, 光子映射等渲染算法的本质.

f f f 的迭代序列也模拟了黑暗房间开灯时的物理过程: 每个"时间步"中, 既有光被散射, 同时新光被发射. 该过程无限重复, 但会快速趋于平衡状态(在5米见方的房间中, 每秒约发生7千万次弹射).

充分条件

上面直接假设巴拿赫不动点定理适用于渲染方程——具体指函数 f ( ℓ ) = L e + T ℓ f(\ell) = L_e + T\ell f(ℓ)=Le​+Tℓ 满足定理条件. 现在我们需要回溯并审视这些条件的实质.

简言之, 巴拿赫定理要求:

  1. ( X , d ) (X, d) (X,d)为非空完备度量空间
  2. f : X → X f: X \to X f:X→X为压缩映射, 即存在实数 k < 1 k < 1 k<1使得对所有 x , y ∈ X x, y \in X x,y∈X满足 d ( f ( x ) , f ( y ) ) ≤ k   d ( x , y ) d(f(x), f(y)) \leq k \, d(x, y) d(f(x),f(y))≤kd(x,y)

度量空间指能通过度量函数 d d d测量任意两点距离的空间. 对我们而言, 这个空间就是所有辐射场构成的空间, 因此需要定义两个辐射场之间的"距离".

定义距离后, 还需 f f f 是压缩映射——始终缩短点距的函数. 不等式 d ( f ( x ) , f ( y ) ) ≤ k   d ( x , y ) d(f(x), f(y)) \leq k \, d(x, y) d(f(x),f(y))≤kd(x,y) 表明: 对任意两点应用 f f f 后, 其距离最多缩小为原来的 k k k 倍( k < 1 k<1 k<1 ). 由此可直观理解定理原理: 每次应用 f f f 都使所有点更靠近, 最终必然收缩至唯一不动点. 在渲染方程中, 每次 f f f 应用都相当于一次光弹射, 使我们更接近平衡状态.

对于辐射场的距离定义: 由于辐射场构成向量空间, 只需定义辐射场的范数(到零点的距离), 任意两个辐射场的距离即可通过相减后取范数获得(与普通向量相同). 那么如何定义辐射场范数?

自然选择是将范数定义为场景中所有光能的总和. 这需要对全空间、全方向、全颜色通道的辐射场进行积分:

∥ L ∥ ≡ ∑ r , g , b ∫ S 2 ∫ R 3 ∣ L ( x , ω ) ∣   d 3 x   d ω \| L \| \equiv \sum_{r, g, b} \int_{S^2} \int_{\mathbb{R}^3} |L(x, \omega)| \, d^3 x \, d\omega ∥L∥≡r,g,b∑​∫S2​∫R3​∣L(x,ω)∣d3xdω

(注: 为获得能量量纲需除以光速, 但这对后续分析无影响)

因此, 要满足巴拿赫定理条件, 必须对任意辐射场 ℓ 1 , ℓ 2 \ell_1, \ell_2 ℓ1​,ℓ2​有:

∥ T ( ℓ 1 − ℓ 2 ) ∥ ≤ k   ∥ ℓ 1 − ℓ 2 ∥ , k < 1 \|T(\ell_1 - \ell_2)\| \leq k \, \| \ell_1 - \ell_2 \|, \quad k < 1 ∥T(ℓ1​−ℓ2​)∥≤k∥ℓ1​−ℓ2​∥,k<1

这意味着: 无论初始辐射场如何配置, 应用 T T T都必须减少其能量!这正是前文所述辐射平衡中吸收作用的数学表述. 只要 T T T总能从任意辐射场中吸收部分能量, 巴拿赫定理就能保证 f f f的迭代序列收敛. 简而言之:

**若场景配置保证散射总会导致光能净减少, 则对任意光源配置, 渲染方程必收敛. **

这与计算机图形学文献中常见的BSDF能量"守恒"条件高度相似:
对所有  ω ∈ S 2 , ∫ S 2 f ( ω , ω ′ )   ∣ n ⋅ ω ′ ∣   d ω ′ < 1 \text{对所有 } \omega \in S^2, \quad \int_{S^2} f(\omega, \omega') \, |n \cdot \omega'| \, d\omega' < 1 对所有 ω∈S2,∫S2​f(ω,ω′)∣n⋅ω′∣dω′<1
(注: 即使常见形式为" ≤ 1 \leq 1 ≤1", 也仅是能量非增条件)

若场景中所有BSDF均满足该吸收不等式, 则足以为渲染方程收敛提供充分条件. 虽然直觉上已很合理, 但现在我们看到了其背后的严格数学基础.

该吸收不等式是否为收敛的必要条件?并非如此. 通过精心设计可以"违反"吸收规则仍保持收敛. 例如: 在合规场景中单独放置完美反射平面镜不会破坏收敛性;但若多个此类镜子形成无限反射光路, 就会阻止收敛!完全非吸收玻璃球会变成"光陷阱", 特定角度的入射光将因全内反射永远滞留其中. 因此, 完全非吸收材料在特定情况下可用, 但使用不当极易破坏收敛性.

结论

回顾整个推导过程: 为计算机图形学之需, 我们将电磁场简化为辐射场, 剔除了人眼不可感知的波长、偏振等细节. 渲染方程可表示为辐射场向量空间上的线性算子, 并具有描述光发射与吸收平衡的不动点方程形式. 为保证不动点存在, 我们动用了巴拿赫不动点定理这一定量分析利器. 该定理要求场景必须保证任何光路都会损失至少最低限度的能量, 否则光线将无限弹射而不衰减, 导致渲染方程无法收敛至不动点. 通过揭示光传输方程与泛函分析的内在联系, 我们不仅理解了经典渲染算法的数学本质, 更为开发新型算法奠定了理论基础. 这种理论与实践的结合, 正是计算机图形学的魅力所在.

来源

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐