辐射度量

经验着色模型里的光强常常只是一个没有单位的数。它可以帮助我们做出合理的明暗,却不能回答“这份光在时间、方向和面积上如何分布”。要把材质响应和光传播写成可以核对单位的方程,需要辐射度量学 Radiometry。

辐射度量从一个基本区分开始:一块太阳能板照得越久,累计吸收的能量越多,但场景的瞬时亮度不会随时间无限增加。因此照明计算通常研究单位时间的功率,并继续区分功率朝哪些方向传播、落在多大面积上,以及沿哪条光线传播。

辐射能量与通量

辐射能量 Radiant Energy 是电磁辐射携带的能量,记作 QQ,单位是焦耳(J)。它会随时间累积。

辐射通量 Radiant Flux 是单位时间传输的能量,也称功率(Power):

Φ=dQdt.\Phi=\frac{\mathrm dQ}{\mathrm dt}.

单位是瓦特(W)。Φ\Phi 只描述总功率,不说明方向和面积。照明工程使用的光度学 Photometry 还会按人眼对不同波长的敏感程度加权,得到以流明(lumen, lm)计的光通量。辐射通量和光通量采用不同测量规则,不能直接把 lm 当成 W 的另一种写法;后面的 W/sr 与 candela、W/m² 与 lux 也应作同样区分。

例如一个灯泡可以把相同总功率集中到一个窄角度,也可以均匀地向整个空间发光。两者的通量相同,但某个方向上接收到的照明完全不同。因此接下来要先度量方向范围。

立体角

二维角度可以用圆弧长度除以半径定义。三维中,一个方向锥体在半径为 rr 的球面上截出面积 AA,它张开的立体角 Solid Angle 为

Ω=Ar2.\Omega=\frac{A}{r^2}.

单位是球面度 sr。由于球面面积随 r2r^2 增长,立体角只表示方向范围,与选取的球半径无关;整个球面的立体角是 4π4\pi,半球是 2π2\pi。也可以把一个物体投影到以观察点为中心的单位球上,球面上被物体框住的面积就是它张开的立体角。

二维角度的弧度定义为 l/rl/r,三维立体角是这个定义在空间中的延伸。用球坐标表示方向,极角为 θ\theta,方位角为 ϕ\phi。球面微元的两条边长近似为 r dθr\,\mathrm d\theta 和 rsin⁡θ dϕr\sin\theta\,\mathrm d\phi,所以

dA=r2sin⁡θ dθ dϕ,\mathrm dA=r^2\sin\theta\,\mathrm d\theta\,\mathrm d\phi,

dω=dAr2=sin⁡θ dθ dϕ.\mathrm d\omega=\frac{\mathrm dA}{r^2} =\sin\theta\,\mathrm d\theta\,\mathrm d\phi.

这里的 sin⁡θ\sin\theta 很重要:相同的 dθ\mathrm d\theta 在极点附近覆盖很小的球面面积,在赤道附近覆盖更大的面积。因此“按立体角均匀采样”不等于分别均匀采样 θ\theta 和 ϕ\phi。一种均匀采样上半球的方式是取

z=cos⁡θ∼U[0,1],ϕ∼U[0,2π),z=\cos\theta\sim U[0,1],\qquad \phi\sim U[0,2\pi),

再令

ω=(1−z2cos⁡ϕ,1−z2sin⁡ϕ,z).\boldsymbol\omega= \bigl(\sqrt{1-z^2}\cos\phi, \sqrt{1-z^2}\sin\phi,z\bigr).

辐射强度

有了方向范围,就可以把通量按方向细分。辐射强度 Radiant Intensity 描述点光源向单位立体角发出的通量:

I(ω)=dΦdω,I(\boldsymbol\omega)=\frac{\mathrm d\Phi}{\mathrm d\omega},

单位是 W/sr。各向同性点光源在所有方向上的强度相同,因此

I=Φ4π.I=\frac{\Phi}{4\pi}.

强度描述的是源的方向分布,不是功率沿空间距离的衰减。现代灯具可能有明显的配光曲线,同样总通量的灯具在不同方向上的强度可以完全不同。

光源的方向分布

中心箭头长度和外围轮廓随方向改变,表示每单位立体角的功率可以不同。总通量相同的两个光源仍可能有不同配光,各向同性只是特殊情况。

例如一个标注为815 lumen的 LED 灯,若暂时假设各向同性发光,则其每个方向的光强近似为

I=815 lm4π sr≈65 cd.I=\frac{815\ \mathrm{lm}}{4\pi\ \mathrm{sr}} \approx65\ \mathrm{cd}.

标注光通量的 LED 灯

包装上的 815 lumen 是发光通量,11 W 是电功率,二者含义不同。下面的 candela 换算只把 815 lumen 按各向同性假设平均分到 4π 立体角,不能从 11 W 直接得到可见光强。

