中EN
概念页

参与介质与体积散射

Participating Media & Volumetric Scattering

参与介质是充满粒子、通过吸收和散射参与光传输的体积,如空气、水、雾、烟、云;皮肤、蜡等致密材质也有强烈散射——"一切都是散射"。实时渲染主要考虑单次散射:沿视线积分透射率衰减后的内散射光,内散射由相位函数和对光源的可见性(不透明阴影 × 体积阴影)决定。通用实时方案把介质材质和散射结果体素化到相机视锥体素 (froxel) 中逐片累积(RTR4 14.1、14.3、14.8 节)。

介质材质

符号含义单位
σa\sigma_a吸收系数m⁻¹
σs\sigma_s散射系数m⁻¹
σt=σa+σs\sigma_t=\sigma_a+\sigma_s消光系数m⁻¹
ρ=σs/σt\rho=\sigma_s/\sigma_t反照率,[0,1]无
pp相位函数sr⁻¹
  • 四类事件改变沿光线的辐射亮度:吸收(转为热)、外散射(按相位函数弹走)、发射(如火的黑体辐射)、内散射(其他方向的光散射进当前路径)。加入光子靠内散射与发射,移除靠消光。各系数是辐射亮度导数的系数,取值 [0,+∞][0,+\infty]。
  • 反照率接近 0:多被吸收,介质浑浊(如黑色尾气);接近 1:多被散射,介质明亮(空气、云、大气)。牛奶散射高、反照率 > 0.999,显得白而不透明;红酒几乎不散射而吸收高,显得透明有色。
  • 都与波长有关;实时(以及大多数离线)用 RGB,尽量由光谱数据经颜色匹配函数预计算。

单次散射积分

没有介质时可假设进入相机的亮度等于最近表面出射亮度;有介质时(点光源情况):

Li(c,−v)=Tr(c,p)Lo(p,v)+∫t=0∥p−c∥Tr(c,c−vt) Lscat(c−vt,v) σs dtL_i(\mathbf{c},-\mathbf{v})=T_r(\mathbf{c},\mathbf{p})L_o(\mathbf{p},\mathbf{v})+\int_{t=0}^{\|\mathbf{p}-\mathbf{c}\|}T_r(\mathbf{c},\mathbf{c}-\mathbf{v}t)\,L_{scat}(\mathbf{c}-\mathbf{v}t,\mathbf{v})\,\sigma_s\,dt

透射率(Beer-Lambert 定律):

Tr(xa,xb)=e−τ,τ=∫xaxbσt(x) dxT_r(\mathbf{x}_a,\mathbf{x}_b)=e^{-\tau},\qquad \tau=\int_{\mathbf{x}_a}^{\mathbf{x}_b}\sigma_t(\mathbf{x})\,d\mathbf{x}

光学深度 τ=1\tau=1 约去掉 60% 的光。例:σt=(0.5,1,2)\sigma_t=(0.5,1,2) 时穿过 1 m 得 Tr≈(0.61,0.37,0.14)T_r\approx(0.61,0.37,0.14)。透射率要作用于 (i) 不透明表面亮度(雾状遮挡),(ii) 内散射光(体现介质厚度),(iii) 每个散射点到光源的路径(体积自阴影)。

内散射(nn 个点光源):

Lscat(x,v)=π∑i=1np(v,lci) v(x,plighti) clighti(∥x−plighti∥)L_{scat}(\mathbf{x},\mathbf{v})=\pi\sum_{i=1}^{n}p(\mathbf{v},\mathbf{l}_{c_i})\,v(\mathbf{x},\mathbf{p}_{light_i})\,c_{light_i}(\|\mathbf{x}-\mathbf{p}_{light_i}\|)

可见性 v=shadowMap⋅volShadv=\text{shadowMap}\cdot\text{volShad},体积阴影项就是到光源的透射率。

  • 光线步进:沿主光线用 nn 个样本积分散射和透射,并从每个样本向各光源再步进一条阴影光线,复杂度 O(n2)O(n^2),很快变贵;因此常用专门的体积阴影表示存储光源出射方向的透射率。
  • 直觉:σs=(0.5,1,2)\sigma_s=(0.5,1,2)、σa=0\sigma_a=0 时,薄处内散射主导、显蓝色;越深透射率指数下降比散射线性增长快,红色(消光最小)占优。这正是天空白天蓝、日出日落红的原因。

相位函数

在单位球上积分必须为 1(能量守恒)。由相对粒径 sp=2πr/λs_p=2\pi r/\lambda 区分:sp≪1s_p\ll1 瑞利散射(空气),sp≈1s_p\approx1 米氏散射,sp≫1s_p\gg1 几何散射。

相位函数公式说明
各向同性p(θ)=14πp(\theta)=\dfrac{1}{4\pi}理想但不真实
瑞利p(θ)=316π(1+cos⁡2θ)p(\theta)=\dfrac{3}{16\pi}(1+\cos^2\theta)前后对称两瓣;σs∝1/λ4\sigma_s\propto 1/\lambda^4,RGB 归一化到亮度 1 为 (0.490,1.017,2.339)(0.490,1.017,2.339)
Henyey-Greensteinphg(θ,g)=1−g24π(1+g2−2gcos⁡θ)1.5p_{hg}(\theta,g)=\dfrac{1-g^2}{4\pi(1+g^2-2g\cos\theta)^{1.5}}拟合米氏的主瓣;g<0g<0 后向、00 各向同性、>0>0 前向,g∈[−1,1]g\in[-1,1];雾中聚光灯光晕、云边银边
Schlick 近似p(θ,k)=1−k24π(1+kcos⁡θ)2p(\theta,k)=\dfrac{1-k^2}{4\pi(1+k\cos\theta)^2},k≈1.55g−0.55g3k\approx1.55g-0.55g^3只有平方,更快;gg 恒定时 kk 只需算一次;能量守恒的优秀近似
  • 米氏散射与波长无关,单一粒径时有尖锐复杂的瓣,但介质粒径连续分布,平均后很平滑,所以可用平滑函数。可混合多个 HG/Schlick 同时表现强前向与后向瓣(如云)。
  • 几何散射:粒子内折射反射,可能需要复杂相位函数,偏振也有影响;彩虹即水滴内反射在约 3° 的后向散射角内色散。可用 MiePlot 模拟。

