Skip to main content

LESS

3D Radiative Transfer Model

Version 3.0.1

PyPI version Python Platform License: MIT

LESS is a GPU- and CPU-accelerated 3D radiative transfer model for quantitative remote sensing. It combines a Python interface with NVIDIA OptiX, Vulkan Ray Query, and Intel Embree native backends for optical, thermal, solar-induced fluorescence (SIF), vegetation photosynthesis, energy-balance, and LiDAR simulations.

LESS 3.x is a completely new native implementation of the original LESS model. The original LESS 2.x implementation remains available at lessrt.org.

Highlights

  • Remote-sensing-oriented Python API — describe a scene using terrain, objects, optical properties, illumination, sensors, and products.
  • Three native backends — OptiX for NVIDIA GPUs, Vulkan Ray Query for supported GPUs, and Embree for CPU execution to accelerate simulations for various platforms .
  • Persistent scenes — geometry is prepared automatically on the first simulation and reused when only illumination, spectra, or properties change.
  • Mesh and turbid vegetation — simulate explicit geometry, volume canopies, or mixed scenes.
  • Imaging and biophysical products — optical and thermal imagery, BRF, radiation fields, irradiance maps, SIF, photosynthesis, energy balance, and LiDAR.
  • Sensor effects — pushbroom geometry, spectral response, PSF/MTF, detector noise, ADC quantisation, and geolocation.
  • Interactive inspection — use scene.show() to explore scenes and products in a browser-based viewer.

Installation

pip install less3d

Prebuilt wheels are provided for Windows and Linux with Python 3.10–3.13. A compiler and CUDA toolkit are not required. Compatible graphics drivers are still required for GPU backends.

Backend Typical hardware Recommended memory Suggested use
Embree x86-64 CPU System RAM CPU simulation and comparison
Vulkan Ray Query Vulkan 1.2 Ray Query GPU 4 GB+ VRAM Supported non-CUDA GPU workflows
OptiX + CUDA Compatible NVIDIA GPU 8 GB+ VRAM High-throughput Monte Carlo simulation

Check whether a feature can run with a particular backend on the current computer:

import less

less.can_use("optical_imaging", backend="optix")
less.can_use("irradiance_map", backend="embree")

After creating a scene, scene.can_use("feature") performs the same check using that scene's selected backend.

Available in 3.0.1

The following workflows are available with OptiX, Vulkan, and Embree when the selected backend meets its hardware and driver requirements:

Domain Capabilities
Optical Mesh and turbid-medium imaging, BRF, radiation fields, and irradiance maps
Scene layout Dynamic instances, repetitive scenes, and terrain-following placement
Thermal Thermal imaging and per-primitive temperatures
Vegetation physiology SIF imaging and processes, photosynthesis, and energy balance
LiDAR Point clouds, full waveforms, and turbid-volume returns

Repetitive scenes require flat, statistically homogeneous terrain and cannot be combined with terrain_following=True. Moving a TurbidBoundary instance requires scene.rebuild(); ordinary property and illumination changes do not.

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.Illumination(
    source=less.Sun(zenith=30, azimuth=150),
    atmosphere=less.NoAtmosphere(),
)

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

Change the illumination and simulate again; the prepared geometry is reused automatically:

scene.illumination = less.Illumination(
    source=less.Sun(zenith=60, azimuth=90),
    atmosphere=less.NoAtmosphere(),
)
image2 = scene.simulate(sensor)

Forest 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.Illumination(
    source=less.Sun(zenith=35, azimuth=225),
    atmosphere=less.NoAtmosphere(),
)

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),
)

xy = np.random.default_rng(42).random((50, 2)) * 30
scene.add(birch, positions=np.c_[xy, np.zeros(50)])

image = scene.simulate(less.OpticalImager(
    less.Orthographic(image_size=512),
    bands=[550, 670, 800],
    quality=256,
))
image.save("forest.tif")

GeoTIFF output preserves the physical values of the simulated product.

Examples and viewer

import less

less.examples.list()
less.examples.run("autumn_forest")
less.examples.run("maize_field")

scene.show()

Validation

LESS is cross-validated against LESS 2.x on reference scenes:

