估计性质

设积分真值为 II,有限样本估计量为 I^N\hat I_N。偏差定义为

Bias(I^N)=E[I^N]I.\operatorname{Bias}(\hat I_N) = \mathbb E[\hat I_N]-I.

无偏估计 Unbiased Estimator 在任意样本数下都满足 E[I^N]=I\mathbb E[\hat I_N]=I,噪声会随样本改变,但不会系统性地偏亮、偏暗或模糊。有偏估计 Biased Estimator 允许有限样本期望偏离真值。若估计量按概率收敛,即

I^NNPI,\hat I_N\xrightarrow[N\to\infty]{\mathsf P}I,

则称为 一致估计 Consistent Estimator。这里采用统计学中常见的依概率收敛定义;若能证明几乎处处收敛或均方收敛,还可得到更强结论。无偏并不保证方差小,一致也不表示有限时间内误差一定更低。评估渲染算法时,需要同时考虑偏差、方差、收敛速度、单样本成本和误差的空间分布。

双向追踪

普通路径追踪只从相机建立路径。若光先在光源附近经过狭缝、镜面或复杂遮挡,再到达相机,反向路径很难随机找到这些高贡献方向。

双向路径追踪 Bidirectional Path Tracing,简称 BDPT,同时从相机和光源生成子路径,再尝试连接不同长度的端点。一次完整路径可以由 ss 个光源端顶点和 tt 个相机端顶点组成;不同连接策略对同一路径族的采样概率不同,通常用 多重重要性采样 Multiple Importance Sampling 合并。

BDPT 适合光源一侧结构复杂的间接光照,也能重用一对较长子路径形成多个连接。代价是实现复杂、可见性测试多,含 delta 镜面事件的连接还需特殊处理。

MLT 与 BDPT 在复杂光传输场景中的结果和方法特性

图中用渲染结果和方法特性对照了两者:BDPT 通过连接光源端与相机端子路径覆盖多类传输路径;MLT 会在已找到的高贡献路径附近持续变异,因此更容易捕获焦散等稀有贡献,但相邻样本相关性更强,图像也可能出现结构化噪声。图片展示的是效果与适用性,具体的路径构造由上述过程给出。

MLT

Metropolis Light Transport,简称 MLT,把完整光路当作状态,使用 Markov Chain Monte Carlo 在路径空间中采样。设当前路径为 xx,按提议分布 q(xy)q(x\to y) 变异出新路径 yy,目标路径分布为 π\pi。Metropolis–Hastings 接受率为

a(xy)=min(1,π(y)q(yx)π(x)q(xy)).a(x\to y) = \min\left( 1, \frac{ \pi(y)q(y\to x) }{ \pi(x)q(x\to y) } \right).

π\pi 通常与路径对图像的贡献相关。若变异是对称的,q(xy)=q(yx)q(x\to y)=q(y\to x),提议概率可以约掉;高贡献路径更容易被接受,但从低贡献区域跳出仍保留正确概率,长期分布才会趋向 π\pi

局部变异能在罕见而重要的路径附近持续探索,因此 MLT 很擅长焦散、狭缝照明等难采样效果。它也会带来新的问题:样本彼此相关,难以判断每个像素的收敛程度;不同区域得到的探索时间不均,图像可能出现块状噪声。时间连续性也不容易控制,所以它很少直接用于要求稳定逐帧结果的动画。

光子映射

Photon Mapping 是两阶段方法:

  1. 从光源发射大量光子,在场景中随机反弹,并把到达漫反射表面的光子位置、方向和通量存入空间索引;
  2. 从相机追踪光线,在着色点附近收集光子,用局部密度估计还原入射能量。

若半径 rr 的邻域面积为 Ar=πr2A_r=\pi r^2,其中记录的第 kk 个光子携带通量 ΔΦk\Delta\Phi_k、到达方向为 ωk\boldsymbol\omega_k,一种简化密度估计为

Lo(x,ωo)1πr2k=1Nfr(ωk,ωo)ΔΦk.L_o(\mathbf x,\boldsymbol\omega_o) \approx \frac1{\pi r^2} \sum_{k=1}^{N} f_r(\boldsymbol\omega_k,\boldsymbol\omega_o) \Delta\Phi_k.

