Skip to main content

GPU-accelerated 3D radiative transfer model for remote sensing

Project description

LESS 3.0

PyPI version Python Platform License: MIT

GPU + CPU accelerated 3D radiative transfer model for remote sensing simulation

LESS 3.0 is a complete reimplementation of the LESS model — a widely-used 3D radiative transfer framework in quantitative remote sensing research. Built from the ground up with NVIDIA OptiX ray tracing and a modern Python API, LESS 3.0 inherits the physical foundations of the original LESS while adding GPU acceleration, a redesigned scripting interface, and full physical coupling of energy balance, photosynthesis, and solar-induced chlorophyll fluorescence (SIF).

The original LESS remains available at lessrt.org. LESS 3.0 is the recommended path for new projects.


Key Features

  • GPU + CPU dual backend — Runs on any machine. With an NVIDIA GPU, simulation is typically 10–50× faster; without one, most features still work via the Embree CPU backend.
  • Clean Python API — Designed for remote sensing scientists. Build a scene in 10 lines of code.
  • Digital twin architecture — Build the scene once, simulate many times. Update illumination or surface properties without rebuilding geometry.
  • Multi-sensor support — Optical imager (RGB / multispectral / hyperspectral), thermal infrared, LiDAR point cloud (ALS + TLS), and SIF fluorescence imager.
  • Full physical coupling — 3D radiation field → energy balance → photosynthesis → SIF, all tightly coupled to the Monte Carlo ray tracing engine.
  • Interactive 3D viewerscene.show() opens a browser-based viewer to inspect the scene and preview simulation results.

Installation

pip install less3d

Pre-built wheels for Windows and Linux are provided for Python 3.10–3.13. No compiler, CUDA toolkit, or additional runtime installation required.

CPU mode GPU mode (recommended)
Processor Any modern x86-64 NVIDIA GPU, compute capability ≥ 5.0
VRAM 4 GB+ (8 GB+ recommended)
GPU driver NVIDIA driver ≥ 535
OS Windows 10/11, Linux Windows 10/11, Linux
Python 3.10 – 3.13 3.10 – 3.13

3D energy balance solving currently requires a GPU. All other features (optical, thermal, LiDAR, SIF) run on CPU.


Quick Start

import less

# Create a 10 m × 10 m bare-soil scene
scene = less.Scene()
scene.size = 10.0
scene.terrain = less.Terrain(property=less.Lambertian(reflectance=0.3))
scene.illumination = less.DirectDiffuse(sun_zenith=30, sun_azimuth=150)
scene.build()

# Simulate a nadir RGB image
image = scene.simulate(less.OpticalImager(
    less.Orthographic(image_size=256),
    bands=[650, 550, 450],   # R, G, B (nm)
    quality=128,
))
image.save("output.png")

Thanks to the digital twin architecture, updating scene parameters does not require a rebuild:

# Change sun angle and re-simulate — no rebuild needed
scene.illumination = less.DirectDiffuse(sun_zenith=60, sun_azimuth=90)
image2 = scene.simulate(sensor)

Simulation Capabilities

Domain What you can simulate
Optical RGB, multispectral, and hyperspectral images; BRF / BRDF angular sampling; NDVI and vegetation indices
Thermal infrared Per-component temperature scenes (sunlit/shaded leaf, soil, trunk); thermal radiance images
LiDAR Airborne laser scanning (ALS) and terrestrial laser scanning (TLS) point clouds
Vegetation physiology 3D PAR radiation field, full energy balance, photosynthesis, solar-induced chlorophyll fluorescence (SIF) imaging

Forest Scene Example

import less
import numpy as np

scene = less.Scene()
scene.size = 30.0
scene.terrain = less.Terrain(property=less.Lambertian(reflectance=0.12))
scene.illumination = less.DirectDiffuse(sun_zenith=35, sun_azimuth=225)

# Broadleaf tree with PROSPECT leaf optical properties
birch = less.Object("birch", mesh="birch.obj")
birch.set_property("leaves", less.Prospect(cab=40, car=8, cw=0.012, cm=0.009, N=1.5))

# Random planting positions
xy = np.random.rand(50, 2) * 30
positions = np.c_[xy, np.zeros(50)]
scene.add(birch, positions=positions)
scene.build()

# Multispectral image (green, red, NIR)
image = scene.simulate(less.OpticalImager(
    less.Orthographic(image_size=512),
    bands=[550, 670, 800],
    quality=256,
))
image.save("forest.tif")   # GeoTIFF preserves physical radiance values

Built-in Examples and Viewer

import less

less.examples.list()                  # list all built-in scenes
less.examples.run("autumn_forest")    # launch interactive viewer
less.examples.run("maize_field")
scene.show()   # open 3D viewer in browser (Scene / Simulate / Products tabs)