体数据可视化

CT、MRI 等标量场(如 256³ 体素):实体可转为隐式表面多边形;半透明可用垂直视线的等距切片从后往前混合,密度超阈值视为实体,法线取密度梯度。传递函数:一维纹理把密度映射为颜色和不透明度;Kniss 等用以密度和梯度长度 ∥∇d∥\|\nabla d\| 为索引的二维传递函数,更好地区分材质过渡(如骨-空气与骨-软组织)。半角切片:切片朝向光与视线的中间方向,每片可用上一片的光源方向遮挡做体积阴影、用辐射亮度估计锥内前向多次散射,质量高,但每片都有光栅化带宽成本;着色器光线步进只付一次。

实时参与介质渲染

  • 单光源大尺度阴影散射:Yusov 沿极线采样内散射,用光源深度图判断阴影,沿光线的 min/max 层次跳过空区,只在深度不连续处步进;也可在视空间渲染由光源深度图生成的网格,加正面、减背面的散射。都快且可高分辨率,但只支持均匀介质,不能表现介质自阴影或粒子的透明阴影。
  • 溅射:Crane 等对流体模拟的烟、火逐像素步进收集颜色和遮挡,水在第一次击中表面时停止、法线取密度梯度、三立方插值平滑。Valient(《杀戮地带:暗影坠落》)把各光源的散射包围体渲染到半分辨率缓冲,步进起点逐像素随机偏移以消除条带,每帧换噪声并经重投影平均掉;非均匀介质把粒子体素化到 1/8 分辨率的视锥三维纹理;用双边高斯模糊 + 双边上采样合成到全分辨率。改用蓝噪声分布更均匀;也可四个随机样本上采样再交给 TAA。溅射细节锐利,但与其他透明表面的排序永远不完全正确,带宽也更高。
  • 视锥体素 (froxel):Wronski 把散射体素化到映射在裁剪空间的三维纹理 V0V_0(典型 x、y 为屏幕的 1/8,z 方向 64 片),存内散射 RGB 与 σt\sigma_t;再从近到远逐片累积得到 VfV_f。原式只用前面片的透射率 Tr′T_r' 衰减本片内散射,忽略了本片内的消光。Hillaire 给出常数消光下的解析积分:本片贡献为 Lscatin−LscatinTrsliceσt\dfrac{L_{scat_{in}}-L_{scat_{in}}T_{r_{slice}}}{\sigma_t},Trslice=e−σtdsT_{r_{slice}}=e^{-\sigma_t d_s},透射率累乘为 TrsliceTr′T_{r_{slice}}T_r'。不透明表面最终 Lo=TrLs+LscatL_o=T_rL_s+L_{scat}。VfV_f 粗糙,相机运动和高频亮光/阴影会混叠,用指数滑动平均与上一帧重投影结果混合。
  • Hillaire 的物理材质:σs\sigma_s、σa\sigma_a、gg、发射 LeL_e 存入视锥材质体积 VpmV_{pm}(相当于体积版 G-buffer);美术放置的介质体积(带三维密度纹理)用计算着色器体素化进去。只考虑单次散射也接近路径追踪结果。虚幻引擎用粒子(球体)作为介质来源;材质体积也可用稀疏结构。缺点是分辨率低。
  • 间接光:虚幻可烘焙体积光照贴图(存辐照度)让其散射回介质;也可用 LPV 实现动态 GI。
  • 体积阴影:没有它,浓雾场景会太亮太平。Hillaire 把介质体积和粒子体素化到围绕相机、按 clipmap 分布的三级消光体积,作为统一数据源配合不透明度阴影贴图,使粒子与介质互相投影、自阴影,并给不透明和透明物体投影。高分辨率体积纹理受限时可用傅里叶或 DCT 等正交基表示透射率。

统一表示的展望

用很高的 σs\sigma_s 配合复杂各向异性相位函数可以得到不透明表面,因此有望统一实体和体积材质。目前因 GPU 算力只能分开处理(不透明网格、alpha 混合网格、粒子公告板、光线步进)。Dupuy 等暗示可用 SGGX(GGX 的对称扩展)的微薄片 (microflake) 理论表示体积中有朝向的薄片粒子;LOD 变成对材质属性做体积过滤,例如用体积过滤的树表示森林,可消除网格 LOD 切换、平滑过滤细枝、避免混叠,并给出正确的背景遮挡。

GEA 的视角:参与介质与光线步进(卷 II 12.1.2.2、12.2.1、12.5.13)

  • 不完全透明的介质会影响穿过它的光,所以叫参与介质。它们常是不同分子的混合物,例如烟就是空气加上悬浮的灰烬和煤烟颗粒;光子穿过时很可能被颗粒吸收、折射或反射,所以参与介质会散射并衰减光(卷 II 12.1.2.2)。
  • GEA 把透光材质分为透明(空气、玻璃、清澈平静的水)与半透明(磨砂玻璃、蜡、皮肤、雾、烟)(卷 II 12.1.2)。
  • 光穿过参与介质时能量和光谱分布沿路径变化,需要更复杂的计算;GEA 说明这超出本书范围,推荐 RTR4(卷 II 12.2.1)。在 GEA 的着色方程用法里,通常假设空间是真空或洁净空气,烟雾等用 alpha 混合和粒子卡片近似(卷 II 12.5.1)。
  • 实时体积渲染靠光线步进,用于天空大气和体积云;吸收、外散射、内散射、消光、透射率和相位函数等概念 GEA 在大气部分给出,见 天空与云渲染 的「GEA 的视角」(卷 II 12.5.13)。这些与本页「介质材质」「相位函数」中的 RTR4 定义一致。