这里的 candela 是 lumen/sr,数值来自各向同性假设;真实灯具的配光曲线可能使不同方向的强度不同。

严格区分时,W 与 W/sr 属于辐射量,lumen 与 candela 属于考虑人眼光谱响应的光度量;这个 815 lumen 的例子是在同一“总量除以 4π4\pi”结构下说明立体角归一化,不应把 65 candela 当成由 815 lumen 推出的辐射瓦特数。

辐照度

继续按面积细分,得到辐照度 Irradiance:

E(x)=dΦ(x)dA.E(\mathbf x)=\frac{\mathrm d\Phi(\mathbf x)}{\mathrm dA}.

单位是 W/m2^2;照明工程中流明每平方米叫 lux。辐照度描述实际接收表面单位面积得到多少功率,不取决于表面之后如何反射。这里的 dA\mathrm dA 是接收表面的实际面积;当光线斜射时,固定截面的光束会摊到更大的实际表面面积上,因此单位面积接收的功率下降。投影面积的写法会在辐亮度的定义中单独出现。

Lambert 余弦项表示入射方向在表面上的投影

这就是 Lambert 余弦律:对一块固定实际面积 AA,若正入射时接收的参考通量为 Φ\Phi,入射方向与法线夹角为 θ\theta 时,落到这块表面上的通量为 Φcos⁡θ\Phi\cos\theta,于是

E=Φcos⁡θA.E=\frac{\Phi\cos\theta}{A}.

地球四季也受到同一个投影因素影响:太阳光越倾斜,同样的功率越摊到更大的地面面积上,单位面积接收的功率越小;日照时长、地轴倾角和大气条件也会共同影响季节温差。

对点光源,微分通量满足 dΦ=I dω\mathrm d\Phi=I\,\mathrm d\omega。面积元从光源看去张开的立体角为

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

于是

E=dΦdA=Icos⁡θr2.E=\frac{\mathrm d\Phi}{\mathrm dA} =\frac{I\cos\theta}{r^2}.

这里的 cos⁡θ\cos\theta 来自接收面的投影,1/r21/r^2 来自球面面积增长,二者原因不同。两个同心球面接收相同总通量 Φ\Phi 时,半径为 11 的球面上有 E=Φ/(4π)E=\Phi/(4\pi),半径为 rr 的球面上有

E′=Φ4πr2=Er2.E'=\frac{\Phi}{4\pi r^2}=\frac{E}{r^2}.

点光源照度中的平方反比项来自球面面积增长

图中同心圆表示半径不断增大的球面;总通量相同,外层球面面积按 r2r^2 增长,所以单位面积得到的辐照度按 1/r21/r^2 下降。锥体张开的立体角没有变,变化的是同一功率在球面上的面积密度。

一个容易混淆的地方是:沿一个固定锥体传播时,锥体在不同距离处张开的立体角不变,因此辐射强度没有随距离衰减;变小的是功率除以越来越大面积得到的辐照度。着色模型中的 1/r21/r^2 属于辐照度,不应称为“强度衰减”。

辐亮度

把方向和投影面积两次细分合在一起,得到辐亮度 Radiance:

L(x,ω)=d2ΦdA⊥ dω=d2Φcos⁡θ dA dω.L(\mathbf x,\boldsymbol\omega) =\frac{\mathrm d^2\Phi}{\mathrm dA^\perp\,\mathrm d\omega} =\frac{\mathrm d^2\Phi}{\cos\theta\,\mathrm dA\,\mathrm d\omega}.

单位是 W/(m2⋅^2\cdotsr)。它是渲染中沿光线传递的基本量:相机最终记录到的是到达镜头的辐亮度,表面计算的是离开表面的辐亮度。

在真空、没有吸收和散射、没有额外发光并且没有遮挡的直线传播中,辐亮度沿光线保持不变。更具体地,对同一束相似的微分光束,传播距离增加时横截面的投影面积按 r2r^2 增长,而这块固定几何邻域从另一端张开的立体角按 1/r21/r^2 减小;在 dA⊥ dω\mathrm dA^\perp\,\mathrm d\omega 的乘积中二者抵消。一个固定方向锥体的立体角本身并不随距离变小,变小的是功率摊到球面面积后得到的辐照度。辐照度是某个面收到的总功率密度,会受距离和入射角影响;辐亮度保留方向信息,适合沿路径传递。

辐亮度也可以看成辐照度再按立体角细分,或辐射强度再按投影面积细分。来自一个微分方向的入射辐照度为

dE=Li(x,ωi)cos⁡θi dωi.\mathrm dE=L_i(\mathbf x,\boldsymbol\omega_i)\cos\theta_i\,\mathrm d\omega_i.

对整个入射半球积分:

E(x)=∫Ω+Li(x,ωi)cos⁡θi dωi.E(\mathbf x)=\int_{\Omega^+} L_i(\mathbf x,\boldsymbol\omega_i) \cos\theta_i\,\mathrm d\omega_i.

