附录 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\)。因此累计到达地表的通量为
由每次作用中的反射、透射和吸收分配,可得总反射率 R、地表吸收率 \(A_g\) 和薄片吸收率 \(A_s\):
它们满足 \(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,并具备三个后端后运行:
脚本会生成结果数据与两幅 SVG 图,便于查看逐阶贡献和采样收敛。