PBRT 的视角:离线渲染器中的体积散射(PBRT 4e 第 11 章)

基本过程与源函数(11.1)

  • 吸收、发射、散射都按连续过程建模(与辐射度量学的假设一致);蒙特卡洛求解时落到具体点上,称为"散射事件"(也包括吸收)。所有模型都假设粒子位置不相关(白噪声分布),真实介质并不满足,相关介质见延伸阅读。
  • 介质吸收系数 σa\sigma_a 与导体复折射率里的吸收系数(9.3.6)是两回事;单位 m⁻¹,可以大于 1。pbrt 只让系数随位置变化,不随方向。
  • 发射写成 dLo=σaLe dtdL_o=\sigma_a L_e\,dt(式 11.1):σa\sigma_a 因子来自"吸收越强、发射越强"(基尔霍夫,见 4.4.1),也让积分后的量纲是辐射亮度。PBRT 这里的 LeL_e 是单位辐射亮度,与 RTR4 直接把发射作为加项的写法差一个 σa\sigma_a 因子,迁移参数时要注意。
  • 平均自由程 1/σt1/\sigma_t;单次散射反照率 ρ=σs/σt\rho=\sigma_s/\sigma_t。
  • 源函数(式 11.3):Ls=σaσtLe+σsσt∫S2p(ωi,ω)Li dωiL_s=\frac{\sigma_a}{\sigma_t}L_e+\frac{\sigma_s}{\sigma_t}\int_{S^2}p(\omega_i,\omega)L_i\,d\omega_i,dLo=σtLs dtdL_o=\sigma_tL_s\,dt。它与散射方程相似,但没有余弦项,因为相位函数作用于辐射亮度而不是微分辐照度。
  • "真实散射"(吸收之外的内/外散射)与 11.2.1 的"零散射"相对;透射率的无偏估计见 零散射与透射率估计。

透射率性质(11.2)

Tr(p→p)=1T_r(p\to p)=1;真空中为 1;σt\sigma_t 方向对称时 Tr(p→p′)=Tr(p′→p)T_r(p\to p')=T_r(p'\to p);任何介质中都满足乘性 Tr(p→p′′)=Tr(p→p′)Tr(p′→p′′)T_r(p\to p'')=T_r(p\to p')T_r(p'\to p''),所以可以沿光线逐段累乘。负指数即光学厚度 τ\tau;均匀介质为 Beer 定律 e−σtde^{-\sigma_td}。阴影光线计入透射率后,纯体积物体也能在地面投下阴影(书中图 11.10)。

相位函数与方向约定(11.3)

  • 自然介质的相位函数多是夹角的一维函数 p(cos⁡θ)p(\cos\theta)("各向同性/对称介质"),并满足互易;晶体、定向纤维等有序结构是 4D 函数。术语重载:"各向同性介质"可以有"各向异性相位函数";各向同性相位函数只有一个:1/4π1/4\pi。
  • 方向约定:pbrt 的 ωo\omega_o、ωi\omega_i 都背离散射点(与 BSDF 相同),散射文献中入射方向指向散射点。因此 pbrt 的 HG 写作 pHG(cos⁡θ)=14π1−g2(1+g2+2gcos⁡θ)3/2,p_{HG}(\cos\theta)=\frac{1}{4\pi}\frac{1-g^2}{(1+g^2+2g\cos\theta)^{3/2}}, 分母是 +2gcos⁡θ+2g\cos\theta;上文 RTR4 的写法是 −2gcos⁡θ-2g\cos\theta。两者不矛盾,只是 θ\theta 的定义差了 π\pi:g>0g>0(前向散射)时 pbrt 中 ωi≈−ωo\omega_i\approx-\omega_o,cos⁡θ→−1\cos\theta\to-1 处取峰值。混用两套代码时最常见的错误就是 gg 的符号反了。
  • gg 是平均余弦 g=∫p(−ω,ω′)(ω⋅ω′)dω′g=\int p(-\omega,\omega')(\omega\cdot\omega')d\omega';同一个 gg 可对应无数相位函数,复杂分布可用权重和为 1 的多个 HG 加权和(pbrt 未实现)。pbrt 要求 g∈(−1,1)g\in(-1,1),上文 RTR4 写的是 [−1,1][-1,1](∣g∣=1|g|=1 时 HG 退化为 delta)。
  • 精确采样:ϕ\phi 均匀,cos⁡θ=−12g(1+g2−(1−g21+g−2gξ)2)\cos\theta=-\frac{1}{2g}\Big(1+g^2-\big(\frac{1-g^2}{1+g-2g\xi}\big)^2\Big),g=0g=0 时 cos⁡θ=1−2ξ\cos\theta=1-2\xi;PDF 等于相位函数值。笔者对 g=0.7g=0.7 采 200 万样本,经验 CDF 与解析 CDF 在 4 个检查点上相差 <2×10−4<2\times10^{-4},数值积分得归一化 1、平均余弦 0.7。
  • 延伸阅读:Gkioulekas 等 2013a 用 HG 与 von Mises–Fisher 瓣的和描述半透明外观;van de Hulst 1981 有米氏与瑞利散射的完整讨论。

