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
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:
- 中文:安装
- 中文:核心概念与场景生命周期
- 中文:API 参考
- English: Installation
- English: Concepts and scene lifecycle
- English: API reference
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)
| File | Reset | |||
|---|---|---|---|---|
| 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.