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: https://cnb.cool/lessrt3d/LESSPRO

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.

A LESS 3.0-specific paper is in preparation.


License

MIT — see LICENSE.

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

Uploaded CPython 3.13Windows x86-64

less3d-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.4 MB view details)

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

less3d-0.3.0-cp312-cp312-win_amd64.whl (17.5 MB view details)

Uploaded CPython 3.12Windows x86-64

less3d-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.4 MB view details)

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

less3d-0.3.0-cp311-cp311-win_amd64.whl (17.8 MB view details)

Uploaded CPython 3.11Windows x86-64

less3d-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.4 MB view details)

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

less3d-0.3.0-cp310-cp310-win_amd64.whl (17.8 MB view details)

Uploaded CPython 3.10Windows x86-64

less3d-0.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.4 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.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: less3d-0.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 17.8 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d6fb3edf1a017fe0816a45f56b879db4b6c127957aebce8f14d22892846246b9
MD5 097dad2d67fa80c72a364625dbee7c77
BLAKE2b-256 1036498a9174be0b264e474f60171c5e467788dde7f2976426768e66b74bc9d9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a9eb3d5127cf4110b787f3d391a79f0c6d89e5aa1da269e182f62e45f4ce51a2
MD5 153f5612b20d2ae2b4605ac850e05ddd
BLAKE2b-256 ef76716b76f28db40bafad44e51354a8c1a566fededba44d65804179109d2766

See more details on using hashes here.

File details

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

File metadata

  • Download URL: less3d-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 17.5 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d74f276a527a8f44017d9b1f2a3197a87a592822de2668137af755e609a7b0f0
MD5 c1e00726daec66df97b2d8aa2b860c69
BLAKE2b-256 7d4f35707d0e7271b51d4dbd3dc2e6665773d734c688cf76d95a7f465e8bb8f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ae6a4d9793fe844ab09e54c22f9d0ecf6518ee67d0b50281b3be410a5250639e
MD5 dd395c071fce957e270786d7b59aebef
BLAKE2b-256 89099236668c3a5e4deaea26221edfbd20b53e72bd7118958ac74ff582912c28

See more details on using hashes here.

File details

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

File metadata

  • Download URL: less3d-0.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 17.8 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 21769a6abbe976b4e2a26367efa053b17e0c3ea1f34044a7ac92dd706bb0792f
MD5 1965e9ac52f8fa4c73c324516a33f8a6
BLAKE2b-256 c0cc880fca85b60c23225ac4a31092be824f3268e921374ea8d48aa99513f4a8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bd9a89320f7987b7de57c612142459c89b4108618332d6151175f5ec112a0fc2
MD5 2e077b55c960df42b664979986bee3bb
BLAKE2b-256 0034c2da130fa5a7915f67dd4a8db9a907cfa477ea265d171f675783f677bd61

See more details on using hashes here.

File details

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

File metadata

  • Download URL: less3d-0.3.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 17.8 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.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7d76ce17b926261967ff44b42245a18b02a3c9e460ba5ba390102955bb8d261c
MD5 d09145f69ba10650b3e518b2d8934184
BLAKE2b-256 98379614f1725a6b0e4f2c4202c9380e45e83d9e08e2e4a0436a23ad6e4433f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for less3d-0.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3caa9c6c2dd7776372cd750569a9490f6437d560ac3f63e705b496a6c58ac97e
MD5 d46b2ff7f52fd6dad5a46610aaaf25eb
BLAKE2b-256 2bb36be0a370e3e145e8dab11929b99baf4cc8614ac877423b7c026b03d714c4

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