Scene Description Maximum RRMSE
Val01 Lambertian ground 0.02%
Val02 Box canopy 0.22%
Val03 Ellipsoid forest 0.83%
Val04 Forest with diffuse sky 2.17%
Val05 PROSPECT-D leaves 0.24%
Val06 fPAR versus solar zenith angle 0.62%

Documentation

Start with the public tutorials:

Citation

If you use LESS in your research, please cite:

Qi, J., Xie, D., Yin, T., Yan, G., Gastellu-Etchegorry, J.-P., Li, L., Zhang, W., Mu, X., and 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.

License

LESS is distributed under the MIT License.

Metadata

Release files for less3d 3.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for less3d 3.0.1
File
less3d-3.0.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
less3d-3.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
less3d-3.0.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
less3d-3.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
less3d-3.0.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
less3d-3.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
less3d-3.0.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
less3d-3.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details

Total release size: 381.2 MB

Release files / less3d-3.0.1-cp313-cp313-win_amd64.whl

Download URL less3d-3.0.1-cp313-cp313-win_amd64.whl
Size 32.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
e839ed4fcf690aaaf4f526a9cfa6359204f8e9030a8b781f90721055795e37c7
BLAKE2b-256 checksum
How to use checksums
9cc71f503b4270fe17b5fbd3f4ec586d6f7d7fa4e25711888ded4a190995a183
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.0 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9120927a3d4b03e6b030708708387303c0da32cf8974c5e03628f5c46da159fe
BLAKE2b-256 checksum
How to use checksums
a14162ac9c8657b825dabf511e3848d444ec32c18cbd0199d9a8cd225d8acf8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp312-cp312-win_amd64.whl

Download URL less3d-3.0.1-cp312-cp312-win_amd64.whl
Size 32.3 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
1e9772de908602f522a5d0649922e78168ac2f9be6c5b5ca676ae56353257063
BLAKE2b-256 checksum
How to use checksums
2c8e7edc817e3f2d83575eb3887127c2b81ef951d70c4b472faecc0161262b15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.0 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
883c93fbc6182bf7074bcff3329e35d69a0db703263e49d924cac4023d24ec6c
BLAKE2b-256 checksum
How to use checksums
533771e1c7166819266fae41f3903fc56e33ccc3c7e70b0c557a540219e416e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp311-cp311-win_amd64.whl

Download URL less3d-3.0.1-cp311-cp311-win_amd64.whl
Size 32.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
db7b5def585ebf7b81c068ea79fa9e914956eabe4a4af72d90d3e83583537537
BLAKE2b-256 checksum
How to use checksums
91027d343b08eb678ec14c5f8cb70027c36450e355987715f77fda08cc8a9d03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.0 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
559264f33d32375b6a36a87d0f1f9bdeda9b69ad179d9b8afd11192bbc69c17b
BLAKE2b-256 checksum
How to use checksums
1680ffd0feb015adf7d6625b8ab279cbfbcbb52e12f883c4ddefb26d3ff5d126
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp310-cp310-win_amd64.whl

Download URL less3d-3.0.1-cp310-cp310-win_amd64.whl
Size 32.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4ea43ab44b896b1e348bdd4f9e213ce664f2542e0ba2d1033300343ac4ab7c21
BLAKE2b-256 checksum
How to use checksums
0cadc83b9ab8db9caec8aa1e519441e5e43bc69f6dae1fa77e0d74eb2bb145a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / less3d-3.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.0 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6dce98d7daee7a2e32348dec6e91dfcb7aaa9a5ecfcd8f3169a87fc0dcc2d28b
BLAKE2b-256 checksum
How to use checksums
ead62c8013a28727b41ee236e91a761a0f237114970faaa559433716aea10e5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release history Release notifications | RSS feed

3.0.7

8 release files

3.0.6

8 release files

3.0.5

8 release files

3.0.4

8 release files

3.0.3

8 release files

This release

3.0.1 This release

8 release files

3.0.0

8 release files

0.5.0

8 release files

0.4.3

8 release files

0.4.2

8 release files

0.4.1

8 release files

0.4.0

8 release files

0.3.3

8 release files

0.3.2

8 release files

0.3.1

8 release files

0.3.0

8 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page