计算机图形学 22:小光源为什么难以采样
把上一篇的整面发光天花板缩成一小块灯,路径追踪仍能得到正确期望,但有限样本的图像会变得很吵。多数随机方向没有命中灯,少数命中方向承担了很大的贡献。增加样本能缓解问题,改变采样分布则可能更有效。
本篇在同一个小灯盒子中比较三种直接光估计:按表面反射分布选方向、在灯面选点,以及用多重重要性采样合并二者。先隔离一次散射,避免把多次反射、路径终止和采样策略混成一个误差来源。
小灯让哪些样本失效
盒子沿用第 21 篇的坐标和材质:地板 y=−1,顶面 y=1,前面开口;左墙红、右墙绿,其余表面灰。新灯位于 y=0.99,朝下,边长 0.24,面积 A=0.0576,三个通道的发射辐亮度均为 40。原来发光的顶面改成反射率 0.65 的灰色表面。
这改变了场景,不能把新图和上一篇直接比较为“算法加速”。下面三种策略使用的都是这个新场景。它们只计算相机直接见灯和相机命中表面后的直接灯光,不计算第二次表面反射。
探针放在地板中心,向内偏移 10⁻⁷,反射率 ρ=0.65。若按 Lambert 的余弦分布抽方向,密度 pᵦ=cosθ/π。命中灯时,fᵣcosθ/pᵦ=ρ,所以一次非零样本为 ρLₑ=26;未命中时为零。参考积分约为 0.1197953,因此命中概率只有约 0.0046075,即平均约 217 个方向才命中一次。
“绝大多数样本为零”不意味着估计公式错误。这里的问题是方差:对这个探针,每个样本近似是值为 26 或 0 的 Bernoulli 变量。少数命中数量的波动会直接表现为亮点和暗点。
从灯面取点,PDF 也要换单位
下一事件估计(NEE)在当前散射点额外连接一个光源样本,直接估计通向光源的那一段贡献。本篇只有一盏矩形灯,因此无需先抽选灯编号。若有多盏灯,最终密度还必须乘选中该灯的概率。
在矩形面积上均匀选点 y,面积密度 pₐ=1/A。设 x 为接收点,r=|y−x|,ω 指向灯,cₗ=nₗ·(−ω)。对朝向接收点的灯面,面积微元和立体角满足:
pₐ 的单位是面积的倒数,pₗ 的单位是立体角的倒数。不能直接把 1/A 放进方向积分的分母,也不能把它与 pᵦ 比大小。这不是符号选择,而是同一个事件在两种测度下的密度转换。
接收面余弦为 c=max(0,n·ω),单次灯采样贡献为 V Lₑ(ρ/π)c/pₗ。V 是有限线段的可见性。代入换元后,也可以写成 V Lₑ(ρ/π)c cₗ A/r²。这两种写法必须得到同一个数。
距离平方倒数在面积形式里出现,在沿射线传输的辐亮度上不应再乘一次。这里的 1/r² 来自灯面张开的立体角。单面发射还要求 cₗ>0;把背面余弦取绝对值后继续发光,会把本来朝上的灯错误地照到地板上。
程序把接收点偏移一次,随后从这个点重新计算方向、距离和两种 PDF。阴影射线的最大参数略小于灯面距离,避免把被连接的灯自己当作遮挡物。这组固定尺度实验用 10⁻⁷ 的法线偏移和 10⁻⁹ 的相对端点收缩;它们不是适用于任意尺度场景的误差界。
为什么两种正确估计不能直接相加
BSDF 采样和灯面采样都在估计同一份直接光积分。若各自算完再相加,期望就变成两份光。错误对照保留了这种写法,用来检测重复计光。
MIS 为每种策略的样本分配权重。本篇每轮从两种策略各取一个样本,采用 power heuristic:
同一方向上 wₗ+wᵦ=1,因此两项积分合起来仍是原积分。每轮估计值为 wₗ(ωₗ)F(ωₗ)/pₗ(ωₗ)+wᵦ(ωᵦ)F(ωᵦ)/pᵦ(ωᵦ),其中 F 包含可见性、发射、反射函数和接收面余弦。两个权重通常在不同的抽样方向上求值,不能先算一对常数再到处复用。
两项相加后不再除以 2。各自的密度已经属于各自的采样策略,并不是先以二分之一概率选择某种策略的混合采样。若改成不同样本数,需要使用带 nᵢpᵢ 的一般权重,不能原样照搬本篇公式。
BSDF 分支命中灯时,竞争的 pₗ 从原散射点到实际命中灯点计算。相机直接看见灯则直接返回 Lₑ,不套这种“上一个散射点的两策略竞争”。以后加入理想镜面时,离散事件也不能当作普通连续 PDF 代入这个公式。
direct_light.hpp 返回单位反射率的直接光,调用者再乘 RGB 反射率。它复用累计 BVH、余弦方向采样、材质与盒子几何;灯对应固定场景的三角形编号 10、11。这个接口服务于一个矩形灯实验,尚不是任意场景的光源注册系统。
图像相似之外的数值对照
以下都是程序输出的 96×96 图像,每个着色点累计 256 轮,种子为 20260920。相机射线固定在像素中心,没有像素抖动。先在线性空间平均,再用 L/(1+L) 压缩高光和 sRGB 编码。MIS 每轮有两种采样,另外两种每轮只有一种,因此这组图片是固定轮数的现象对照,不是等时间性能对照。
BSDF 图有明显斑点;灯采样与 MIS 在这个分辨率下近似。顶面的大部分区域很暗,是一次散射模型的结果:朝下的小灯没有直接照亮上方顶面。它不是多次反射收敛后的黑暗天花板预测。
地板探针的参考值使用灯面上的确定性中点积分,128² 格得到 0.11979534778547,256² 格得到 0.11979532145383,差约 2.63×10⁻⁸。参考积分采用面积形式,随机估计采用方向 PDF;可见性仍共用 BVH,所以加密相符不能独立证明求交器正确。
固定样本实验使用种子 1–8,每种策略每种子 131072 轮。终止条件固定,不根据图像好坏提前停止。下表标准误是八个运行均值的样本标准差除以 √8:
| 策略 | 八次均值 | 均值标准误 |
|---|---|---|
| BSDF | 0.116365433 | 0.001232494 |
| 灯面 | 0.119794533 | 0.000000370 |
| MIS | 0.119795166 | 0.000000204 |
| 错误的无权重相加 | 0.236011901 | 0.001555742 |
错误版本接近 2×0.119795321,足以区分“样本更充分”和“把同一份光算了两遍”。有限样本不会恰好等于期望;BSDF 均值低于参考约 2.8 个估计标准误,也说明八次运行不是很强的统计保证。程序的五标准误容差是一项可复跑检查,不能代替无偏性的积分推导。
几何控制另用种子 42,各策略运行 4096 轮:接收点与灯之间放完整遮挡平板,结果全为零;把灯翻面,结果也全为零;在灯后放平板,与原场景逐样本相等。另外建立只含一个遮挡面的独立 BVH,不放灯或天花板:平板位于目标点后方时可见,位于目标点前方时不可见。这项确定性检查直接核对有限阴影线段的长度边界。
同样 200 毫秒能算得多准
计时实验仍用同一探针、同一参考值和种子 1–8。每种策略先预热 4096 轮,正式阶段每 256 轮检查一次单调时钟,到 200 毫秒后结束;策略顺序随种子轮换。计时包括随机数、采样、求交和累加,不包括编译、参考积分和文件输出。
这测量的是 CPU 墙钟运行时间,既不是 GPU 执行时间,也不是整帧间隔。机器同时执行其他任务时,完成轮数会变化。记录实际耗时而不是把它们统一写成精确的 200 毫秒:
| 策略 | 完成轮数范围 | 实际毫秒范围 | 八次线性 MSE |
|---|---|---|---|
| BSDF | 496128–553472 | 200.000–200.092 | 4.907×10⁻⁶ |
| 灯面 | 572928–642304 | 200.006–200.070 | 2.746×10⁻¹³ |
| MIS | 262144–296960 | 200.017–200.149 | 2.628×10⁻¹³ |
MSE 是八个最终估计分别减去参考值、平方后取平均,没有在色调映射后的像素值上计算。灯采样和 MIS 的结果很接近,不能据这八次观测宣布 MIS 稳定快于灯采样。对这种小灯加 Lambert 表面的组合,灯采样已经匹配了主要贡献区域;MIS 还要承担额外的方向采样和求交成本。
墙钟终止还可能与不同随机路径的成本相关,因此定时实验只用于这个预算下的误差观测。固定轮数实验与数学推导负责核对估计目标。到参考积分自身误差同量级时,也应加密参考,不能继续把它当作精确真值。
复跑命令如下。构建目录是输出位置,不应作为源文件提交。
1 | |
练习与自检
练习一:PDF 换元。 面积为 0.5 的平面灯均匀采样,某灯点距接收点 2,灯面余弦为 0.8。它对应的方向密度是多少?若直接拿面积密度代入方向积分,贡献会偏大还是偏小?
解题要点:pₐ=2,pₗ=2×4/0.8=10。把分母 10 错写成 2,会把该样本贡献放大五倍。接收面余弦不参与面积到立体角的换元,它属于反射积分本身。
练习二:重复计光与权重。 某方向 pₗ=10、pᵦ=1,两种策略各取一个样本。求两个 power 权重;为什么把最终两项再平均会使结果偏暗?
解题要点:wₗ=100/101,wᵦ=1/101。同一方向的权重和为 1,使两项期望相加恢复一份积分。再除以 2 会得到原积分的一半。这不意味着两个实际样本方向上的权重数值必然相加为 1,权重恒等式是在同一积分方向上成立。
练习三:灯采样何时可能失效? 若表面改成极窄的高光反射瓣,面积采样仍均匀,原先的结论能否直接沿用?
解题要点:不能。灯面上的大部分方向可能落在反射瓣外,灯采样也会产生大量很小的贡献;BSDF 采样则可能更匹配反射瓣。应在相同几何、材质、曝光和预算下重新比较,两种策略都必须计算正确的竞争 PDF。理想镜面属于离散事件,还需要单独处理。
导航与参考资料
上一篇:21 光怎样经过多次反射。下一篇:23 金属高光与玻璃折射怎样建模。系列入口。
- PBRT 第四版 §4.2 Working with Radiometric Integrals:面积与立体角积分换元。
- PBRT 第四版 §6.1.7 Sampling:形状面积采样转为相对于观察点的方向密度。
- PBRT 第四版 §2.2.3 Multiple Importance Sampling:式 2.15 与不同策略的权重。
- PBRT 第四版 §13.4 A Better Path Tracer:SampleLd 与命中发光表面的互补 MIS 处理。本篇只隔离其直接光组成,没有把示例称为完整的多反射 NEE 路径追踪器。






