less3d 3.0.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of less3d might be problematic. Click here for more details.
- less3d-3.0.5/.agents/skills/less-skill/README.md +86 -0
- less3d-3.0.5/.agents/skills/less-skill/SKILL.md +334 -0
- less3d-3.0.5/.agents/skills/less-skill/api-reference.md +965 -0
- less3d-3.0.5/.agents/skills/less-skill/examples.md +992 -0
- less3d-3.0.5/.agents/skills/less-skill/faq.md +203 -0
- less3d-3.0.5/.agents/skills/less-skill/helpers.py +109 -0
- less3d-3.0.5/.dockerignore +17 -0
- less3d-3.0.5/.gitignore +71 -0
- less3d-3.0.5/AGENTS.md +310 -0
- less3d-3.0.5/CLAUDE.md +157 -0
- less3d-3.0.5/CMakeLists.txt +2800 -0
- less3d-3.0.5/LICENSE +637 -0
- less3d-3.0.5/PKG-INFO +244 -0
- less3d-3.0.5/README.md +203 -0
- less3d-3.0.5/THIRD_PARTY_NOTICES.md +32 -0
- less3d-3.0.5/benchmarks/README-turbid.md +34 -0
- less3d-3.0.5/benchmarks/__init__.py +1 -0
- less3d-3.0.5/benchmarks/_provenance.py +131 -0
- less3d-3.0.5/benchmarks/baselines/less3d_3_0_1_runtime_attestation.json +41 -0
- less3d-3.0.5/benchmarks/baselines/local-native-optical.json +2844 -0
- less3d-3.0.5/benchmarks/baselines/local-native-scene-operations.json +841 -0
- less3d-3.0.5/benchmarks/baselines/task5_performance_release_status.json +35 -0
- less3d-3.0.5/benchmarks/baselines/task5_runtime_attestation.json +42 -0
- less3d-3.0.5/benchmarks/baselines/turbid_workflows_rtx4080.json +8770 -0
- less3d-3.0.5/benchmarks/baselines/water_surface_rtx4080.json +254 -0
- less3d-3.0.5/benchmarks/benchmark_lidar_scaling.py +173 -0
- less3d-3.0.5/benchmarks/constant_field_paired.py +487 -0
- less3d-3.0.5/benchmarks/field_programs.py +599 -0
- less3d-3.0.5/benchmarks/optical_transport.py +2169 -0
- less3d-3.0.5/benchmarks/optix_dynamic_spectrum.py +420 -0
- less3d-3.0.5/benchmarks/scene_operations.py +881 -0
- less3d-3.0.5/benchmarks/turbid_paired.py +70 -0
- less3d-3.0.5/benchmarks/turbid_release_gate.py +407 -0
- less3d-3.0.5/benchmarks/turbid_workflows.py +2301 -0
- less3d-3.0.5/benchmarks/water_surface.py +435 -0
- less3d-3.0.5/build_wheels.py +859 -0
- less3d-3.0.5/cmake/CompilerFlags.cmake +32 -0
- less3d-3.0.5/cmake/FindOptiX.cmake +48 -0
- less3d-3.0.5/cmake/LESSHomogeneousWaterLidar.cmake +57 -0
- less3d-3.0.5/cmake/LESSModels.cmake +981 -0
- less3d-3.0.5/cmake/LESSRuntime.cmake +247 -0
- less3d-3.0.5/cmake/test_turbid_layout_dependencies.py +132 -0
- less3d-3.0.5/cmake/verify_joint_thermo_physiology_artifact.py +83 -0
- less3d-3.0.5/cmake/verify_native_dependency_isolation.py +132 -0
- less3d-3.0.5/cmake/verify_turbid_resident_artifacts.py +135 -0
- less3d-3.0.5/cmake/verify_turbid_sampling_artifacts.py +107 -0
- less3d-3.0.5/dev_build.py +226 -0
- less3d-3.0.5/docker/Dockerfile.manylinux +98 -0
- less3d-3.0.5/docs/CHANGELOG.md +567 -0
- less3d-3.0.5/docs/ROADMAP.md +17 -0
- less3d-3.0.5/docs/_archive/book-draft/README.md +49 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/appendix.tex +470 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch01_introduction.tex +164 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch02_theory.tex +213 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch03_architecture.tex +250 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch04_geometry.tex +608 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch05_materials.tex +653 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch06_illumination.tex +489 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch07_pathtracer.tex +1015 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch08_sensors.tex +634 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch09_spectral.tex +712 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch10_python_api.tex +800 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch11_validation.tex +452 -0
- less3d-3.0.5/docs/_archive/book-draft/chapters/ch12_microwave.tex +960 -0
- less3d-3.0.5/docs/_archive/book-draft/main.tex +69 -0
- less3d-3.0.5/docs/_archive/book-draft/preamble.tex +176 -0
- less3d-3.0.5/docs/_archive/book-draft/test_ch12.tex +7 -0
- less3d-3.0.5/docs/architecture.md +248 -0
- less3d-3.0.5/docs/component-authoring.md +245 -0
- less3d-3.0.5/docs/concepts/backends.md +191 -0
- less3d-3.0.5/docs/concepts/class_overview.svg +205 -0
- less3d-3.0.5/docs/concepts/coordinate-system.md +134 -0
- less3d-3.0.5/docs/concepts/digital-twin.md +130 -0
- less3d-3.0.5/docs/concepts/ortho_multiangle.svg +70 -0
- less3d-3.0.5/docs/concepts/ortho_parallelepiped.svg +68 -0
- less3d-3.0.5/docs/decisions/001-modular-native-component-architecture.md +213 -0
- less3d-3.0.5/docs/decisions/002-native-plugin-api-boundary.md +79 -0
- less3d-3.0.5/docs/design/active_microwave_t1_biomass.md +480 -0
- less3d-3.0.5/docs/design/active_mw_bistatic.md +319 -0
- less3d-3.0.5/docs/design/backend-parity.md +130 -0
- less3d-3.0.5/docs/design/energy_balance.md +1118 -0
- less3d-3.0.5/docs/design/extensible-architecture-refactor.md +606 -0
- less3d-3.0.5/docs/design/optical_turbid_canopy.md +1043 -0
- less3d-3.0.5/docs/design/optical_water_volume.md +906 -0
- less3d-3.0.5/docs/design/passive_microwave.md +1331 -0
- less3d-3.0.5/docs/design/passive_microwave_review.md +180 -0
- less3d-3.0.5/docs/design/physiology_architecture.md +2295 -0
- less3d-3.0.5/docs/design/sif.md +1425 -0
- less3d-3.0.5/docs/design/source-layout-simplification.md +173 -0
- less3d-3.0.5/docs/design/source-layout-v2-validation-and-migration-plan.md +650 -0
- less3d-3.0.5/docs/design/v2_scattering_progress.md +132 -0
- less3d-3.0.5/docs/design/vulkan-backend.md +180 -0
- less3d-3.0.5/docs/known-issues.md +234 -0
- less3d-3.0.5/docs/less-project-format.md +95 -0
- less3d-3.0.5/docs/migration/0.5.1-unified-turbid.md +22 -0
- less3d-3.0.5/docs/migration/3.0.2-plugin-api.md +13 -0
- less3d-3.0.5/docs/migration/from-old-less.md +289 -0
- less3d-3.0.5/docs/migration/universal-spatial-textures.md +83 -0
- less3d-3.0.5/docs/plugin-authoring.md +47 -0
- less3d-3.0.5/docs/plugin-compatibility.md +18 -0
- less3d-3.0.5/docs/plugin-security.md +29 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-05-unified-passive-optical-transport.md +787 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-06-unified-multiphysics-phase1.md +607 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-08-scene-capabilities-release.md +825 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-09-release-readiness-and-test-tiers.md +793 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-09-unified-turbid-implementation.md +901 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-10-turbid-batch-a.md +55 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-10-turbid-batch-b.md +237 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-10-turbid-task5-fix1.md +164 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-11-turbid-batch-c.md +52 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-12-mixed-thermo-physiology-coupling.md +728 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-12-optical-backend-throughput.md +104 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-12-unified-sunlit-shaded-thermo-physiology.md +214 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-13-independent-native-backends.md +821 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-13-joint-thermo-sif-completeness.md +404 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-14-tutorial-navigation-visual-refresh.md +185 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-15-scope-fvcb-formulations.md +349 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-15-spectral-absorption-partitions.md +381 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-23-universal-spatial-field-texture-system.md +877 -0
- less3d-3.0.5/docs/superpowers/plans/2026-08-26-modular-native-architecture.md +883 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-05-less-architecture-governance-design.md +230 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-06-unified-multiphysics-gating-design.md +244 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-08-scene-capabilities-release-design.md +291 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-09-release-readiness-and-test-tiers-design.md +158 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-09-unified-turbid-architecture-design.md +536 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-12-mixed-thermo-physiology-coupling-design.md +240 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-12-optical-backend-throughput-design.md +47 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-12-unified-sunlit-shaded-thermo-physiology-design.md +81 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-13-independent-native-backends-design.md +263 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-13-joint-thermo-sif-completeness-design.md +112 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-14-tutorial-navigation-visual-refresh-design.md +57 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-15-spectral-absorption-scope-fvcb-design.md +272 -0
- less3d-3.0.5/docs/superpowers/specs/2026-08-24-field-program-specialization-design.md +346 -0
- less3d-3.0.5/docs/testing.md +91 -0
- less3d-3.0.5/docs/tutorials/build.cmd +1 -0
- less3d-3.0.5/docs/tutorials/build_bilingual.py +99 -0
- less3d-3.0.5/docs/tutorials/en/01-introduction.md +108 -0
- less3d-3.0.5/docs/tutorials/en/02-installation.md +209 -0
- less3d-3.0.5/docs/tutorials/en/03-coordinate-system.md +134 -0
- less3d-3.0.5/docs/tutorials/en/04-concepts.md +879 -0
- less3d-3.0.5/docs/tutorials/en/05-first-simulation.md +167 -0
- less3d-3.0.5/docs/tutorials/en/06-terrain-and-properties.md +297 -0
- less3d-3.0.5/docs/tutorials/en/07-forest-scene.md +203 -0
- less3d-3.0.5/docs/tutorials/en/08-crop-field.md +210 -0
- less3d-3.0.5/docs/tutorials/en/08b-turbid-medium.md +248 -0
- less3d-3.0.5/docs/tutorials/en/09-multispectral.md +285 -0
- less3d-3.0.5/docs/tutorials/en/09b-atmosphere.md +238 -0
- less3d-3.0.5/docs/tutorials/en/09c-satellite-pushbroom.md +153 -0
- less3d-3.0.5/docs/tutorials/en/10-brdf.md +193 -0
- less3d-3.0.5/docs/tutorials/en/11-lidar.md +290 -0
- less3d-3.0.5/docs/tutorials/en/11b-irradiance-map.md +259 -0
- less3d-3.0.5/docs/tutorials/en/12-thermal.md +275 -0
- less3d-3.0.5/docs/tutorials/en/13-energy-balance.md +166 -0
- less3d-3.0.5/docs/tutorials/en/14-photosynthesis-sif.md +316 -0
- less3d-3.0.5/docs/tutorials/en/15-visualization.md +140 -0
- less3d-3.0.5/docs/tutorials/en/16-serialization.md +662 -0
- less3d-3.0.5/docs/tutorials/en/17-lidar-reconstruction.md +330 -0
- less3d-3.0.5/docs/tutorials/en/18-spatial-textures.md +329 -0
- less3d-3.0.5/docs/tutorials/en/api-reference.md +254 -0
- less3d-3.0.5/docs/tutorials/en/index.md +71 -0
- less3d-3.0.5/docs/tutorials/mkdocs.en.yml +125 -0
- less3d-3.0.5/docs/tutorials/mkdocs.yml +125 -0
- less3d-3.0.5/docs/tutorials/preview.cmd +1 -0
- less3d-3.0.5/docs/tutorials/shared/javascripts/language-switch.js +42 -0
- less3d-3.0.5/docs/tutorials/shared/stylesheets/less-theme.css +49 -0
- less3d-3.0.5/docs/tutorials/zh/01-introduction.md +108 -0
- less3d-3.0.5/docs/tutorials/zh/02-installation.md +209 -0
- less3d-3.0.5/docs/tutorials/zh/03-coordinate-system.md +134 -0
- less3d-3.0.5/docs/tutorials/zh/04-concepts.md +879 -0
- less3d-3.0.5/docs/tutorials/zh/05-first-simulation.md +167 -0
- less3d-3.0.5/docs/tutorials/zh/06-terrain-and-properties.md +297 -0
- less3d-3.0.5/docs/tutorials/zh/07-forest-scene.md +203 -0
- less3d-3.0.5/docs/tutorials/zh/08-crop-field.md +210 -0
- less3d-3.0.5/docs/tutorials/zh/08b-turbid-medium.md +248 -0
- less3d-3.0.5/docs/tutorials/zh/09-multispectral.md +285 -0
- less3d-3.0.5/docs/tutorials/zh/09b-atmosphere.md +238 -0
- less3d-3.0.5/docs/tutorials/zh/09c-satellite-pushbroom.md +152 -0
- less3d-3.0.5/docs/tutorials/zh/10-brdf.md +193 -0
- less3d-3.0.5/docs/tutorials/zh/11-lidar.md +290 -0
- less3d-3.0.5/docs/tutorials/zh/11b-irradiance-map.md +259 -0
- less3d-3.0.5/docs/tutorials/zh/12-thermal.md +275 -0
- less3d-3.0.5/docs/tutorials/zh/13-energy-balance.md +151 -0
- less3d-3.0.5/docs/tutorials/zh/14-photosynthesis-sif.md +288 -0
- less3d-3.0.5/docs/tutorials/zh/15-visualization.md +140 -0
- less3d-3.0.5/docs/tutorials/zh/16-serialization.md +662 -0
- less3d-3.0.5/docs/tutorials/zh/17-lidar-reconstruction.md +330 -0
- less3d-3.0.5/docs/tutorials/zh/18-spatial-textures.md +276 -0
- less3d-3.0.5/docs/tutorials/zh/api-reference.md +247 -0
- less3d-3.0.5/docs/tutorials/zh/data/als_plot.las +0 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/concepts-overview.svg +180 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/coordinate-system.svg +123 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/energy-balance.svg +76 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/irradiance-map.svg +173 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/lidar-pipeline.svg +140 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/orthographic-projection.svg +106 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/scene-lifecycle.svg +70 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/scene-repetition.svg +110 -0
- less3d-3.0.5/docs/tutorials/zh/diagrams/sif-coupling.svg +70 -0
- less3d-3.0.5/docs/tutorials/zh/index.md +71 -0
- less3d-3.0.5/docs/tutorials/zh/javascripts/mathjax-config.js +19 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/05_first_simulation.py +43 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/06_terrain_properties.py +50 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/07_forest_scene.py +68 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/08_crop_field.py +72 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/08b_turbid_medium.py +116 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/09_multispectral.py +63 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/10_brdf.py +75 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/11_lidar.py +68 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/11b_irradiance_map.py +69 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/12_thermal.py +52 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/13_energy_balance.py +84 -0
- less3d-3.0.5/docs/tutorials/zh/scripts/14_photosynthesis_sif.py +99 -0
- less3d-3.0.5/docs/usage_issues.md +149 -0
- less3d-3.0.5/docs/validation/data/val17_runs_high.csv +21 -0
- less3d-3.0.5/docs/validation/data/val17_runs_standard.csv +76 -0
- less3d-3.0.5/docs/validation/data/val17_summary_high.csv +6 -0
- less3d-3.0.5/docs/validation/data/val17_summary_standard.csv +16 -0
- less3d-3.0.5/docs/validation/extensible-architecture-refactor-report.md +117 -0
- less3d-3.0.5/docs/validation/figures/val12_data.npz +0 -0
- less3d-3.0.5/docs/validation/figures/val12_tier1_bare_soil_vza.png +0 -0
- less3d-3.0.5/docs/validation/figures/val12_tier2_bare_soil_moisture.png +0 -0
- less3d-3.0.5/docs/validation/figures/val12_tier3_canopy_total_vza.png +0 -0
- less3d-3.0.5/docs/validation/figures/val12_tier4_data.npz +0 -0
- less3d-3.0.5/docs/validation/figures/val12_tier4_trunk_only.png +0 -0
- less3d-3.0.5/docs/validation/figures/val17_turbid_mesh_photosynthesis.png +0 -0
- less3d-3.0.5/docs/validation/figures/water_surface_glint.png +0 -0
- less3d-3.0.5/docs/validation/less_vs_mimics_report.md +559 -0
- less3d-3.0.5/docs/validation/mixed_thermo_physiology.md +29 -0
- less3d-3.0.5/docs/validation/turbid-absorption-investigation.md +175 -0
- less3d-3.0.5/docs/validation/turbid_mesh_photosynthesis.md +428 -0
- less3d-3.0.5/docs/validation/turbid_sif_convergence.md +80 -0
- less3d-3.0.5/docs/validation/unified_turbid_release_report.md +138 -0
- less3d-3.0.5/docs/validation/unified_turbid_validation.md +40 -0
- less3d-3.0.5/docs/validation/water-surface-phase1.md +93 -0
- less3d-3.0.5/examples/plugins/less3d_example_plugin/less3d_example_plugin/__init__.py +88 -0
- less3d-3.0.5/examples/plugins/less3d_example_plugin/pyproject.toml +12 -0
- less3d-3.0.5/examples/python/active_mw_biomass.py +125 -0
- less3d-3.0.5/examples/python/autumn_forest.py +186 -0
- less3d-3.0.5/examples/python/dem_downwelling.py +122 -0
- less3d-3.0.5/examples/python/maize_eb_thermal.py +415 -0
- less3d-3.0.5/examples/python/maize_field.py +191 -0
- less3d-3.0.5/examples/python/mixed_canopy_photosynthesis.py +92 -0
- less3d-3.0.5/examples/python/mw_forest_dem.py +334 -0
- less3d-3.0.5/examples/python/satellite_pushbroom.py +94 -0
- less3d-3.0.5/examples/python/spatial_texture_fields.py +100 -0
- less3d-3.0.5/examples/python/thermal_pushbroom.py +107 -0
- less3d-3.0.5/examples/python/water_surface_glint.py +97 -0
- less3d-3.0.5/include/less/core/aabb.h +55 -0
- less3d-3.0.5/include/less/core/frame.h +59 -0
- less3d-3.0.5/include/less/core/grid_mapping.h +152 -0
- less3d-3.0.5/include/less/core/offset_ray.h +86 -0
- less3d-3.0.5/include/less/core/rng.h +47 -0
- less3d-3.0.5/include/less/core/silhouette_emit.h +184 -0
- less3d-3.0.5/include/less/core/spectrum.h +107 -0
- less3d-3.0.5/include/less/core/transform.h +100 -0
- less3d-3.0.5/include/less/core/types.h +52 -0
- less3d-3.0.5/include/less/core/vec_math.h +150 -0
- less3d-3.0.5/include/less/core/warp.h +115 -0
- less3d-3.0.5/include/less/fields/compile.h +213 -0
- less3d-3.0.5/include/less/fields/data.h +78 -0
- less3d-3.0.5/include/less/fields/evaluate.h +137 -0
- less3d-3.0.5/include/less/fields/field.h +1203 -0
- less3d-3.0.5/include/less/fields/program.h +321 -0
- less3d-3.0.5/include/less/fields/provenance.h +693 -0
- less3d-3.0.5/include/less/fields/resources.h +556 -0
- less3d-3.0.5/include/less/fields/state_adapter.h +96 -0
- less3d-3.0.5/include/less/fields/state_registry.h +123 -0
- less3d-3.0.5/include/less/fields/texture_footprint.h +180 -0
- less3d-3.0.5/include/less/physics/complex_bessel.h +289 -0
- less3d-3.0.5/include/less/physics/dielectric.h +423 -0
- less3d-3.0.5/include/less/physics/planck.h +67 -0
- less3d-3.0.5/include/less/physics/roughness.h +178 -0
- less3d-3.0.5/include/less/physics/scattering/rayleigh_cylinder_scatter.h +162 -0
- less3d-3.0.5/include/less/physics/scattering/rayleigh_disc_scatter.h +181 -0
- less3d-3.0.5/include/less/physics/scattering/scatter_to_mueller.h +146 -0
- less3d-3.0.5/include/less/physics/stokes.h +265 -0
- less3d-3.0.5/include/less/physics/wait_mie_cylinder.h +325 -0
- less3d-3.0.5/include/less/physics/wood_dielectric.h +89 -0
- less3d-3.0.5/include/less/runtime/execution.h +47 -0
- less3d-3.0.5/include/less/runtime/execution_identity.h +147 -0
- less3d-3.0.5/include/less/runtime/result.h +72 -0
- less3d-3.0.5/include/less/runtime/scene.h +136 -0
- less3d-3.0.5/include/less/runtime/scene_data.h +279 -0
- less3d-3.0.5/include/less/transport/optical_path.h +49 -0
- less3d-3.0.5/install_dev.sh +71 -0
- less3d-3.0.5/pyproject.toml +109 -0
- less3d-3.0.5/python/less/__init__.py +283 -0
- less3d-3.0.5/python/less/_compile/__init__.py +1 -0
- less3d-3.0.5/python/less/_compile/acquisition.py +60 -0
- less3d-3.0.5/python/less/_compile/domains.py +131 -0
- less3d-3.0.5/python/less/_compile/field_capabilities.py +297 -0
- less3d-3.0.5/python/less/_compile/model/__init__.py +1 -0
- less3d-3.0.5/python/less/_compile/model/environment.py +238 -0
- less3d-3.0.5/python/less/_compile/model/field.py +711 -0
- less3d-3.0.5/python/less/_compile/model/native.py +59 -0
- less3d-3.0.5/python/less/_compile/model/scene.py +361 -0
- less3d-3.0.5/python/less/_compile/model/spectral.py +103 -0
- less3d-3.0.5/python/less/_compile/model/texture.py +340 -0
- less3d-3.0.5/python/less/_compile/optical.py +441 -0
- less3d-3.0.5/python/less/_compile/physiology.py +260 -0
- less3d-3.0.5/python/less/_compile/process_graph.py +584 -0
- less3d-3.0.5/python/less/_compile/processes.py +792 -0
- less3d-3.0.5/python/less/_compile/products.py +117 -0
- less3d-3.0.5/python/less/_compile/property_registry.py +70 -0
- less3d-3.0.5/python/less/_compile/recipe.py +604 -0
- less3d-3.0.5/python/less/_compile/scene.py +308 -0
- less3d-3.0.5/python/less/_compile/scene_energy_balance.py +182 -0
- less3d-3.0.5/python/less/_compile/scene_optical.py +1498 -0
- less3d-3.0.5/python/less/_compile/schema.py +72 -0
- less3d-3.0.5/python/less/_compile/sensors.py +156 -0
- less3d-3.0.5/python/less/_compile/thermal.py +134 -0
- less3d-3.0.5/python/less/_compile/workflows/__init__.py +1 -0
- less3d-3.0.5/python/less/_compile/workflows/active_microwave.py +341 -0
- less3d-3.0.5/python/less/_compile/workflows/brf.py +281 -0
- less3d-3.0.5/python/less/_compile/workflows/codec_support.py +62 -0
- less3d-3.0.5/python/less/_compile/workflows/energy_balance.py +180 -0
- less3d-3.0.5/python/less/_compile/workflows/irradiance_map.py +272 -0
- less3d-3.0.5/python/less/_compile/workflows/lidar.py +668 -0
- less3d-3.0.5/python/less/_compile/workflows/microwave_support.py +42 -0
- less3d-3.0.5/python/less/_compile/workflows/optical_imaging.py +398 -0
- less3d-3.0.5/python/less/_compile/workflows/passive_microwave.py +400 -0
- less3d-3.0.5/python/less/_compile/workflows/photosynthesis.py +324 -0
- less3d-3.0.5/python/less/_compile/workflows/pipeline.py +416 -0
- less3d-3.0.5/python/less/_compile/workflows/process_support.py +75 -0
- less3d-3.0.5/python/less/_compile/workflows/radiation_field.py +251 -0
- less3d-3.0.5/python/less/_compile/workflows/radiation_field_process.py +472 -0
- less3d-3.0.5/python/less/_compile/workflows/registry.py +452 -0
- less3d-3.0.5/python/less/_compile/workflows/requirements.py +66 -0
- less3d-3.0.5/python/less/_compile/workflows/sif_imaging.py +523 -0
- less3d-3.0.5/python/less/_compile/workflows/sif_process.py +192 -0
- less3d-3.0.5/python/less/_compile/workflows/thermal_imaging.py +412 -0
- less3d-3.0.5/python/less/_runtime/__init__.py +1 -0
- less3d-3.0.5/python/less/_runtime/artifacts/__init__.py +1 -0
- less3d-3.0.5/python/less/_runtime/artifacts/process/__init__.py +1 -0
- less3d-3.0.5/python/less/_runtime/artifacts/process/thermo_physiology.py +61 -0
- less3d-3.0.5/python/less/_runtime/artifacts/process/thermo_physiology_manifest.json +309 -0
- less3d-3.0.5/python/less/_runtime/artifacts/turbid/__init__.py +1 -0
- less3d-3.0.5/python/less/_runtime/artifacts/turbid/resident.py +225 -0
- less3d-3.0.5/python/less/_runtime/artifacts/turbid/resident_manifest.json +703 -0
- less3d-3.0.5/python/less/_runtime/artifacts/turbid/sampling.py +361 -0
- less3d-3.0.5/python/less/_runtime/artifacts/turbid/sampling_manifest.json +218 -0
- less3d-3.0.5/python/less/_runtime/backends/__init__.py +1 -0
- less3d-3.0.5/python/less/_runtime/backends/active.py +65 -0
- less3d-3.0.5/python/less/_runtime/backends/capabilities.py +673 -0
- less3d-3.0.5/python/less/_runtime/backends/embree.py +235 -0
- less3d-3.0.5/python/less/_runtime/backends/execution.py +227 -0
- less3d-3.0.5/python/less/_runtime/backends/factory.py +295 -0
- less3d-3.0.5/python/less/_runtime/backends/interfaces.py +157 -0
- less3d-3.0.5/python/less/_runtime/backends/loading.py +139 -0
- less3d-3.0.5/python/less/_runtime/backends/optix.py +337 -0
- less3d-3.0.5/python/less/_runtime/backends/runtime.py +86 -0
- less3d-3.0.5/python/less/_runtime/backends/turbid.py +686 -0
- less3d-3.0.5/python/less/_runtime/backends/vulkan.py +412 -0
- less3d-3.0.5/python/less/_runtime/backends/workflows.py +233 -0
- less3d-3.0.5/python/less/_runtime/execution_identity.py +86 -0
- less3d-3.0.5/python/less/_runtime/geometry.py +49 -0
- less3d-3.0.5/python/less/_runtime/geospatial.py +47 -0
- less3d-3.0.5/python/less/_runtime/lstex.py +399 -0
- less3d-3.0.5/python/less/_runtime/matplotlib.py +18 -0
- less3d-3.0.5/python/less/_runtime/native.py +39 -0
- less3d-3.0.5/python/less/_runtime/registry.py +258 -0
- less3d-3.0.5/python/less/_runtime/session.py +318 -0
- less3d-3.0.5/python/less/_runtime/textures.py +185 -0
- less3d-3.0.5/python/less/_serialization/__init__.py +1 -0
- less3d-3.0.5/python/less/_serialization/codecs.py +228 -0
- less3d-3.0.5/python/less/absorption.py +321 -0
- less3d-3.0.5/python/less/assets/FREX.obj.gz +0 -0
- less3d-3.0.5/python/less/assets/__init__.py +31 -0
- less3d-3.0.5/python/less/assets/favicon.ico +0 -0
- less3d-3.0.5/python/less/assets/maize.obj.gz +0 -0
- less3d-3.0.5/python/less/assets/mixed_canopy.obj.gz +0 -0
- less3d-3.0.5/python/less/atmosphere/__init__.py +26 -0
- less3d-3.0.5/python/less/atmosphere/database.py +354 -0
- less3d-3.0.5/python/less/atmosphere/libradtran.py +296 -0
- less3d-3.0.5/python/less/atmosphere/model.py +1380 -0
- less3d-3.0.5/python/less/atmosphere/profile.py +167 -0
- less3d-3.0.5/python/less/atmosphere/py6s.py +117 -0
- less3d-3.0.5/python/less/atmosphere/result.py +455 -0
- less3d-3.0.5/python/less/atmosphere/solver.py +640 -0
- less3d-3.0.5/python/less/backend.py +73 -0
- less3d-3.0.5/python/less/convert_less.py +422 -0
- less3d-3.0.5/python/less/data/AtmosphereDB.db +0 -0
- less3d-3.0.5/python/less/data/LambertianDB.db +0 -0
- less3d-3.0.5/python/less/data/SolarDB.db +0 -0
- less3d-3.0.5/python/less/data/srgb.coeff +0 -0
- less3d-3.0.5/python/less/data/srgb.coeff.provenance.json +9 -0
- less3d-3.0.5/python/less/energy_balance/__init__.py +73 -0
- less3d-3.0.5/python/less/energy_balance/aerodynamic.py +136 -0
- less3d-3.0.5/python/less/energy_balance/microclimate.py +187 -0
- less3d-3.0.5/python/less/energy_balance/result.py +192 -0
- less3d-3.0.5/python/less/energy_balance/solver.py +261 -0
- less3d-3.0.5/python/less/extensions/__init__.py +22 -0
- less3d-3.0.5/python/less/extensions/api.py +107 -0
- less3d-3.0.5/python/less/extensions/approvals.py +116 -0
- less3d-3.0.5/python/less/extensions/identity.py +181 -0
- less3d-3.0.5/python/less/extensions/manager.py +414 -0
- less3d-3.0.5/python/less/generators/__init__.py +16 -0
- less3d-3.0.5/python/less/generators/_utils.py +156 -0
- less3d-3.0.5/python/less/generators/forest/__init__.py +18 -0
- less3d-3.0.5/python/less/generators/forest/builder.py +331 -0
- less3d-3.0.5/python/less/generators/forest/crown.py +444 -0
- less3d-3.0.5/python/less/generators/urban/__init__.py +18 -0
- less3d-3.0.5/python/less/generators/urban/builder.py +488 -0
- less3d-3.0.5/python/less/geometry.py +88 -0
- less3d-3.0.5/python/less/hosek_wilkie.py +361 -0
- less3d-3.0.5/python/less/illumination/__init__.py +442 -0
- less3d-3.0.5/python/less/illumination/_compile.py +118 -0
- less3d-3.0.5/python/less/inspector.py +1419 -0
- less3d-3.0.5/python/less/instrument.py +531 -0
- less3d-3.0.5/python/less/io.py +948 -0
- less3d-3.0.5/python/less/less_gpu.py +5 -0
- less3d-3.0.5/python/less/lidar/__init__.py +62 -0
- less3d-3.0.5/python/less/lidar/_crown.py +415 -0
- less3d-3.0.5/python/less/lidar/_ground.py +217 -0
- less3d-3.0.5/python/less/lidar/_io_las.py +118 -0
- less3d-3.0.5/python/less/lidar/_leaves.py +904 -0
- less3d-3.0.5/python/less/lidar/_pipeline.py +294 -0
- less3d-3.0.5/python/less/lidar/_raster.py +229 -0
- less3d-3.0.5/python/less/lidar/_result.py +72 -0
- less3d-3.0.5/python/less/lidar/_segment.py +162 -0
- less3d-3.0.5/python/less/lidar/_types.py +221 -0
- less3d-3.0.5/python/less/local_service.py +372 -0
- less3d-3.0.5/python/less/local_worker.py +186 -0
- less3d-3.0.5/python/less/measures.py +468 -0
- less3d-3.0.5/python/less/media/__init__.py +5 -0
- less3d-3.0.5/python/less/media/turbid/__init__.py +124 -0
- less3d-3.0.5/python/less/media/turbid/compile.py +389 -0
- less3d-3.0.5/python/less/media/turbid/geometry.py +824 -0
- less3d-3.0.5/python/less/media/turbid/workflows.py +1902 -0
- less3d-3.0.5/python/less/mesh.py +219 -0
- less3d-3.0.5/python/less/object.py +781 -0
- less3d-3.0.5/python/less/physics/__init__.py +1 -0
- less3d-3.0.5/python/less/physics/fluspect/__init__.py +2 -0
- less3d-3.0.5/python/less/physics/fluspect/fluspect.py +342 -0
- less3d-3.0.5/python/less/physics/fluspect/optipar_fluspect.txt +2101 -0
- less3d-3.0.5/python/less/physics/fluspect/optipar_prospect_pro_2021.txt +2001 -0
- less3d-3.0.5/python/less/physics/microwave/__init__.py +23 -0
- less3d-3.0.5/python/less/physics/microwave/lad.py +217 -0
- less3d-3.0.5/python/less/physics/microwave/mie_cylinder.py +242 -0
- less3d-3.0.5/python/less/physics/microwave/mueller_integrator.py +274 -0
- less3d-3.0.5/python/less/physics/microwave/precompute.py +1091 -0
- less3d-3.0.5/python/less/physics/microwave/trunk_geometry.py +157 -0
- less3d-3.0.5/python/less/physics/optical/__init__.py +5 -0
- less3d-3.0.5/python/less/physics/optical/lad.py +79 -0
- less3d-3.0.5/python/less/physics/physiology/__init__.py +2 -0
- less3d-3.0.5/python/less/physics/physiology/fvcb.py +175 -0
- less3d-3.0.5/python/less/physics/prospect/__init__.py +1 -0
- less3d-3.0.5/python/less/physics/prospect/prospect_d.py +235 -0
- less3d-3.0.5/python/less/physics/prospect/prospect_d_spectra.txt +2121 -0
- less3d-3.0.5/python/less/place.py +333 -0
- less3d-3.0.5/python/less/preview.py +544 -0
- less3d-3.0.5/python/less/processes/__init__.py +4 -0
- less3d-3.0.5/python/less/processes/base.py +49 -0
- less3d-3.0.5/python/less/processes/energy_balance.py +120 -0
- less3d-3.0.5/python/less/processes/photosynthesis.py +121 -0
- less3d-3.0.5/python/less/processes/photosynthesis_metadata.py +53 -0
- less3d-3.0.5/python/less/processes/radiation_field.py +53 -0
- less3d-3.0.5/python/less/processes/sif.py +97 -0
- less3d-3.0.5/python/less/processes/thermo_physiology.py +1185 -0
- less3d-3.0.5/python/less/product.py +39 -0
- less3d-3.0.5/python/less/products/__init__.py +4 -0
- less3d-3.0.5/python/less/products/_scene_mesh.py +136 -0
- less3d-3.0.5/python/less/products/base.py +325 -0
- less3d-3.0.5/python/less/products/brf.py +112 -0
- less3d-3.0.5/python/less/products/energy_balance.py +346 -0
- less3d-3.0.5/python/less/products/image.py +758 -0
- less3d-3.0.5/python/less/products/irradiance.py +337 -0
- less3d-3.0.5/python/less/products/lidar.py +124 -0
- less3d-3.0.5/python/less/products/measurement.py +124 -0
- less3d-3.0.5/python/less/products/photosynthesis.py +1147 -0
- less3d-3.0.5/python/less/products/radiation_field.py +1064 -0
- less3d-3.0.5/python/less/products/radiation_process.py +236 -0
- less3d-3.0.5/python/less/products/sif.py +134 -0
- less3d-3.0.5/python/less/products/solve.py +59 -0
- less3d-3.0.5/python/less/project.py +709 -0
- less3d-3.0.5/python/less/project_resources.py +283 -0
- less3d-3.0.5/python/less/properties/__init__.py +2 -0
- less3d-3.0.5/python/less/properties/base.py +72 -0
- less3d-3.0.5/python/less/properties/physiology.py +285 -0
- less3d-3.0.5/python/less/properties/thermal.py +203 -0
- less3d-3.0.5/python/less/properties/vegetation.py +618 -0
- less3d-3.0.5/python/less/property.py +62 -0
- less3d-3.0.5/python/less/recipe_inspection.py +51 -0
- less3d-3.0.5/python/less/scene.py +2241 -0
- less3d-3.0.5/python/less/sensor.py +35 -0
- less3d-3.0.5/python/less/sensors/__init__.py +4 -0
- less3d-3.0.5/python/less/sensors/field.py +164 -0
- less3d-3.0.5/python/less/sensors/lidar.py +311 -0
- less3d-3.0.5/python/less/sensors/microwave.py +121 -0
- less3d-3.0.5/python/less/sensors/optical.py +127 -0
- less3d-3.0.5/python/less/sensors/projections.py +576 -0
- less3d-3.0.5/python/less/sensors/sif.py +82 -0
- less3d-3.0.5/python/less/sensors/thermal.py +130 -0
- less3d-3.0.5/python/less/serialize.py +837 -0
- less3d-3.0.5/python/less/show.py +2695 -0
- less3d-3.0.5/python/less/spectral.py +315 -0
- less3d-3.0.5/python/less/spectral_db.py +202 -0
- less3d-3.0.5/python/less/spectral_profile.py +213 -0
- less3d-3.0.5/python/less/sun_position.py +203 -0
- less3d-3.0.5/python/less/surfaces/__init__.py +18 -0
- less3d-3.0.5/python/less/surfaces/base.py +19 -0
- less3d-3.0.5/python/less/surfaces/lambertian.py +233 -0
- less3d-3.0.5/python/less/surfaces/microwave.py +158 -0
- less3d-3.0.5/python/less/surfaces/rpv.py +45 -0
- less3d-3.0.5/python/less/surfaces/water.py +213 -0
- less3d-3.0.5/python/less/texture.py +1148 -0
- less3d-3.0.5/src/backends/README.md +31 -0
- less3d-3.0.5/src/backends/embree/embree_backend.cpp +6183 -0
- less3d-3.0.5/src/backends/embree/embree_backend.h +869 -0
- less3d-3.0.5/src/backends/homogeneous_water_lidar_executor.h +13 -0
- less3d-3.0.5/src/backends/optix/device/microwave/kernels/closesthit_mw.cu +92 -0
- less3d-3.0.5/src/backends/optix/device/microwave/kernels/miss_mw.cu +31 -0
- less3d-3.0.5/src/backends/optix/device/microwave/kernels/periodic_xy.cuh +111 -0
- less3d-3.0.5/src/backends/optix/device/microwave/launch_params_mw.h +255 -0
- less3d-3.0.5/src/backends/optix/device/optical/kernels/closesthit.cu +132 -0
- less3d-3.0.5/src/backends/optix/device/optical/kernels/miss.cu +38 -0
- less3d-3.0.5/src/backends/optix/device/optical/launch_params.h +237 -0
- less3d-3.0.5/src/backends/optix/host/optix_context.cpp +183 -0
- less3d-3.0.5/src/backends/optix/host/optix_context.h +50 -0
- less3d-3.0.5/src/backends/optix/host/sbt_record.h +42 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/active_microwave.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_constant.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_sampled.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_state.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_thermal.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_thermal_constant.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_thermal_sampled.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_turbid.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_turbid_reflected.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_turbid_reflected_sampled.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_wavefront_diffuse_trace.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_wavefront_resolve.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/backward_optical_wavefront_trace.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/energy_balance_partition.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/energy_balance_process.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/energy_balance_radiation.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/energy_balance_radiation_constant.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/forward_flux.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/forward_flux_constant.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/homogeneous_water_lidar.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/joint_thermo_physiology.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/mesh_sif_source_assembly.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/photosynthesis_process.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/physiology.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/ray_query_trace.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/sif_process.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/sif_source_assembly.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/time_resolved_active.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/time_resolved_active_constant.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/time_resolved_active_direct_constant.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_energy_balance_assemble.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_field_assemble.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_field_lookup.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_leaf_rrt.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_observation_source.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_physiology_assemble.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_radiation_assemble.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_sampling.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/precompiled/turbid_state.spv +0 -0
- less3d-3.0.5/src/backends/vulkan/shaders/field.slang +1487 -0
- less3d-3.0.5/src/backends/vulkan/shaders/microwave_wavefront.slang +839 -0
- less3d-3.0.5/src/backends/vulkan/shaders/trace_closest.slang +62 -0
- less3d-3.0.5/src/backends/vulkan/shaders/transport_common.slang +99 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_buffer.cpp +158 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_buffer.h +43 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_context.cpp +524 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_context.h +103 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_scene.cpp +11131 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_scene.h +1019 -0
- less3d-3.0.5/src/backends/vulkan/vulkan_scene_support.h +42 -0
- less3d-3.0.5/src/bindings/backend/backend_modules.h +11 -0
- less3d-3.0.5/src/bindings/backend/embree/active_bindings.cpp +66 -0
- less3d-3.0.5/src/bindings/backend/embree/diagnostics_bindings.cpp +33 -0
- less3d-3.0.5/src/bindings/backend/embree/optical_bindings.cpp +311 -0
- less3d-3.0.5/src/bindings/backend/embree/process_bindings.cpp +371 -0
- less3d-3.0.5/src/bindings/backend/embree/workflow_bindings.h +12 -0
- less3d-3.0.5/src/bindings/backend/embree_module.cpp +663 -0
- less3d-3.0.5/src/bindings/backend/optix/active_bindings.cpp +442 -0
- less3d-3.0.5/src/bindings/backend/optix/diagnostics_bindings.cpp +56 -0
- less3d-3.0.5/src/bindings/backend/optix/optical_bindings.cpp +185 -0
- less3d-3.0.5/src/bindings/backend/optix/process_bindings.cpp +467 -0
- less3d-3.0.5/src/bindings/backend/optix/workflow_bindings.h +16 -0
- less3d-3.0.5/src/bindings/backend/optix_module.cpp +565 -0
- less3d-3.0.5/src/bindings/backend/vulkan/active_bindings.cpp +166 -0
- less3d-3.0.5/src/bindings/backend/vulkan/diagnostics_bindings.cpp +151 -0
- less3d-3.0.5/src/bindings/backend/vulkan/optical_bindings.cpp +239 -0
- less3d-3.0.5/src/bindings/backend/vulkan/process_bindings.cpp +571 -0
- less3d-3.0.5/src/bindings/backend/vulkan/scene_bindings.cpp +368 -0
- less3d-3.0.5/src/bindings/backend/vulkan/workflow_bindings.h +18 -0
- less3d-3.0.5/src/bindings/backend/vulkan_module.cpp +39 -0
- less3d-3.0.5/src/bindings/core/backend_helpers.h +372 -0
- less3d-3.0.5/src/bindings/core/model_registry.cpp +50 -0
- less3d-3.0.5/src/bindings/core/model_registry.h +17 -0
- less3d-3.0.5/src/bindings/core/native_result.h +99 -0
- less3d-3.0.5/src/bindings/py_less.cpp +45 -0
- less3d-3.0.5/src/core/field/tests/test_native.cpp +1118 -0
- less3d-3.0.5/src/core/mesh/mesh_loader.cpp +53 -0
- less3d-3.0.5/src/core/mesh/mesh_loader.h +17 -0
- less3d-3.0.5/src/core/native_request_validation/tests/test_component.py +41 -0
- less3d-3.0.5/src/core/native_request_validation/tests/test_native.cpp +49 -0
- less3d-3.0.5/src/core/native_request_validation/validation.h +53 -0
- less3d-3.0.5/src/core/scene/scene_manager.cpp +3160 -0
- less3d-3.0.5/src/core/scene/scene_manager.h +940 -0
- less3d-3.0.5/src/core/simulation/simulator.cpp +4575 -0
- less3d-3.0.5/src/core/simulation/simulator.h +721 -0
- less3d-3.0.5/src/core/state_field_registry/state_field_adapter.cpp +277 -0
- less3d-3.0.5/src/core/state_field_registry/tests/test_native.cpp +367 -0
- less3d-3.0.5/src/illumination/CMakeLists.txt +2 -0
- less3d-3.0.5/src/illumination/lidar_pulse/embree/lidar_pulse.cpp +13 -0
- less3d-3.0.5/src/illumination/lidar_pulse/embree/lidar_pulse.h +11 -0
- less3d-3.0.5/src/illumination/lidar_pulse/lidar_pulse.h +58 -0
- less3d-3.0.5/src/illumination/lidar_pulse/optix/lidar_pulse.cpp +13 -0
- less3d-3.0.5/src/illumination/lidar_pulse/optix/lidar_pulse.h +11 -0
- less3d-3.0.5/src/illumination/lidar_pulse/vulkan/lidar_pulse.cpp +13 -0
- less3d-3.0.5/src/illumination/lidar_pulse/vulkan/lidar_pulse.h +11 -0
- less3d-3.0.5/src/illumination/sun_sky/embree.h +133 -0
- less3d-3.0.5/src/illumination/sun_sky/optix.h +164 -0
- less3d-3.0.5/src/illumination/sun_sky/sun_sky.h +5 -0
- less3d-3.0.5/src/illumination/sun_sky/vulkan.slang +142 -0
- less3d-3.0.5/src/integrators/CMakeLists.txt +9 -0
- less3d-3.0.5/src/integrators/active_microwave/active_microwave.h +3 -0
- less3d-3.0.5/src/integrators/active_microwave/embree.h +2 -0
- less3d-3.0.5/src/integrators/active_microwave/optix/active_microwave.h +2 -0
- less3d-3.0.5/src/integrators/active_microwave/optix/raygen_active.cu +706 -0
- less3d-3.0.5/src/integrators/active_microwave/vulkan.slang +1 -0
- less3d-3.0.5/src/integrators/backward_optical/backward_optical.h +76 -0
- less3d-3.0.5/src/integrators/backward_optical/embree.h +2 -0
- less3d-3.0.5/src/integrators/backward_optical/optix/backward_optical.h +2 -0
- less3d-3.0.5/src/integrators/backward_optical/optix/raygen_backward.cu +2051 -0
- less3d-3.0.5/src/integrators/backward_optical/vulkan/backward_optical.slang +2 -0
- less3d-3.0.5/src/integrators/backward_optical/vulkan/kernel.slang +2841 -0
- less3d-3.0.5/src/integrators/backward_optical/vulkan/layout.slang +49 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/embree.h +2 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/energy_balance_radiation.h +3 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/optix/energy_balance_radiation.h +2 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/optix/raygen_eb_rrt.cu +1906 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/vulkan/energy_balance_radiation.slang +1 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/vulkan/kernel.slang +924 -0
- less3d-3.0.5/src/integrators/energy_balance_radiation/vulkan/leaf_rrt.slang +821 -0
- less3d-3.0.5/src/integrators/forward_optical/embree.h +2 -0
- less3d-3.0.5/src/integrators/forward_optical/forward_optical.h +65 -0
- less3d-3.0.5/src/integrators/forward_optical/optix/forward_optical.h +2 -0
- less3d-3.0.5/src/integrators/forward_optical/optix/raygen_flux.cu +700 -0
- less3d-3.0.5/src/integrators/forward_optical/optix/raygen_forward.cu +1288 -0
- less3d-3.0.5/src/integrators/forward_optical/optix/spectrum_workspace.cuh +21 -0
- less3d-3.0.5/src/integrators/forward_optical/vulkan/forward_optical.slang +2 -0
- less3d-3.0.5/src/integrators/forward_optical/vulkan/kernel.slang +991 -0
- less3d-3.0.5/src/integrators/forward_optical/vulkan/layout.slang +48 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/bindings.cpp +151 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/embree/homogeneous_water_lidar.cpp +23 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/embree/homogeneous_water_lidar.h +7 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/homogeneous_water_lidar.h +189 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/layout.h +137 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/optix/homogeneous_water_lidar.cpp +89 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/optix/homogeneous_water_lidar.cu +13 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/optix/homogeneous_water_lidar.h +12 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/tests.cpp +123 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/vulkan/homogeneous_water_lidar.cpp +178 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/vulkan/homogeneous_water_lidar.h +13 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/vulkan/homogeneous_water_lidar.slang +2 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/vulkan/kernel.slang +120 -0
- less3d-3.0.5/src/integrators/homogeneous_water_lidar/vulkan/layout.slang +157 -0
- less3d-3.0.5/src/integrators/medium_event/embree.h +2 -0
- less3d-3.0.5/src/integrators/medium_event/medium_event.h +70 -0
- less3d-3.0.5/src/integrators/medium_event/optix.h +2 -0
- less3d-3.0.5/src/integrators/medium_event/tests.cpp +76 -0
- less3d-3.0.5/src/integrators/medium_event/vulkan.slang +57 -0
- less3d-3.0.5/src/integrators/passive_microwave/embree.h +2 -0
- less3d-3.0.5/src/integrators/passive_microwave/optix/passive_microwave.h +2 -0
- less3d-3.0.5/src/integrators/passive_microwave/optix/raygen_passive.cu +764 -0
- less3d-3.0.5/src/integrators/passive_microwave/passive_microwave.h +3 -0
- less3d-3.0.5/src/integrators/passive_microwave/vulkan.slang +1 -0
- less3d-3.0.5/src/integrators/steady_optical/embree.h +2 -0
- less3d-3.0.5/src/integrators/steady_optical/optix.h +2 -0
- less3d-3.0.5/src/integrators/steady_optical/steady_optical.h +3 -0
- less3d-3.0.5/src/integrators/steady_optical/vulkan.slang +1 -0
- less3d-3.0.5/src/integrators/time_resolved_active/bindings.cpp +111 -0
- less3d-3.0.5/src/integrators/time_resolved_active/embree/time_resolved_active.cpp +577 -0
- less3d-3.0.5/src/integrators/time_resolved_active/embree/time_resolved_active.h +2 -0
- less3d-3.0.5/src/integrators/time_resolved_active/event.h +119 -0
- less3d-3.0.5/src/integrators/time_resolved_active/integrator.h +50 -0
- less3d-3.0.5/src/integrators/time_resolved_active/optix/raygen_lidar.cu +494 -0
- less3d-3.0.5/src/integrators/time_resolved_active/optix/time_resolved_active.h +2 -0
- less3d-3.0.5/src/integrators/time_resolved_active/path_state.h +29 -0
- less3d-3.0.5/src/integrators/time_resolved_active/result.h +18 -0
- less3d-3.0.5/src/integrators/time_resolved_active/time_resolved_active.h +7 -0
- less3d-3.0.5/src/integrators/time_resolved_active/timeline.h +148 -0
- less3d-3.0.5/src/integrators/time_resolved_active/vulkan/event.slang +81 -0
- less3d-3.0.5/src/integrators/time_resolved_active/vulkan/integrator.slang +41 -0
- less3d-3.0.5/src/integrators/time_resolved_active/vulkan/kernel.slang +612 -0
- less3d-3.0.5/src/integrators/time_resolved_active/vulkan/layout.slang +17 -0
- less3d-3.0.5/src/integrators/time_resolved_active/vulkan/time_resolved_active.slang +2 -0
- less3d-3.0.5/src/media/CMakeLists.txt +14 -0
- less3d-3.0.5/src/media/continuous_participating/continuous_participating_medium.h +105 -0
- less3d-3.0.5/src/media/continuous_participating/embree.h +5 -0
- less3d-3.0.5/src/media/continuous_participating/optix.cuh +5 -0
- less3d-3.0.5/src/media/continuous_participating/tests/test_native.cpp +64 -0
- less3d-3.0.5/src/media/continuous_participating/vulkan.slang +103 -0
- less3d-3.0.5/src/media/region_stack/bindings.cpp +38 -0
- less3d-3.0.5/src/media/region_stack/embree.h +5 -0
- less3d-3.0.5/src/media/region_stack/optix.cuh +5 -0
- less3d-3.0.5/src/media/region_stack/region_stack.h +119 -0
- less3d-3.0.5/src/media/region_stack/vulkan.slang +77 -0
- less3d-3.0.5/src/media/turbid/aggregation.h +232 -0
- less3d-3.0.5/src/media/turbid/bindings/domain.cpp +574 -0
- less3d-3.0.5/src/media/turbid/bindings/fields.cpp +616 -0
- less3d-3.0.5/src/media/turbid/bindings/sampling_debug.h +401 -0
- less3d-3.0.5/src/media/turbid/bindings/state.cpp +437 -0
- less3d-3.0.5/src/media/turbid/domain.h +418 -0
- less3d-3.0.5/src/media/turbid/embree/domain.cpp +66 -0
- less3d-3.0.5/src/media/turbid/embree/leaf_scattering.h +5 -0
- less3d-3.0.5/src/media/turbid/embree/leaf_scattering_operations.h +5 -0
- less3d-3.0.5/src/media/turbid/embree/path_state.h +118 -0
- less3d-3.0.5/src/media/turbid/embree/sampling.cpp +82 -0
- less3d-3.0.5/src/media/turbid/embree/turbid_leaf_collision.h +5 -0
- less3d-3.0.5/src/media/turbid/field_device.h +82 -0
- less3d-3.0.5/src/media/turbid/fields.h +219 -0
- less3d-3.0.5/src/media/turbid/host/domain.h +1272 -0
- less3d-3.0.5/src/media/turbid/host/fields.h +1284 -0
- less3d-3.0.5/src/media/turbid/host/sampling.h +1554 -0
- less3d-3.0.5/src/media/turbid/host/state.h +1198 -0
- less3d-3.0.5/src/media/turbid/host/state_fields.cpp +279 -0
- less3d-3.0.5/src/media/turbid/leaf_scattering.h +96 -0
- less3d-3.0.5/src/media/turbid/leaf_scattering_operations.h +72 -0
- less3d-3.0.5/src/media/turbid/optix/fields.cu +554 -0
- less3d-3.0.5/src/media/turbid/optix/fields.h +40 -0
- less3d-3.0.5/src/media/turbid/optix/leaf_scattering.cuh +5 -0
- less3d-3.0.5/src/media/turbid/optix/leaf_scattering_operations.cuh +5 -0
- less3d-3.0.5/src/media/turbid/optix/sampling.cu +81 -0
- less3d-3.0.5/src/media/turbid/optix/sampling.h +18 -0
- less3d-3.0.5/src/media/turbid/optix/sampling_host.cpp +202 -0
- less3d-3.0.5/src/media/turbid/optix/state.cu +535 -0
- less3d-3.0.5/src/media/turbid/optix/state.h +108 -0
- less3d-3.0.5/src/media/turbid/optix/turbid_leaf_collision.cuh +5 -0
- less3d-3.0.5/src/media/turbid/recipe.h +25 -0
- less3d-3.0.5/src/media/turbid/sampling.h +276 -0
- less3d-3.0.5/src/media/turbid/sampling_layout.def +18 -0
- less3d-3.0.5/src/media/turbid/sampling_layout.h +45 -0
- less3d-3.0.5/src/media/turbid/sobol.h +697 -0
- less3d-3.0.5/src/media/turbid/state.h +289 -0
- less3d-3.0.5/src/media/turbid/state_fields.h +74 -0
- less3d-3.0.5/src/media/turbid/tests/aggregation_native.cpp +304 -0
- less3d-3.0.5/src/media/turbid/tests/boundary_broadphase.cpp +61 -0
- less3d-3.0.5/src/media/turbid/tests/boundary_validation.cpp +245 -0
- less3d-3.0.5/src/media/turbid/tests/domain_fixtures.h +125 -0
- less3d-3.0.5/src/media/turbid/tests/domain_native.cpp +131 -0
- less3d-3.0.5/src/media/turbid/tests/fields_native.cpp +283 -0
- less3d-3.0.5/src/media/turbid/tests/leaf_scattering_native.cpp +130 -0
- less3d-3.0.5/src/media/turbid/tests/sampling_layout.cpp +29 -0
- less3d-3.0.5/src/media/turbid/tests/sampling_native.cpp +261 -0
- less3d-3.0.5/src/media/turbid/tests/sobol.cpp +16 -0
- less3d-3.0.5/src/media/turbid/tests/state_fields_native.cpp +105 -0
- less3d-3.0.5/src/media/turbid/tests/state_native.cpp +263 -0
- less3d-3.0.5/src/media/turbid/turbid_leaf_collision.h +302 -0
- less3d-3.0.5/src/media/turbid/turbid_medium.h +8 -0
- less3d-3.0.5/src/media/turbid/vulkan/field.cpp +601 -0
- less3d-3.0.5/src/media/turbid/vulkan/field.h +66 -0
- less3d-3.0.5/src/media/turbid/vulkan/field_assemble.slang +423 -0
- less3d-3.0.5/src/media/turbid/vulkan/field_lookup.slang +117 -0
- less3d-3.0.5/src/media/turbid/vulkan/leaf_scattering.slang +71 -0
- less3d-3.0.5/src/media/turbid/vulkan/leaf_scattering_operations.slang +87 -0
- less3d-3.0.5/src/media/turbid/vulkan/observation_source.slang +215 -0
- less3d-3.0.5/src/media/turbid/vulkan/resident_artifact.h +135 -0
- less3d-3.0.5/src/media/turbid/vulkan/sampling.cpp +355 -0
- less3d-3.0.5/src/media/turbid/vulkan/sampling.h +18 -0
- less3d-3.0.5/src/media/turbid/vulkan/sampling.slang +68 -0
- less3d-3.0.5/src/media/turbid/vulkan/state.cpp +244 -0
- less3d-3.0.5/src/media/turbid/vulkan/state.h +31 -0
- less3d-3.0.5/src/media/turbid/vulkan/state.slang +92 -0
- less3d-3.0.5/src/media/turbid/vulkan/turbid_leaf_collision.slang +142 -0
- less3d-3.0.5/src/media/water/embree/phase.h +3 -0
- less3d-3.0.5/src/media/water/embree/water_column_medium.h +3 -0
- less3d-3.0.5/src/media/water/optix/phase.cuh +3 -0
- less3d-3.0.5/src/media/water/optix/water_column_medium.cuh +3 -0
- less3d-3.0.5/src/media/water/phase.h +39 -0
- less3d-3.0.5/src/media/water/vulkan/phase.slang +28 -0
- less3d-3.0.5/src/media/water/vulkan/water_column_medium.slang +38 -0
- less3d-3.0.5/src/media/water/water_column_medium.h +55 -0
- less3d-3.0.5/src/processes/CMakeLists.txt +37 -0
- less3d-3.0.5/src/processes/energy_balance/bindings.cpp +347 -0
- less3d-3.0.5/src/processes/energy_balance/energy_balance_process.h +97 -0
- less3d-3.0.5/src/processes/energy_balance/fixed_energy_balance.h +104 -0
- less3d-3.0.5/src/processes/energy_balance/joint_storage.h +279 -0
- less3d-3.0.5/src/processes/energy_balance/optix.cu +417 -0
- less3d-3.0.5/src/processes/energy_balance/process.h +149 -0
- less3d-3.0.5/src/processes/energy_balance/tests/test_native.cpp +73 -0
- less3d-3.0.5/src/processes/energy_balance/tests/turbid_native.cpp +145 -0
- less3d-3.0.5/src/processes/energy_balance/turbid.h +124 -0
- less3d-3.0.5/src/processes/energy_balance/turbid_storage.h +470 -0
- less3d-3.0.5/src/processes/energy_balance/vulkan/process.slang +87 -0
- less3d-3.0.5/src/processes/energy_balance/vulkan/turbid_assemble.slang +263 -0
- less3d-3.0.5/src/processes/photosynthesis/bindings.cpp +397 -0
- less3d-3.0.5/src/processes/photosynthesis/dynamic_photosynthesis_process.h +216 -0
- less3d-3.0.5/src/processes/photosynthesis/metadata.h +47 -0
- less3d-3.0.5/src/processes/photosynthesis/optix.cu +248 -0
- less3d-3.0.5/src/processes/photosynthesis/photosynthesis.h +166 -0
- less3d-3.0.5/src/processes/photosynthesis/process.h +634 -0
- less3d-3.0.5/src/processes/photosynthesis/tests/test_native.cpp +277 -0
- less3d-3.0.5/src/processes/photosynthesis/tests/turbid_native.cpp +173 -0
- less3d-3.0.5/src/processes/photosynthesis/turbid.h +177 -0
- less3d-3.0.5/src/processes/photosynthesis/turbid_storage.h +236 -0
- less3d-3.0.5/src/processes/photosynthesis/vulkan/process.slang +408 -0
- less3d-3.0.5/src/processes/photosynthesis/vulkan/turbid_assemble.slang +102 -0
- less3d-3.0.5/src/processes/physiology/farquhar/farquhar.h +624 -0
- less3d-3.0.5/src/processes/physiology/farquhar/tests/data/generate_scope_fvcb_reference.m +170 -0
- less3d-3.0.5/src/processes/physiology/farquhar/tests/data/scope_fvcb_scalar_reference.csv +109 -0
- less3d-3.0.5/src/processes/physiology/farquhar/tests/data/scope_fvcb_scalar_reference.meta.json +36 -0
- less3d-3.0.5/src/processes/physiology/farquhar/tests/test_farquhar_formulations.py +98 -0
- less3d-3.0.5/src/processes/physiology/farquhar/tests/test_native.cpp +359 -0
- less3d-3.0.5/src/processes/physiology/farquhar/tests/test_scope_fvcb_reference.py +85 -0
- less3d-3.0.5/src/processes/physiology/farquhar/vulkan/farquhar_leaf_solver.slang +219 -0
- less3d-3.0.5/src/processes/physiology/farquhar/vulkan/formulation.slang +2 -0
- less3d-3.0.5/src/processes/physiology/process.h +203 -0
- less3d-3.0.5/src/processes/physiology/tests/test_native.cpp +111 -0
- less3d-3.0.5/src/processes/physiology/vulkan.slang +279 -0
- less3d-3.0.5/src/processes/radiation_field/bindings.cpp +374 -0
- less3d-3.0.5/src/processes/radiation_field/radiation_field.h +137 -0
- less3d-3.0.5/src/processes/radiation_field/storage.h +485 -0
- less3d-3.0.5/src/processes/radiation_field/tests/test_native.cpp +130 -0
- less3d-3.0.5/src/processes/radiation_field/vulkan.slang +286 -0
- less3d-3.0.5/src/processes/sif/bindings.cpp +396 -0
- less3d-3.0.5/src/processes/sif/embree/sif_process.cpp +72 -0
- less3d-3.0.5/src/processes/sif/embree/sif_source_assembly.cpp +209 -0
- less3d-3.0.5/src/processes/sif/optix/sif_process.cu +165 -0
- less3d-3.0.5/src/processes/sif/optix/sif_source_assembly.cu +373 -0
- less3d-3.0.5/src/processes/sif/process.h +481 -0
- less3d-3.0.5/src/processes/sif/source_assembly.h +60 -0
- less3d-3.0.5/src/processes/sif/tests/test_native.cpp +221 -0
- less3d-3.0.5/src/processes/sif/vulkan/mesh_sif_source_assembly.slang +54 -0
- less3d-3.0.5/src/processes/sif/vulkan/sif_process.slang +52 -0
- less3d-3.0.5/src/processes/sif/vulkan/sif_process_host.cpp +664 -0
- less3d-3.0.5/src/processes/sif/vulkan/sif_source_assembly.slang +215 -0
- less3d-3.0.5/src/processes/thermo_physiology/bindings/joint_thermo_physiology_bindings.cpp +1162 -0
- less3d-3.0.5/src/processes/thermo_physiology/bindings/processes.cpp +747 -0
- less3d-3.0.5/src/processes/thermo_physiology/embree/joint_thermo_physiology.cpp +648 -0
- less3d-3.0.5/src/processes/thermo_physiology/embree/joint_thermo_physiology.h +24 -0
- less3d-3.0.5/src/processes/thermo_physiology/embree/processes.cpp +380 -0
- less3d-3.0.5/src/processes/thermo_physiology/embree/turbid_processes.cpp +209 -0
- less3d-3.0.5/src/processes/thermo_physiology/embree/turbid_processes.h +28 -0
- less3d-3.0.5/src/processes/thermo_physiology/joint_thermo_physiology.h +164 -0
- less3d-3.0.5/src/processes/thermo_physiology/optix/joint_thermo_physiology.cpp +647 -0
- less3d-3.0.5/src/processes/thermo_physiology/optix/joint_thermo_physiology.cu +393 -0
- less3d-3.0.5/src/processes/thermo_physiology/optix/joint_thermo_physiology.h +169 -0
- less3d-3.0.5/src/processes/thermo_physiology/optix/processes.cu +799 -0
- less3d-3.0.5/src/processes/thermo_physiology/optix/turbid_processes.cpp +693 -0
- less3d-3.0.5/src/processes/thermo_physiology/optix/turbid_processes.h +107 -0
- less3d-3.0.5/src/processes/thermo_physiology/radiative_coupling_controller.h +197 -0
- less3d-3.0.5/src/processes/thermo_physiology/radiative_temperature_coupling.h +144 -0
- less3d-3.0.5/src/processes/thermo_physiology/tests/test_controller.cpp +234 -0
- less3d-3.0.5/src/processes/thermo_physiology/tests/test_joint.cpp +92 -0
- less3d-3.0.5/src/processes/thermo_physiology/tests/test_temperature_coupling.cpp +148 -0
- less3d-3.0.5/src/processes/thermo_physiology/vulkan/joint_thermo_physiology.slang +426 -0
- less3d-3.0.5/src/processes/thermo_physiology/vulkan/processes_host.cpp +924 -0
- less3d-3.0.5/src/processes/thermo_physiology/vulkan/turbid_processes.cpp +148 -0
- less3d-3.0.5/src/processes/thermo_physiology/vulkan/turbid_processes.h +22 -0
- less3d-3.0.5/src/products/CMakeLists.txt +6 -0
- less3d-3.0.5/src/products/brf/brf.h +54 -0
- less3d-3.0.5/src/products/brf/embree.h +44 -0
- less3d-3.0.5/src/products/brf/optix.cuh +30 -0
- less3d-3.0.5/src/products/brf/vulkan.h +28 -0
- less3d-3.0.5/src/products/image/embree/image.cpp +69 -0
- less3d-3.0.5/src/products/image/embree/image.h +110 -0
- less3d-3.0.5/src/products/image/optix/image.cpp +38 -0
- less3d-3.0.5/src/products/image/optix/image.cuh +64 -0
- less3d-3.0.5/src/products/image/optix/image.h +20 -0
- less3d-3.0.5/src/products/image/vulkan/image.cpp +25 -0
- less3d-3.0.5/src/products/image/vulkan/image.h +14 -0
- less3d-3.0.5/src/products/image/vulkan/image.slang +67 -0
- less3d-3.0.5/src/products/irradiance_map/embree.h +78 -0
- less3d-3.0.5/src/products/irradiance_map/irradiance_map.h +85 -0
- less3d-3.0.5/src/products/irradiance_map/optix.cuh +119 -0
- less3d-3.0.5/src/products/irradiance_map/vulkan.slang +66 -0
- less3d-3.0.5/src/products/lidar_waveform/embree.h +22 -0
- less3d-3.0.5/src/products/lidar_waveform/lidar_waveform.h +45 -0
- less3d-3.0.5/src/products/lidar_waveform/optix.cuh +20 -0
- less3d-3.0.5/src/products/lidar_waveform/vulkan/layout.slang +20 -0
- less3d-3.0.5/src/products/lidar_waveform/vulkan/lidar_waveform.slang +15 -0
- less3d-3.0.5/src/products/point_cloud/embree/point_cloud.cpp +39 -0
- less3d-3.0.5/src/products/point_cloud/embree/point_cloud.h +29 -0
- less3d-3.0.5/src/products/point_cloud/host.h +158 -0
- less3d-3.0.5/src/products/point_cloud/optix/point_cloud.cu +126 -0
- less3d-3.0.5/src/products/point_cloud/optix/point_cloud.h +31 -0
- less3d-3.0.5/src/products/point_cloud/point_cloud.h +40 -0
- less3d-3.0.5/src/products/point_cloud/vulkan/point_cloud.cpp +35 -0
- less3d-3.0.5/src/products/point_cloud/vulkan/point_cloud.h +25 -0
- less3d-3.0.5/src/products/radiation_field/embree.h +143 -0
- less3d-3.0.5/src/products/radiation_field/optix.cuh +105 -0
- less3d-3.0.5/src/products/radiation_field/radiation_field.h +79 -0
- less3d-3.0.5/src/products/radiation_field/vulkan.slang +62 -0
- less3d-3.0.5/src/sensors/CMakeLists.txt +2 -0
- less3d-3.0.5/src/sensors/lidar/CMakeLists.txt +6 -0
- less3d-3.0.5/src/sensors/lidar/pulse_table/embree.h +2 -0
- less3d-3.0.5/src/sensors/lidar/pulse_table/optix.h +2 -0
- less3d-3.0.5/src/sensors/lidar/pulse_table/pulse_table.h +32 -0
- less3d-3.0.5/src/sensors/lidar/pulse_table/vulkan.slang +32 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/embree/receiver_response.cpp +25 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/embree/receiver_response.h +20 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/optix/receiver_response.cu +100 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/optix/receiver_response.h +28 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/receiver_response.h +48 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/receiver_response_host.h +46 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/vulkan/receiver_response.cpp +25 -0
- less3d-3.0.5/src/sensors/lidar/receiver_response/vulkan/receiver_response.h +20 -0
- less3d-3.0.5/src/sensors/lidar/survey/bindings.cpp +145 -0
- less3d-3.0.5/src/sensors/lidar/survey/embree.h +2 -0
- less3d-3.0.5/src/sensors/lidar/survey/optix.h +2 -0
- less3d-3.0.5/src/sensors/lidar/survey/survey.h +286 -0
- less3d-3.0.5/src/sensors/lidar/survey/vulkan.h +2 -0
- less3d-3.0.5/src/sensors/optical/CMakeLists.txt +6 -0
- less3d-3.0.5/src/sensors/optical/fisheye/embree.h +2 -0
- less3d-3.0.5/src/sensors/optical/fisheye/fisheye.h +60 -0
- less3d-3.0.5/src/sensors/optical/fisheye/optix.h +2 -0
- less3d-3.0.5/src/sensors/optical/fisheye/tests/test_native.cpp +45 -0
- less3d-3.0.5/src/sensors/optical/fisheye/vulkan.slang +48 -0
- less3d-3.0.5/src/sensors/optical/orthographic/embree.h +2 -0
- less3d-3.0.5/src/sensors/optical/orthographic/optix.h +2 -0
- less3d-3.0.5/src/sensors/optical/orthographic/orthographic.h +44 -0
- less3d-3.0.5/src/sensors/optical/orthographic/tests/test_native.cpp +49 -0
- less3d-3.0.5/src/sensors/optical/orthographic/vulkan.slang +25 -0
- less3d-3.0.5/src/sensors/optical/perspective/embree.h +2 -0
- less3d-3.0.5/src/sensors/optical/perspective/optix.h +2 -0
- less3d-3.0.5/src/sensors/optical/perspective/perspective.h +35 -0
- less3d-3.0.5/src/sensors/optical/perspective/tests/test_native.cpp +40 -0
- less3d-3.0.5/src/sensors/optical/perspective/vulkan.slang +24 -0
- less3d-3.0.5/src/sensors/optical/pushbroom/embree.h +2 -0
- less3d-3.0.5/src/sensors/optical/pushbroom/optix.h +2 -0
- less3d-3.0.5/src/sensors/optical/pushbroom/pushbroom.h +32 -0
- less3d-3.0.5/src/sensors/optical/pushbroom/tests/test_native.cpp +41 -0
- less3d-3.0.5/src/sensors/optical/pushbroom/vulkan.slang +23 -0
- less3d-3.0.5/src/sensors/optical/spectral_response/bindings.cpp +90 -0
- less3d-3.0.5/src/sensors/optical/spectral_response/embree.h +2 -0
- less3d-3.0.5/src/sensors/optical/spectral_response/optix.h +2 -0
- less3d-3.0.5/src/sensors/optical/spectral_response/spectral_response.h +192 -0
- less3d-3.0.5/src/sensors/optical/spectral_response/vulkan.h +2 -0
- less3d-3.0.5/src/surfaces/CMakeLists.txt +11 -0
- less3d-3.0.5/src/surfaces/dielectric_water_boundary/dielectric_water_boundary.h +99 -0
- less3d-3.0.5/src/surfaces/dielectric_water_boundary/embree.h +3 -0
- less3d-3.0.5/src/surfaces/dielectric_water_boundary/optix.cuh +3 -0
- less3d-3.0.5/src/surfaces/dielectric_water_boundary/vulkan.slang +79 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/compile.h +41 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/diffuse_transmitter.h +125 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/embree.h +13 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/optix.cuh +65 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/tests/test_api.py +18 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/tests/test_lidar_parity.py +73 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/tests/test_native.cpp +59 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/tests/test_texture_science.py +197 -0
- less3d-3.0.5/src/surfaces/diffuse_transmitter/vulkan.slang +294 -0
- less3d-3.0.5/src/surfaces/lambertian/compile.h +43 -0
- less3d-3.0.5/src/surfaces/lambertian/embree.h +13 -0
- less3d-3.0.5/src/surfaces/lambertian/lambertian.h +62 -0
- less3d-3.0.5/src/surfaces/lambertian/optix.cuh +63 -0
- less3d-3.0.5/src/surfaces/lambertian/tests/test_api.py +17 -0
- less3d-3.0.5/src/surfaces/lambertian/tests/test_science.py +53 -0
- less3d-3.0.5/src/surfaces/lambertian/vulkan.slang +139 -0
- less3d-3.0.5/src/surfaces/microwave/bindings.cpp +200 -0
- less3d-3.0.5/src/surfaces/microwave/microwave.h +7 -0
- less3d-3.0.5/src/surfaces/microwave/mie_cylinder.h +87 -0
- less3d-3.0.5/src/surfaces/microwave/soil.h +121 -0
- less3d-3.0.5/src/surfaces/microwave/trunk_ground.h +87 -0
- less3d-3.0.5/src/surfaces/rpv/compile.h +43 -0
- less3d-3.0.5/src/surfaces/rpv/embree.h +13 -0
- less3d-3.0.5/src/surfaces/rpv/optix.cuh +66 -0
- less3d-3.0.5/src/surfaces/rpv/rpv.h +95 -0
- less3d-3.0.5/src/surfaces/rpv/tests/test_api.py +17 -0
- less3d-3.0.5/src/surfaces/rpv/tests/test_native.cpp +54 -0
- less3d-3.0.5/src/surfaces/rpv/tests/test_parity.py +81 -0
- less3d-3.0.5/src/surfaces/rpv/vulkan.slang +227 -0
- less3d-3.0.5/src/surfaces/surface_fluorescence/embree.h +15 -0
- less3d-3.0.5/src/surfaces/surface_fluorescence/optix.cuh +14 -0
- less3d-3.0.5/src/surfaces/surface_fluorescence/surface_fluorescence.h +20 -0
- less3d-3.0.5/src/surfaces/surface_fluorescence/vulkan.slang +5 -0
- less3d-3.0.5/src/surfaces/thermal_surface/embree.h +24 -0
- less3d-3.0.5/src/surfaces/thermal_surface/optix.cuh +24 -0
- less3d-3.0.5/src/surfaces/thermal_surface/thermal_surface.h +27 -0
- less3d-3.0.5/src/surfaces/thermal_surface/vulkan.slang +63 -0
- less3d-3.0.5/src/surfaces/water/compile.h +54 -0
- less3d-3.0.5/src/surfaces/water/embree.h +68 -0
- less3d-3.0.5/src/surfaces/water/optix.cuh +69 -0
- less3d-3.0.5/src/surfaces/water/tests/test_api.py +170 -0
- less3d-3.0.5/src/surfaces/water/tests/test_benchmark.py +75 -0
- less3d-3.0.5/src/surfaces/water/tests/test_native.cpp +133 -0
- less3d-3.0.5/src/surfaces/water/tests/test_native.py +197 -0
- less3d-3.0.5/src/surfaces/water/tests/test_surface.py +101 -0
- less3d-3.0.5/src/surfaces/water/vulkan.slang +381 -0
- less3d-3.0.5/src/surfaces/water/water.h +355 -0
- less3d-3.0.5/src/transport/domain_partition/domain_partition.h +141 -0
- less3d-3.0.5/src/transport/domain_partition/tests/test_native.cpp +60 -0
- less3d-3.0.5/src/transport/domain_partition/vulkan.slang +123 -0
- less3d-3.0.5/src/transport/emitter_data.h +53 -0
- less3d-3.0.5/src/transport/illumination.h +46 -0
- less3d-3.0.5/src/transport/illumination.slang +10 -0
- less3d-3.0.5/src/transport/integrator.h +9 -0
- less3d-3.0.5/src/transport/integrator.slang +6 -0
- less3d-3.0.5/src/transport/lidar_data.h +69 -0
- less3d-3.0.5/src/transport/medium.h +56 -0
- less3d-3.0.5/src/transport/medium.slang +43 -0
- less3d-3.0.5/src/transport/phase.h +47 -0
- less3d-3.0.5/src/transport/phase.slang +13 -0
- less3d-3.0.5/src/transport/product.h +37 -0
- less3d-3.0.5/src/transport/product.slang +6 -0
- less3d-3.0.5/src/transport/ray_differential.h +38 -0
- less3d-3.0.5/src/transport/scientific_process.h +22 -0
- less3d-3.0.5/src/transport/scientific_process.slang +9 -0
- less3d-3.0.5/src/transport/sensor.h +55 -0
- less3d-3.0.5/src/transport/sensor.slang +20 -0
- less3d-3.0.5/src/transport/sensor_data.h +58 -0
- less3d-3.0.5/src/transport/source_composition/bindings.cpp +86 -0
- less3d-3.0.5/src/transport/source_composition/source_composition.h +98 -0
- less3d-3.0.5/src/transport/source_composition/tests/test_native.cpp +34 -0
- less3d-3.0.5/src/transport/source_composition/vulkan.slang +33 -0
- less3d-3.0.5/src/transport/surface.h +80 -0
- less3d-3.0.5/src/transport/surface.slang +58 -0
- less3d-3.0.5/src/transport/surface_closure/surface_closure.h +30 -0
- less3d-3.0.5/src/transport/surface_closure/vulkan.slang +23 -0
- less3d-3.0.5/src/transport/surface_emission/surface_emission.h +30 -0
- less3d-3.0.5/src/transport/surface_emission/vulkan.slang +8 -0
- less3d-3.0.5/src/transport/volume_event/embree.h +5 -0
- less3d-3.0.5/src/transport/volume_event/optix.cuh +5 -0
- less3d-3.0.5/src/transport/volume_event/tests/test_native.cpp +43 -0
- less3d-3.0.5/src/transport/volume_event/volume_event.h +86 -0
- less3d-3.0.5/src/transport/volume_event/vulkan.slang +79 -0
- less3d-3.0.5/tests/README.md +120 -0
- less3d-3.0.5/tests/_native_test_support.py +7 -0
- less3d-3.0.5/tests/_test_manifest.py +932 -0
- less3d-3.0.5/tests/_test_support.py +166 -0
- less3d-3.0.5/tests/api/test_texture_api_contract.py +153 -0
- less3d-3.0.5/tests/architecture/portable_debt.toml +3 -0
- less3d-3.0.5/tests/architecture/test_acquisition_geometry_orthographic.py +29 -0
- less3d-3.0.5/tests/architecture/test_acquisition_geometry_passive_remaining.py +32 -0
- less3d-3.0.5/tests/architecture/test_acquisition_lidar_pulse_table.py +35 -0
- less3d-3.0.5/tests/architecture/test_acquisition_lidar_survey.py +37 -0
- less3d-3.0.5/tests/architecture/test_acquisition_recipe_dispatch.py +51 -0
- less3d-3.0.5/tests/architecture/test_active_emitter_lidar_pulse.py +54 -0
- less3d-3.0.5/tests/architecture/test_backend_descriptors.py +49 -0
- less3d-3.0.5/tests/architecture/test_backend_kernel_resource_layout.py +56 -0
- less3d-3.0.5/tests/architecture/test_backward_direct_solar_closure_dispatch.py +74 -0
- less3d-3.0.5/tests/architecture/test_backward_integrator_progression.py +78 -0
- less3d-3.0.5/tests/architecture/test_backward_recipe_composition.py +89 -0
- less3d-3.0.5/tests/architecture/test_boundary_illumination_sun_sky.py +78 -0
- less3d-3.0.5/tests/architecture/test_brf_recipe_estimator_contract.py +89 -0
- less3d-3.0.5/tests/architecture/test_compiler_ir.py +319 -0
- less3d-3.0.5/tests/architecture/test_continuous_participating_medium.py +35 -0
- less3d-3.0.5/tests/architecture/test_embree_radiation_field_memory_policy.py +24 -0
- less3d-3.0.5/tests/architecture/test_embree_state_field_fluorescence_closure.py +65 -0
- less3d-3.0.5/tests/architecture/test_embree_state_field_temperature_closure.py +37 -0
- less3d-3.0.5/tests/architecture/test_energy_balance_surface_category_dispatch.py +32 -0
- less3d-3.0.5/tests/architecture/test_extensible_refactor_baseline.py +232 -0
- less3d-3.0.5/tests/architecture/test_extension_ownership.py +55 -0
- less3d-3.0.5/tests/architecture/test_field_combination_capabilities.py +137 -0
- less3d-3.0.5/tests/architecture/test_field_ir.py +223 -0
- less3d-3.0.5/tests/architecture/test_field_program_execution_identity.py +88 -0
- less3d-3.0.5/tests/architecture/test_field_program_requirements_ir.py +125 -0
- less3d-3.0.5/tests/architecture/test_field_workflow_closure_gate.py +104 -0
- less3d-3.0.5/tests/architecture/test_forward_integrator_event_contract.py +73 -0
- less3d-3.0.5/tests/architecture/test_homogeneous_water_lidar_contract.py +49 -0
- less3d-3.0.5/tests/architecture/test_illumination_category_source_layout.py +73 -0
- less3d-3.0.5/tests/architecture/test_integrator_category_source_layout.py +56 -0
- less3d-3.0.5/tests/architecture/test_invalid_closure_energy_fail_closed.py +27 -0
- less3d-3.0.5/tests/architecture/test_legacy_turbid_dynamic_removed.py +131 -0
- less3d-3.0.5/tests/architecture/test_medium_category_source_layout.py +86 -0
- less3d-3.0.5/tests/architecture/test_medium_closure_turbid_leaf.py +43 -0
- less3d-3.0.5/tests/architecture/test_medium_event_composition.py +30 -0
- less3d-3.0.5/tests/architecture/test_medium_region_stack.py +29 -0
- less3d-3.0.5/tests/architecture/test_microwave_acquisition_recipe_dispatch.py +27 -0
- less3d-3.0.5/tests/architecture/test_native_artifact_identity.py +69 -0
- less3d-3.0.5/tests/architecture/test_native_module_isolation.py +292 -0
- less3d-3.0.5/tests/architecture/test_no_legacy_native_dispatch.py +74 -0
- less3d-3.0.5/tests/architecture/test_optix_dynamic_spectrum_policy.py +56 -0
- less3d-3.0.5/tests/architecture/test_optix_forward_dynamic_spectrum_policy.py +36 -0
- less3d-3.0.5/tests/architecture/test_optix_pipeline_specialization.py +217 -0
- less3d-3.0.5/tests/architecture/test_optix_state_field_fluorescence_closure.py +80 -0
- less3d-3.0.5/tests/architecture/test_optix_state_field_temperature_closure.py +68 -0
- less3d-3.0.5/tests/architecture/test_phase_category_source_layout.py +87 -0
- less3d-3.0.5/tests/architecture/test_phase_function_turbid_leaf.py +77 -0
- less3d-3.0.5/tests/architecture/test_phase_function_turbid_lidar_moment.py +47 -0
- less3d-3.0.5/tests/architecture/test_phase_function_turbid_operations.py +66 -0
- less3d-3.0.5/tests/architecture/test_physiology_farquhar_component.py +54 -0
- less3d-3.0.5/tests/architecture/test_plugin_manager.py +451 -0
- less3d-3.0.5/tests/architecture/test_plugin_workflows.py +181 -0
- less3d-3.0.5/tests/architecture/test_process_category_source_layout.py +68 -0
- less3d-3.0.5/tests/architecture/test_process_contract_leaf_includes.py +53 -0
- less3d-3.0.5/tests/architecture/test_process_graph_contract.py +210 -0
- less3d-3.0.5/tests/architecture/test_product_category_source_layout.py +58 -0
- less3d-3.0.5/tests/architecture/test_product_image.py +107 -0
- less3d-3.0.5/tests/architecture/test_product_irradiance_map.py +61 -0
- less3d-3.0.5/tests/architecture/test_product_lidar_waveform.py +34 -0
- less3d-3.0.5/tests/architecture/test_product_point_cloud.py +38 -0
- less3d-3.0.5/tests/architecture/test_product_radiation_field.py +57 -0
- less3d-3.0.5/tests/architecture/test_production_boundaries.py +794 -0
- less3d-3.0.5/tests/architecture/test_program_recipe_ir.py +208 -0
- less3d-3.0.5/tests/architecture/test_program_variant_inventory.py +71 -0
- less3d-3.0.5/tests/architecture/test_public_native_logging.py +16 -0
- less3d-3.0.5/tests/architecture/test_radiation_field_float_accumulation_policy.py +40 -0
- less3d-3.0.5/tests/architecture/test_radiative_coupling_component.py +53 -0
- less3d-3.0.5/tests/architecture/test_recipe_inspection.py +62 -0
- less3d-3.0.5/tests/architecture/test_registered_brf_workflow.py +137 -0
- less3d-3.0.5/tests/architecture/test_registered_emission_imaging_workflows.py +112 -0
- less3d-3.0.5/tests/architecture/test_registered_forward_workflows.py +117 -0
- less3d-3.0.5/tests/architecture/test_registered_lidar_workflow.py +98 -0
- less3d-3.0.5/tests/architecture/test_registered_microwave_workflows.py +122 -0
- less3d-3.0.5/tests/architecture/test_registered_optical_workflow.py +111 -0
- less3d-3.0.5/tests/architecture/test_registered_process_workflows.py +202 -0
- less3d-3.0.5/tests/architecture/test_registry_foundation.py +131 -0
- less3d-3.0.5/tests/architecture/test_response_lidar_receiver.py +38 -0
- less3d-3.0.5/tests/architecture/test_response_spectral_bands.py +33 -0
- less3d-3.0.5/tests/architecture/test_runtime_session.py +131 -0
- less3d-3.0.5/tests/architecture/test_scene_domain_partition_compile.py +79 -0
- less3d-3.0.5/tests/architecture/test_scene_solve_process_graph.py +107 -0
- less3d-3.0.5/tests/architecture/test_sensor_category_source_layout.py +117 -0
- less3d-3.0.5/tests/architecture/test_serialization_codec_registry.py +124 -0
- less3d-3.0.5/tests/architecture/test_source_composition_passive.py +127 -0
- less3d-3.0.5/tests/architecture/test_source_layout_contract.py +174 -0
- less3d-3.0.5/tests/architecture/test_source_layout_simplification_complete.py +132 -0
- less3d-3.0.5/tests/architecture/test_state_field_registry_provenance.py +70 -0
- less3d-3.0.5/tests/architecture/test_surface_category_source_layout.py +126 -0
- less3d-3.0.5/tests/architecture/test_surface_emission_fluorescence.py +72 -0
- less3d-3.0.5/tests/architecture/test_surface_emission_thermal.py +88 -0
- less3d-3.0.5/tests/architecture/test_texture_no_representative_fallback.py +23 -0
- less3d-3.0.5/tests/architecture/test_time_resolved_active_integrator.py +182 -0
- less3d-3.0.5/tests/architecture/test_time_resolved_active_timeline.py +85 -0
- less3d-3.0.5/tests/architecture/test_transport_domain_partition.py +66 -0
- less3d-3.0.5/tests/architecture/test_turbid_aggregation_component.py +35 -0
- less3d-3.0.5/tests/architecture/test_turbid_domain_component.py +38 -0
- less3d-3.0.5/tests/architecture/test_turbid_energy_balance_process_component.py +50 -0
- less3d-3.0.5/tests/architecture/test_turbid_field_component.py +34 -0
- less3d-3.0.5/tests/architecture/test_turbid_radiation_process_component.py +44 -0
- less3d-3.0.5/tests/architecture/test_turbid_sampling_foundation_component.py +26 -0
- less3d-3.0.5/tests/architecture/test_turbid_state_component.py +41 -0
- less3d-3.0.5/tests/architecture/test_turbid_state_field_publication.py +59 -0
- less3d-3.0.5/tests/architecture/test_turbid_static_physiology_process_component.py +45 -0
- less3d-3.0.5/tests/architecture/test_volume_event_contract.py +75 -0
- less3d-3.0.5/tests/architecture/test_vulkan_field_profile_specialization.py +234 -0
- less3d-3.0.5/tests/architecture/test_vulkan_readback_memory_policy.py +25 -0
- less3d-3.0.5/tests/architecture/test_vulkan_shader_include_dependencies.py +34 -0
- less3d-3.0.5/tests/architecture/test_vulkan_state_field_fluorescence_closure.py +69 -0
- less3d-3.0.5/tests/architecture/test_vulkan_state_field_temperature_closure.py +76 -0
- less3d-3.0.5/tests/architecture/test_vulkan_turbid_pipeline_policy.py +52 -0
- less3d-3.0.5/tests/architecture/test_vulkan_wavefront_allocation_policy.py +24 -0
- less3d-3.0.5/tests/architecture/test_vulkan_wavefront_diffuse_profile_policy.py +29 -0
- less3d-3.0.5/tests/architecture/test_vulkan_wavefront_fused_path_policy.py +38 -0
- less3d-3.0.5/tests/architecture/test_water_surface_source_layout.py +124 -0
- less3d-3.0.5/tests/architecture/test_workflow_pipeline_ownership.py +119 -0
- less3d-3.0.5/tests/architecture/test_workflow_registry_authority.py +438 -0
- less3d-3.0.5/tests/assets/flux_internal_boundary.obj +8 -0
- less3d-3.0.5/tests/assets/flux_tiny_outside_boundary.obj +8 -0
- less3d-3.0.5/tests/assets/vulkan_mw_slab.obj +22 -0
- less3d-3.0.5/tests/assets/vulkan_mw_trunk.obj +34 -0
- less3d-3.0.5/tests/assets/vulkan_triangle.obj +7 -0
- less3d-3.0.5/tests/atmosphere/test_atmospheric_sensor_paths.py +564 -0
- less3d-3.0.5/tests/atmosphere/test_illumination_composition.py +163 -0
- less3d-3.0.5/tests/atmosphere/test_native_atmosphere.py +971 -0
- less3d-3.0.5/tests/data/extensible_architecture_3_0_1.json +25 -0
- less3d-3.0.5/tests/data/modular_native_architecture_v3_0_4.json +143 -0
- less3d-3.0.5/tests/docs/test_bilingual_tutorials.py +169 -0
- less3d-3.0.5/tests/docs/test_public_release_docs.py +197 -0
- less3d-3.0.5/tests/docs/test_turbid_tutorials.py +111 -0
- less3d-3.0.5/tests/energy_balance/README.md +19 -0
- less3d-3.0.5/tests/energy_balance/run_checkpoint.py +257 -0
- less3d-3.0.5/tests/energy_balance/test_ground_heat_fraction_native.py +51 -0
- less3d-3.0.5/tests/energy_balance/test_joint_embree.py +296 -0
- less3d-3.0.5/tests/energy_balance/test_joint_farquhar_formulations.py +201 -0
- less3d-3.0.5/tests/energy_balance/test_joint_optix.py +43 -0
- less3d-3.0.5/tests/energy_balance/test_joint_performance.py +45 -0
- less3d-3.0.5/tests/energy_balance/test_joint_process_contract.py +108 -0
- less3d-3.0.5/tests/energy_balance/test_joint_public_products.py +83 -0
- less3d-3.0.5/tests/energy_balance/test_joint_scene_compilation.py +266 -0
- less3d-3.0.5/tests/energy_balance/test_joint_scientific_release.py +79 -0
- less3d-3.0.5/tests/energy_balance/test_joint_sunlit_shaded_mesh.py +65 -0
- less3d-3.0.5/tests/energy_balance/test_joint_transaction.py +207 -0
- less3d-3.0.5/tests/energy_balance/test_joint_vulkan.py +52 -0
- less3d-3.0.5/tests/energy_balance/test_joint_without_turbid.py +688 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_0_scaffolding.py +268 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_1_solver.py +314 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_2_primitive_buffers.py +193 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_3_temperature_buffer.py +249 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_4_kernel.py +156 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_mesh_refine.py +132 -0
- less3d-3.0.5/tests/energy_balance/test_phase1_thermal_product.py +175 -0
- less3d-3.0.5/tests/energy_balance/test_phase3_0_infrastructure.py +470 -0
- less3d-3.0.5/tests/energy_balance/test_radiation_sunlit_face_orientation.py +101 -0
- less3d-3.0.5/tests/energy_balance/test_representation_specific_routes.py +86 -0
- less3d-3.0.5/tests/energy_balance/test_scope_aerodynamic_resistance.py +73 -0
- less3d-3.0.5/tests/energy_balance/test_task5_static_mixed_product_live.py +99 -0
- less3d-3.0.5/tests/energy_balance/test_terrain_two_sided.py +331 -0
- less3d-3.0.5/tests/energy_balance/test_turbid_component_energy_balance.py +655 -0
- less3d-3.0.5/tests/energy_balance/test_vulkan_radiation_roulette_parity.py +65 -0
- less3d-3.0.5/tests/fixtures/component_extension/CMakeLists.txt +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/contracts/surface_closure/shared/surface_closure_contract.h +3 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/contracts/surface_closure/tests/surface_closure_contract.fixture +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/with_reference/embree/consumer.cpp +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/with_reference/optix/consumer.cu +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/with_reference/tests/with_reference.fixture +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/with_reference/vulkan/consumer.cpp +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/without_reference/embree/consumer.cpp +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/without_reference/optix/consumer.cu +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/without_reference/tests/without_reference.fixture +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/integrator/without_reference/vulkan/consumer.cpp +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/surface/reference_leaf/embree/reference_leaf.h +7 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/surface/reference_leaf/optix/reference_leaf.cuh +7 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/surface/reference_leaf/shared/reference_leaf.h +5 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/surface/reference_leaf/tests/reference_leaf_backends.fixture +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/surface/reference_leaf/tests/reference_leaf_contract.fixture +1 -0
- less3d-3.0.5/tests/fixtures/component_extension/components/surface/reference_leaf/vulkan/reference_leaf.slang +5 -0
- less3d-3.0.5/tests/fixtures/component_extension/tests/_test_manifest.py +2 -0
- less3d-3.0.5/tests/io/test_obj_mtl_texture_warning.py +66 -0
- less3d-3.0.5/tests/io/test_obj_uv.py +133 -0
- less3d-3.0.5/tests/native/test_homogeneous_water_lidar_native.py +142 -0
- less3d-3.0.5/tests/native/test_lidar_beam_backend_parity.py +52 -0
- less3d-3.0.5/tests/native/test_lidar_field_closure.py +82 -0
- less3d-3.0.5/tests/native/test_lidar_large_launch_batching.py +54 -0
- less3d-3.0.5/tests/native/test_lidar_return_timeline.py +81 -0
- less3d-3.0.5/tests/native/test_lidar_survey_compiler.py +157 -0
- less3d-3.0.5/tests/native/test_lidar_tls_backend_parity.py +66 -0
- less3d-3.0.5/tests/native/test_medium_region_stack.py +37 -0
- less3d-3.0.5/tests/native/test_optix_dynamic_bands.py +74 -0
- less3d-3.0.5/tests/native/test_vulkan_dynamic_bands.py +57 -0
- less3d-3.0.5/tests/native/test_vulkan_lidar_waveform_throughput.py +46 -0
- less3d-3.0.5/tests/native/test_vulkan_wavefront_optical.py +55 -0
- less3d-3.0.5/tests/optical/test_backend_spectral_batch_limits.py +15 -0
- less3d-3.0.5/tests/optical/test_brf_difftrans.py +34 -0
- less3d-3.0.5/tests/optical/test_brf_forward_backward.py +30 -0
- less3d-3.0.5/tests/optical/test_brf_measurement_plane.py +46 -0
- less3d-3.0.5/tests/optical/test_brf_product_plot_order.py +43 -0
- less3d-3.0.5/tests/optical/test_brf_repetitive.py +35 -0
- less3d-3.0.5/tests/optical/test_brf_sky_photons.py +30 -0
- less3d-3.0.5/tests/optical/test_common.py +162 -0
- less3d-3.0.5/tests/optical/test_default_scattering_order.py +62 -0
- less3d-3.0.5/tests/optical/test_dynamic_multiband_backend_parity.py +55 -0
- less3d-3.0.5/tests/optical/test_embree_optical_throughput.py +86 -0
- less3d-3.0.5/tests/optical/test_embree_unchanged_reuse.py +56 -0
- less3d-3.0.5/tests/optical/test_native_srf_integration.py +92 -0
- less3d-3.0.5/tests/optical/test_native_turbid_contract.py +352 -0
- less3d-3.0.5/tests/optical/test_optical_lad.py +54 -0
- less3d-3.0.5/tests/optical/test_optical_product_contract.py +827 -0
- less3d-3.0.5/tests/optical/test_optix_dynamic_spectral_batching.py +84 -0
- less3d-3.0.5/tests/optical/test_optix_dynamic_spectral_workflows.py +127 -0
- less3d-3.0.5/tests/optical/test_optix_dynamic_spectrum_benchmark_contract.py +18 -0
- less3d-3.0.5/tests/optical/test_optix_sample_batching.py +44 -0
- less3d-3.0.5/tests/optical/test_projection_transport_parity.py +135 -0
- less3d-3.0.5/tests/optical/test_radiance_to_brf.py +39 -0
- less3d-3.0.5/tests/optical/test_scene_modifiers_release.py +335 -0
- less3d-3.0.5/tests/optical/test_sundisk.py +24 -0
- less3d-3.0.5/tests/optical/test_turbid_asymmetric_optics.py +280 -0
- less3d-3.0.5/tests/optical/test_turbid_backend_parity.py +252 -0
- less3d-3.0.5/tests/optical/test_turbid_beer_lambert.py +326 -0
- less3d-3.0.5/tests/optical/test_turbid_brf_imaging.py +219 -0
- less3d-3.0.5/tests/optical/test_turbid_forward_backend_parity.py +545 -0
- less3d-3.0.5/tests/optical/test_turbid_imaging_backend_parity.py +1287 -0
- less3d-3.0.5/tests/optical/test_turbid_overlap_boundary.py +216 -0
- less3d-3.0.5/tests/optical/test_turbid_periodic_process_scale_invariance.py +56 -0
- less3d-3.0.5/tests/optical/test_turbid_periodic_scale_invariance.py +131 -0
- less3d-3.0.5/tests/optical/test_turbid_photosynthesis.py +216 -0
- less3d-3.0.5/tests/optical/test_turbid_voxel_product.py +73 -0
- less3d-3.0.5/tests/optical/test_vulkan_unchanged_reuse.py +56 -0
- less3d-3.0.5/tests/physics/test_fluspect_band_windows.py +19 -0
- less3d-3.0.5/tests/physics/test_fluspect_basic.py +54 -0
- less3d-3.0.5/tests/physics/test_physiology_basic.py +72 -0
- less3d-3.0.5/tests/physiology/test_absorption_driver_compilation.py +104 -0
- less3d-3.0.5/tests/physiology/test_absorption_partitions.py +168 -0
- less3d-3.0.5/tests/physiology/test_absorption_product_semantics.py +459 -0
- less3d-3.0.5/tests/physiology/test_farquhar_product_metadata.py +660 -0
- less3d-3.0.5/tests/physiology/test_joint_phi_f_contract.py +853 -0
- less3d-3.0.5/tests/physiology/test_mesh_absorption_driver.py +286 -0
- less3d-3.0.5/tests/physiology/test_mesh_farquhar_formulations.py +335 -0
- less3d-3.0.5/tests/physiology/test_turbid_absorption_driver.py +439 -0
- less3d-3.0.5/tests/physiology/test_turbid_farquhar_formulations.py +377 -0
- less3d-3.0.5/tests/reference/__init__.py +1 -0
- less3d-3.0.5/tests/reference/portable_energy_balance.py +398 -0
- less3d-3.0.5/tests/reference/portable_microwave.py +1524 -0
- less3d-3.0.5/tests/reference/portable_ray_query.py +194 -0
- less3d-3.0.5/tests/reference/portable_turbid_rrt.py +974 -0
- less3d-3.0.5/tests/reference/portable_turbid_transport.py +1270 -0
- less3d-3.0.5/tests/release/test_cross_device_math_portability.py +25 -0
- less3d-3.0.5/tests/release/test_linux_stash_safety.py +133 -0
- less3d-3.0.5/tests/release/test_native_dependency_audit.py +170 -0
- less3d-3.0.5/tests/release/test_optix_ir_packaging.py +55 -0
- less3d-3.0.5/tests/release/test_public_release_metadata.py +51 -0
- less3d-3.0.5/tests/release/test_sdist_payload_policy.py +31 -0
- less3d-3.0.5/tests/release/test_vulkan_artifact_install_contract.py +25 -0
- less3d-3.0.5/tests/release/test_windows_wheel_payload_identity.py +104 -0
- less3d-3.0.5/tests/release/verify_installed_package.py +129 -0
- less3d-3.0.5/tests/run_all_tests.py +11 -0
- less3d-3.0.5/tests/run_tests.py +350 -0
- less3d-3.0.5/tests/serialization/test_texture_roundtrip.py +116 -0
- less3d-3.0.5/tests/sif/README.md +14 -0
- less3d-3.0.5/tests/sif/test_fluspect_band_response.py +105 -0
- less3d-3.0.5/tests/sif/test_mesh_sif_state_field_backends.py +70 -0
- less3d-3.0.5/tests/sif/test_sif_imager.py +247 -0
- less3d-3.0.5/tests/sif/test_sif_process_dynamic.py +244 -0
- less3d-3.0.5/tests/sif/test_sif_process_static.py +207 -0
- less3d-3.0.5/tests/sif/test_turbid_sif_observation_throughput.py +96 -0
- less3d-3.0.5/tests/sif/test_turbid_sif_process.py +471 -0
- less3d-3.0.5/tests/test_backend_capabilities.py +983 -0
- less3d-3.0.5/tests/test_backend_embree_parity.py +192 -0
- less3d-3.0.5/tests/test_backend_process_parity.py +765 -0
- less3d-3.0.5/tests/test_backend_runtime.py +526 -0
- less3d-3.0.5/tests/test_backend_vulkan_context.py +951 -0
- less3d-3.0.5/tests/test_backend_vulkan_microwave.py +570 -0
- less3d-3.0.5/tests/test_dynamic_instances_release.py +169 -0
- less3d-3.0.5/tests/test_end_to_end_satellite.py +446 -0
- less3d-3.0.5/tests/test_local_service.py +80 -0
- less3d-3.0.5/tests/test_matplotlib_compat.py +26 -0
- less3d-3.0.5/tests/test_measures.py +279 -0
- less3d-3.0.5/tests/test_mueller_integrator.py +188 -0
- less3d-3.0.5/tests/test_mw_bare_soil.py +319 -0
- less3d-3.0.5/tests/test_mw_hg_phase.py +370 -0
- less3d-3.0.5/tests/test_native_dynamic_photosynthesis_process.py +171 -0
- less3d-3.0.5/tests/test_native_energy_balance_process.py +260 -0
- less3d-3.0.5/tests/test_native_execution_identity.py +256 -0
- less3d-3.0.5/tests/test_native_mesh_sif_source_assembly.py +111 -0
- less3d-3.0.5/tests/test_native_photosynthesis_process.py +121 -0
- less3d-3.0.5/tests/test_native_physiology_solver.py +167 -0
- less3d-3.0.5/tests/test_native_process_execution.py +81 -0
- less3d-3.0.5/tests/test_native_sif_process.py +97 -0
- less3d-3.0.5/tests/test_native_sif_source_assembly.py +100 -0
- less3d-3.0.5/tests/test_optix_pipeline_lifecycle.py +176 -0
- less3d-3.0.5/tests/test_photosynthesis_temperature_input.py +296 -0
- less3d-3.0.5/tests/test_precompute_mueller.py +121 -0
- less3d-3.0.5/tests/test_project_management.py +87 -0
- less3d-3.0.5/tests/test_public_feature_evidence.py +112 -0
- less3d-3.0.5/tests/test_rayleigh_cylinder.py +274 -0
- less3d-3.0.5/tests/test_rayleigh_disc.py +243 -0
- less3d-3.0.5/tests/test_release_stability.py +108 -0
- less3d-3.0.5/tests/test_serialize_absorption.py +190 -0
- less3d-3.0.5/tests/test_sif_photosynthesis_release.py +126 -0
- less3d-3.0.5/tests/test_test_runner.py +125 -0
- less3d-3.0.5/tests/test_thermal_release.py +127 -0
- less3d-3.0.5/tests/test_trunk_geometry.py +150 -0
- less3d-3.0.5/tests/test_trunk_mueller_lut.py +142 -0
- less3d-3.0.5/tests/test_turbid_boundary_api.py +158 -0
- less3d-3.0.5/tests/test_turbid_boundary_validation.py +258 -0
- less3d-3.0.5/tests/test_turbid_irradiance_lai.py +380 -0
- less3d-3.0.5/tests/test_turbid_lidar.py +342 -0
- less3d-3.0.5/tests/test_viewer_terrain.py +30 -0
- less3d-3.0.5/tests/texture/test_absorption_partition_field.py +109 -0
- less3d-3.0.5/tests/texture/test_absorption_partition_radiation_field.py +108 -0
- less3d-3.0.5/tests/texture/test_brf_scene_reuse.py +49 -0
- less3d-3.0.5/tests/texture/test_categorical_texture_lookup.py +169 -0
- less3d-3.0.5/tests/texture/test_field_program_performance_contract.py +106 -0
- less3d-3.0.5/tests/texture/test_forward_flux_uv_texture.py +97 -0
- less3d-3.0.5/tests/texture/test_geotiff_texture_loading.py +120 -0
- less3d-3.0.5/tests/texture/test_geotiff_tiled_residency.py +238 -0
- less3d-3.0.5/tests/texture/test_irradiance_map_scene_reuse.py +50 -0
- less3d-3.0.5/tests/texture/test_level0_uv_texture.py +79 -0
- less3d-3.0.5/tests/texture/test_lidar_request_cache.py +72 -0
- less3d-3.0.5/tests/texture/test_lidar_uv_texture.py +116 -0
- less3d-3.0.5/tests/texture/test_lstex_format.py +126 -0
- less3d-3.0.5/tests/texture/test_lstex_runtime_cache.py +68 -0
- less3d-3.0.5/tests/texture/test_mip_builder.py +60 -0
- less3d-3.0.5/tests/texture/test_optix_texture_codegen_budget.py +75 -0
- less3d-3.0.5/tests/texture/test_photosynthesis_absorption_partition_field.py +132 -0
- less3d-3.0.5/tests/texture/test_photosynthesis_uv_texture_inheritance.py +118 -0
- less3d-3.0.5/tests/texture/test_radiation_process_absorbed_contract.py +99 -0
- less3d-3.0.5/tests/texture/test_radiation_process_input_cache.py +80 -0
- less3d-3.0.5/tests/texture/test_radiation_process_many_bands.py +90 -0
- less3d-3.0.5/tests/texture/test_radiation_process_rgb_texture.py +83 -0
- less3d-3.0.5/tests/texture/test_radiation_process_uv_texture.py +87 -0
- less3d-3.0.5/tests/texture/test_radiation_uv_texture.py +83 -0
- less3d-3.0.5/tests/texture/test_rgb_lidar_texture.py +117 -0
- less3d-3.0.5/tests/texture/test_rgb_uv_texture.py +105 -0
- less3d-3.0.5/tests/texture/test_sampled_spectral_domain.py +85 -0
- less3d-3.0.5/tests/texture/test_sif_absorption_partition_field.py +98 -0
- less3d-3.0.5/tests/texture/test_sif_process_texture_inheritance.py +89 -0
- less3d-3.0.5/tests/texture/test_terrain_rejects_uv_texture.py +35 -0
- less3d-3.0.5/tests/texture/test_texture_component_default.py +173 -0
- less3d-3.0.5/tests/texture/test_texture_energy_policy.py +89 -0
- less3d-3.0.5/tests/texture/test_texture_mip_semantics.py +43 -0
- less3d-3.0.5/tests/texture/test_texture_nodata_semantics.py +51 -0
- less3d-3.0.5/tests/texture/test_texture_update_reuse.py +92 -0
- less3d-3.0.5/tests/texture/test_thermal_field_science.py +142 -0
- less3d-3.0.5/tests/texture/test_thermal_uv_texture.py +115 -0
- less3d-3.0.5/tests/texture/test_trilinear_footprint_antialias.py +151 -0
- less3d-3.0.5/tests/texture/test_turbid_process_field_identity.py +81 -0
- less3d-3.0.5/tests/texture/test_turbid_rejects_uv_texture.py +54 -0
- less3d-3.0.5/tests/texture/test_turbid_world_xy_texture.py +156 -0
- less3d-3.0.5/tests/texture/test_uv_seam_image.py +94 -0
- less3d-3.0.5/tests/texture/test_vulkan_texture_codegen_budget.py +153 -0
- less3d-3.0.5/tests/texture/test_world_xy_mapping_contract.py +144 -0
- less3d-3.0.5/tests/texture/test_world_xy_texture.py +150 -0
- less3d-3.0.5/tests/turbid/fixtures/corrupt_output_turbid_sampling.slang +31 -0
- less3d-3.0.5/tests/turbid/fixtures/wrong_abi_turbid_sampling.slang +11 -0
- less3d-3.0.5/tests/turbid/fixtures/wrong_order_turbid_sampling.slang +33 -0
- less3d-3.0.5/tests/turbid/test_batch_a_lifecycle.py +143 -0
- less3d-3.0.5/tests/turbid/test_batch_a_review_closure.py +872 -0
- less3d-3.0.5/tests/turbid/test_benchmark_contract.py +1192 -0
- less3d-3.0.5/tests/turbid/test_capability_graph.py +159 -0
- less3d-3.0.5/tests/turbid/test_compiled_scene_cache.py +27 -0
- less3d-3.0.5/tests/turbid/test_deterministic_sampling.py +314 -0
- less3d-3.0.5/tests/turbid/test_domain_lifecycle.py +458 -0
- less3d-3.0.5/tests/turbid/test_domain_lifecycle_fix1.py +544 -0
- less3d-3.0.5/tests/turbid/test_field_assembly_lookup.py +300 -0
- less3d-3.0.5/tests/turbid/test_field_convergence_slow.py +65 -0
- less3d-3.0.5/tests/turbid/test_lad_sampling_statistics.py +114 -0
- less3d-3.0.5/tests/turbid/test_lidar_shared_domain.py +72 -0
- less3d-3.0.5/tests/turbid/test_mixed_product_contract.py +126 -0
- less3d-3.0.5/tests/turbid/test_native_energy_balance.py +379 -0
- less3d-3.0.5/tests/turbid/test_native_radiation_field.py +390 -0
- less3d-3.0.5/tests/turbid/test_native_static_physiology.py +309 -0
- less3d-3.0.5/tests/turbid/test_passive_source_contract.py +153 -0
- less3d-3.0.5/tests/turbid/test_sampling_artifact_contract.py +332 -0
- less3d-3.0.5/tests/turbid/test_sampling_failure_identity.py +101 -0
- less3d-3.0.5/tests/turbid/test_sampling_private_api.py +50 -0
- less3d-3.0.5/tests/turbid/test_sampling_validation.py +350 -0
- less3d-3.0.5/tests/turbid/test_state_provenance_aggregation.py +338 -0
- less3d-3.0.5/tests/turbid/test_thermal_source_imaging.py +168 -0
- less3d-3.0.5/tests/turbid/turbid_sampling_test_utils.py +159 -0
- less3d-3.0.5/tests/validation/Val01_lambertian.py +108 -0
- less3d-3.0.5/tests/validation/Val02_box_canopy.py +169 -0
- less3d-3.0.5/tests/validation/Val03_depth_scan.py +186 -0
- less3d-3.0.5/tests/validation/Val03_forest.py +295 -0
- less3d-3.0.5/tests/validation/Val04_sky_diffuse.py +130 -0
- less3d-3.0.5/tests/validation/Val05_prospect.py +207 -0
- less3d-3.0.5/tests/validation/Val06_fpar.py +595 -0
- less3d-3.0.5/tests/validation/Val07_thermal_ir.py +651 -0
- less3d-3.0.5/tests/validation/Val08_mw_vegetation.py +1259 -0
- less3d-3.0.5/tests/validation/Val09_mueller_vegetation.py +339 -0
- less3d-3.0.5/tests/validation/Val10_active_mw_bare_soil.py +159 -0
- less3d-3.0.5/tests/validation/Val10b_active_mw_spm.py +210 -0
- less3d-3.0.5/tests/validation/Val11_active_mw_forest_agb.py +171 -0
- less3d-3.0.5/tests/validation/Val12_less_vs_mimics_systematic.py +372 -0
- less3d-3.0.5/tests/validation/Val12_tier4_trunk_only.py +146 -0
- less3d-3.0.5/tests/validation/Val17_turbid_mesh_photosynthesis.py +706 -0
- less3d-3.0.5/tests/validation/Val18_facet_size_convergence.py +347 -0
- less3d-3.0.5/tests/validation/Val19_facet_tessellation_invariance.py +140 -0
- less3d-3.0.5/tests/validation/Val20_mesh_sunlit_sampling_convergence.py +169 -0
- less3d-3.0.5/tests/validation/Val21_turbid_photosynthesis_release_gate.py +199 -0
- less3d-3.0.5/tests/validation/Val22_turbid_sif_convergence.py +498 -0
- less3d-3.0.5/tests/validation/Val23_dynamic_physiology_closure.py +723 -0
- less3d-3.0.5/tests/validation/Val24_native_atmosphere.py +346 -0
- less3d-3.0.5/tests/validation/Val24_turbid_explicit_leaf_convergence.py +189 -0
- less3d-3.0.5/tests/validation/Val25_satellite_end_to_end.py +205 -0
- less3d-3.0.5/tests/validation/Val26_turbid_thermal_sif_fields.py +172 -0
- less3d-3.0.5/tests/validation/Val27_real_geospatial_field_products.py +297 -0
- less3d-3.0.5/tests/validation/_mimics_harness.py +168 -0
- less3d-3.0.5/tests/validation/build_val22_sif_report.py +301 -0
- less3d-3.0.5/tests/validation/build_val23_dynamic_report.py +277 -0
- less3d-3.0.5/tests/validation/config.py +129 -0
- less3d-3.0.5/tests/validation/framework.py +1032 -0
- less3d-3.0.5/tests/validation/microwave/README.md +23 -0
- less3d-3.0.5/tests/validation/microwave/investigate_mie_cylinder.py +140 -0
- less3d-3.0.5/tests/validation/microwave/investigate_mw_stokes_rotation.py +220 -0
- less3d-3.0.5/tests/validation/microwave/investigate_mw_trunk.py +370 -0
- less3d-3.0.5/tests/validation/microwave/investigate_mw_vegetation.py +290 -0
- less3d-3.0.5/tests/validation/run_all.py +187 -0
- less3d-3.0.5/tests/validation/run_new_turbid_mesh_report.py +1234 -0
- less3d-3.0.5/tests/validation/run_val.py +207 -0
- less3d-3.0.5/tests/validation/run_val_fast.py +170 -0
- less3d-3.0.5/tests/validation/test_lidar_survey_trajectory_reference.py +159 -0
- less3d-3.0.5/tests/validation/val10_mimics_comparison.py +609 -0
- less3d-3.0.5/tests/validation/val11_build_report.py +101 -0
- less3d-3.0.5/tests/validation/val11_mimics_trunk.py +409 -0
- less3d-3.0.5/tests/validation/val12_less2_flat_compare.py +98 -0
- less3d-3.0.5/tests/validation/val12_less2_flat_sim.py +85 -0
- less3d-3.0.5/tests/validation/val12b_equal_irradiance.py +197 -0
- less3d-3.0.5/tests/validation/val12b_less2_sim_sub.py +50 -0
- less3d-3.0.5/tests/validation/val13_less2_sub.py +68 -0
- less3d-3.0.5/tests/validation/val13_multibounce.py +292 -0
- less3d-3.0.5/tests/validation/val14_gaussian_terrain.py +268 -0
- less3d-3.0.5/tests/validation/val14_less2_sub.py +57 -0
- less3d-3.0.5/tests/validation/val15_flux_gpu_vs_cpu.py +176 -0
- less3d-3.0.5/tests/validation/val16_terrain_albedo.py +166 -0
- less3d-3.0.5/tests/validation/val17_generate_forest_scenes.py +255 -0
- less3d-3.0.5/tests/validation/val_common.py +472 -0
- less3d-3.0.5/tools/architecture_inventory.py +268 -0
- less3d-3.0.5/tools/build_atmosphere_database.py +744 -0
- less3d-3.0.5/tools/generate_category_dispatch.py +345 -0
- less3d-3.0.5/tools/generate_illumination_registry.py +122 -0
- less3d-3.0.5/tools/generate_integrator_registry.py +42 -0
- less3d-3.0.5/tools/generate_medium_registry.py +58 -0
- less3d-3.0.5/tools/generate_phase_registry.py +58 -0
- less3d-3.0.5/tools/generate_process_registry.py +42 -0
- less3d-3.0.5/tools/generate_product_registry.py +42 -0
- less3d-3.0.5/tools/generate_sensor_registry.py +152 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# less-skill
|
|
2
|
+
|
|
3
|
+
AI coding assistant skill/rule for the [LESS](http://lessrt.org/) 3D radiative transfer model. It enables AI assistants (Claude Code, Cursor, Windsurf, etc.) to generate correct pyLessSDK simulation code with domain knowledge built in.
|
|
4
|
+
|
|
5
|
+
## What's included
|
|
6
|
+
|
|
7
|
+
| File | Description |
|
|
8
|
+
|------|-------------|
|
|
9
|
+
| `SKILL.md` | Core guide: architecture, workflow, key concepts, rules & restrictions |
|
|
10
|
+
| `api-reference.md` | Complete API reference for all pyLessSDK classes |
|
|
11
|
+
| `examples.md` | 16 working examples covering all simulation types |
|
|
12
|
+
| `faq.md` | 16 common domain Q&A (leaf optics, BRF, turbid vs mesh, etc.) |
|
|
13
|
+
| `helpers.py` | Validation utilities (band consistency, spp check, etc.) |
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
### Claude Code
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Clone into your project's .claude/skills directory
|
|
21
|
+
git clone https://github.com/jianboqi/less-skill .claude/skills/less-sdk
|
|
22
|
+
|
|
23
|
+
# Or clone into global skills (available to all projects)
|
|
24
|
+
git clone https://github.com/jianboqi/less-skill ~/.claude/skills/less-sdk
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Also add the LESS installation path to your project's `CLAUDE.md`:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
LESS installation directory: D:\LESS
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Then use the skill via:
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
/less-sdk create a broadleaf forest scene with LAI=3
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Cursor
|
|
40
|
+
|
|
41
|
+
Copy the content of `SKILL.md` into `.cursor/rules/less-sdk.md` in your project:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
mkdir -p .cursor/rules
|
|
45
|
+
cp less-skill/SKILL.md .cursor/rules/less-sdk.md
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Windsurf
|
|
49
|
+
|
|
50
|
+
Copy into `.windsurf/rules/`:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
mkdir -p .windsurf/rules
|
|
54
|
+
cp less-skill/SKILL.md .windsurf/rules/less-sdk.md
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Other AI Coding Tools
|
|
58
|
+
|
|
59
|
+
Most AI coding assistants support project-level instruction files. Copy `SKILL.md` (and optionally the other reference files) into the tool's designated rules/instructions directory.
|
|
60
|
+
|
|
61
|
+
## What can it do?
|
|
62
|
+
|
|
63
|
+
Once installed, your AI assistant can:
|
|
64
|
+
|
|
65
|
+
- Generate complete LESS simulation scripts from natural language descriptions
|
|
66
|
+
- Configure sensors (orthographic, perspective, fisheye, LiDAR, photon tracing, TRAC)
|
|
67
|
+
- Set up optical properties using PROSPECT-D, GSV soil, Fluspect models
|
|
68
|
+
- Build forest scenes from statistical parameters (LAI, FCC) via ForestSceneBuilder
|
|
69
|
+
- Handle batch simulations with runtime modification
|
|
70
|
+
- Avoid common pitfalls (20+ built-in rules and 14 hard restrictions)
|
|
71
|
+
- Answer domain questions about radiative transfer, BRF, LAI, fluorescence, etc.
|
|
72
|
+
|
|
73
|
+
## Requirements
|
|
74
|
+
|
|
75
|
+
- [LESS](http://lessrt.org/) installed on your system
|
|
76
|
+
- Python with NumPy (LESS ships with a bundled Python interpreter, no separate installation needed)
|
|
77
|
+
|
|
78
|
+
## License
|
|
79
|
+
|
|
80
|
+
MIT
|
|
81
|
+
|
|
82
|
+
## Citation
|
|
83
|
+
|
|
84
|
+
If LESS is used in your work, please cite:
|
|
85
|
+
|
|
86
|
+
> Qi, J., Xie, D., Yin, T., Yan, G., Gastellu-Etchegorry, J.-P., Li, L., Zhang, W., Mu, X., 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.
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: less-sdk
|
|
3
|
+
description: "Guide for using the LESS radiative transfer model via pyLessSDK. Use when the user asks to create, configure, or run LESS simulations, set up scenes with vegetation/terrain, configure sensors (orthographic, perspective, fisheye, LiDAR, TRAC, photon tracing), define optical properties, or post-process simulation results."
|
|
4
|
+
argument-hint: "[task description]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# LESS Radiative Transfer Model — pyLessSDK Guide
|
|
8
|
+
|
|
9
|
+
You are helping a user write Python code to drive the LESS (LargE-Scale remote sensing data and image simulation framework) 3D radiative transfer model using **pyLessSDK**.
|
|
10
|
+
|
|
11
|
+
The user's task: **$ARGUMENTS**
|
|
12
|
+
|
|
13
|
+
## LESS Installation Path Discovery
|
|
14
|
+
|
|
15
|
+
Before generating any code, you MUST determine where LESS is installed. Follow this priority order:
|
|
16
|
+
|
|
17
|
+
1. **Check user's AGENTS.md** for a line like `LESS installation directory: <path>` or `LESS_ROOT: <path>`
|
|
18
|
+
2. **Check environment variable** `LESS_ROOT`
|
|
19
|
+
3. **Check common locations**: `D:\LESS`, `C:\LESS`, `~/LESS`, or a path containing `lessrt`
|
|
20
|
+
4. **Ask the user** if none of the above yields a valid path
|
|
21
|
+
|
|
22
|
+
Once found, use the path consistently for both `SimulationHelper(less_dir)` and the `sys.path.insert` import.
|
|
23
|
+
|
|
24
|
+
Similarly, determine the **pyLessSDK path**:
|
|
25
|
+
- If LESS is an installed distribution: `<LESS_ROOT>/app/Python_script/pyLessSDK`
|
|
26
|
+
- If working from the source repo: `<repo_root>/Utility/Python_script/pyLessSDK`
|
|
27
|
+
|
|
28
|
+
### Bundled Python Interpreter
|
|
29
|
+
|
|
30
|
+
LESS ships with a bundled Python interpreter — users do NOT need to install Python separately:
|
|
31
|
+
- **Windows**: `<LESS_ROOT>/app/bin/python/python.exe`
|
|
32
|
+
- **Linux**: `<LESS_ROOT>/app/bin/py312_linux/bin/python`
|
|
33
|
+
|
|
34
|
+
When running simulation scripts, prefer using this bundled interpreter as it includes all required dependencies (NumPy, etc.). For example:
|
|
35
|
+
```bash
|
|
36
|
+
# Windows
|
|
37
|
+
D:\LESS\app\bin\python\python.exe my_simulation.py
|
|
38
|
+
|
|
39
|
+
# Linux
|
|
40
|
+
/opt/LESS/app/bin/py312_linux/bin/python my_simulation.py
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Tip for users**: Add this line to your project's `AGENTS.md` to avoid being asked every time:
|
|
44
|
+
```
|
|
45
|
+
LESS installation directory: D:\LESS
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Architecture Overview
|
|
49
|
+
|
|
50
|
+
LESS simulates spectral remote sensing images over heterogeneous 3D scenes. The Python SDK (`Utility/Python_script/pyLessSDK/`) orchestrates simulations by:
|
|
51
|
+
|
|
52
|
+
1. Configuring a **Scene** (landscape + terrain + illumination + sensor + observation)
|
|
53
|
+
2. Writing a JSON config (`Parameters/input.conf`) and Mitsuba XML scene files
|
|
54
|
+
3. Invoking the C++ radiative transfer core (`lessrt.exe`) via Mitsuba bindings
|
|
55
|
+
4. Post-processing outputs (radiance -> BRF, brightness temperature, LAS point clouds, etc.)
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
SimulationHelper -> Simulation -> Scene
|
|
59
|
+
|-- Landscape (objects, instances, optical properties)
|
|
60
|
+
| +-- Terrain (DEM, BRDF)
|
|
61
|
+
|-- Sensor (orthographic, perspective, fisheye, photon tracing, LiDAR, TRAC)
|
|
62
|
+
|-- Observation (viewing geometry)
|
|
63
|
+
|-- Illumination (sun position, atmosphere)
|
|
64
|
+
+-- AdvancedParams (cores, iterations)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Import Pattern
|
|
68
|
+
|
|
69
|
+
pyLessSDK is NOT installed as a package. Add its parent directory to `sys.path`:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
import sys
|
|
73
|
+
sys.path.insert(0, r"<LESS_ROOT>/Utility/Python_script/pyLessSDK")
|
|
74
|
+
# For installed LESS distribution, use:
|
|
75
|
+
# sys.path.insert(0, r"<LESS_ROOT>/app/Python_script/pyLessSDK")
|
|
76
|
+
|
|
77
|
+
from SimulationHelper import SimulationHelper
|
|
78
|
+
from Simulation import Simulation
|
|
79
|
+
from SceneObjects import SceneObject
|
|
80
|
+
from OpticalProperty import OpticalItem, OpticalItemType
|
|
81
|
+
from Sensor import SensorOrthographic, SensorPerspective, SensorFisheye, SensorPhotonTracing, SensorLiDAR, SensorTRAC
|
|
82
|
+
from Observation import ObservationOrthographic, ObservationPerspective, ObservationFisheye, ObservationPhotonTracing
|
|
83
|
+
from Illumination import Illumination, Atmosphere6S, SunPositionCalculator
|
|
84
|
+
from Terrain import TERRAIN_TYPE, TERRAIN_BRDF_TYPE
|
|
85
|
+
from PostProcessing import PostProcessing
|
|
86
|
+
from LiDAR import ALSLiDAR, TLSLiDAR, LiDARSimMode
|
|
87
|
+
from SimpleCrownGenerator import LAD, CrownShape, LeafShape, CrownGenerator
|
|
88
|
+
from Prospect5AndD import prospectD
|
|
89
|
+
from GSVSoil import GSVSoil
|
|
90
|
+
from SDKCodeGenerator import SDKCodeGenerator
|
|
91
|
+
from SDKUtility import OBJHelper, SamplingUtils
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Minimal Complete Workflow
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
import sys, os, random
|
|
98
|
+
sys.path.insert(0, r"<LESS_ROOT>/Utility/Python_script/pyLessSDK")
|
|
99
|
+
from SimulationHelper import SimulationHelper
|
|
100
|
+
from Simulation import Simulation
|
|
101
|
+
from SceneObjects import SceneObject
|
|
102
|
+
from OpticalProperty import OpticalItem
|
|
103
|
+
from Sensor import SensorOrthographic
|
|
104
|
+
from Observation import ObservationOrthographic
|
|
105
|
+
from PostProcessing import PostProcessing
|
|
106
|
+
|
|
107
|
+
# 1. Setup
|
|
108
|
+
less_dir = r"D:\LESS" # LESS installation root
|
|
109
|
+
sim_dir = r"D:\Simulations\my_sim" # simulation workspace
|
|
110
|
+
sim_helper = SimulationHelper(less_dir)
|
|
111
|
+
sim_helper.create_new_sim(sim_dir) # creates directory + default config
|
|
112
|
+
|
|
113
|
+
# 2. Load project
|
|
114
|
+
sim = Simulation(sim_dir, sim_helper)
|
|
115
|
+
sim.read_sim_project()
|
|
116
|
+
scene = sim.get_scene()
|
|
117
|
+
landscape = scene.get_landscape()
|
|
118
|
+
|
|
119
|
+
# 3. Clear defaults and add custom optical properties
|
|
120
|
+
landscape.clear_landscape_elements()
|
|
121
|
+
landscape.clear_user_defined_optical_properties()
|
|
122
|
+
op_leaf = OpticalItem("leaf_green", "0.05,0.45;0.05,0.45;0.02,0.40")
|
|
123
|
+
# name front_ref;back_ref;transmittance (per band, comma-sep)
|
|
124
|
+
landscape.add_op_item(op_leaf)
|
|
125
|
+
|
|
126
|
+
# 4. Add 3D object and place instances
|
|
127
|
+
obj = SceneObject("Birch")
|
|
128
|
+
obj.add_component_from_file(r"path/to/birch_crown.obj", "leaf_green")
|
|
129
|
+
obj.add_component_from_file(r"path/to/birch_trunk.obj", "birch_branch") # built-in op
|
|
130
|
+
landscape.add_object(obj)
|
|
131
|
+
for _ in range(50):
|
|
132
|
+
landscape.place_object("Birch", x=random.uniform(5, 95), y=random.uniform(5, 95))
|
|
133
|
+
|
|
134
|
+
# 5. Terrain
|
|
135
|
+
terrain = landscape.get_terrain()
|
|
136
|
+
terrain.set_extent_width(100)
|
|
137
|
+
terrain.set_extent_height(100)
|
|
138
|
+
terrain.set_optical("dark_soil_mollisol") # built-in soil
|
|
139
|
+
|
|
140
|
+
# 6. Sensor + Observation
|
|
141
|
+
sensor = SensorOrthographic()
|
|
142
|
+
sensor.set_spectral_bands("680:2,550:2,450:2") # R, G, B bands (center:fwhm)
|
|
143
|
+
sensor.set_image_width(512)
|
|
144
|
+
sensor.set_image_height(512)
|
|
145
|
+
sensor.set_sample_per_pixel(128)
|
|
146
|
+
scene.set_sensor(sensor)
|
|
147
|
+
scene.set_observation(ObservationOrthographic())
|
|
148
|
+
|
|
149
|
+
# 7. Illumination
|
|
150
|
+
ill = scene.get_illumination()
|
|
151
|
+
ill.set_sun_zenith(30)
|
|
152
|
+
ill.set_sun_azimuth(180)
|
|
153
|
+
|
|
154
|
+
# 8. Run
|
|
155
|
+
sim.save_sim_project()
|
|
156
|
+
sim.start()
|
|
157
|
+
|
|
158
|
+
# 9. Post-process
|
|
159
|
+
PostProcessing.radiance2brf(sim.get_sim_dir())
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## ForestSceneBuilder — Quick Forest Scene from Statistical Parameters
|
|
163
|
+
|
|
164
|
+
For users who want to generate forest scenes from high-level parameters (like PROSAIL) instead of manually specifying individual tree parameters:
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
from ForestSceneBuilder import ForestSceneBuilder, ForestType
|
|
168
|
+
from SimpleCrownGenerator import LAD
|
|
169
|
+
|
|
170
|
+
builder = ForestSceneBuilder(less_dir, output_dir, "my_sim", scene_x_size=40, scene_y_size=40)
|
|
171
|
+
builder.set_canopy_params(lai=3.0, fcc=0.6) # FCC = fractional crown cover
|
|
172
|
+
builder.set_forest_type(ForestType.BROADLEAF_NATURAL) # preset: crown shape, allometry, spacing
|
|
173
|
+
builder.build() # generates a complete LESS simulation project
|
|
174
|
+
builder.run() # runs the simulation
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**7 forest types**: `CONIFEROUS_NATURAL`, `CONIFEROUS_PLANTATION`, `BROADLEAF_NATURAL`, `BROADLEAF_PLANTATION`, `MIXED_NATURAL`, `SAVANNA`, `SHRUBLAND`
|
|
178
|
+
|
|
179
|
+
**Key features**:
|
|
180
|
+
- Automatic derivation of tree dimensions from allometric relationships (crown diameter -> height, trunk, DBH)
|
|
181
|
+
- Template tree approach: generates K template OBJs with different sizes, instances each multiple times
|
|
182
|
+
- Natural forests: crown size variance via Normal distribution + Poisson disc spacing
|
|
183
|
+
- Plantations: uniform trees + regular grid spacing with jitter
|
|
184
|
+
- Mixed forests: `builder.species_mix = {"broadleaf": 0.6, "coniferous": 0.4}`
|
|
185
|
+
- Understory grass layer: `builder.has_understory = True`
|
|
186
|
+
- PROSPECT-D leaf optics: `builder.set_optical_from_prospect(N=1.5, Cab=40, Car=8, Cw=0.01, Cm=0.009)`
|
|
187
|
+
- Triangle mesh or turbid: `builder.leaf_as_turbid = True/False`
|
|
188
|
+
- Access underlying Simulation: `sim = builder.get_simulation()` for further customization
|
|
189
|
+
|
|
190
|
+
For full ForestSceneBuilder API and examples, see `api-reference.md` and `examples.md`.
|
|
191
|
+
|
|
192
|
+
## Key Concepts
|
|
193
|
+
|
|
194
|
+
### Spectral Bands Format
|
|
195
|
+
Bands are comma-separated `wavelength:fwhm` pairs in nanometers:
|
|
196
|
+
- `"680:2,550:2,450:2"` — three bands centered at 680, 550, 450 nm, each 2 nm wide
|
|
197
|
+
- `"680,550,450"` — same centers, default width
|
|
198
|
+
|
|
199
|
+
### Optical Property Value Format
|
|
200
|
+
Semicolon-separated groups for front reflectance, back reflectance, and transmittance. Each group has comma-separated values per band:
|
|
201
|
+
```
|
|
202
|
+
"front_r1,front_r2;back_r1,back_r2;trans_r1,trans_r2"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Coordinate System
|
|
206
|
+
- Scene is a rectangle: `(0,0)` to `(width, height)` in meters
|
|
207
|
+
- Z is up (vertical)
|
|
208
|
+
- `place_object(name, x, y, z=0, rotate=0)` — positions in scene coordinates
|
|
209
|
+
|
|
210
|
+
### Built-in Optical Properties (always available)
|
|
211
|
+
- `"birch_leaf_green"` — green leaf
|
|
212
|
+
- `"birch_branch"` — bark/branch
|
|
213
|
+
- `"dark_soil_mollisol"` — dark soil
|
|
214
|
+
|
|
215
|
+
### Leaf Angle Distribution (LAD) Enum
|
|
216
|
+
Used when setting turbid medium components or ForestSceneBuilder:
|
|
217
|
+
- `LAD.UNIFORM` — Uniform distribution
|
|
218
|
+
- `LAD.SPHERICAL` — Spherical distribution
|
|
219
|
+
- `LAD.ERECTOPHILE` — Erectophile (vertical leaves)
|
|
220
|
+
- `LAD.EXTREMOPHILE` — Extremophile
|
|
221
|
+
- `LAD.PLANOPHILE` — Planophile (horizontal leaves)
|
|
222
|
+
- `LAD.PLAGIOPHILE` — Plagiophile
|
|
223
|
+
|
|
224
|
+
### Crown Shape Enum
|
|
225
|
+
- `CrownShape.CUBE`, `CrownShape.ELLIPSOID`, `CrownShape.CYLINDER`, `CrownShape.CONE`, `CrownShape.ASYMMETRIC_GAUSSIAN`
|
|
226
|
+
|
|
227
|
+
### Leaf Shape Enum
|
|
228
|
+
- `LeafShape.SQUARE`, `LeafShape.DISK`
|
|
229
|
+
|
|
230
|
+
## Optical Property Models
|
|
231
|
+
|
|
232
|
+
### PROSPECT-D (Leaf Optics)
|
|
233
|
+
```python
|
|
234
|
+
from Prospect5AndD import prospectD
|
|
235
|
+
reflectances, transmittances = prospectD(wl=[550, 680, 850], N=1.5, Cab=40, Car=8, Cw=0.01, Cm=0.009, Anth=0, BP=0)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### GSV Soil Model
|
|
239
|
+
```python
|
|
240
|
+
from GSVSoil import GSVSoil
|
|
241
|
+
gsv = GSVSoil()
|
|
242
|
+
soil_ref = gsv.get_soil_spectra_gsv3(wavelength=[550, 680, 850], c1=0.5, c2=0.1, c3=0.05, csm=-0.2)
|
|
243
|
+
# csm: moisture coefficient, recommended [-0.6, 0], 0 = dry
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Fluspect (Leaf Fluorescence)
|
|
247
|
+
Used internally when `OpticalItemType.FLUSPECT` is set. The `fluspect()` function computes leaf reflectance/transmittance with fluorescence matrices.
|
|
248
|
+
|
|
249
|
+
### FvCB Photosynthesis Model
|
|
250
|
+
```python
|
|
251
|
+
from FvCB_from_SCOPE import PhotosynthesisModel
|
|
252
|
+
model = PhotosynthesisModel(plant_type="C3", P=101325, O2=209000, Q=1000,
|
|
253
|
+
Cs_ppm=400, es=1.0, leaf_tmp_k=298.15,
|
|
254
|
+
Vcmx25=60, RdPerVcmax25=0.015,
|
|
255
|
+
BallBerrySlope=8, BallBerry0=0.01)
|
|
256
|
+
Ci_ppm, gs, A, Ag, Vc, Vs, Ve, CO2_per_electron = model.run()
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## SDKCodeGenerator — Reverse-Engineer GUI Projects
|
|
260
|
+
|
|
261
|
+
Generate Python SDK code from an existing LESS GUI simulation project:
|
|
262
|
+
|
|
263
|
+
```python
|
|
264
|
+
from SDKCodeGenerator import SDKCodeGenerator
|
|
265
|
+
gen = SDKCodeGenerator(r"D:\Simulations\my_gui_project")
|
|
266
|
+
gen.generate(r"D:\output\generated_script.py")
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
This is useful for converting GUI-created simulations into reproducible Python scripts.
|
|
270
|
+
|
|
271
|
+
## OBJHelper — Split Multi-Group OBJ Files
|
|
272
|
+
|
|
273
|
+
When an OBJ file contains multiple groups (e.g., `leaves` and `stem_branch`), use `OBJHelper.seperate_obj()` to split it into separate files so each component can have a different optical property:
|
|
274
|
+
|
|
275
|
+
```python
|
|
276
|
+
from SDKUtility import OBJHelper
|
|
277
|
+
group_paths, group_names = OBJHelper.seperate_obj(obj_path, return_group_names=True)
|
|
278
|
+
# Returns: (['path/tree_leaves.obj', 'path/tree_stem_branch.obj'], ['leaves', 'stem_branch'])
|
|
279
|
+
|
|
280
|
+
tree = SceneObject("MyTree")
|
|
281
|
+
for gpath, gname in zip(group_paths, group_names):
|
|
282
|
+
tree.add_component_from_file(gpath, "leaf_op" if "leaf" in gname else "bark_op")
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Also available: `OBJHelper.get_obj_bound(obj_path)` returns bounding box, `SamplingUtils.poisson_disc_samples(width, height, r)` generates natural tree placement positions.
|
|
286
|
+
|
|
287
|
+
For the full API reference with all classes, methods, parameters, and advanced examples, read the supporting files in this skill directory:
|
|
288
|
+
- `api-reference.md` — complete API for every class
|
|
289
|
+
- `examples.md` — working code for every simulation type (LiDAR, BRF, fisheye, batch, forest scenes, etc.)
|
|
290
|
+
- `helpers.py` — validation utilities (band consistency check, orthographic spp check, turbid boundary check, LAI computation). You can inline these functions into generated code when validation is needed.
|
|
291
|
+
- `faq.md` — common domain questions (leaf optics, BRF vs reflectance, turbid vs mesh, atmosphere, thermal, etc.). Consult when users ask physics or methodology questions.
|
|
292
|
+
|
|
293
|
+
## PROHIBITED — Do NOT Use
|
|
294
|
+
|
|
295
|
+
These are hard restrictions. Violating them will produce incorrect simulation results.
|
|
296
|
+
|
|
297
|
+
1. **NEVER use `cover_whole_scene = True`** on SensorTRAC or SensorOrthographic — this option is forbidden for these sensor types
|
|
298
|
+
2. **NEVER use `set_repetitive_scene()`** when terrain is non-planar (RASTER or MESH) — repetitive scene must be 0 (disabled) for DEM/mesh terrain
|
|
299
|
+
3. **NEVER use `enable_virtual_plane()`** on SensorOrthographic or SensorPhotonTracing — virtual plane is forbidden for these sensor types (PhotonTracing has a known bug)
|
|
300
|
+
4. **NEVER use `compute_scene_lai()` when scene contains turbid medium objects** — `landscape.compute_scene_lai()` only works for triangle mesh scenes. For turbid medium scenes, manually compute LAI as: `LAI = crown_volume * leaf_area_density * num_trees / scene_area`
|
|
301
|
+
|
|
302
|
+
## Important Defaults & Rules
|
|
303
|
+
|
|
304
|
+
1. **Orthographic sensor view region must match scene extent** — when the user does not explicitly specify `sub_region_width` / `sub_region_height` for SensorOrthographic, always set them equal to the terrain extent (`terrain.get_extent_width()` / `terrain.get_extent_height()`). Do NOT leave them at arbitrary defaults or guess values.
|
|
305
|
+
2. **Orthographic simulation must post-process radiance to BRF** — after `sim.start()` with SensorOrthographic, always call `PostProcessing.radiance2brf(sim.get_sim_dir())`. Use BRF results for all subsequent analysis unless the user explicitly asks for radiance.
|
|
306
|
+
3. **Spectral band FWHM defaults to 1** — when setting `set_spectral_bands()`, use `"680:1,550:1,450:1"` format. Only use a different FWHM if the user explicitly specifies it.
|
|
307
|
+
- **RGB film type (`set_film_type("rgb")`)**: When using RGB film type to produce PNG images, set **30 uniform bands from 360 to 830 nm** (approximately 16.2 nm spacing). Generate the bands string as: `bands = ",".join(f"{int(wl)}:1" for wl in np.linspace(360, 830, 30))`. All optical properties (leaf, soil, trunk, understory, etc.) and `ill.set_ats_percentage()` must also have exactly 30 values to match. When using `ForestSceneBuilder`, set `builder.spectral_bands = [int(wl) for wl in np.linspace(360, 830, 30)]` BEFORE calling `build()`.
|
|
308
|
+
- **Broadband reflectance**: To simulate broadband sensor reflectance (e.g., Landsat, Sentinel-2 bands), do NOT set a large FWHM directly. Instead, simulate narrowband hyperspectral data (1 nm resolution across the band range), then post-process by applying the spectral response function (SRF) or numerical integration to compute broadband values. This applies to reflectance, BRF, and up/down radiation products. Only skip this if the user explicitly requests direct broadband simulation.
|
|
309
|
+
4. **All band counts must be consistent** — sensor spectral bands, `ill.set_ats_percentage()` (sky-to-total ratio), and `OpticalItem` values (each semicolon-separated group) must all have the same number of bands. When band count changes, update all of them. Fill unknown values with `0` for sky-to-total ratio.
|
|
310
|
+
5. **Sensor type must match observation type** — `SensorOrthographic` with `ObservationOrthographic`, `SensorPerspective` with `ObservationPerspective`, `SensorFisheye` with `ObservationFisheye`, `SensorPhotonTracing` with `ObservationPhotonTracing`. Mismatched pairs will cause errors.
|
|
311
|
+
6. **Sun zenith angle range is 0~89.99** — never set to 90 or above, it will cause simulation errors.
|
|
312
|
+
7. **Turbid medium objects must be entirely within scene boundary** — when placing turbid medium objects, ensure the entire OBJ bounding box (position + crown extent) stays within `(0, 0)` to `(extent_width, extent_height)`. Objects protruding outside the boundary will produce incorrect results.
|
|
313
|
+
8. **Sample per pixel guidance** — preview/testing: 16~32; production: 64~256. For SensorOrthographic, also check spatial sampling density: `spp_needed = 64 * (sub_region_width * sub_region_height) / (image_width * image_height)`. Ensure at least 64 samples per square meter. Adjust `sample_per_pixel` or `image_width`/`image_height` accordingly.
|
|
314
|
+
9. **PhotonTracing sun_ray_resolution and computation cost** — `set_sun_ray_resolution(res)` controls sun ray spacing in meters. Total photons ≈ `(scene_width/res) × (scene_height/res)`. Use 0.5 for quick preview, 0.02 for production BRF, 0.003 for fPAR/fluorescence. A 40×40m scene at 0.003 generates ~178M photons (~6.5 min); at 0.5 only ~6400 photons (<1 sec).
|
|
315
|
+
- **Multi-angle BRF**: use `set_virtual_directions("zen1:azi1;zen2:azi2;...")` for user-specified directions. Set `set_number_of_directions(1)` — the first BRF output line is scene albedo from hemisphere sampling, virtual directions follow after. Do NOT use `set_virtual_director_directions()` (not needed for typical simulations).
|
|
316
|
+
- **BRF output files**: `_BRF.txt` (total BRF), `_BRF_uc_sgl.txt` (uncollided single-scatter), `_BRF_co_sgl.txt` (collided single-scatter), `_BRF_mlt.txt` (multiple-scatter), `_LESS.txt` (scene info). Format: `zenith azimuth BRF_band1 BRF_band2 ...` per line.
|
|
317
|
+
- **fPAR layer extended format**: `set_fpar_layer("from:step:to/outputMode/objectNames")`. OutputMode: `0` = per-component (default), `1` = per-instance-component, `2` = per-triangle (every facet). Mode 2 outputs an additional `_temp_primitive_data.json` file containing per-triangle `Q` (absorbed photon flux density per unit leaf area), `T` (transmittance), `N` (photon count), `S` (triangle area). Example: `sensor.set_fpar_layer("0:0.2:3/2")` for per-facet fPAR in a 3m canopy. Add object names to filter: `"0:0.2:3/2/leaf,stem"`.
|
|
318
|
+
10. **Multi-angle orthographic images must enable orthophoto map** — when simulating multiple viewing angles with SensorOrthographic for per-pixel BRDF extraction, always set `obs.is_orthophoto_map = True` on ObservationOrthographic. This reprojects each oblique view onto the ground plane so that all angles produce co-registered images (same pixel = same ground location and size). Without this, different angles cover different ground extents and pixel sizes, making per-pixel comparison impossible. Also use `set_repetitive_scene(100)` (flat terrain only) to avoid edge effects at oblique angles.
|
|
319
|
+
11. **Batch simulations should use runtime modification by default** — when looping over spectral properties, sun angles, view angles, or optical properties, always enable `sim.enable_runtime_modification_of_properties(True)` to avoid reloading the full scene each iteration. This significantly speeds up batch runs. Inform the user that you are using this mode. If structural changes (geometry/instances) are needed between runs, call `sim.reload_runtime_structural_properties()`.
|
|
320
|
+
11. **CPU cores default to total cores minus 2** — when setting `params.set_number_of_cores()`, use `os.cpu_count() - 2` (minimum 1) to leave headroom for the OS. Always `import os` and compute dynamically rather than hardcoding.
|
|
321
|
+
12. **Always call `sim.read_sim_project()` before modifying the scene** — it loads defaults from input.conf.
|
|
322
|
+
13. **Always call `sim.save_sim_project()` before `sim.start()`** — writes the JSON config.
|
|
323
|
+
14. **`clear_landscape_elements()` removes ALL objects/instances** — call before re-adding.
|
|
324
|
+
15. **`clear_user_defined_optical_properties()`** keeps built-in properties — use instead of `clear_all_optical_properties()`.
|
|
325
|
+
16. **Turbid media components** require extra params: `is_turbid=True, leaf_density=X, lad="Spherical"`.
|
|
326
|
+
17. **LiDAR sensor** needs a scanning device set via `sensor.set_scanning_device(ALSLiDAR())` or `TLSLiDAR()`.
|
|
327
|
+
18. **SensorTRAC** is for TRAC-like gap fraction measurements along a transect line.
|
|
328
|
+
19. **Call `landscape.prepare_for_ui()` before opening in GUI** — if a scene is created via SDK and the user wants to visualize it in the LESS GUI, call `landscape.prepare_for_ui()` after `sim.save_sim_project()`. This computes bounding boxes and other metadata needed by the GUI to display the scene correctly.
|
|
329
|
+
20. **Disable OBJ cache when geometry changes between runs** — if an OBJ file is replaced with different geometry but keeps the same filename, LESS will use the cached version and produce identical results. Call `landscape.set_obj_cache(False)` to force reloading. Re-enable after the geometry stabilizes for better performance.
|
|
330
|
+
21. **ForestSceneBuilder spectral bands must match sensor** — when customizing the sensor's spectral bands after `builder.build()`, the builder's default bands (550, 680, 800, 850 nm) may differ from the desired sensor bands. Always set `builder.spectral_bands = [680, 550, 450]` (or the desired wavelengths) BEFORE calling `builder.build()` and `builder.set_optical_from_prospect(...)`, so that all generated optical properties (leaf, soil, trunk, understory) have the correct number of bands matching the sensor. Mismatched band counts will cause a runtime error: `"Invalid spectrum value specified (length does not match the current spectral discretization)"`.
|
|
331
|
+
22. **Flux measurement product** — to measure total radiant flux (W) entering/leaving each surface component, set `sensor.flux_measure_product = True` and `sensor.flux_measure_mode = 0` (per-component) / `1` (per-instance-component) / `2` (per-triangle). Output: `_FluxMeasure.txt`. These are attributes, not setter methods.
|
|
332
|
+
23. **Crown representation defaults to facet mode** — when using `ForestSceneBuilder` or `SimpleCrownGenerator`, default to **facet mode** (`builder.leaf_as_turbid = False`) which produces triangle mesh leaves for more realistic results. Use turbid mode (`builder.leaf_as_turbid = True`) only when the user explicitly requests it or for very large scenes where performance is critical.
|
|
333
|
+
24. **PROSPECT-D is only valid for 400–2500 nm** — do NOT use `prospectD()` for thermal infrared bands (e.g., 10000 nm). For thermal simulations, manually specify emissivity-based optical properties (e.g., vegetation reflectance ≈ 0.02, transmittance ≈ 0 at 10 μm).
|
|
334
|
+
25. **Thermal simulation temperature mechanism** — LESS requires temperatures to be registered in the `temperature_properties` dict in `input.conf` before they can be referenced by components or terrain. ForestSceneBuilder does NOT support thermal scene construction. For thermal simulations, either: (a) build the scene manually without ForestSceneBuilder, setting `temperature` parameter in `add_component_from_file()` (e.g., `temperature="T298"`), or (b) use `SDKCodeGenerator` to convert a GUI-created thermal project into a script. Set `sensor.thermal_radiation = True` and `terrain.temperature = "T305"` (the temperature name must exist in `temperature_properties`).
|