约定 ωi\boldsymbol\omega_i 和 ωo\boldsymbol\omega_o 都从表面点向外指。Li(p,ωi)L_i(\mathbf p,\boldsymbol\omega_i) 表示从该方向到达表面的辐亮度,Lo(p,ωo)L_o(\mathbf p,\boldsymbol\omega_o) 表示沿该方向离开表面的辐亮度。固定这个约定后,法线点积、半球范围和后续的 BRDF 参数才不会混乱。

BRDF

表面把入射能量分配到出射方向的规律由双向反射分布函数 Bidirectional Reflectance Distribution Function, BRDF 描述。来自 ωi\boldsymbol\omega_i 的微分辐照度是

dEi=Li(ωi)cos⁡θi dωi.\mathrm dE_i=L_i(\boldsymbol\omega_i)\cos\theta_i\,\mathrm d\omega_i.

BRDF 定义为

fr(ωi→ωo)=dLo(ωo)dEi(ωi)=dLo(ωo)Li(ωi)cos⁡θi dωi.f_r(\boldsymbol\omega_i\to\boldsymbol\omega_o) =\frac{\mathrm dL_o(\boldsymbol\omega_o)} {\mathrm dE_i(\boldsymbol\omega_i)} =\frac{\mathrm dL_o(\boldsymbol\omega_o)} {L_i(\boldsymbol\omega_i)\cos\theta_i\,\mathrm d\omega_i}.

BRDF 的单位是 sr−1^{-1}。它是一个分配比例,不是最终颜色;最终出射辐亮度还取决于入射辐亮度和积分范围。理想镜面把能量集中到单一方向,可以用 Dirac delta 分布表示;普通方向采样命中这个方向的概率为0,但它的积分可以非零。粗糙金属和釉面陶瓷的反射集中在有限宽度的反射瓣 Reflection Lobe,这就是 glossy 反射。

镜面反射把能量集中在单一方向,glossy 反射则分布在有限宽度的反射瓣内

图中清晰的茶壶轮廓表示窄反射瓣,模糊且展宽的轮廓表示较宽的 glossy 反射瓣。查询一个方向的镜面反射不能代表宽瓣材质,后者必须对一段方向范围累加贡献。

一个可用的反射模型至少要满足非负性和互易性:

fr(ωi→ωo)≥0,f_r(\boldsymbol\omega_i\to\boldsymbol\omega_o)\ge0,

fr(ωi→ωo)=fr(ωo→ωi).f_r(\boldsymbol\omega_i\to\boldsymbol\omega_o) =f_r(\boldsymbol\omega_o\to\boldsymbol\omega_i).

透射材质不能只用反射 BRDF,应使用同时包含反射和透射的 BSDF,并按相应测度、法线约定和折射率处理 PDF 与能量。

反射方程

一个表面点沿观察方向反射的辐亮度,是入射半球上所有方向贡献的总和:

Lr(p,ωo)=∫Ω+fr(p,ωi,ωo)Li(p,ωi)cos⁡θi dωi.L_r(\mathbf p,\boldsymbol\omega_o) =\int_{\Omega^+} f_r(\mathbf p,\boldsymbol\omega_i,\boldsymbol\omega_o) L_i(\mathbf p,\boldsymbol\omega_i) \cos\theta_i\,\mathrm d\omega_i.

被积函数的三个因子分别对应入射光的辐亮度、表面对方向的响应,以及投影面积的余弦因子。一个点光源可以看成单项贡献;多个点光源可以求和;面光源则占据一片方向范围,求和在极限下变成积分。

反射方程只说明一次表面响应。如果入射辐亮度来自另一个表面的反射,那么还需要在另一个点继续求解,这使问题变成全局递归耦合。

渲染方程

如果表面自身会发光,在反射方程中加入自发光项 LeL_e:

Lo(p,ωo)=Le(p,ωo)+∫Ω+fr(p,ωi,ωo)Li(p,ωi)cos⁡θi dωi.L_o(\mathbf p,\boldsymbol\omega_o) =L_e(\mathbf p,\boldsymbol\omega_o) +\int_{\Omega^+} f_r(\mathbf p,\boldsymbol\omega_i,\boldsymbol\omega_o) L_i(\mathbf p,\boldsymbol\omega_i) \cos\theta_i\,\mathrm d\omega_i.

这就是渲染方程 Rendering Equation。它由 Kajiya 在《The Rendering Equation》中提出;早期中文资料也把 rendering 译作绘制,因此有“绘制方程”的旧称。它描述表面一点沿某个出射方向的全部光:一部分来自自身发光,另一部分来自所有入射方向的反射。

渲染方程把自发光与所有方向的反射贡献相加