Validation

LESS 3.0 is cross-validated against the original LESS on reference scenes:

Scene Description Max RRMSE
Val01 Lambertian ground 0.02%
Val02 Box canopy 0.22%
Val03 Ellipsoid forest 0.83%
Val04 Forest + diffuse sky 2.17%
Val05 PROSPECT-D leaves 0.24%
Val06 fPAR vs sun zenith angle 0.62%
Val07 Thermal IR 0.17%

Full validation reports are regenerated on each release. See tests/validation/.


Documentation and Tutorials

Full documentation with step-by-step tutorials:

Topics covered: coordinate system · terrain and surface properties · illumination models · optical imaging · BRDF/BRF sampling · thermal infrared · LiDAR · energy balance · photosynthesis · SIF · visualization · scene serialization


Citing

If you use LESS 3.0 in your research, please cite the original LESS paper:

Qi, J., Xie, D., Yin, T., Yan, G., Gastellu-Etchegorry, J.P., Li, L., Zhang, W., Mu, X., Norford, L.K. (2019). LESS: LargE-Scale remote sensing data and image Simulation framework over heterogeneous 3D scenes. Remote Sensing of Environment, 221, 695–706.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

less3d-0.3.3-cp313-cp313-win_amd64.whl (17.9 MB view details)

Uploaded CPython 3.13Windows x86-64

less3d-0.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

less3d-0.3.3-cp312-cp312-win_amd64.whl (17.9 MB view details)

Uploaded CPython 3.12Windows x86-64

less3d-0.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

less3d-0.3.3-cp311-cp311-win_amd64.whl (17.9 MB view details)

Uploaded CPython 3.11Windows x86-64

less3d-0.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

less3d-0.3.3-cp310-cp310-win_amd64.whl (17.9 MB view details)

Uploaded CPython 3.10Windows x86-64

less3d-0.3.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

File details

Details for the file less3d-0.3.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: less3d-0.3.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 17.9 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for less3d-0.3.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d0d2b3807634fbaf20f62cec503d392fc97c16b1809a083ef3ec1967a8e01e34
MD5 884cb6fce440f5904ed6ea4ed95cf3e5
BLAKE2b-256 875054c72b74acbb78efae32ce88e6a047a7b51696f35fbb1ae9ba2801bb9fa8

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for less3d-0.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dbd5ce7105cf14951985d2944b2410317c809bcc5230d36de9c028a08b7a6340
MD5 9af9c3a96192fc81927592c03229a326
BLAKE2b-256 51f696395a1c7f845c071d8d7fbc19f5546fe820f9e4e8bc0a10174d529ce3d3

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: less3d-0.3.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 17.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for less3d-0.3.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 246da9861007053cd741870032da4fa96913fa54db19f05748d93862179b14cb
MD5 f1cbff5d32460e01d7f68f6f0acc179d
BLAKE2b-256 3f9b22501f860e2abb46f7bba82a4a228fbc124c6d5a9bd94e0abb24439c473e

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for less3d-0.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3741cff78389673fd6c9e3a178d8f747b19b07ac7b1527611d52cc20c1ff77f7
MD5 5ac35c5de232fe5eab388c6405c15e1d
BLAKE2b-256 8c936af77f77757aed89cd8fd49d2abe773a9c1cd710865434e7a7a5366951d5

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: less3d-0.3.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 17.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for less3d-0.3.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 819bee0bbe8bdeec7098b33ab4569e039e71efe21c6d83386457e2ded819d567
MD5 122c371f73a871d8017500a71b0453e8
BLAKE2b-256 5703502d09faf1148f8e8462bb7ffadbb0c69d0730e6386e6effacbedb96f1b3

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for less3d-0.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0b773464d46942870dae9b47cee3eca5f12e507d898a9ce6f6a906c5b7053800
MD5 9f9e3e442e95ff50063ec4022e064464
BLAKE2b-256 cc72478f4c3b0d10339d0c3ffac4cfcea3f05b5042f04995a51cddfabdd1c1bf

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: less3d-0.3.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 17.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for less3d-0.3.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bec74ebad78d9fe66a87afe6cf968e376a4deed19bdad4f5e7664d5f7be31801
MD5 2081568e7f3812630f707a9c30f55bcd
BLAKE2b-256 45b3e16b5af8d9500fbb32ed35609f4d43b9021ced384469787a6d35717f13fb

See more details on using hashes here.

File details

Details for the file less3d-0.3.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for less3d-0.3.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b459e5405a27c229601eb7bfce10ad7114546a7b24b857b0189d5cd8d44ec7c7
MD5 e2ff36ca6c944076a6ff23463a3c229f
BLAKE2b-256 b5c499ada1a700271169ac7297d8cc307e1413812b5148e8fb0ae276ae1d1d9a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page