Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

LESS

3D Radiative Transfer Model

Version 3.0.9rc1 · Release candidate

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 for simulation across supported 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

python -m pip install "less3d==3.0.9rc1"

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

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

Domain Capabilities
Optical Mesh, turbid-vegetation and homogeneous-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=less.asset_path("FREX.obj"))
birch.set_property(
    "leaves",
    less.Prospect(cab=40, car=8, cw=0.012, cm=0.009, N=1.5),
)
birch.set_property("stem_branch", less.Lambertian(reflectance=0.1))

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

Numerical results

Simulation products use the same physical quantities and units on all three backends. Monte Carlo estimates can differ because their random samples differ. For quantitative work, increase the sampling quality until your scene averages and spatial patterns are stable.

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

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.9rc1
File
less3d-3.0.9rc1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
less3d-3.0.9rc1-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.9rc1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
less3d-3.0.9rc1-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.9rc1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
less3d-3.0.9rc1-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.9rc1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
less3d-3.0.9rc1-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: 657.8 MB

Release files / less3d-3.0.9rc1-cp313-cp313-win_amd64.whl

Download URL less3d-3.0.9rc1-cp313-cp313-win_amd64.whl
Size 66.6 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4745c8ee5e134e92f96c40a0f2ef967875d34f54a68a41bb28e9103bdba89842
BLAKE2b-256 checksum
How to use checksums
b9909801fa3175c48973455c8d196ccd54735ac7fe0ce457c06818a49313893f
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.9rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.9rc1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 97.8 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c5530bf9d557a0ddd782ad83fb477d0c0be7331b17327136406c82e13fb3e934
BLAKE2b-256 checksum
How to use checksums
85444b5119cc8dddf0482e91c8437c49731ef2cdb65d65a66a14528c4e75b8df
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.9rc1-cp312-cp312-win_amd64.whl

Download URL less3d-3.0.9rc1-cp312-cp312-win_amd64.whl
Size 66.6 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
0d388115e50df8e566c428326ca8a99bf8c15c4a138117c309e79bd504090e20
BLAKE2b-256 checksum
How to use checksums
7e817b59e5fa9f68a5b7900a59cfca16af1a44c8479c6e5b7e2642ea013075d9
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.9rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.9rc1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 97.8 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
70b646ddd710e70362698925bb94a0a6f671dab3e1a939311c0ef7d05b536eb2
BLAKE2b-256 checksum
How to use checksums
95514e8798ea87325df984fbbab5b2f81c8cc8e11a9a296ebf13725907842aa7
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.9rc1-cp311-cp311-win_amd64.whl

Download URL less3d-3.0.9rc1-cp311-cp311-win_amd64.whl
Size 66.7 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
aa8d2d0629643365d08b8cef1b3cb0b6227f2946a270ef2106ff0a38b94f6358
BLAKE2b-256 checksum
How to use checksums
3857e61ce5d2ca1acfaddd905c30c6d52c723e4844e4e645a71c7963fdeecb80
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.9rc1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL less3d-3.0.9rc1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 97.8 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a3f04de3b81d91e2f67b3f58aa8582ff635ad41ac8e052342de619b68bcb3962
BLAKE2b-256 checksum
How to use checksums
c5ac484aba413b2fb3256a80b2d9434eb92862cfcd0855817bb49d559fdd3252
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.9rc1-cp310-cp310-win_amd64.whl

Download URL less3d-3.0.9rc1-cp310-cp310-win_amd64.whl
Size 66.7 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
049ada7cd9cb2d8da258ec6ecc2ab97f542f474f30320fe25853256e0cc7a951
BLAKE2b-256 checksum
How to use checksums
757b23fddf35eceaacd4c78d062d53d5a60bb9ea20d21ed84d339ae5123059a1
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.9rc1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

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

Security for less3d 3.0.9rc1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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