图中观察方向指向相机,入射方向来自上半球;另一表面微元沿连线提供入射辐亮度。自发光项是已知输入,另一表面的出射辐亮度又依赖别处的渲染方程,因此未知量同时出现在方程两侧。

可见性

只计算直接光照时,光源与着色点之间的可见性决定光源贡献是否存在。沿 ωi\boldsymbol\omega_i 从 p\mathbf p 发射射线,设最近交点为 p′\mathbf p',忽略参与介质时可以写成

Li(p,ωi)=V(p,p′)Lo(p′,−ωi).L_i(\mathbf p,\boldsymbol\omega_i) =V(\mathbf p,\mathbf p')L_o(\mathbf p',-\boldsymbol\omega_i).

VV 是可见性函数,无遮挡时为1,有遮挡时为0。若 p′\mathbf p' 已经是沿该方向的最近交点,通常它与 p\mathbf p 之间没有别的遮挡,V=1V=1;若显式连接任意两个表面点,则仍需发射阴影光线检查中间是否有遮挡。

只计算直接光照时,光源到可见表面的可见性决定最终亮度

图中被天空或光源直接照到的石板和柱子较亮,走廊和墙面遮挡出的区域接近黑色;同一个着色点若只靠间接光照才能接收能量,直接光照版本不会把它点亮。

算子与弹射

把可见性、几何关系和表面反射合并为光传输算子 KK,把自发光记作 EE,渲染方程可以抽象成

L=E+KL.L=E+KL.

若把空间位置和方向离散成有限状态,LL 与 EE 可以看作向量,KK 可以看作矩阵:

Li=Ei+∑jKijLj.L_i=E_i+\sum_jK_{ij}L_j.

经典 Radiosity 进一步假设表面是漫反射,把方向依赖消去后只求解面片之间的能量;一般的“位置和方向离散”不应都称为 Radiosity。

移项得到

(I−K)L=E.(I-K)L=E.

若逆算子存在且级数收敛,形式上可以展开为 Neumann 级数:

L=(I−K)−1E=E+KE+K2E+K3E+⋯ .L=(I-K)^{-1}E =E+KE+K^2E+K^3E+\cdots.

EE 是自发光,KEKE 是光源经一次表面反射后到达相机的贡献,K2EK^2E 是两次反射,依此类推。零次弹射表示相机直接看到光源;一次弹射对应通常所说的直接光照;两次及以上的项组成间接光照;直接光照与全部间接光照合在一起就是全局光照。

级数收敛需要反复传输后的贡献衰减,吸收和能量逸出通常会帮助收敛。完全封闭、无损的理想场景可能使算子谱半径达到1,不能不加条件地声称任意场景都能按几何级数收敛。

路径经过 16 次反弹后仍可把间接光和颜色传递到相机

图中允许更多反弹后,柱间暗部、墙面和吊灯附近出现来自其他表面的反射光;红色表面附近的浅色区域被染红,说明高阶传输不仅增加亮度,也传递颜色。

增加允许的弹射次数时,原本直接光照覆盖不到的区域会被间接光照亮,红墙附近的浅色表面会出现颜色互染 Color Bleeding。反弹次数从8增加到16通常只带来较小变化,因为能量已经接近稳定;这与相机长时间打开快门导致过曝不同,前者是单位时间的稳态照明,后者是时间上累积到达传感器的能量。

概率与期望

连续随机变量 XX 用概率密度函数 Probability Density Function, PDF 描述。PDF 必须满足

p(x)≥0,∫p(x) dx=1.p(x)\ge0,\qquad \int p(x)\,\mathrm dx=1.

PDF 是密度而不是某个点的概率,因此单点数值可以大于1;只有在一个区间上积分后才得到该区间的概率。

某个小区间的概率是 PDF 在该区间上的面积,而不是曲线在某个点的高度。随机变量函数的期望为

E[f(X)]=∫f(x)p(x) dx.\mathbb E[f(X)]=\int f(x)p(x)\,\mathrm dx.

离散随机变量则把积分换成求和。均匀骰子的期望是

1+2+3+4+5+66=3.5.\frac{1+2+3+4+5+6}{6}=3.5.

蒙特卡洛积分

渲染方程中的积分通常很难写出解析原函数。蒙特卡洛积分 Monte Carlo Integration 用随机样本估计定积分。若

I=∫abf(x) dx,I=\int_a^b f(x)\,\mathrm dx,

先回到熟悉的 Riemann 积分直觉:把 [a,b][a,b] 分成许多小区间,在每个区间取一个样本 xix_i,用高度 f(xi)f(x_i)、宽度为区间长度的矩形近似曲线下面积。均匀随机采样时,也可以把每个样本看成一个宽度为 (b−a)(b-a) 的随机矩形,再对矩形面积取平均:

I≈b−aN∑i=1Nf(Xi).I\approx\frac{b-a}{N}\sum_{i=1}^{N}f(X_i).