介质在场景中的表示(11.4)

  • 相机和光源各存一个 Medium(nullptr 为真空);图元存 MediumInterface(内、外两个介质)。只有真正的介质过渡才写入交点,否则沿用光线的介质,所以"充满薄雾的场景"只要给相机和光源指定介质即可。不一致的配置(例如相机与图元外侧介质不同又没有界面)不做检查,交给用户保证。
  • 只用来界定介质范围、本身不可见的边界(如包住云的盒子)用空材质 (nullptr),GetBSDF() 返回未设置的 BSDF,积分器只切换当前介质;理论上也可以用两侧折射率相同的完美镜面透射 BTDF,但会加重积分器负担。书中图 11.16:同样的介质,带电介质外壳的版本更暗。
  • Medium 接口三个方法:IsEmissive()(仅用于检查场景是否有光源)、SamplePoint()(返回 σa,σs,Le\sigma_a,\sigma_s,L_e 与相位函数,默认值表示无散射)、SampleRay()(返回 majorant 迭代器)。各介质用 MajorantIterator 类型别名声明自己的迭代器,让调用方把它放在栈上(便于放进寄存器,见第 14、15 章);类型未知时借 TaggedPointer 分派和 ScratchBuffer 分配。
  • 五种实现:HomogeneousMedium、GridMedium、RGBGridMedium(书中讲解),CloudMedium(仅在线版),NanoVDBMedium(不讲第三方 API)。
    • Homogeneous:常数系数与 gg;光谱转成 DenselySampledSpectrum(每个约 1 KB,换取无需二分查找);单段 majorant =σa+σs=\sigma_a+\sigma_s。
    • Grid:密度网格三线性插值后缩放基准 σa,σs\sigma_a,\sigma_s;发射可以是黑体温度网格或单一光谱,再乘 LeScale 网格;majorant 用 MajorantGrid + DDA。
    • RGBGrid:网格里存 RGBUnboundedSpectrum 而不是 RGB。原因:RGB→光谱(4.6.6)不保证光谱值不超过 RGB 分量最大值,而且两个 RGB 线性插值后的光谱也不是两条光谱的线性插值,所以按 RGB 求的上界不是光谱的上界;存光谱再插值光谱才能保证 majorant 有效。σa\sigma_a 与 σs\sigma_s 的界分别求,若二者相关(如 σs=c−σa\sigma_s=c-\sigma_a)则界偏松。sigmaScale 可整体调密度。

与上文(RTR4、GEA)的对照与分歧

话题RTR4 / GEA(上文)PBRT 4e
目标单次散射为主,多次散射近似完整的多次散射(第 14 章),本章只给介质描述与透射率
透射率求法光线步进黎曼和、froxel 逐片解析积分(有偏)零散射 + 比率追踪(无偏);书中明确说估计 τ 再取指数有偏
HG 分母1+g2−2gcos⁡θ1+g^2-2g\cos\theta(散射文献约定)1+g2+2gcos⁡θ1+g^2+2g\cos\theta(两方向都背离散射点)
gg 范围[−1,1][-1,1](−1,1)(-1,1)
体积发射加项 LeL_eσaLe\sigma_aL_e
颜色RGB光谱;RGB 介质要专门处理 majorant
存储froxel、clipmap 消光体积规则网格(+ majorant 网格)、NanoVDB;延伸阅读:VDB(Museth 2013)、Field3D
运动模糊—延伸阅读:网格顶点变形(Clinton–Elendt 2009)、欧拉运动模糊(Kulla–Fajardo 2012)、时变函数(Wrenninge 2016)
重建滤波—书中承认三线性(三角滤波)插值密度不理想;见 Marschner–Lobb 1994;Hofmann 等 2021 的随机采样滤波在非线性(如透射率)下有偏

本章未涉及与延伸

本章不讲光照计算与多次散射,它们在第 14 章。介质参数获取见 Jensen 等 2001b、Narasimhan 等 2006(稀释法)、Gkioulekas 等 2013b、Frisvad 等 2020 综述;密度获取见 Atcheson 等 2008、Gu 等 2013a。

原书问题(第 11 章)

  • 11.2 节称"估计光学厚度再取指数"会低估透射率,按 Jensen 不等式应为高估(数值验证见 零散射与透射率估计)。
  • 11.4.2 节说每个 DenselySampledSpectrum 约占"一千字节左右",12.1.2 节说覆盖可见光波段约 2 KB。按 pbrt 的 360–830 nm、1 nm 间隔计算为 471 个 float ≈ 1.9 KB,12.1.2 的数字正确,11.4.2 偏低(前后不一致)。
  • 11.4.3 节在线版 DDA 的一处旁注文字损坏("…DDA.6.1.4 and carefully consider how the components of rayGrid are initialized."),引用的章节号与 HTML 标签混在一起(网页排版问题)。
  • 11.4 节说 "The Medium interface is also defined in the file base/media.h"。pbrt-v4 源码中 Medium 与 PhaseFunction 接口都在 src/pbrt/base/medium.h(不存在 base/media.h;media.h 是不在 base 下的实现文件,见 GitHub mmp/pbrt-v4),应为 base/medium.h(11.3 节对相位函数的说法是对的)。
  • 11.2.1 节推导 delta 追踪时说把俄罗斯轮盘的 termination probability 设为 σn/σmaj\sigma_n/\sigma_{maj},但紧接着的式 (11.18) 是以概率 σn/σmaj\sigma_n/\sigma_{maj} 继续递归、否则返回 0;权重恰好抵消的也是继续概率。应为"继续(存活)概率",终止概率是 σt/σmaj\sigma_t/\sigma_{maj}(措辞问题,公式正确)。

PBRT 的视角:体积光传输与体积路径追踪(PBRT 4e 14.1–14.2)

传输方程 (equation of transfer)

把第 11 章的四种过程合起来: ∂∂tLo(p′,ω)=−σt(p′,ω)Li(p′,−ω)+σt(p′,ω)Ls(p′,ω)(14.1)\frac{\partial}{\partial t}L_o(p',\omega)=-\sigma_t(p',\omega)L_i(p',-\omega)+\sigma_t(p',\omega)L_s(p',\omega)\quad(14.1) 加上"光线在 tt 处碰到表面 psp_s"的边界条件,得到积分形式 Li(p,ω)=Tr(ps→p)Lo(ps,−ω)+∫0tTr(p′→p) σt(p′) Ls(p′,−ω) dt′.(14.2)L_i(p,\omega)=T_r(p_s\to p)L_o(p_s,-\omega)+\int_0^tT_r(p'\to p)\,\sigma_t(p')\,L_s(p',-\omega)\,dt'.\quad(14.2) 表面光传输方程(渲染方程)是它在真空中的特例。上文 RTR4 的单次散射积分就是把 (14.2) 的源函数 LsL_s 只保留"光源直接照射 × 相位函数"一项、并忽略介质发射得到的近似。

