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.1-cp313-cp313-win_amd64.whl (18.0 MB view details)

Uploaded CPython 3.13Windows x86-64

less3d-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.5 MB view details)

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

less3d-0.3.1-cp312-cp312-win_amd64.whl (17.7 MB view details)

Uploaded CPython 3.12Windows x86-64

less3d-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.5 MB view details)

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

less3d-0.3.1-cp311-cp311-win_amd64.whl (18.0 MB view details)

Uploaded CPython 3.11Windows x86-64

less3d-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.5 MB view details)

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

less3d-0.3.1-cp310-cp310-win_amd64.whl (18.0 MB view details)

Uploaded CPython 3.10Windows x86-64

less3d-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.5 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.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: less3d-0.3.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 18.0 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2ab81e723ce30eee425f5c597ea5ae7c375a3aab952ff47e82583cb284230be4
MD5 882660e6277368c3ffd86bed1d754c8a
BLAKE2b-256 37d0b4770528c9bd2db75a287683132d814fad5b2a15f5d36b0ff13548ccc9c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1d2fb5a4bd89dbac46abb2ef2fc370f987a8d01c0bdde5d9e7b7e98b32265a4c
MD5 da6abfbb636e2f682e3303ad15864d54
BLAKE2b-256 5426674bf70526ff45599da917cea82aac6434fa3f8f8630c034ab626635369b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: less3d-0.3.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 17.7 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f1ea8d318b461e849bc5c037016c9923eb94d16085bdad8bb8d1467a53450141
MD5 9d8488b7ffbb18fdfba47dde49078c52
BLAKE2b-256 335da30c2aa5cd63260f28fe466d2e57eb03d704730f22d9ed4a19cf850abff1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ba883d79701f52106fdbdd16a3bfccb3520d106b40140f3fb17d44bd0e0b2952
MD5 11b9b2f09eb12612090301c902a1ace6
BLAKE2b-256 530017e18333f495e87fdcb7fdba3db8fc28f232bf896a497ddc715ab2e4e6d7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: less3d-0.3.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 18.0 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 991faba88eaa6a04d24069333049ad15bd66e62d9ad05d49cbf91b790f8c5a57
MD5 2cf3b26e0406ecddfbc083784655adfc
BLAKE2b-256 ab48786c47b0143282e2e52f18ae23d7163d4102b678664d5c3544baebc10922

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 544fee357c65566ab8840252ca91667f781eb153ba114d12b35ac176aa26b544
MD5 6a6f693932815a18ae41bd3dd9953554
BLAKE2b-256 9a74a441ecc8e3d5b5e11e115e00aa0223a793469dae453017fe1254ff7834db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: less3d-0.3.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 18.0 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 556d0d5097c3545d407a4c7f7a02903a146fb1f7b2640d5b0ec5100f7286f652
MD5 df4624c60025885443c6b66cb783518b
BLAKE2b-256 639c8df9d2e62e88e1ecf9383c63fd944f4a36d712855ffdcc0834758a4cca08

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ce7fc377ba6b4967a72fbb3d79e74bf5ab9adac67e52a385683df2a71fbd5867
MD5 ab912c7454b0c953eec7481de43b87c0
BLAKE2b-256 8d1d6c377e248cdf287a0ec30607815298e166f5aa845f32e52e6342bf36b640

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