跳转至

15 - 交互式可视化

本章介绍 LESS 的交互式三维查看器 scene.show(),它允许您在浏览器中预览场景和模拟结果。

启动查看器

import less

scene = less.Scene()
# ... 配置场景 ...

# 打开交互式查看器
scene.show()

scene.show() 会启动一个本地 Web 服务器,并在默认浏览器中打开三维场景预览。

带传感器的查看器

您可以在启动查看器时传入传感器列表,这样就可以在查看器中直接触发模拟:

sensors = [
    less.OpticalImager(
        less.Orthographic(image_size=512),
        bands=[650, 550, 450],
        quality=128,
        name="RGB",
    ),
    less.ThermalImager(
        less.Orthographic(image_size=512),
        bands=[10600],
        quality=128,
        name="Thermal",
    ),
]

scene.show(sensors=sensors)

带 Process 的查看器

对于需要 Process 链的高级模拟,也可以传入 processes:

processes = [
    less.RadiationFieldProcess(
        bands=[450, 550, 650, 850],
        photons_per_m2=4000,
        name="Radiation Field",
    ),
    less.EnergyBalanceProcess(
        microclimate=less.Microclimate(
            air_temperature=300.0, humidity=0.6, wind_speed=1.5,
        ),
        name="Energy Balance",
    ),
]

scene.show(sensors=sensors, processes=processes)

查看器功能

场景导航

  • 旋转:鼠标左键拖动
  • 平移:鼠标右键拖动(或 Shift + 左键)
  • 缩放:鼠标滚轮

三个标签页

查看器包含三个功能区:

标签页 功能
Scene 三维场景预览,显示物体、地形、坐标轴
Render 触发传感器模拟,查看输出图像
Simulate 运行 Process(辐射场、能量平衡等)

Scene 标签页

  • 查看场景的三维结构
  • 显示物体的包围盒和位置
  • 坐标轴指示方向(红=X/东,绿=Y/南,蓝=Z/上)
  • 地面网格显示场景范围

Render 标签页

  • 选择预定义的传感器
  • 调整传感器参数(如果支持)
  • 点击 "Simulate" 按钮执行模拟
  • 查看模拟结果图像

Simulate 标签页

  • 运行 Process 链
  • 查看 Process 执行状态和结果

内置示例的查看器

运行内置示例时,默认会打开查看器:

import less

# 秋季森林 — 包含 6 种传感器
less.examples.run("autumn_forest")

# 玉米田
less.examples.run("maize_field")

这些示例预配置了多种传感器(RGB、热红外、多光谱、LiDAR 等),可以在查看器中逐一模拟。

Headless 模式

如果不需要交互式查看器(例如在服务器上批量运行),可以跳过 show(),直接使用 simulate();第一次调用会自动构建场景:

# 不打开查看器
for sensor in sensors:
    result = scene.simulate(sensor)
    result.save(f"output/{sensor.name}")

内置示例也支持 headless 模式:

less.examples.run("autumn_forest", show=False, output_dir="./results")

下一步

相关 API

  • less.Scene.show()less.Product.show()
  • less.Scene.simulate()
  • less.OpticalImagerless.ThermalImager
  • less.RadiationFieldProcessless.EnergyBalanceProcess
  • less.examples.list()less.examples.run()