零散射形式与体积路径追踪

用 σt=σmaj−σn\sigma_t=\sigma_{maj}-\sigma_n 代入,得到 Li=Tmaj(ps→p)Lo(ps,−ω)+σmaj∫0tTmaj(p′→p)Ln(p′,−ω)dt′,Ln=σaσmajLe+σsσmaj ⁣∫ ⁣pLi+σnσmajLi,L_i=T_{maj}(p_s\to p)L_o(p_s,-\omega)+\sigma_{maj}\int_0^tT_{maj}(p'\to p)L_n(p',-\omega)dt',\quad L_n=\tfrac{\sigma_a}{\sigma_{maj}}L_e+\tfrac{\sigma_s}{\sigma_{maj}}\!\int\!pL_i+\tfrac{\sigma_n}{\sigma_{maj}}L_i, Tmaj=e−σmajdT_{maj}=e^{-\sigma_{maj}d} 低估真实透射率,差额由 LnL_n 的第三项(零散射)补回。按 σmajTmaj\sigma_{maj}T_{maj} 采样距离 t′t':t′>tt'>t(概率恰为 TmajT_{maj})时取表面项 LoL_o,否则取 LnL_n;再以 σa,σs,σn\sigma_a,\sigma_s,\sigma_n 与 σmaj\sigma_{maj} 之比为概率选一项——吸收返回发射并终止,真实散射按相位函数采样新方向并递归,零散射从原方向继续。这就是常说的"用 delta 追踪解传输方程"。分段 majorant 下的采样细节见 零散射与透射率估计。

  • 关于网站 issue #27(读者问 (14.7) 的介质项为什么没有 1/(1−q)1/(1-q)):t′<tt'<t 的联合密度是 σmajTmaj(t′)\sigma_{maj}T_{maj}(t'),它在 [0,t][0,t] 上积分正好是 1−q1-q,所以"选介质项的概率 × 条件密度"直接等于 σmajTmaj\sigma_{maj}T_{maj},与被积函数的同名因子相消,只剩 LnL_n;书中的式子没有错,只是省略了这一步。

广义路径空间(14.1.4–14.1.5)

路径顶点可以是表面 AA、真实散射介质点 VV 或零散射点 V∅V_\varnothing,按配置向量 c∈{0,1,2}nc\in\{0,1,2\}^n 取并集,测度是各配置下面积/体积测度之和(零散射测度含 delta,限制在两个真实顶点的连线上)。广义吞吐量 T^=∏f^⋅∏Tmaj⋅∏G^\hat T=\prod\hat f\cdot\prod T_{maj}\cdot\prod\hat G,其中 f^\hat f 在表面为 BSDF、在介质中为 σsp\sigma_s p、在零散射点为 σnH(⋅)\sigma_nH(\cdot)(Heaviside 保证零散射顶点沿直线有序);G^\hat G 只在真实顶点之间计算,介质端的"余弦"取 1;终点发射在介质中带 σa\sigma_a 因子。把 delta 追踪的三种采样概率代入路径积分估计,所有 TmajT_{maj}、σmaj\sigma_{maj}、σs,n\sigma_{s,n}、G^\hat G 都相消,只剩"发射 × 相位函数与其采样 PDF 之比"(14.19)。这一框架(Miller 等 2019)让 MIS 和双向方法能用于非均匀介质。

两个积分器

  • SimpleVolPathIntegrator:不到 100 行,只用 delta 追踪,不直接采样光源、不支持散射表面(场景含 delta 光源或非零 BSDF 的表面时报错;面光源须配零值 BSDF,纯介质边界用 SkipIntersection() 跳过),只算第一个波长。适合当作调试复杂算法时的参考真值。书中图 14.6 爆炸场景 256 spp 仍有亮点噪声,VolPathIntegrator 的 MSE 低 1,288 倍。
  • VolPathIntegrator(pbrt 默认积分器,也是第 15 章波前积分器的模板)的三项改进:
    1. 表面散射:按 (14.7) 在介质与表面之间选择;
    2. 有色介质 (chromatic media) 的光谱 MIS:距离和事件类型都按第一个波长 λ1\lambda_1 采样;若直接对其他波长求值,会出现可任意大的 σs′/σs\sigma_s'/\sigma_s 因子。用单样本 MIS(平衡启发式)把估计改为 fλ(x)/1n∑ipλi(x)f_{\lambda}(x)\big/\frac1n\sum_ip_{\lambda_i}(x)(14.20),书中图 14.7 MSE 降低 149 倍。若改用覆盖所有波长的 majorant,又会在低消光波长上产生大量零散射;
    3. 直接光照 MIS:两种技术——单向路径采样 pup_u(delta 追踪 + BSDF/相位函数采样)与光源路径采样 plp_l(光源选方向 + 阴影光线上比率追踪)。两者在最后一个真实顶点之前完全相同;零散射段概率 pnull=∏σnTmaj⋅Tmajp_{null}=\prod\sigma_nT_{maj}\cdot T_{maj},比率追踪段 pratio=∏Tmajσmaj⋅Tmajp_{ratio}=\prod T_{maj}\sigma_{maj}\cdot T_{maj}。平衡启发式同时对两种技术和所有波长求和(14.25)。
  • 数值稳定:不单独存 T^\hat T 和 pp(镜面链或大量零散射会上溢/下溢),而存 β=T^/pu,λ1\beta=\hat T/p_{u,\lambda_1} 与重缩放概率 ru,λi=pu,λi/ppathr_{u,\lambda_i}=p_{u,\lambda_i}/p_{path}、rl,λi=pl,λi/ppathr_{l,\lambda_i}=p_{l,\lambda_i}/p_{path},MIS 权重为 1/1m(∑ru+∑rl)1\big/\frac1m(\sum r_u+\sum r_l)。
  • 细节:介质发射在每个采样点都累加(不只在选中吸收时),对应 pe=1p_e=1,再按波长做单样本 MIS;阴影光线遇到有材质的表面立即返回 0,遇到介质边界则继续;阴影光线上的俄罗斯轮盘只作用于透射率很低的光线,因为若以透射率为存活概率,比率追踪就退化成了 delta 追踪;LayeredBxDF 返回的 BSDF/PDF 只成比例正确,此时用 BSDF::PDF() 另估 PDF(pdfIsProportional)。