ΔΦk\Delta\Phi_k单个光子的通量权重;若光源总发射通量为 Φ\Phi、共发射 MM 个等权光子,则初始权重通常含有 Φ/M\Phi/M,后续每次表面反弹再乘 fsnω/p(ω)f_s|\mathbf n\cdot\boldsymbol\omega|/p(\boldsymbol\omega)。只有在 cosine-weighted 等特定采样中,余弦才可能与 PDF 的相同因子约掉。缺少这些权重会让估计随光子数量或采样分布错误缩放。这里令 ωk\boldsymbol\omega_k 从着色点指向光子的上一顶点,与 BRDF 的“从表面向外”方向约定一致;若存储的是传播方向,查询时应取反。余弦几何已经体现在单位表面面积上的光子密度中。有限半径把邻域内能量摊平,因此估计有偏并呈现模糊;半径很小时邻域光子太少,方差又会升高。

设发射光子总数为 MM。假定光子独立采样,并在局部近似二维的光滑表面上用面积邻域做密度估计,一致收敛要求在 MM\to\infty 时同时满足

rM0,MrM2.r_M\to0, \qquad Mr_M^2\to\infty.

第一项让空间平均偏差消失,第二项保证收缩邻域内仍有越来越多光子。固定半径不会满足第一项,因而无论增加多少光子,局部模糊偏差都保留下来。

光子映射特别适合 Specular–Diffuse–Specular 路径,例如光穿过玻璃后在漫反射地面形成的焦散。半径过小会因光子不足产生高方差,过大则丢失细节;固定半径搜索无法随采样数消除偏差。

光子密度估计中的偏差与方差权衡

图中小搜索半径只包含少量光子,焦散边缘会呈现颗粒和高方差;增大半径后图像更平滑,却把亮斑摊宽,产生可见的模糊偏差。增加光子数并让半径逐渐收缩,才能同时降低两者,这正对应 rM0r_M\to0MrM2Mr_M^2\to\infty

连接与合并

Vertex Connection and Merging 将 BDPT 的路径连接与 Photon Mapping 的邻域合并放在同一框架中。两个端点能直接互见时执行连接;无法精确连上、但空间位置足够接近时执行合并。这样能覆盖纯连接或纯密度估计各自难以处理的路径类型。

Instant Radiosity 又称 Virtual Point Light 方法。它从光源追踪短路径,把每次反弹的端点视为 Virtual Point Light,简称 VPL,再用大量 VPL 照亮场景。漫反射场景中计算快、效果稳定;VPL 离着色点过近时会产生尖峰,对高光和复杂可见性也不够理想。

参与介质

参与介质 Participating Media 包括雾、云、烟和浑浊液体,光在表面之间传播时会被吸收或散射。介质在位置 x\mathbf x 的吸收系数为 σa\sigma_a,散射系数为 σs\sigma_s,消光系数为

σt=σa+σs.\sigma_t=\sigma_a+\sigma_s.

T(s)T(s) 表示光传播距离 ss 后仍未发生消光事件的比例。在长度 ds\mathrm ds 内,损失比例近似为 σt(s)ds\sigma_t(s)\mathrm ds

T(s+ds)T(s)[1σt(s)ds].T(s+\mathrm ds) \approx T(s)[1-\sigma_t(s)\mathrm ds].

移项并令 ds0\mathrm ds\to0

dTds=σt(s)T(s).\frac{\mathrm dT}{\mathrm ds} = -\sigma_t(s)T(s).

分离变量并从线段起点积分,得到 Beer–Lambert 定律

T(x,y)=exp(xyσt(s)ds).T(\mathbf x,\mathbf y) = \exp\left( -\int_{\mathbf x}^{\mathbf y} \sigma_t(\mathbf s)\,\mathrm ds \right).

均匀介质中 σt\sigma_t 为常数,传播距离 dd

T(d)=eσtd.T(d)=e^{-\sigma_td}.

此时第一次事件距离的累积分布为 1T(t)1-T(t),概率密度为

p(t)=σteσtt.p(t)=\sigma_te^{-\sigma_tt}.

ξU[0,1)\xi\sim U[0,1),反演采样得到

t=ln(1ξ)σt.t= -\frac{\ln(1-\xi)}{\sigma_t}.

实际光线段通常只延伸到下一个表面或介质边界,设该距离为 dbd_b。若采样得到 t<dbt<d_b,介质事件发生在段内;若 tdbt\ge d_b,这一段没有介质事件。理想的模拟式 free-flight 采样中,“无事件”分支本身出现的概率就是 T(db)T(d_b),条件权重中的 T(db)/P(no event)T(d_b)/P(\text{no event}) 因而严格等于 1;若算法没有随机抽取该分支,而是确定性地穿过介质段,就要显式乘透射率 T(db)T(d_b)。两种做法不能重复计权。把无限介质的指数样本无条件当作碰撞,则会在边界外制造虚假事件。