这个均匀公式其实已经是一般 f/pf/p 公式的特例。若在 [a,b][a,b] 上使用常数 PDF p(x)=Cp(x)=C,归一化条件给出

∫abC dx=1⟹C=1b−a.\int_a^b C\,\mathrm dx=1 \quad\Longrightarrow\quad C=\frac1{b-a}.

因此 f(Xi)/p(Xi)=(b−a)f(Xi)f(X_i)/p(X_i)=(b-a)f(X_i),恰好恢复上面的矩形面积平均。先理解这个特殊情形,再推广到任意 PDF,可以看清分母 pp 的来源。

从 PDF p(x)p(x) 采样 XiX_i,则估计量为

I^N=1N∑i=1Nf(Xi)p(Xi).\hat I_N=\frac1N\sum_{i=1}^{N}\frac{f(X_i)}{p(X_i)}.

这是因为

E[f(X)p(X)]=∫f(x)p(x)p(x) dx=∫f(x) dx.\mathbb E\left[\frac{f(X)}{p(X)}\right] =\int\frac{f(x)}{p(x)}p(x)\,\mathrm dx =\int f(x)\,\mathrm dx.

只要 f(x)≠0f(x)\ne0 的区域都有 p(x)>0p(x)>0,并且期望存在,估计就是无偏的。无偏 Unbiased 不表示一次样本等于真值,只表示重复取样的平均期望等于真值。独立样本方差满足

Var⁡[I^N]=Var⁡[f(X)/p(X)]N,\operatorname{Var}[\hat I_N] =\frac{\operatorname{Var}[f(X)/p(X)]}{N},

因此标准差按 1/N1/\sqrt N 下降,噪声减半通常需要约四倍样本。积分在哪个变量上定义,就必须从同一个变量的 PDF 采样;如果积分建立在面积域,不能直接拿方向域样本代入。

选择更贴近被积函数的 PDF,可以在相同样本数下降低方差,这叫重要性采样 Importance Sampling。它不改变积分的真值,只改变样本分布和权重。PDF 过低但贡献很大的区域会产生高能量样本和噪声,因此采样分布的支持域和权重必须同步正确。

积分面积与均匀 PDF

上图浅蓝区域是待求积分,曲线高度随位置改变;下图均匀 PDF 的高度为 1/(b−a),矩形面积为 1。各位置被等概率采到,所以把高度的样本平均乘区间长度,就得到面积估计。

路径追踪

Whitted-style 追踪把理想镜面反射/折射继续递归,却在漫反射表面停止。它对纯镜面材质合理,对 glossy 材质却只沿一条理想镜面方向查询,无法覆盖有限宽度的反射瓣;对漫反射表面停止,也会漏掉漫反射表面之间的互相照明。

Cornell Box 的直接光照结果中,顶部光源照不到的天花板和墙面很暗;加入全局光照后,地板和红墙的反射会把能量与颜色带到其他表面,这正是路径追踪要恢复的多次传输。

直接光与全局光

左图顶部光源照不到的天花板和侧墙较暗;右图允许漫反射表面继续传输,红墙的颜色进入附近表面,暗处也获得间接照明。两幅图几何不变,变化的是表面间的多次反射。

把 Monte Carlo 估计直接应用到反射方程,就得到路径追踪。若在法线所在半球上均匀按立体角采样,

p(ωi)=12π.p(\boldsymbol\omega_i)=\frac1{2\pi}.

反射方程的估计为

Lr(p,ωo)≈1N∑k=1Nfr(ωk,ωo)Li(ωk)cos⁡θkp(ωk).L_r(\mathbf p,\boldsymbol\omega_o) \approx\frac1N\sum_{k=1}^{N} \frac{f_r(\boldsymbol\omega_k,\boldsymbol\omega_o) L_i(\boldsymbol\omega_k)\cos\theta_k} {p(\boldsymbol\omega_k)}.

下面先只计算直接光,假设光源是有限面积的发光表面。半球样本的 PDF 必须按立体角定义:

1
2
3
4
5
6
7
8
DirectHemisphere(p, wo, N):
sum = 0
重复 N 次:
从 p 的上半球采样 wi,记录 pdfOmega
q = 沿 wi 的最近场景交点
若 q 是发光表面:
sum += Le(q, -wi) * fr(p, wi, wo) * cosine / pdfOmega
返回 sum / N

cosine 是 max(0, n·wi)。未命中光源的方向在这个直接光版本中返回零;它们可能包含间接光,下一步要继续求解。
对 Lambertian 表面可以使用余弦加权采样

p(ω)=cos⁡θπ,p(\boldsymbol\omega)=\frac{\cos\theta}{\pi},

它会减少样本落在掠射方向的比例,并与被积函数中的余弦因子部分抵消。均匀采样和余弦加权都可以无偏,但方差不同。

