辐射能量

着色模型中的“光强”往往是没有单位的经验参数。物理渲染需要区分能量在时间、面积和方向上的分布,辐射度量学 Radiometry 为这些量提供了统一定义。

辐射能量 Radiant Energy 记为 QQ,单位是焦耳。单位时间通过某个截面或由光源发出的能量称为 辐射通量 Radiant Flux

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

单位是瓦特。通量描述总功率,还没有说明能量朝哪个方向传播或落在多大面积上。

立体角

二维角度可以用圆弧长度除以半径,三维方向范围则用 立体角 Solid Angle 表示。球面面积 AA 在半径为 rr 的球心张开的立体角为

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

单位是球面度 sr。单位球的整个球面面积为 4π4\pi,所以全空间立体角也是 4π4\pi;一个半球对应 2π2\pi

球坐标中的小块球面,一条边长为 rdθ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ω=dA/r2\mathrm d\omega=\mathrm dA/r^2

dω=sinθdθdϕ.\mathrm d\omega=\sin\theta\,\mathrm d\theta\,\mathrm d\phi.

这里的方向向量可以写成

ω=(sinθcosϕ,sinθsinϕ,cosθ).\boldsymbol\omega= (\sin\theta\cos\phi,\, \sin\theta\sin\phi,\, \cos\theta).

因子 sinθ\sin\theta 表示靠近赤道的同样角度间隔覆盖更大球面面积。在半球上均匀采样方向,指的是每单位立体角概率相同,并不等同于让 θ\theta[0,π/2][0,\pi/2] 上均匀分布。

辐射强度

辐射强度 Radiant Intensity 描述点光源向某个方向单位立体角发出的通量:

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

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

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

辐射强度只适用于讨论源的方向分布。现代灯具常有明显的角度分布,同样总功率的两个光源可能因配光曲线不同而产生完全不同的照明。

辐照度

辐照度 Irradiance 表示单位表面面积接收的通量:

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

单位是 W/m2\mathrm m^2。辐亮度与微分通量的基本关系是

d2Φ=Li(x,ωi)cosθidAdωi.\mathrm d^2\Phi = L_i(\mathbf x,\boldsymbol\omega_i) \cos\theta_i\, \mathrm dA\,\mathrm d\omega_i.

对入射半球积分,再除以表面面积:

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

因此来自一个微分方向的辐照度为

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

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

对点光源,强度满足 dΦ=Idω\mathrm d\Phi=I\,\mathrm d\omega。面积元 dA\mathrm dA 从光源看去张开的立体角为

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

所以

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

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

余弦衰减来自表面投影,平方反比来自球面面积随 r2r^2 增长,两者的几何原因不同。

辐亮度

辐亮度 Radiance 同时描述单位投影面积、单位立体角内传播的通量:

L(x,ω)=d2ΦdAdω=d2ΦcosθdAdω.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 ⁣ ⁣sr\mathrm m^2\!\cdot\!\mathrm{sr})。它可以理解为沿一条光线携带的光,是渲染中最重要的量。在真空、无吸收、无散射、无额外发光且没有遮挡时,辐亮度沿直线保持不变;距离变化引起的光束截面积和对应立体角正好抵消。

入射辐亮度 Li(p,ωi)L_i(\mathbf p,\boldsymbol\omega_i) 表示光从方向 ωi\boldsymbol\omega_i 到达表面,出射辐亮度 Lo(p,ωo)L_o(\mathbf p,\boldsymbol\omega_o) 表示光沿 ωo\boldsymbol\omega_o 离开表面。方向通常都约定为从表面点向外指。

BRDF

双向反射分布函数 Bidirectional Reflectance Distribution Function,简称 BRDF,描述某一入射方向产生的微分辐照度,有多少被反射到指定出射方向:

fr(ωiωo)=dLo(ωo)dEi(ωi)=dLo(ωo)Li(ωi)cosθidωi.f_r(\boldsymbol\omega_i\rightarrow\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}.

它的单位是 sr1\mathrm{sr}^{-1}。BRDF 同时编码颜色、粗糙度和方向性;相同几何与光照使用不同 BRDF,就会呈现塑料、金属、织物等不同外观。

在图形学记号中,x\mathbf x 表示表面上的位置,ωi\boldsymbol\omega_iωo\boldsymbol\omega_o 表示从该位置向外指的单位方向;ωo\boldsymbol\omega_o 不是另一个空间位置。透射材质不能只使用反射的 BRDF,路径上的散射函数应使用 BSDF Bidirectional Scattering Distribution Function,其中同时包含反射和透射分支,并按各自的测度与折射率项计算 PDF。

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