事件发生后,它是散射还是吸收的条件概率分别为

P(scatter)=σsσt,P(absorb)=σaσt.P(\mathrm{scatter}) = \frac{\sigma_s}{\sigma_t}, \qquad P(\mathrm{absorb}) = \frac{\sigma_a}{\sigma_t}.

吸收终止光的传播,散射则改变方向。相函数 Phase Function p(ωi,ωo)p(\boldsymbol\omega_i,\boldsymbol\omega_o) 描述新的方向分布,并满足

p0,S2p(ωi,ωo)dωo=1.p\ge0, \qquad \int_{S^2} p(\boldsymbol\omega_i,\boldsymbol\omega_o) \mathrm d\omega_o =1.

某点从所有方向得到的 in-scattering 为

Ls(x,ωo)=σs(x)S2p(ωi,ωo)Li(x,ωi)dωi.L_s(\mathbf x,\boldsymbol\omega_o) = \sigma_s(\mathbf x) \int_{S^2} p(\boldsymbol\omega_i,\boldsymbol\omega_o) L_i(\mathbf x,\boldsymbol\omega_i) \mathrm d\omega_i.

若介质还会自发光,以单位长度、单位立体角的源项 qe(x,ωo)q_e(\mathbf x,\boldsymbol\omega_o) 表示,沿光线的局部输运方程为

dL(x,ωo)ds=σtL+qe+σsS2p(ωi,ωo)Li(ωi)dωi.\frac{\mathrm dL(\mathbf x,\boldsymbol\omega_o)}{\mathrm ds} = -\sigma_tL +q_e +\sigma_s \int_{S^2} p(\boldsymbol\omega_i,\boldsymbol\omega_o) L_i(\boldsymbol\omega_i) \mathrm d\omega_i.

非自发光介质取 qe=0q_e=0;热平衡模型中也常把体发射写成 qe=σaLeq_e=\sigma_aL_e。介质路径追踪因此要同时采样自由飞行距离和散射方向。在散射点显式连接光源可估计 单次散射 Single Scattering,路径继续发生介质事件便得到 多次散射 Multiple Scattering

非均匀介质中的 σt(x)\sigma_t(\mathbf x) 随位置变化,难以直接反演积分。Woodcock Tracking 选择当前介质区间上的上界

σˉtσt(x),\bar\sigma_t \ge \sigma_t(\mathbf x),

σˉt\bar\sigma_t 的指数分布采样候选事件,再以 σt(x)/σˉt\sigma_t(\mathbf x)/\bar\sigma_t 接受为真实碰撞;拒绝时记为不改变路径的 空碰撞 Null Collision。候选距离越过介质边界时立即结束该段并到达边界,不能继续在区间外使用同一密度上界。这样无需以极小固定步长穿行密度网格。

σt\sigma_t 决定“走多远发生事件”,σs/σt\sigma_s/\sigma_t 决定“事件是否继续散射”,相函数决定“散射后朝哪里走”。

参与介质中的吸收、发射与入射和出射散射

图中沿光路逐渐变暗的部分对应 Beer–Lambert 透射率,光子被介质吸收后路径终止;发生散射的点会把其他方向的光带入当前方向,也会把当前方向的光散射出去;发光介质还通过 qeq_e 沿路增加辐亮度。增大 σa\sigma_a 会加快能量衰减,增大 σs\sigma_s 则会让路径更频繁地偏折,二者不能只用一个透明度参数替代。

毛发

毛发不能简单视为普通表面。单根纤维近似细长透明圆柱,散射随纤维切线和方位角变化,常用 BCSDF Bidirectional Curve Scattering Distribution Function 描述穿过一条曲线截面的光传输。

Kajiya–Kay 模型 以纤维切线构造经验漫反射与高光,计算便宜,但难以表达真实头发中的多条散射瓣。Marschner 模型 把人发视作具有鳞片表皮和吸收性皮质的玻璃状圆柱,区分三类主要光路:

  • RR:在表面直接反射;
  • TTTT:折射进入纤维并穿出;
  • TRTTRT:进入后发生一次内部反射再离开。

每条光路在纵向和方位角上形成不同散射瓣。色素吸收主要作用于穿过皮质的路径,因此发色、逆光边缘和高光具有不同颜色。

