01 - LESS 模型介绍¶
什么是 LESS?¶
LESS 是面向遥感研究的三维辐射传输模型。它使用蒙特卡洛方法描述辐射在地形、植被表面和体介质中的传播,可生成光学、热红外、辐射场、能量平衡、光合作用和太阳诱导叶绿素荧光(SIF)等模拟产品。
当前 LESS 3.x 系列在 LESS 2.x 的基础上重新设计了计算核心和 Python API:
- 三种计算后端:NVIDIA GPU 可使用 OptiX;支持 Ray Query 的 GPU 可使用 Vulkan;CPU 可使用 Embree。
- 统一 Python API:场景、属性、光照、传感器和过程都通过
less包配置。 - 持久场景:场景构建后可以重复模拟;修改光照或属性时通常不需要重建几何。
- 两种植被表示:显式三角网格使用
Mesh,连续冠层或树冠体可使用TurbidBoundary。 - 联合生理过程:Mesh、Turbid 和地形可以在同一能量平衡与光合作用工作流中求解。
后端只决定使用的硬件和执行方式。相同的场景与过程在不同后端具有一致的物理量、单位和产品字段。
可以模拟什么?¶
| 应用 | 主要产品或过程 |
|---|---|
| 光学遥感 | RGB、多光谱和高光谱影像,BRF 与反照率 |
| 冠层辐射 | 三维辐射场、fPAR、上行与下行辐照度 |
| 热红外遥感 | 固定温度或能量平衡温度驱动的热红外影像 |
| 植被生理 | 叶温、净光合速率、气孔导度、阳叶与阴叶状态 |
| 叶绿素荧光 | 静态或动态 SIF 过程与 SIF 影像 |
| 激光雷达 | 点云与波形产品 |
| 大气耦合 | 大气剖面、6S、太阳—天空和环境贴图光照模型 |
具体章节会说明每类产品需要的场景属性和过程参数。
基本原理¶
LESS 的光学与热辐射传输由原生后端执行:
- 传感器或过程在场景中生成采样光路;
- 光路与地形、Mesh 表面或 Turbid 介质发生相互作用;
- 依据光学、热学和生理属性计算反射、透射、吸收与发射;
- 对采样结果统计,得到影像或场景状态产品。
quality、num_photons 等参数控制采样量。教程通常使用较低质量以缩短运行时间;正式实验应增加采样量并检查结果是否收敛。
选择后端¶
默认情况下,LESS 会从当前计算机可用的后端中进行选择。也可以显式指定:
import less
scene = less.Scene(backend="optix") # NVIDIA GPU
scene = less.Scene(backend="vulkan") # 支持 Ray Query 的 GPU
scene = less.Scene(backend="embree") # CPU
如果希望在运行前检查某项功能是否可用,可以使用 Scene.can_use():
scene = less.Scene()
if scene.can_use("optical_imaging"):
print("可以执行光学成像")
scene.can_use("energy_balance", explain=True)
10 行代码完成一次模拟¶
import less
scene = less.Scene()
scene.size = 10.0
scene.terrain = less.Terrain(
property=less.Lambertian(reflectance=0.3)
)
scene.illumination = less.Illumination(source=less.Sun(zenith=30, azimuth=150), atmosphere=less.NoAtmosphere())
image = scene.simulate(less.OpticalImager(
less.Orthographic(image_size=256),
bands=[650, 550, 450],
))
image.save("first_image.png")
版本规则¶
LESS 使用标准的预发布标识和语义化版本:
b1表示 Beta 1:主要功能已经形成,但 API、文件格式或行为仍可能调整。rc1表示 Release Candidate 1:计划公开的功能基本完成,API 和科学语义准备冻结。- 如果
3.0.0rc1发现发布阻断问题,下一候选版本为3.0.0rc2。 - 通过最终发布检查后,版本为
3.0.0。 - 正式发布后的兼容性错误修复使用
3.0.1;向后兼容的新功能使用3.1.0。
Python 发行包名称为 less3d,程序中的导入方式为 import less。
第 05 章会逐步解释场景、光照、传感器和输出产品。
下一步¶
相关 API¶
less.Scene、less.Scene.simulate()、less.Scene.rebuild()less.Scene.can_use()less.Terrain、less.Mesh、less.TurbidBoundaryless.Lambertian、less.Illumination、less.Sun、less.NoAtmosphereless.Orthographic、less.OpticalImager