Whitted 风格在漫反射表面停止,无法得到漫反射表面之间的互相照明。路径追踪在每个交点都按 BSDF 或 BRDF 采样一个新的方向,因此一条样本路径可以经过漫反射、镜面或折射表面继续前进。每个反弹点只保留一条后继光线,是为了避免每层都发射 NN 条光线导致 NdepthN^{depth} 爆炸;更多路径通过增加每像素样本数获得。

多分支射线增长

第一层发出 100 条射线,每条再发 100 条便得到 10,000 条,再下一层达到 1,000,000 条。每层只继续一条随机后继时,一条路径仍是一条折线,更多样本改由更多路径提供。

1
2
3
4
5
6
7
对每个像素:
累积值设为零
在像素内部选取 N 个位置
对每个位置:
生成一条相机光线
累积该路径的辐亮度估计
把累积值除以 N,得到像素平均

令 β\boldsymbol\beta 表示从相机走到当前交点的累计路径权重,初始为1。若在交点 xk\mathbf x_k 采样新方向 ωk+1\boldsymbol\omega_{k+1},采样 PDF 为 pkp_k,则

βk+1=βkfr(xk,ωk+1,ωk)max⁡(0,nk⋅ωk+1)pk(ωk+1).\boldsymbol\beta_{k+1} =\boldsymbol\beta_k \frac{f_r(\mathbf x_k,\boldsymbol\omega_{k+1},\boldsymbol\omega_k) \max(0,\mathbf n_k\cdot\boldsymbol\omega_{k+1})} {p_k(\boldsymbol\omega_{k+1})}.

当路径命中发光表面时,像素得到的贡献为

βkLe(xk,ωk).\boldsymbol\beta_kL_e(\mathbf x_k,\boldsymbol\omega_k).

对不透明表面,采样方向应位于法线同侧;若使用包含透射的 BSDF,需要按相应的绝对余弦、折射率和测度处理。路径追踪还会自然产生颜色互染:有色表面反射的光会改变邻近表面的照明颜色。

路径深度还会影响透明物体后的发光贡献。一个灯罩或玻璃球可能要求光线先进入再穿出多个界面,允许的反弹次数过少时,灯体的贡献会暂时消失;增加深度后它才会出现。具体所需次数取决于场景几何和实现对“首交点/透射界面”的计数方式,不能把某个示例中的固定次数推广到所有透明物体。

这里的 path tracing 是更广义 ray tracing 方法集合中的一种。Whitted-style 沿确定的镜面方向递归;单向 path tracing 从相机端随机走向光源;双向 path tracing(BDPT)同时从相机和光源端生成路径;photon mapping、Metropolis Light Transport(MLT)、Vertex Connection and Merging(VCM)以及 UPBP 等方法,则用不同的路径连接、密度估计或马尔可夫采样策略处理难以命中的光路。它们共同目标都是估计同一个光传输方程,只是采样和连接方式不同。

把非光源交点继续递归,便得到一般的多分支估计。以下 depth 只是临时预算,确定性截断的偏差随后由随机终止处理:

1
2
3
4
5
6
7
8
9
10
11
ShadeBranch(p, wo, N, depth):
若 depth == 0,返回 0
sum = 0
重复 N 次:
采样 wi,记录 pdfOmega
q = 沿 wi 的最近交点
若无交点,Li = 0
否则若 q 发光,Li = Le(q, -wi)
否则 Li = ShadeBranch(q, -wi, N, depth - 1)
sum += Li * fr(p, wi, wo) * cosine / pdfOmega
返回 sum / N

令 N=1 后,每个顶点只生成一个后继,一次估计是一条路径。每像素多次调用这种单路径估计,再平均,仍可以收敛到同一个积分。这里省略环境光及理想镜面 delta 分支,不能把它当成支持任意材质的完整渲染器。

像素采样与噪声

一个像素代表一小块成像平面,而不是一个数学点。可以在像素内部随机选择多个位置,从相机穿过这些位置发射主光线,再平均所有路径的辐亮度。每像素路径样本数称为 Samples Per Pixel, SPP。

像素采样不仅用于抗锯齿,还可以同时近似镜头孔径、时间和后续光路的积分。低 SPP 时图像有颗粒,高 SPP 时统计平均更稳定;这种颗粒是有限样本的方差,不是几何边缘的锯齿。

路径终止

真实光线没有固定最大反弹次数。若程序强行在深度上限截断,所有更长路径的能量都会被系统性丢掉,图像通常偏暗。Russian Roulette 用随机终止把确定性截断偏差换成方差。

设继续概率为 P∈(0,1)P\in(0,1),当前路径若继续得到的贡献为 LrL_r,则返回