Marschner 模型中的毛发 R、TT 与 TRT 光路

图中 RR 路径只在表面反射,形成窄而亮的高光;TTTT 穿过纤维后出射,TRTTRT 则在内部反射一次再离开。后两者穿过含色素的皮质,因而比 RR 更容易出现有色透射和边缘光。

动物毛发常有明显髓质。髓质内部结构会产生扩散散射,使毛皮比按人发模型渲染时更饱和、更柔和。双圆柱模型用外层皮质与内层髓质表示纤维,除了 RRTTTTTRTTRT,还要考虑与髓质交互后的附加路径。

颗粒

沙、雪、糖等颗粒材料由数量巨大的离散颗粒组成。逐颗建模能保留轮廓、遮挡和闪烁,却需要极高的几何与求交成本。统计或程序化模型改为描述颗粒大小、形状、密度与散射特性,在需要时生成局部细节。

观察尺度决定合适表示:远处可用等效表面或参与介质,近景轮廓可能需要显式颗粒,中间尺度则可混合几何和统计散射。只用平滑 BRDF 往往会丢失颗粒间的多次反射和稀疏高光。

次表面

玉石、皮肤、蜡和牛奶中的光会从一点进入材料,在内部多次散射后从另一点离开。BRDF 假设入射和出射发生在同一个表面点,无法表达这种空间迁移。

BSSRDF Bidirectional Surface Scattering Reflectance Distribution Function 将反射函数扩展到两个位置:

S(xi,ωi,xo,ωo).S(\mathbf x_i,\boldsymbol\omega_i, \mathbf x_o,\boldsymbol\omega_o).

出射辐亮度需要对整个表面和入射半球积分:

Lo(xo,ωo)=AΩ+SLi(xi,ωi)cosθidωidAi.L_o(\mathbf x_o,\boldsymbol\omega_o) = \int_A\int_{\Omega^+} S L_i(\mathbf x_i,\boldsymbol\omega_i) \cos\theta_i\, \mathrm d\omega_i\,\mathrm dA_i.

BRDF 是 BSSRDF 的局部特例。若入射点必须等于出射点,可写成

S(xi,ωi,xo,ωo)=fr(xi,ωi,ωo)δA(xixo),S(\mathbf x_i,\boldsymbol\omega_i, \mathbf x_o,\boldsymbol\omega_o) = f_r(\mathbf x_i, \boldsymbol\omega_i,\boldsymbol\omega_o) \delta_A(\mathbf x_i-\mathbf x_o),

其中 δA\delta_A 是表面上的 Dirac delta。把它代入面积积分,xi\mathbf x_i 的积分被压到 xo\mathbf x_o,便恢复普通 BRDF 反射方程。这也准确说明了 BRDF 缺少什么:它无法把能量从一个表面位置搬到另一个位置。

BRDF 与 BSSRDF 的局部反射和跨位置次表面散射

图中 BRDF 的入射点和出射点重合,只在该点形成局部高光;BSSRDF 允许光从一个位置进入、在材料内部扩散后从邻近位置离开,因此薄玉石或皮肤边缘会出现柔和的透光。两者的差异是空间变量是否被保留下来。

Dipole Approximation 来自多次散射后的扩散近似。位于介质内的真实源表示入射能量,表面外的虚拟负源用于满足半无限介质的边界条件。它适用于均匀、局部平坦、强散射且足够厚的材料;薄片、分层结构或弱散射材料需要随机游走等更完整模型。

布料

布料是纤维加捻后织造或针织形成的层次结构。根据观察尺度和预算,可以采用三种表示:

  • 把织法的总体行为拟合为表面 BRDF,适合远景;
  • 根据纤维属性和分布推导体散射参数,把布看作参与介质;
  • 显式建模并渲染每根纤维,适合特写。

表面模型速度快,却难以得到绒毛轮廓、纱线间遮挡和透光。显式纤维最完整,几何量和路径复杂度也最高。实际资产常在不同细节层级间切换,并保留一致的平均能量和颜色。

把布料近似为参与介质时形成的纤维散射效果

图中展示的是中间层次:把纱线和绒毛的统计散射近似为参与介质,可以得到柔和透光与纤维感,却不会逐根恢复真实几何。远景可进一步平均为表面 BRDF,特写才需要显式纤维;尺度越细,越能保留绒毛轮廓和纱线间遮挡,几何与路径追踪成本也越高。切换层级时应保持平均能量和颜色连续。

