附录 A1 - V 型谷的解析验证¶
本例用一个简单的 V 型谷,比较 LESS 模拟结果与解析解。谷地的一侧为 Lambertian 反射坡面,另一侧为黑色吸收坡面。在垂直太阳光照射下,可以计算不同观测方向的 BRF,以及整个谷地的反照率和吸收率。
下面给出场景设置、解析公式和 LESS 3.1.0 在 OptiX、Vulkan、Embree 三个后端上的对比结果。
三维场景¶
下图展示谷地的三维结构,可拖动或使用方向键旋转。也可以单独打开三维预览,下载后离线查看。
| 条件 | 设置 |
|---|---|
| 水平单元 | X、Y 均为 0–2 m;谷轴沿 Y 方向 |
| 坡面 | 左右坡度均为 45°,谷内开口角为 90° |
| 高程 | 谷底 Z = 0.1 m,两侧谷缘 Z = 1.1 m |
| 西坡(X < 1 m) | 不透射 Lambertian;550、850、1600 nm 的反射率分别为 0.2、0.6、0.9 |
| 东坡(X > 1 m) | 完全吸收,反射率和透射率均为 0 |
| 底部地形 | Z = 0 的黑色平地,被两坡完全覆盖 |
| 边界 | 水平周期边界,最多穿越 10000 次;等价于沿谷轴无限延伸、横向重复的谷地 |
| 光照 | 垂直平行太阳光,各波长的法向辐照度均为 1 W m⁻² nm⁻¹;无大气、无天空光 |
| 观测 | 横断面内 −70° 至 +70°,间隔 10°;正值朝东(方位角 90°),负值朝西(270°) |
| 采样计划 | BRF 和通量各使用 100 万、200 万、400 万光子;最终采用 400 万 |
谷地由四个三角形组成,放置在平坦地形上。水平开口面积为 4 m²,因此各波长的入射通量均为 4 W nm⁻¹。后续分别比较三个波长上的模拟结果。
解析解¶
谷内的辐射传播¶
太阳光均匀照射两个坡面。黑坡吸收全部入射辐射;灰坡将其中一部分按 Lambertian 规律反射。反射光随后从谷口逸出,或落到黑坡上被吸收。由于黑坡不再反射,灰坡的出射辐亮度处处相同,由此可以得到下面的解析解。
方向 BRF¶
设坡度为 \(\beta=45^\circ\),灰坡反射率为 \(\rho\),太阳法向辐照度为 \(E_0\)。灰坡的直接辐照度为 \(E_0\cos\beta\),其出射辐亮度为
令 \(\theta\) 为上表定义的带符号观测天顶角。灰坡占水平开口在观测方向投影的可见比例为
开口平均辐亮度是 \(\bar L=f_g L_g\),所以
在 −45° 以下灰坡完全被遮挡,BRF 为 0;在 +45° 以上,可见开口全部由灰坡占据,BRF 为 \(\rho/\sqrt2\)。星下点为 \(\rho/(2\sqrt2)\)。尽管局部表面是 Lambertian,整谷的方向 BRF 仍随角度变化。
通量与吸收¶
对沿谷轴无限延伸的等宽坡面,Hottel 交叉弦法给出灰坡到黑坡的视因子
其中坡长 \(l=\sqrt2\) m,开口宽度 \(w=2\) m。视因子的几何推导可参阅 NASA《Thermal Radiation Heat Transfer》§2 的交叉弦法。
灰坡接收一半的入射通量,其中 \(\rho\) 被反射,反射通量中 \(1-F_{gb}=\cos\beta\) 从开口逃逸。因此,整谷反照率 \(R\) 和吸收率 \(A\) 为
灰坡和黑坡的吸收率分别为 \((1-\rho)/2\) 和 \(1/2+\rho F_{gb}/2\),相加即为整谷吸收率。
| 波长 / nm | 灰坡反射率 | 解析整谷反照率 | 解析整谷吸收率 |
|---|---|---|---|
| 550 | 0.2 | 0.07071068 | 0.92928932 |
| 850 | 0.6 | 0.21213203 | 0.78786797 |
| 1600 | 0.9 | 0.31819805 | 0.68180195 |
以上数值由解析公式直接计算。
模拟结果¶
曲线为解析值,彩色点为三个后端的模拟值;右图按每个观测角取三个波长中的最大误差。
左图对比整谷逃逸通量、吸收通量与解析值;右图展示三个采样预算下的最大 BRF/反照率误差。
误差评价¶
以解析值为参考,采用以下绝对误差阈值进行评价。
| 指标 | 阈值 |
|---|---|
| 15 个方向 × 3 个波长的最大 BRF 绝对误差 | ≤ 0.005 |
| 三波长最大反照率/吸收率绝对误差 | 各 ≤ 0.005 |
| 通量闭合误差 \(\lvert R+A+T-1\rvert\) | ≤ 0.0001 |
| 未完成路径通量占比 \(T\) | ≤ 0.00001 |
| 最后两个预算间 BRF、反照率、吸收率的最大绝对变化 | ≤ 0.003 |
通量由 ForwardRadiationFieldSensor 记录。逃逸通量除以入射通量得到反照率,网格与地形的吸收通量之和除以入射通量得到吸收率。\(T\) 表示达到路径深度或周期穿越上限时,光子仍携带的通量比例。
最终结果:每个产品 400 万光子¶
| 后端 | 最大 BRF 误差 | 最大反照率误差 | 最大吸收率误差 | 通量闭合误差 | 最后预算变化 | 结论 |
|---|---|---|---|---|---|---|
| OptiX | 0.00000728 | 0.00005252 | 0.00005249 | 2.69e-08 | 0.00005782 | 通过 |
| Vulkan | 0.00000728 | 0.00005296 | 0.00005296 | 1.42e-08 | 0.00005782 | 通过 |
| Embree | 0.00000728 | 0.00005252 | 0.00005249 | 2.69e-08 | 0.00005782 | 通过 |
三个后端均满足上述阈值,未完成路径通量均为 0。光子初始位置采用随机化 Sobol 低差异采样,后续散射采用独立随机采样。光子数从 100 万增加到 200 万、400 万时,最大 BRF 误差分别为 0.00000436、0.00000549、0.00000728。最后两个预算间的最大变化为 0.00005782,低于 0.003 的阈值。
下载与复现¶
把脚本保存在 scripts/,把 input.json 和 scene.obj 保存在同级的 data/v-valley/,安装 LESS 及 matplotlib 后运行:
运行需要三个后端均可用。脚本依次完成模拟,输出结果数据(JSON)和三张对比图(SVG),其中包含各采样预算的数值、误差及执行信息。