反射方程

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

Lr(p,ωo)=Ω+fr(p,ωi,ωo)Li(p,ωi)cosθidω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.

若表面本身还能发光,完整 渲染方程 Rendering Equation

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

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

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

沿 ωi\boldsymbol\omega_ip\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 是两点间的可见性。一个表面的出射光成为另一表面的入射光,这条关系把局部反射积分连接成全局递归方程。

把传播、可见性和表面反射合并为线性光传输算子 KK,发射项记为 EE

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

若把场景位置和方向离散成有限状态,LLEE 可以看作向量,KK 可以看作矩阵:

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

KijK_{ij} 汇总从状态 jj 传播到状态 ii 的可见性、几何项和 BRDF。这样,L=E+KLL=E+KL 表示每个状态的出射光等于自身发光,加上所有其他状态经过一次传输后的贡献。

(IK)1(I-K)^{-1} 存在,且 Neumann 级数收敛,形式上有

L=(IK)1E=E+KE+K2E+.L=(I-K)^{-1}E = E+KE+K^2E+\cdots.

EE 是所有表面的自发光,KEKE 表示发光经过一次反射后的贡献,K2EK^2E 表示两次反射。反射会损耗能量时,光传输算子的谱半径通常小于 1,级数才能收敛。光栅化中的局部着色只保留有限反射项,完整 全局光照 Global Illumination 需要估计整个级数。

渲染方程的难点来自 LiL_i 本身又是别处的 LoL_o;它是全场景耦合的积分方程,而不只是一个局部着色公式。

概率基础

连续随机变量 XX概率密度函数 Probability Density Function,简称 PDF,满足

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

函数 f(X)f(X) 的期望为

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

若从 p(x)p(x) 独立采样 X1,,XNX_1,\ldots,X_N,则积分

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

可用 蒙特卡洛积分 Monte Carlo Integration 的估计量

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

近似。令单样本随机变量

Y=f(X)p(X),Xp.Y=\frac{f(X)}{p(X)}, \qquad X\sim p.

只要 f(x)0f(x)\ne0 的位置都有 p(x)>0p(x)>0,并且期望存在,

E[Y]=f(x)p(x)p(x)dx=f(x)dx=I.\mathbb E[Y] = \int \frac{f(x)}{p(x)} p(x)\,\mathrm dx = \int f(x)\,\mathrm dx =I.

独立样本平均的期望仍为 II,所以估计无偏。独立同分布时,

Var[I^N]=Var[Y]N.\operatorname{Var}[\hat I_N] = \frac{\operatorname{Var}[Y]}{N}.

标准差按 1/N1/\sqrt N 下降,降低一半噪声大约需要四倍样本。

采样分布与被积函数的形状越接近,方差越小。若在函数几乎为零的区域浪费大量样本,而高能量区域很少被选中,估计仍可能无偏,但图像会有严重噪点。

半球采样

直接在表面半球上均匀采样时,

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

反射方程的 Monte Carlo 估计为

Lr(p,ωo)1Nk=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) }.

对每个方向发射一条光线,找到下一交点并递归查询其出射辐亮度,就得到朴素 路径追踪 Path Tracing。每一层若继续生成 NN 条光线,光线数量会按 NdepthN^{\text{depth}} 爆炸。实际做法是在每个反弹点只选一个后继方向,再从相机对同一像素发射很多独立路径。

路径携带一个 throughput β\boldsymbol\beta,初始为 1。令 ωk\boldsymbol\omega_k 从当前顶点 xk\mathbf x_k 指向上一顶点,ωk+1\boldsymbol\omega_{k+1} 从当前顶点指向新采样的下一顶点,两者都按离开表面的方向定义。在顶点 xk\mathbf x_k 按 PDF pkp_k 采样 ωk+1\boldsymbol\omega_{k+1} 后,

β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}) }.

这里讨论的是不透明表面的反射 BRDF,采样方向应位于法线同侧的支持域;落到下半球的方向贡献为零。若改用包含透射的 BSDF,需按对应 lobe 的法线约定和测度使用绝对余弦,并同时处理折射率项。

当路径命中发光表面时,它对像素的贡献是

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

BRDF、余弦和采样概率沿路径逐项相乘,这正是递归 Monte Carlo 估计器展开后的权重。

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

像素最终取多个样本的平均。每像素样本数 Samples Per Pixel,简称 SPP,表示每个像素追踪的独立相机样本数。这些路径不必经过场景中的同一个首交点:像素内位置抖动会改变主光线,镜头采样会改变光线原点,时间采样会改变场景状态;即使固定主光线,后续 BSDF 采样也会生成不同路径。SPP 实际同时近似像素面积、孔径、时间和光路空间上的积分。