与上文(RTR4、实时)的对照

话题RTR4 / 实时PBRT 4e
散射阶数单次散射为主,多次散射用近似(Wrenninge 等 2013 的"逐次降低 σs\sigma_s 与 gg"也被 PBRT 延伸阅读收录)任意阶,无偏
光源采样每个步进点对光源做阴影查询(阴影贴图/体积阴影)光源采样 + 比率追踪透射率,与相位函数采样 MIS
有色介质RGB 三通道独立光谱点采样 + 单样本光谱 MIS
体积发射直接累加随机游走碰到才计入,没有专门的发射采样(练习 14.4;Villemin–Hery 2013、Simon 等 2017)

延伸阅读要点:Lommel 1889 首先推导传输方程,Khvolson 1890 独立得到;Kajiya–Von Herzen 1984 引入图形学;Rushmeier 1988 首次用蒙特卡洛解一般体积传输;Kulla–Fajardo 2012 针对介质内光源的采样(中子输运领域 Kalli–Cashwell 1977 已有);体积路径引导 Herholz 等 2019;乘积采样 Wrenninge–Villemin 2020、Villeneuve 等 2021;大气与天空模型 Preetham 等 1999、Hošek–Wilkie 2012/2013、Bruneton 2017 的 8 种晴空模型评测、Wilkie 等 2021(见 天空与云渲染);光子映射在介质中的推广 Jensen–Christensen 1998、光束辐射估计 Jarosz 等 2008b;非指数介质 Bitterli 等 2018b、d'Eon 2018、Jarabo 等 2018a;微薄片 Jakob 等 2010、SGGX(Heitz 等 2015,上文"统一表示的展望"中提到的就是它)。

