跳转至

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 的光学与热辐射传输由原生后端执行:

  1. 传感器或过程在场景中生成采样光路;
  2. 光路与地形、Mesh 表面或 Turbid 介质发生相互作用;
  3. 依据光学、热学和生理属性计算反射、透射、吸收与发射;
  4. 对采样结果统计,得到影像或场景状态产品。

qualitynum_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.Sceneless.Scene.simulate()less.Scene.rebuild()
  • less.Scene.can_use()
  • less.Terrainless.Meshless.TurbidBoundary
  • less.Lambertianless.Illuminationless.Sunless.NoAtmosphere
  • less.Orthographicless.OpticalImager