SPP=1 且只估计直接光照时,结果可能因为没有随机间接反弹而显得很干净,但它不包含全局光照中的间接照明、遮挡间接光和 color bleeding。因此“干净”不等于已经收敛;要恢复这些传输效应,必须增加路径深度、使用适当的 BSDF/光源采样,或明确采用有偏的近似。

俄式轮盘

固定最大深度会系统性丢失更长路径,产生偏差。Russian Roulette 用随机方式终止路径:设继续概率为 PP,当前反射估计为 LrL_r,则返回

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

它的期望仍为 LrL_r

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

在路径实现中,幸存后执行

ββP,\boldsymbol\beta \leftarrow \frac{\boldsymbol\beta}{P},

终止路径的后续贡献为零。继续概率可取当前 throughput 的最大颜色分量并限制在合理范围内。PP 过低会让幸存路径权重过大、噪声增加;过高则节省不了多少计算。

光源采样

只从 BRDF 随机选择方向时,小面积光源很难被击中,大量样本贡献为零。更有效的方法是直接在光源面积 AA 上采样点。若均匀采样,

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

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

从着色点 x\mathbf x 观察光源微元 dA\mathrm dA,与视线垂直的投影面积为

dA=n(ωi)dA.\mathrm dA^\perp = |\mathbf n'\cdot(-\boldsymbol\omega_i)| \mathrm dA.

它投影到以 x\mathbf x 为球心、半径 rr 的球面上时,立体角等于投影面积除以 r2r^2

dωi=n(ωi)xx2dA,\mathrm d\omega_i = \frac{ |\mathbf n'\cdot(-\boldsymbol\omega_i)| }{ \lVert\mathbf x'-\mathbf x\rVert^2 } \mathrm dA,

这就是从面积测度转换到立体角测度所需的 Jacobian。令

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(xx)frcosθcosθxx2V(x,x)dA.L_{\mathrm{dir}} = \int_A L_e(\mathbf x'\rightarrow\mathbf x) f_r \frac{\cos\theta\,\cos\theta'} {\lVert\mathbf x'-\mathbf x\rVert^2} V(\mathbf x,\mathbf x') \mathrm dA.

VV 是可见性项,连线未被遮挡时为 1,否则为 0。若按面积 PDF pAp_A 采样一个光源点,单样本估计量为

L^dir=Le(x,ωi)fr(x,ωi,ωo)cosθcosθV(x,x)xx2pA(x).\widehat L_{\mathrm{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^2 p_A(\mathbf x') }.

这条式子同时包含发光、材质响应、两端余弦、距离衰减、可见性和采样概率,缺少任一项都会改变单位或期望。

理想点光源在方向域中是 delta 分布。连续地随机采样半球,恰好命中一个无面积点的概率为零,因此不能只靠普通 BSDF 路径等待它被击中。实际渲染器会显式选择点光源,直接使用从着色点指向光源的唯一方向计算贡献;多个点光源的结果可以离散求和。把点光源近似成很小的面积光也可行,但面积越小,若采样策略不匹配,方差越高。

实践中把光照拆成两个互补估计器:显式采样光源(next-event estimation)负责直接光照,按 BSDF 采样下一方向负责间接光照。它们覆盖的是同一个渲染积分中的不同采样策略,不应把同一发光体贡献在两个估计器中都按完整权重相加。若 BSDF 路径恰好击中光源,需要根据策略选择其发射项,或用 Multiple Importance Sampling 给光源采样与 BSDF 采样分配互补权重;否则会把同一条光路重复计算。反过来,若某个实现只在非发光顶点做 next-event estimation,并把命中发光体的 emission 作为路径终点贡献,则要明确这两个分支的计数边界,不能既无条件加入完整 LeL_e,又无条件加入完整直接光照项。

更一般的渲染器会用 Multiple Importance Sampling 组合光源分布和 BSDF 分布,在尖锐材质、小光源和环境光之间获得更稳定的方差。

PDF 必须与积分使用同一种测度。面积 PDF 与立体角 PDF 之间少一次 Jacobian 转换,就会得到有偏结果。

噪声控制

路径追踪的颗粒来自有限样本的统计误差,并不是几何锯齿。提高 SPP 可以收敛,但成本高。常见的降噪方向包括:

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

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

改变采样分布时必须同步使用正确的 PDF 权重,否则会直接改变估计期望。所有样本也必须在同一积分域和同一度量下解释:面积 PDF 与立体角 PDF 不能未经雅可比转换就混用。