微观细节

传统微表面模型使用统计法线分布 D(h)D(\mathbf h)。当一个像素覆盖海量、不可分辨的微表面时,这种平均是合理的;若像素 footprint 中只有少量金属亮片、划痕或波纹,真实法线分布会出现尖锐峰值,统计平均会把闪烁细节抹平。

P-NDF Patch Normal Distribution Function 根据当前像素覆盖的表面区域 PP 统计实际法线分布。若位置 x\mathbf x 的局部分布为 Dx(h)D_{\mathbf x}(\mathbf h),像素范围内的平均为

DP(h)=1PPDx(h)dx.D_P(\mathbf h) = \frac1{|P|} \int_P D_{\mathbf x}(\mathbf h) \mathrm d\mathbf x.

像素尺寸、观察距离和纹理频率变化时,区域 PP 改变,P-NDF 也随之改变。渲染器可以对一个像素范围内的 BRDF 做预过滤,减少直接在超高分辨率法线贴图上盲目采样造成的 miss,仍保留 glint 等非平稳高光。

P-NDF 本身可能具有很多尖锐峰,存储和重要性采样都不轻松。层次表示、局部解析近似和按 footprint 查询可以在细节与成本之间取得平衡。

P-NDF 根据 pixel footprint 保留非平稳高光与 glint

图中 pixel footprint 覆盖的微表面越少,法线分布越可能出现孤立尖峰,glint 也越集中;相机后退或像素变大后,footprint 覆盖更多区域,分布应随之平均而不是固定成一张全局 NDF。按 footprint 过滤可以减少闪烁,同时不把真实亮点提前抹掉。

波动光学

微结构尺寸接近可见光波长时,波动光学 Wave Optics 不能再简化为独立光线。光程差会转化为相位差,叠加后产生干涉和衍射。光盘彩虹、金属薄膜、屏幕像素结构和细密划痕都可能表现出随波长和角度变化的颜色。

若第 jj 条微观光路的振幅为 AjA_j、光程为 j\ell_j,复振幅为

Ej=Ajei2πj/λ.E_j = A_j e^{i2\pi\ell_j/\lambda}.

电场先相加,观测强度再取模平方:

I=jEj2.I = \left| \sum_jE_j \right|^2.

展开后除了各路径自身的 Ej2|E_j|^2,还出现依赖相位差的全部交叉项

I=jAj2+2i<jAiAjcos(2π(ij)λ).I = \sum_jA_j^2 +2\sum_{i<j}A_iA_j \cos\left( \frac{2\pi(\ell_i-\ell_j)}{\lambda} \right).

相位接近时增强;两条路径振幅相等、且没有额外反射相移时,光程相差半个波长会完全抵消,这就是干涉。振幅不同或界面引入额外相位时,只会部分相消。几何光学只累加非负能量,丢弃了这些交叉项,因此无法解释虹彩和衍射。波动模型成本更高,也更依赖真实结构尺度和光谱数据。

波动光学中的衍射与干涉颜色

图中的颜色会随观察角度和波长改变:不同微结构产生的光程差在某些波长相长干涉,在另一些波长相消,因此同一表面可以出现彩色条纹或虹彩。相位差和结构尺度共同决定这些颜色,普通的 RGB 漫反射贴色无法复现这种变化。

程序外观

程序化外观 Procedural Appearance 在着色时计算函数,不必存储完整纹理。二维噪声可以生成表面花纹,三维噪声定义在物体内部,模型被切开或破碎后仍能露出连续结构。阈值操作还能把连续噪声变成孔洞、斑点或两相材料:

m(x)={1,n(x)>τ,0,n(x)τ.m(\mathbf x)= \begin{cases} 1,&n(\mathbf x)>\tau,\\ 0,&n(\mathbf x)\le\tau. \end{cases}

多频噪声、Worley noise 和域扭曲可以构造木纹、石材、云层与细胞状结构。程序表示分辨率不受固定图像限制,参数也易于编辑;若函数缺少抗锯齿处理,高频细节仍会在远处产生闪烁,因此需要按像素 footprint 过滤或限制最高频率。

三维程序噪声在空间中的连续结构

图中 3D noise 直接定义在物体空间坐标上,切开、拉伸或破碎模型时,截面仍能接上同一连续结构;每个面独立贴一张 2D 纹理则会在接缝处断开。连续空间函数也必须结合 pixel footprint 过滤,否则高频噪声仍会产生远景闪烁。