Skip to main content

LESS

3D Radiative Transfer Model

Version 3.0.7

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

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
Scene components Sunlit/shaded leaf and soil classification with per-component area
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:

Building LESS from source, running the test suites, or extending it with new sensors, products or backends is covered in DEVELOPMENT.md. None of it is needed to use the published wheel.

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

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

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

Download URL less3d-3.0.7-cp313-cp313-win_amd64.whl
Size 56.9 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
cfc198376cadc9b258ce2d3d7ef611183f7d8c3fb048ea0335cdfad2ade65dc7
BLAKE2b-256 checksum
How to use checksums
54cb0c375509b0a0e18403d644a04636b8d55d9531313f5a89feba85eeedc9be
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.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.7-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 88.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
05127b633494792ef2a13e4d4b79f081bd3c7c1775c416c44fc826126df8c8fe
BLAKE2b-256 checksum
How to use checksums
bb790d707780490bdb5b42dd795e864ddd8d10c34b7e9b8c134cfcc2b4dab8e2
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.7-cp312-cp312-win_amd64.whl

Download URL less3d-3.0.7-cp312-cp312-win_amd64.whl
Size 56.9 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f60b6fdc1ccce77d8f9687096c12812964e90114b9eb4e2efbb273eac1bb38fa
BLAKE2b-256 checksum
How to use checksums
657bae0829bbb21e974b341c6a2af614bce0df796e5805f6c521c6ef54367bbb
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.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.7-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 88.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
0c0b0036fa68baf564fee0e87b575aa9c7c93408db917b99d7e8dee91387044a
BLAKE2b-256 checksum
How to use checksums
fc08b25bcdcdf48eb39bcc846b490219025d177fe7efa8b5e51cafb0f1827c3b
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.7-cp311-cp311-win_amd64.whl

Download URL less3d-3.0.7-cp311-cp311-win_amd64.whl
Size 56.9 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
b9ca77e5b2f4756d5017a214df99ed0e68c3450a0053e05ffb2ff00d2dd230f0
BLAKE2b-256 checksum
How to use checksums
6b96aa374a8e82586762e1f1785b5a47e5b2afa6a36f5afc8c42429dd0b01fa1
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.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.7-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 88.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
738f3c04ef3d061224f5616b7c39923515652b1a9e19a7c6be1fd8572dfa5868
BLAKE2b-256 checksum
How to use checksums
02f0112757f8ec3e486cfff6a834834300ce8e8ed727ddf63877920ea40c9d56
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.7-cp310-cp310-win_amd64.whl

Download URL less3d-3.0.7-cp310-cp310-win_amd64.whl
Size 56.9 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
625ae1ef00c2dd51dc859d760cf7bb321eefdc3265401e4dcee1eef9ba491dc8
BLAKE2b-256 checksum
How to use checksums
623ff07045f115be538100e9614f279cbb150d05a03682b55021cf49c7c4b168
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.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.7-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 88.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
e89d893f6ffc90aedb3a279fd82c1230300e71eab1b92d2d02179875c12e9bdd
BLAKE2b-256 checksum
How to use checksums
ab5ed4c2fb139d384cbde529cc49e3c9f02e07cf2fb38843ce7de23c92d87429
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

This release

3.0.7 This release

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

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