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

Uploaded CPython 3.13Windows x86-64

less3d-0.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.6 MB view details)

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

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

Uploaded CPython 3.12Windows x86-64

less3d-0.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.6 MB view details)

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

less3d-0.3.2-cp311-cp311-win_amd64.whl (18.1 MB view details)

Uploaded CPython 3.11Windows x86-64

less3d-0.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.6 MB view details)

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

less3d-0.3.2-cp310-cp310-win_amd64.whl (18.1 MB view details)

Uploaded CPython 3.10Windows x86-64

less3d-0.3.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (47.6 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.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

Hashes for less3d-0.3.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 13eb78d928b31b358515f5507fa531cc79c8d3995dd21d01a9a8c988dfc8809e
MD5 d1f23a1eb331cf2d043f550af7d59f73
BLAKE2b-256 80219a909991506f15b6a1a902d7c085b126bb8eab0a01c5eda6bbcfdbe1afa7

See more details on using hashes here.

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

File hashes

Hashes for less3d-0.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8175eb0a1de99b5656c3a6b049712c7e6aa705383330c1e059018e02a0911482
MD5 43f0c8ba84ac93aead1ef3431d5d52db
BLAKE2b-256 5c48ea370de22e6b865de1dfb8640a9c606505c0cea17d118fbf9ae6c6bf6b6a

See more details on using hashes here.

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

Hashes for less3d-0.3.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6075c6f148ac945948634ad1f4c31b064fa1291bca4c7bd663f4739ba5e31704
MD5 6d422ae3b94f872a8601e0243c22874e
BLAKE2b-256 aa57630d972beee094239feb78d50bfb2529fb50b34ca7d9a6036317b1d2422a

See more details on using hashes here.

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

File hashes

Hashes for less3d-0.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5d49d57d04eceb29506fe85a275f2b5e17ce4f19782d5060c57d71c0848906c3
MD5 c5a2389575fc748168073c0f5b95b35f
BLAKE2b-256 823afb4728c357eaf3eb8dcf4c66e8fa7977f567b5f30c7fb78d003dd218464f

See more details on using hashes here.

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

Hashes for less3d-0.3.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bb2f487f9712665ed5fad09b5312683f3edcae60acf40386055af1308f714d49
MD5 535b31b4b8eea4707fdf506a09a6dbb4
BLAKE2b-256 97963983bdddcc2479f3a93b113564752f60e3bd123c4176dec0a705092ce6d4

See more details on using hashes here.

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

File hashes

Hashes for less3d-0.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d77cf3b615c20d0632a4c93784e80c9288a8f17ed554a5cc96c297ff282d3be8
MD5 0eabc8645496c63b50be2f747cddd018
BLAKE2b-256 a7d498cbc4ab652b719cc7789eb7e1ad0a784cd193116d05441582fd1521343d

See more details on using hashes here.

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

Hashes for less3d-0.3.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4d317c5f61f585dceeb755e4ebe385c98fd5822538bd1efa99ccce334324d781
MD5 8458c57677d4654450b5bd4183225a93
BLAKE2b-256 e0f6dfc7d9f597f3c7f4263b9fb53f0e0420bc13fa62330a41392f4756f7d6a1

See more details on using hashes here.

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

File hashes

Hashes for less3d-0.3.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eb37bb6fa70f9eaf650a483cab5d2470f77826535f3a4f92a60d01931bb0684b
MD5 27e8240d2e8b73e4c9636e3059f056fc
BLAKE2b-256 803d491690d6c1278e1fdb7b3a8d03d72511ac387dba61f461c4ea04a4b3876b

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