L={Lr/P,以概率 P,0,以概率 1−P.L= \begin{cases} L_r/P,&\text{以概率 }P,\\ 0,&\text{以概率 }1-P. \end{cases}

其期望为

E[L]=PLrP+(1−P)0=Lr.\mathbb E[L]=P\frac{L_r}{P}+(1-P)0=L_r.

幸存路径的 throughput 应同步除以 PP。若把“额外成功继续的次数”记为 KK,则

Pr⁡(K=k)=(1−P)Pk,k=0,1,2,…,\Pr(K=k)=(1-P)P^k,\qquad k=0,1,2,\dots,

因此

E[K]=P1−P.\mathbb E[K]=\frac{P}{1-P}.

若把最后一次终止尝试也计入,总尝试次数为 K+1K+1,其期望是 1/(1−P)1/(1-P)。P=1P=1 时路径不会按该规则终止,有限期望不成立。PP 越小,路径越短、计算越省,但幸存路径权重越大、噪声越高。工程实现常令 PP 与当前 throughput 的最大通道相关,并限制在 (0,1)(0,1) 内。

单路径版本在继续前抽取一次随机数,幸存路径除以继续概率 P。若相机直接命中光源,应由相机光线入口返回 Le:

1
2
3
4
5
6
7
8
9
ShadeRR(p, wo):
选择 0 < P < 1
若 uniformRandom() >= P,返回 0
采样 wi,记录 pdfOmega
q = 沿 wi 的最近交点
若无交点,Li = 0
否则若 q 发光,Li = Le(q, -wi)
否则 Li = ShadeRR(q, -wi)
返回 Li * fr(p, wi, wo) * cosine / (pdfOmega * P)

光源采样

只从 BRDF 方向随机采样时,小面积光源在半球上占很小立体角,大量样本会打到非光源方向而得到零贡献。更有效的策略是直接在光源面积 AA 上均匀采样点 x′\mathbf x':

pA(x′)=1A.p_A(\mathbf x')=\frac1A.

令着色点为 x\mathbf x,光源点方向为

ωi=x′−x∥x′−x∥.\boldsymbol\omega_i=\frac{\mathbf x'-\mathbf x} {\lVert\mathbf x'-\mathbf x\rVert}.

若光源法线为 n′\mathbf n',光源微元朝着着色点的投影面积为

dA⊥=∣n′⋅(−ωi)∣dA.\mathrm dA^\perp =\left|\mathbf n'\cdot(-\boldsymbol\omega_i)\right|\mathrm dA.

它在着色点处张开的立体角为

dωi=∣n′⋅(−ωi)∣∥x′−x∥2 dA.\mathrm d\omega_i =\frac{\left|\mathbf n'\cdot(-\boldsymbol\omega_i)\right|} {\lVert\mathbf x'-\mathbf x\rVert^2}\,\mathrm dA.

这就是面积测度到立体角测度的 Jacobian。若需要立体角 PDF,需做相应转换:

pω(ωi)=pA(x′)∥x′−x∥2∣n′⋅(−ωi)∣.p_\omega(\boldsymbol\omega_i) =p_A(\mathbf x') \frac{\lVert\mathbf x'-\mathbf x\rVert^2} {\left|\mathbf n'\cdot(-\boldsymbol\omega_i)\right|}.

定义

cos⁡θ=max⁡(0,n⋅ωi),cos⁡θ′=max⁡(0,n′⋅(−ωi)),\cos\theta=\max(0,\mathbf n\cdot\boldsymbol\omega_i), \qquad \cos\theta'=\max(0,\mathbf n'\cdot(-\boldsymbol\omega_i)),

则直接光照可写为光源面积上的积分:

Ldir=∫ALe(x′→x)fr(x,ωi,ωo)cos⁡θcos⁡θ′∥x′−x∥2V(x,x′) dA.L_{dir} =\int_A L_e(\mathbf x'\to\mathbf x) f_r(\mathbf x,\boldsymbol\omega_i,\boldsymbol\omega_o) \frac{\cos\theta\cos\theta'} {\lVert\mathbf x'-\mathbf x\rVert^2} V(\mathbf x,\mathbf x')\,\mathrm dA.

若按面积 PDF 采样一个光源点,单样本估计为

L^dir=Le(x′,−ωi)fr(x,ωi,ωo)cos⁡θcos⁡θ′V(x,x′)∥x′−x∥2pA(x′).\widehat L_{dir} =\frac{L_e(\mathbf x',-\boldsymbol\omega_i) f_r(\mathbf x,\boldsymbol\omega_i,\boldsymbol\omega_o) \cos\theta\cos\theta' V(\mathbf x,\mathbf x')} {\lVert\mathbf x'-\mathbf x\rVert^2p_A(\mathbf x')}.

其中 VV 是可见性,光源与着色点之间无遮挡为1,被遮挡为0。实现时从着色点向采样光源点发射一条阴影光线,并把 tmaxt_{max} 限制在光源距离内,防止把光源之后的物体误判为遮挡。

小光源更难被方向样本命中

三幅图保持半球方向范围不变,光源从左到右变小。红色方向样本大多没有指向光源,示意分别用约 5、500、50,000 条射线表达命中所需的数量级变化,具体比例由光源立体角决定。直接在蓝色光源区域采样可避免大量零贡献查询。

面积微元对应立体角

光源微元 dA 位于 x′,它朝向着色点 x 的投影由法线 n′ 与夹角 θ′ 决定;在以 x 为中心的方向半球上,它占据 dω。接收端另有法线 n 与夹角 θ,两端余弦分工不同,距离平方把投影面积换成方向范围。

被遮挡的光源样本

蓝色圆表示表面点与所选光源微元之间的遮挡物。即使面积 PDF 和几何权重都已正确计算,连接线段被挡住时,这个样本仍需返回零贡献;其他无遮挡光源样本不受影响。

把光源采样与半球采样分开,就是 Next-Event Estimation 的基本思想:光源项由面积采样直接估计,剩余方向继续承担间接光照。面积采样和 BSDF 采样各有擅长的区域,实际渲染器可以使用 Multiple Importance Sampling, MIS 组合它们。组合时必须先把两个 PDF 转到同一种测度,再用例如 balance heuristic 分配权重,避免同一条光路被重复计算。

若光源采样和 BSDF 采样在同一立体角测度下各取一个样本,PDF 分别为 pLp_L 与 pBp_B,一个简单的 balance heuristic 为

wL=pLpL+pB,wB=pBpL+pB.w_L=\frac{p_L}{p_L+p_B}, \qquad w_B=\frac{p_B}{p_L+p_B}.

若策略 ii 各取 nin_i 个样本,多样本版本使用

wi(x)=nipi(x)∑jnjpj(x).w_i(\mathbf x)=\frac{n_i p_i(\mathbf x)}{\sum_j n_jp_j(\mathbf x)}.

它把两种策略对同一光路的贡献合并为一次估计;镜面 delta 事件和无法用普通连续 PDF 表示的路径仍需单独处理。

理想点光源在方向域是 delta 分布,连续半球随机采样命中它的概率为0。点光源应显式使用从着色点指向光源的唯一方向,或用足够小的面积光源近似;不能等待普通方向样本偶然命中。

直接光面积采样、遮挡测试和间接光方向采样可以合并为下面的版本。它假设不透明非 delta 材质与面积光源,不处理环境和透射:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ShadeNEE(p, wo):
在面积光源上采样 x,记录 pdfArea
计算 wi、距离 r、接收余弦和光源余弦
Ldir = 0
若 p 到 x 的有限线段无遮挡:
Ldir = Le(x, -wi) * fr(p, wi, wo)
* cosSurface * cosLight / (r * r * pdfArea)
选择继续概率 P
若 uniformRandom() >= P,返回 Ldir
在半球采样新的 wi,记录 pdfOmega
q = 沿 wi 的最近交点
Lind = 0
若 q 存在且不是光源:
Lind = ShadeNEE(q, -wi) * fr(p, wi, wo)
* cosine / (pdfOmega * P)
返回 Ldir + Lind

最后的“不是光源”条件避免重复累加:光源项已经由面积采样估计。若还保留方向采样命中光源的贡献,就需要用 MIS 正确分配权重;简单地把两者相加会把同一直接光算两遍。阴影光线的上限必须止于采样光源点之前,不能把光源后方的几何算成遮挡。

噪声控制

有限样本的统计误差会表现为颗粒。增加 SPP 可以让估计收敛,但成本随样本数增加。降低噪声的方向包括:

  • 使用与光源和 BRDF 形状匹配的重要性采样;
  • 对像素、时间和镜头维度使用分层或低差异序列;
  • 对高能量异常路径进行审慎处理;
  • 使用结合几何、法线和反照率的图像降噪。

低差异序列试图让样本既不成簇,也不留下大空洞;它改善同样样本数下的覆盖,但不是无偏性的替代品。直接裁剪高能量路径会降低能量并引入偏差,必须权衡成本与质量。

像素内样本做简单平均,相当于盒式重建滤波。也可以使用中心权重更高、边缘衰减的 Pixel Reconstruction Filter,在不增加样本数的情况下改变噪声与锐度的取舍。

不同 SPP 下路径追踪噪声随样本数增加而降低

图中低 SPP 一侧有孤立的亮暗颗粒,高 SPP 一侧的地面和软阴影更平滑;几何和材质没有变化,变化的是每个像素的独立路径样本数。

辐亮度不是显示器直接使用的颜色。输出前还要经过伽马校正、色彩空间转换和 HDR 色调映射,把高动态范围的辐亮度压缩到显示范围。这些操作位于成像链路末端,不能与传输估计本身混为一谈;它们会改变最终画面中噪声和亮度的观感,因此收敛判断应在估计空间与显示空间分别进行。