Skip to main content

LESS

3D Radiative Transfer Model

Version 3.0.3

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

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 3.0.3 and later releases that include the current LICENSE are free for academic teaching and qualifying non-commercial research. 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.3

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

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

Download URL less3d-3.0.3-cp313-cp313-win_amd64.whl
Size 32.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
838f01dc265ae0687e3bc320bd7d2e4b5d3efcf39e7dff6d2aa37bf8a5ec777f
BLAKE2b-256 checksum
How to use checksums
0832ecae43b62e75fccc60a44ea7caef186072ea8ab2dace84cba65b89969b3d
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.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.1 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
37ac43edd53c0fcf62991e99e5c15a1afeccaf6186b4090a0560c236be84f15e
BLAKE2b-256 checksum
How to use checksums
86375311046a8a5e32740981b3420e2e5b32eb5b0487a073f95abea1f4545b6a
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.3-cp312-cp312-win_amd64.whl

Download URL less3d-3.0.3-cp312-cp312-win_amd64.whl
Size 32.3 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
fae644a267698894b885d4c2545c4a1f3a371ed06f9ceaad568fb73cc9c14372
BLAKE2b-256 checksum
How to use checksums
0fa7ea903a846aba39e8856f4813126c78a7f69b9ec249ffccdf9bf64d6cadfb
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.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.1 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6399744aeb4fd7112f8e3a96630217673f794f87db755e4030f460a4f201c29e
BLAKE2b-256 checksum
How to use checksums
a411712a35816940d2f3bfe39b621afe95ca22d400b75bce6e9a0edebd5631b4
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.3-cp311-cp311-win_amd64.whl

Download URL less3d-3.0.3-cp311-cp311-win_amd64.whl
Size 32.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
c41908721d81717e57275a3b08d4425ecedc7629511602977ba08e892386154f
BLAKE2b-256 checksum
How to use checksums
271f8822e6a0ca160f23717219dad0b1d360f0e7a8949d7e51c3fc2b32df2503
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.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.1 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7f8f8db0f1d67b0850e1e0ef566b66e471011633afe25776116197fe96c9a802
BLAKE2b-256 checksum
How to use checksums
ff96bfcc4cafb0d3f380b5093fd6ec4f77dd54165cfa440debfd7e59bbcf1df2
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.3-cp310-cp310-win_amd64.whl

Download URL less3d-3.0.3-cp310-cp310-win_amd64.whl
Size 32.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
61c7a865f6ab14a60086063820b85812191fc25ad58c1f41e7cd7bb49a00a0b6
BLAKE2b-256 checksum
How to use checksums
5c86151b787e9af078057faaa9ed3d850d3eb32e2692f57f8251cab984bd6e4f
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.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 63.1 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
067711e89c34cf1a396f500c331d2262617ba83b7907d87dea0bb4515a2eb2e4
BLAKE2b-256 checksum
How to use checksums
4e43503497d166fefbb4fe6dfcfc4d6f8f86afbd85d5a5dda3578e8f0e68cead
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

This release

3.0.3 This release

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