原书问题(第 14 章)

  • 式 (14.8) 与紧随其后的概率陈述(已解码网页 SVG 并数值验证):分段改写中第 2、3 项多乘了 σmaj1\sigma^1_{maj},第 3 项还缺 σmaj3\sigma^3_{maj};正确为 σ1 ⁣∫0t1T1f+T1(p→p1) σ2 ⁣∫t1t2T2f+T1T2 σ3 ⁣∫t2t3T3f+⋯\sigma^1\!\int_0^{t_1}T^1f+T^1(p\to p_1)\,\sigma^2\!\int_{t_1}^{t_2}T^2f+T^1T^2\,\sigma^3\!\int_{t_2}^{t_3}T^3f+\cdots。正文说 "t1′>tt'_1>t 的概率等于 σmaj1Tmaj1(p→p1)\sigma^1_{maj}T^1_{maj}(p\to p_1)",应为 Pr⁡{t1′>t1}=Tmaj1(p→p1)\Pr\{t'_1>t_1\}=T^1_{maj}(p\to p_1)(概率无量纲,不能带 σ\sigma)。两处错误恰好互相抵消,所以"估计量化简为 f(p′)f(p')"的结论和代码都正确。笔者用两段 majorant(σ1=0.7,σ2=2\sigma^1=0.7,\sigma^2=2,f=1+cos⁡tf=1+\cos t)数值积分:原积分 1.4815,正确改写 1.4815,书中写法 1.3191。
  • 路径测度:μn(D)=∑c∈{0,1}n⋯\mu_n(D)=\sum_{c\in\{0,1\}^n}\cdots 的求和范围应为 {0,1,2}n\{0,1,2\}^n,与上一行 Pn\mathcal P_n 的定义和被积式中 ci=2c_i=2 的分支一致(SVG 已核对)。
  • 式 (14.7) 表面项写作 Lo(ps,ω)L_o(p_s,\omega),与 (14.3) 的 Lo(ps,−ω)L_o(p_s,-\omega) 符号不一致,应为 −ω-\omega。
  • 式 (14.31)(14.3.1 一维传输方程)积分号内漏了 σt(z′)\sigma_t(z'):应为 ∫Tr σt Ls/∣ωz∣ dz′\int T_r\,\sigma_t\,L_s/|\omega_z|\,dz',与 (14.2) 一致(LsL_s 按 14.33 已除过 σt\sigma_t)。LayeredBxDF 取 σt=1\sigma_t=1,所以实现不受影响(SVG 已核对)。
  • 小笔误(网页原文已核对):14.1.3 正文 "the probability that t1′>tt'_1>t" 的 tt 应为 t1t_1;式 (14.22) 括号后多了一个逗号((∏⋯σmaj),Tmaj\big(\prod\cdots\sigma_{maj}\big),T_{maj},SVG title 可见);14.2.1 "BDSF" 应为 BSDF;图 14.7 图注 "Scene courtesty" 应为 courtesy。
  • 参考文献:Jakob 等 2010 的末位作者写成 "M. Steve",应为 S. Marschner(Steve Marschner);延伸阅读中 "multiple importance scattering" 应为 multiple importance sampling(笔误)。
  1. realtime_rendering_4ed.pdf 第 14 章 Volumetric and Translucency Rendering
  2. Game_Engine_Architecture_4th_Edtion_Volume_2_-_Jason_Gregory.pdf
  3. Jason Gregory《Game Engine Architecture》第 4 版(2026)卷 II 第 12 章 12.1.2.2、12.2.1、12.5.13 节
  4. PBRT 4e source excerpt: chapter 11 (Volume Scattering)
  5. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 11 章 11.1–11.4 节、延伸阅读、练习,pbr-book.org/4ed/Volume_Scattering
  6. PBRT 4e source excerpt: chapter 14 (Light Transport II Volume Rendering)
  7. Pharr, Jakob, Humphreys《Physically Based Rendering: From Theory to Implementation》第 4 版(MIT Press, 2023)第 14 章 14.1–14.2 节、延伸阅读,pbr-book.org/4ed/Light_Transport_II_Volume_Rendering

相关页面

图形学光与物质的交互Light-Matter Interaction光是电磁横波;它与物质交互的核心是散射(振荡的电场带动电荷振荡、再辐射出新波)和吸收。粒子的大小决定散射特性,均匀介质用复折射率描述,表面是折射率的突变界面,把光分为反射和折射;折射进物体的光经次表面散射后部分射出。散射距离与着色尺度的比较决定能否把次表面散射当作局部的漫反射项。本页对应 RTR4 9.1–9.2 节。图形学雾与简易体积光照Fog & Simple Volumetric Lighting这类"老派"技巧依赖经验模型,但至今仍然好用:深度雾、高度雾和局部雾体积用透射率混合雾色;光柱可用拉伸的面向相机粒子、单次散射的解析积分、平面切片,或屏幕空间径向模糊实现(RTR4 14.2 节)。图形学天空与云渲染Sky & Cloud Rendering天空颜色和空气透视来自空气分子的瑞利散射,太阳周围的光晕来自近地大颗粒的米氏散射。实时方案有解析拟合模型和基于预计算透射率/散射查找表的物理模型;云则从全景贴图、粒子发展到用程序化噪声构建、光线步进的参与介质层,并以倍频程近似多次散射(RTR4 14.4 节)。图形学半透明表面与折射Translucent Surfaces & Refraction玻璃、水、红酒等高吸收、低散射材质:覆盖率 \alpha 与透射率 Tr 是两回事——前者遮挡背景,后者按波长过滤背景。厚度变化时按 Beer-Lambert 定律计算彩色透射;折射可用环境贴图或屏幕空间扰动近似,粗糙表面按粗糙度模糊背景;焦散则用动画贴图、光线光栅化或图像空间光子溅射近似(RTR4 14.5 节)。图形学实时次表面散射Real-Time Subsurface Scattering蜡、皮肤、牛奶等高散射固体中,光在离入射点不远处重新射出;当偏移大于一个像素时就不能再用 BRDF 表示。实时方法从便宜的包裹光照、法线模糊、预积分皮肤,到纹理空间/屏幕空间扩散,再到针对大尺度散射的深度图技术(RTR4 14.6 节)。图形学体素Voxels体素是"体积元素",表示均匀三维网格中的一块空间,位置由网格索引隐含。体素是存储体积数据的传统方式,可存占用位、密度、颜色、法线、有向距离等。数据量按分辨率立方增长,常用稀疏体素八叉树 (SVO) 等结构压缩;可由 GPU 体素化生成,并通过光线投射、转多边形、移动立方体或等值面/水平集光线追踪来渲染(RTR4 13.10 节)。图形学粒子系统Particle Systems粒子系统是一组按某种算法运动的小物体,用于火、烟、爆炸、水流、星系等,同时负责动画(生成、移动、变化、删除)和渲染。粒子通常渲染成公告板;难点在半透明排序、光照(逐顶点、逐像素低分辨率光照图块)以及接收/投射/自阴影(透射率溅射、傅里叶不透明度贴图、消光体积)(RTR4 13.8 节)。图形学滤波阴影贴图Filtered Shadow Maps普通阴影贴图的深度不能直接过滤。滤波阴影贴图存的是深度的某种统计量(矩、指数),可以像普通纹理一样模糊、做 mipmap、用求和面积表,只取一个样本就能得到平滑的半影。代表方法有方差阴影贴图 (VSM)、卷积阴影贴图、指数阴影贴图 (ESM/EVSM) 和矩阴影贴图;共同难点是漏光。图形学时间重投影Temporal Reprojection重投影是在新的视点和朝向下复用前几帧已计算的样本。目的一是利用时间相干把渲染开销摊到多帧(与时间抗锯齿相关),二是当前帧来不及完成时快速生成近似帧(对 VR 防止晕动尤其重要)。分为反向重投影(从上一帧收集)和正向重投影(把上一帧散布到当前帧)(RTR4 12.2 节)。图形学分簇着色Clustered Shading分簇着色把整个视锥(而不只是屏幕平面)划分为三维单元——簇 (cluster),按簇建立光源列表。与依赖场景几何深度的分块着色不同,簇的划分与几何无关,可只由视图和光源计算,因此对相机位置的性能波动更小、对深度不连续更稳健,并为不透明、透明、体积物体提供统一的光照方案。它同样可配合前向或延迟着色,并衍生出 z-binning、光源树等更省内存的变体。本页还汇总了各类多光源方案的对比。图形学隐式曲面与有符号距离函数Implicit Surfaces & Signed Distance Functions隐式曲面用 f(\mathbf{p})=0 定义:代入点结果为零即在曲面上。返回到最近表面有符号距离的 f 称为有符号距离函数 (SDF)。它们便于做光线求交、构造实体几何 (CSG)、混合与变形,通常用光线步进可视化,也可用移动立方体等方法转为三角形。图形学毛发渲染Hair & Fur Rendering毛发由角质层、皮质、髓质三层构成,可看作用曲线离散化的体积。几何上用沿引导曲线挤出的四边形条带并配合 alpha/顺序无关透明;着色用 BSDF(R、TT、TRT 分量),再加体积自阴影与多次散射近似;动物短毛可用壳与鳍或几何着色器挤出(RTR4 14.7 节)。游戏开发 · UE5天空大气与体积云Sky Atmosphere & Volumetric Clouds天空大气 (Sky Atmosphere) 组件是基于物理的天空与大气渲染:模拟瑞利散射 (Rayleigh)、米氏散射 (Mie) 和臭氧吸收,天色随太阳高度变化,并提供带行星曲率的空气透视,可以从地面平滑过渡到外太空。体积云 (Volumetric Cloud) 组件用材质驱动的三维体积纹理做光线步进,多次散射用若干「八度」近似,云的阴影可以用光线步进或 Beer 阴影贴图。图形学参数曲面与贝塞尔面片Parametric Surfaces & Bézier Patches参数曲面把参数曲线从一个参数推广到两个参数 (u,v),由少量控制点定义,运行时细分成任意多个三角形,是质量与速度之间的天然权衡:三角形多则着色和轮廓更好。矩形定义域的是贝塞尔面片(张量积曲面),三角形定义域的是贝塞尔三角形,后者是 PN 三角形和 Phong 细分的基础。游戏数学零散射与透射率估计Null Scattering & Transmittance Estimation透射率 Tr=e^{-\tau} 在非均匀介质里没有解析解。直接估计光学厚度 \tau 再取指数会因 Jensen 不等式产生偏差;零散射 (null scattering) 用一个常数上界(majorant)\sigma{maj} 把介质"填满"成均匀介质,得到可无偏采样的积分方程,由此推出 next-flight、比率追踪 (ratio tracking) 和 delta 追踪 (delta tracking) 等估计器。本页对应 PBRT 4e 11.2 与 11.4.3。图形学光谱渲染Spectral Rendering光谱渲染 (Spectral Rendering) 在光传输中直接处理波长,而不是 RGB 三元组。pbrt 第 4 版在每条相机光线上随机采样少数几个波长(默认 4 个),把光谱积分并入渲染本来就在做的蒙特卡洛积分;最后用颜色匹配函数估计像素的 XYZ/RGB。输入端的 RGB 颜色则通过"sigmoid 二次多项式"转换成平滑光谱。本页按 PBRT 4e 4.5、4.6.4–4.6.6 节整理。图形学渲染方程Rendering Equation渲染方程 (Kajiya, 1986) 把"某点接收到的光就是其他点发出或反射的光"写成递归积分,概括了光从光源出发经任意次反弹到达眼睛的所有路径。反射方程是它的受限特例。离线用辐射度 (Radiosity) 或蒙特卡洛路径追踪求解;实时渲染则靠简化和预计算逼近它(RTR4 第 11 章)。图形学随机光线追踪与路径追踪Stochastic Ray Tracing & Path Tracing光线追踪用投射光线同时解决可见性问题和光照问题。GEA 从最简单的"眼睛光线 + 着色方程"讲起,逐步加入阴影光线、透射光线、用蒙特卡洛估计渲染方程的随机光线追踪、递归间接光照,再到每次只走一条路径的路径追踪、双向路径追踪和 Metropolis 光传输,最后讨论降噪与光线投射效率(GEA4 卷 II 12.6.3–12.6.5)。图形学薄膜干涉与分层材质Thin-Film & Layered Materials几何光学假设表面不规则要么小于一个波长、要么大于约 100 个波长;真实表面在 1–100 个波长范围(纳米几何)也有不规则,会产生衍射,厚度接近光波长的表面薄膜会产生薄膜干涉,这些都需要波动光学。现实材质还常常层层叠加,最简单也最重要的是清漆层。本页对应 RTR4 9.11–9.12 节。图形学波前路径追踪Wavefront Path Tracing波前 (wavefront) 架构把路径追踪拆成一串独立的 GPU 内核(生成相机光线、采样、求交、介质采样、逃逸光线、命中发光体、按材质分开的着色、阴影光线、写胶片),内核之间用工作队列传递数据;每个内核开始时线程都在做同一件事,执行是收敛的。代价是每个内核都要从显存读入、再写回全部状态,因此更受带宽限制。pbrt 4e 的 GPU 渲染路径 WavefrontPathIntegrator 就是这种结构,算法与 CPU 上的 VolPathIntegrator 完全相同(见 参与介质与体积散射),只改变计算的组织方式和数据布局。注意术语:这里的"波前"指整批光线按深度推进的处理方式,与 AM图形学可微渲染与神经渲染Differentiable & Neural Rendering逆向渲染 (inverse rendering) 要从图像反推场景参数 \mathbf x(形状、材质、光照……),通常写成优化问题 \mathbf x^=\arg\min{\mathbf x}g(f(\mathbf x)),其中 f 是渲染器,g 是损失函数。参数维度可达数百万,只能用梯度下降,因此需要可微渲染 (differentiable rendering):不构造巨大的雅可比矩阵,直接计算"图像空间梯度 × 雅可比"这一向量-矩阵乘积。难点是可见性造成的不连续、反向模式的内存开销和导数积分的采样。机器学习与渲染的结合可分三类:用学习得到的数据结构替换传统数据结构、用神经网络改进传统渲游戏美术日光与大气透视Daylight & Aerial Perspective搭建动机与 cheat 见 Birn 环境与建筑布光(第 3 版 Ch4);本页偏 Dinur 真实感/大气侧。 Dinur Ch6:太阳因极远而在地球上近似平行光;大气通过吸收/反射、Rayleigh 与 Mie 散射改写日光颜色与天空;大气透视 (aerial perspective) 是距离感的根基。本页给户外 Look Dev 检查项;体积散射算法与 UE 天空系统见图形学/UE5 链出页。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原