跳转至

附录 A3 - 平行平面间的多次散射

一张半透射的 Lambertian 薄片悬在反射地表上方。太阳光穿过薄片后,在薄片下表面与地表之间反复反射,最后向上逸出或被吸收。本例以表面间的多次漫反射,验证 LESS 对高阶散射的计算。

平行平面之间每轮反射的通量比例固定,所有阶次可以求和得到严格解析解。我们分别比较总反射率、薄片吸收、地表吸收、多角度 BRF,以及限制作用次数时的逐阶结果。

场景设置

拖动可旋转场景,也可单独打开三维预览。

平行薄片和地表之间的多次反射光路示意

水平单元为 2 m × 2 m,地表位于 Z = 0,薄片位于 Z = 1 m。采用水平周期边界,最多穿越 10000 次,对应水平无限延伸的两个平面。太阳天顶角为 30°,各波长法向辐照度均为 1 W m⁻² nm⁻¹,无大气和天空光。各波长的入射通量为 \(4\cos30^\circ\) W nm⁻¹。

薄片上下表面的反射率分别记为 r、b,双向透射率为 t,地表反射率为 g。反射与透射均遵循 Lambertian 角分布。

波长 / nm r b t g 一轮往返比例 q = gb
550 0.2 0.3 0.5 0.6 0.18
850 0.1 0.8 0.15 0.9 0.72
1600 0.8 0.8 0.2 1 0.8

550 nm 的高阶贡献较小;850 nm 的腔内反射较强;1600 nm 的薄片和地表均无吸收,进入腔体的光最终全部向上逸出。

解析解

无限平行平面之间的视因子为 1,向下离开薄片的通量全部到达地表,向上离开地表的通量全部到达薄片。视因子的基础定义见 NASA《Thermal Radiation Heat Transfer》。

首次到达地表的通量比例为 t。经过地表和薄片下表面各反射一次,再次向下的比例为 \(tgb=tq\)。因此累计到达地表的通量为

\[ t(1+q+q^2+\cdots)=\frac{t}{1-gb}. \]

由每次作用中的反射、透射和吸收分配,可得总反射率 R、地表吸收率 \(A_g\) 和薄片吸收率 \(A_s\):

\[ R=r+\frac{t^2g}{1-gb},\qquad A_g=\frac{t(1-g)}{1-gb},\qquad A_s=1-r-t+\frac{tg(1-b-t)}{1-gb}. \]

它们满足 \(R+A_g+A_s=1\)。这些公式包含无限次反射,给出三个通量各自的数值。平面上的出射辐亮度均匀,向上出射遵循 Lambertian 分布,因此任意向上观测方向的 BRF 均等于 R。

波长 / nm 解析反射率 R 解析薄片吸收率 解析地表吸收率
550 0.38292683 0.37317073 0.24390244
850 0.17232143 0.77410714 0.05357143
1600 1.00000000 0 0

逐阶参考

首先处理薄片上表面的直接照射:向上反射 r,薄片吸收 \(1-r-t\),剩余通量 t 向下传播。之后交替处理地表和薄片下表面:

  • 到达地表的通量 w:吸收 \(w(1-g)\),反射 wg 向上。
  • 到达薄片下表面的通量 w:吸收 \(w(1-b-t)\),透射 wt 向上逸出,反射 wb 向下。

在第 D 次作用后停止时,仍在传播的通量记为 U。将上述分配逐次累加,即得到每个 D 对应的精确有限阶参考,并满足 \(R_D+A_{g,D}+A_{s,D}+U_D=1\)。

模拟结果

逐阶反射率及光子采样稳定性

左图比较 1、2、3、5、9、17、33 次作用后的反射率,实线为有限阶解析值,点为三个后端结果,水平虚线为无限级数的极限。850 和 1600 nm 随阶次增加仍有明显变化,能够检验反复反射对结果的贡献。

完整路径采用 200 次作用上限,其理论剩余通量小于 \(6\times10^{-11}\)。分别使用 100 万、200 万、400 万、800 万和 1600 万光子检查采样变化,最终结果采用 1600 万。BRF 的观测方向为(天顶角、方位角):(0°, 0°)、(30°, 90°)、(60°, 180°)。

误差评价

指标 阈值
三个通量比例及逐阶剩余通量的最大绝对误差 ≤ 0.005
多角度 BRF 最大绝对误差 ≤ 0.005
最后两个光子预算间的最大绝对变化 ≤ 0.003
通量闭合误差 ≤ 0.003
完整路径的未完成通量比例 ≤ 0.00001

通量分别由模拟记录的向上逃逸、薄片吸收和地表吸收计算。多次散射路径采用俄罗斯轮盘赌,有限采样下的统计通量闭合会有小幅波动。

后端 完整路径通量误差 BRF 误差 逐阶最大误差 闭合误差 最后预算变化 结论
optix 0.00009787 0.00033307 0.00030130 0.00009787 0.00004855 通过
vulkan 0.00014619 0.00033283 0.00032326 0.00014619 0.00025135 通过
embree 0.00009787 0.00033295 0.00030123 0.00009787 0.00004818 通过

三个后端均通过全部评价。最大 BRF 绝对误差约为 0.000333,完整路径的最大通量绝对误差约为 0.000146。

1600 nm 的首次反射率为 0.8,计入腔内多次反射后,解析反射率增加到 1。逐阶曲线展示了这个累积过程。

下载与复现

将脚本放在 scripts/,参数和 OBJ 文件放在同级的 data/multiple-scattering/。安装 LESS 和 matplotlib,并具备三个后端后运行:

python scripts/appendix_multiple_scattering.py --output build/multiple-scattering

脚本会生成结果数据与两幅 SVG 图,便于查看逐阶贡献和采样收敛。