GPU-accelerated 3D radiative transfer model for remote sensing
Project description
LESS 3.0
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 viewer —
scene.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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file less3d-0.3.2-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: less3d-0.3.2-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 18.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13eb78d928b31b358515f5507fa531cc79c8d3995dd21d01a9a8c988dfc8809e
|
|
| MD5 |
d1f23a1eb331cf2d043f550af7d59f73
|
|
| BLAKE2b-256 |
80219a909991506f15b6a1a902d7c085b126bb8eab0a01c5eda6bbcfdbe1afa7
|
File details
Details for the file less3d-0.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: less3d-0.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 47.6 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8175eb0a1de99b5656c3a6b049712c7e6aa705383330c1e059018e02a0911482
|
|
| MD5 |
43f0c8ba84ac93aead1ef3431d5d52db
|
|
| BLAKE2b-256 |
5c48ea370de22e6b865de1dfb8640a9c606505c0cea17d118fbf9ae6c6bf6b6a
|
File details
Details for the file less3d-0.3.2-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: less3d-0.3.2-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6075c6f148ac945948634ad1f4c31b064fa1291bca4c7bd663f4739ba5e31704
|
|
| MD5 |
6d422ae3b94f872a8601e0243c22874e
|
|
| BLAKE2b-256 |
aa57630d972beee094239feb78d50bfb2529fb50b34ca7d9a6036317b1d2422a
|
File details
Details for the file less3d-0.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: less3d-0.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 47.6 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d49d57d04eceb29506fe85a275f2b5e17ce4f19782d5060c57d71c0848906c3
|
|
| MD5 |
c5a2389575fc748168073c0f5b95b35f
|
|
| BLAKE2b-256 |
823afb4728c357eaf3eb8dcf4c66e8fa7977f567b5f30c7fb78d003dd218464f
|
File details
Details for the file less3d-0.3.2-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: less3d-0.3.2-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 18.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb2f487f9712665ed5fad09b5312683f3edcae60acf40386055af1308f714d49
|
|
| MD5 |
535b31b4b8eea4707fdf506a09a6dbb4
|
|
| BLAKE2b-256 |
97963983bdddcc2479f3a93b113564752f60e3bd123c4176dec0a705092ce6d4
|
File details
Details for the file less3d-0.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: less3d-0.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 47.6 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d77cf3b615c20d0632a4c93784e80c9288a8f17ed554a5cc96c297ff282d3be8
|
|
| MD5 |
0eabc8645496c63b50be2f747cddd018
|
|
| BLAKE2b-256 |
a7d498cbc4ab652b719cc7789eb7e1ad0a784cd193116d05441582fd1521343d
|
File details
Details for the file less3d-0.3.2-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: less3d-0.3.2-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 18.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d317c5f61f585dceeb755e4ebe385c98fd5822538bd1efa99ccce334324d781
|
|
| MD5 |
8458c57677d4654450b5bd4183225a93
|
|
| BLAKE2b-256 |
e0f6dfc7d9f597f3c7f4263b9fb53f0e0420bc13fa62330a41392f4756f7d6a1
|
File details
Details for the file less3d-0.3.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: less3d-0.3.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 47.6 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb37bb6fa70f9eaf650a483cab5d2470f77826535f3a4f92a60d01931bb0684b
|
|
| MD5 |
27e8240d2e8b73e4c9636e3059f056fc
|
|
| BLAKE2b-256 |
803d491690d6c1278e1fdb7b3a8d03d72511ac387dba61f461c4ea04a4b3876b
|