跳转至

13 - 均匀参与介质

HomogeneousMedium 描述一个封闭区域内处处相同的吸收、散射和热发射,可用于烟雾、浑浊水体或高温气体的辐射模拟。LESS 计算辐射在介质中的传输,不模拟流动、化学反应或温度随时间的变化。

创建介质

介质区域同样由封闭网格 TurbidBoundary 界定。边界本身不反射、不折射,只标记介质的范围:

import less

scene = less.Scene()
scene.size = 20
scene.illumination = less.Illumination(
    source=less.Sun(irradiance=0), atmosphere=less.NoAtmosphere())   # 不考虑太阳,只看热发射

volume = less.Object("hot_volume")
volume.add_component("volume", less.TurbidBoundary(less.asset_path("homogeneous_slab.obj")))
volume.set_property("volume", less.HomogeneousMedium(
    absorption=0.3, scattering=0.1, g=0.2, temperature=800))
scene.add(volume, positions=[(10, 10, 0)])
参数 含义
absorption 吸收系数 a(m⁻¹)
scattering 散射系数 b(m⁻¹)
g Henyey–Greenstein 不对称因子,−1 < g < 1;g > 0 为前向散射
temperature 温度(K);给出时介质按局地热平衡发射,None 表示不发射
wavelengths 系数为光谱数组时对应的波长(nm)

沿路径长度 d 的直射透过率为 exp(−(a+b)d)。散射光还会再次进入观测方向,因此观测到的辐亮度一般大于直射透过的部分。

光谱系数

系数可以随波长变化:

medium = less.HomogeneousMedium(
    wavelengths=[850, 4000, 10000],
    absorption=[0.02, 0.2, 0.1],
    scattering=[0.04, 0.024, 0.01],
    g=0.3,
    temperature=1800,
)

系数在给定波长之间线性插值,传感器的所有波长都必须落在给定的范围内。热发射源项为 a(λ)·B(λ, T),B 为普朗克函数,因此没有吸收就没有发射。对于不散射、温度均匀、厚度为 d 的介质层:

L_out = L_in · exp(−a·d) + B(λ, T) · [1 − exp(−a·d)]

光学成像和热红外成像使用同一组系数,所以高温介质在近红外也能看到热发射。

成像

projection = less.Perspective(image_size=256, fov=22,
                              position=(20, -20, 6), target=(10, 10, 5))
near_infrared = scene.simulate(less.OpticalImager(projection, bands=[850], quality=64))
mid_infrared = scene.simulate(less.ThermalImager(projection, bands=[4000], quality=64,
                                                 mode="property"))
near_infrared.save("medium_850nm.tif")
mid_infrared.save("medium_4000nm.png")
scene.save("medium.less")

修改吸收、散射、g 或温度后直接再次模拟即可。

多个均匀介质区域可以相邻或重叠,重叠处的系数相加。介质也可以和统计植被出现在同一场景中,但两者不能在空间上重叠。

内置示例

python -m less.examples.homogeneous_medium --case slab --backend embree
python -m less.examples.homogeneous_medium --case regions --backend optix

regions 示例包含三个相邻的介质层,温度分别为 300、280 和 260 K,输出 850 nm 和 4000 nm 的影像。

下一步