Skip to main content

LESS

3D Radiative Transfer Model

Version 3.0.5

PyPI version Python Platform License: Academic and Commercial

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.5

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
Water Wind-roughened deep-water surfaces with optional prescribed Rrs or IOPs
Spatial properties UV and georeferenced textures for optical, thermal, LiDAR, and physiology
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 free for academic teaching and qualifying non-commercial research. Use is governed by the current LICENSE. Commercial use requires a separate written license.

Commercial use includes company use, commercial consulting or services, commissioned research, commercial synthetic-data generation, and integration into commercial products, platforms, or services. University or non-profit projects performed for a company, or projects that give a company confidential deliverables, preferential access, publication control, or intellectual- property rights, are commercial use. An unrestricted donation or public research grant does not by itself make qualifying academic research commercial; use by a company remains commercial regardless of its funding source.

Third-party components remain subject to their respective license terms. See the LICENSE file for details. Earlier LESS releases remain governed by the license terms that accompanied those releases; those earlier grants are not revoked.

For commercial licensing or clarification, contact the LESS Development Team through the project homepage.

Metadata

Release files for less3d 3.0.5

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.5
File
less3d-3.0.5-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
less3d-3.0.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
less3d-3.0.5-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
less3d-3.0.5-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.5-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
less3d-3.0.5-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.5-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
less3d-3.0.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details

Total release size: 574.8 MB

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

Download URL less3d-3.0.5-cp313-cp313-win_amd64.whl
Size 56.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
3ecbf265fcc78fde0fb352fe68800b88c79db085354bfc316027e6b30aa2461e
BLAKE2b-256 checksum
How to use checksums
ecd63964524940d127c1e486bdbbdeca2bf54f7c2873a9babda1851b6d8fed02
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.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 87.4 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ea4d048283b86e4e2becdf5962be427cb999dc968e3667689b9bcbf5a3efecd7
BLAKE2b-256 checksum
How to use checksums
04540175e15c721560d5e0d30d50674f46c3aee84613a194c9ed8271f424aad2
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.5-cp312-cp312-win_amd64.whl

Download URL less3d-3.0.5-cp312-cp312-win_amd64.whl
Size 56.3 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
84cd931e190c1c26c5801bef2be995f0ce13e367bb3c7cac00cca44cc5425bc4
BLAKE2b-256 checksum
How to use checksums
bba07e59db43d2b7adefcf7ca1e1d840ee5cc95f5b78b7378e458a726f0211e4
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.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 87.4 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cef48dde0a72a5fcd88c0f7bd187f90baf0e269af2e6b6bd43172124079d0979
BLAKE2b-256 checksum
How to use checksums
3fbb6aaf3b85fb09d943acdbb842aa74f32be19ec6878b952dfe1100c1b4f3ad
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.5-cp311-cp311-win_amd64.whl

Download URL less3d-3.0.5-cp311-cp311-win_amd64.whl
Size 56.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
6d6be9e749bba8592584891cc632e05ce75b6dced359eb3b30eb296a4a24b7af
BLAKE2b-256 checksum
How to use checksums
aa9bf8c0e972231c7e04bba9c8e895f8c57edf71d758bc0a2a79d629fe3348df
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.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 87.4 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
90a86566e50461531b1f2515e1bba078468d9fe32908d2146f2d7233d62e5730
BLAKE2b-256 checksum
How to use checksums
0ddc557f0a2134e7750672593ccb11ffe744078a7277d17b6b22eef53fcb67df
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.5-cp310-cp310-win_amd64.whl

Download URL less3d-3.0.5-cp310-cp310-win_amd64.whl
Size 56.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
05ef7c9d8d54d1dd3d8dc1166f3f070cca677bc6c42f2c7f73c206964001f198
BLAKE2b-256 checksum
How to use checksums
91b0d0c436d2c5264f31c0230a597cbeb04687aecd0f3d440a3f55aaa6ece499
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.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 87.4 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6ba220027f8a3b05f89b3a943e1ebc66b8af19f85685cf87de375b59eadf5c4d
BLAKE2b-256 checksum
How to use checksums
18cbe87144dc1aff3daa13a2cf1c403af6478af529fd67784b97ac8fdd8833b2
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

This release

3.0.5 This release

8 release files

3.0.4

8 release files

3.0.3

8 release files

3.0.1

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