ernie-renderer 0.2.0.dev35__tar.gz → 0.2.0.dev37__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 ernie-renderer might be problematic. Click here for more details.
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/CMakeLists.txt +1 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/PKG-INFO +1 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/ErnieFetch.cmake +10 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/openexr.cmake +1 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/CMakeLists.txt +1 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/scene.cpp +49 -6
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/scene.h +2 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schema.h +26 -0
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/camera.cpp +13 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/camera.h +12 -31
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/collection.cpp +1 -2
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/collection.h +2 -6
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/geom.cpp +76 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/geom.h +22 -80
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/instancer.cpp +48 -32
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/instancer.h +2 -7
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/laser.cpp +26 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/laser.h +5 -8
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/lux.cpp +83 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/lux.h +43 -112
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/mesh.cpp +7 -12
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/mesh.h +5 -20
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/planet.cpp +16 -32
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/planet.h +8 -28
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/registry.cpp +8 -0
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/render.cpp +18 -0
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/render.h +113 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/shade.cpp +4 -12
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/shade.h +14 -30
- ernie_renderer-0.2.0.dev37/ernie/scene/schemas/vol.cpp +114 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/vol.h +12 -35
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/tokens.h +2 -16
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/view.h +52 -16
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/CMakeLists.txt +1 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/api_test.cpp +7 -7
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/lux_test.cpp +23 -1
- ernie_renderer-0.2.0.dev37/tests/scene/render_test.cpp +48 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/scene_test.cpp +18 -18
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/schema_test.cpp +1 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/xform_test.cpp +5 -5
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/CMakeLists.txt +1 -0
- ernie_renderer-0.2.0.dev35/ernie/scene/schemas/camera.cpp +0 -20
- ernie_renderer-0.2.0.dev35/ernie/scene/schemas/geom.cpp +0 -101
- ernie_renderer-0.2.0.dev35/ernie/scene/schemas/laser.cpp +0 -29
- ernie_renderer-0.2.0.dev35/ernie/scene/schemas/lux.cpp +0 -96
- ernie_renderer-0.2.0.dev35/ernie/scene/schemas/vol.cpp +0 -126
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.dockerignore +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.github/scripts/coverage_badge.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.github/workflows/ci.yml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.gitignore +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/CMakePresets.json +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/benchmarks/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/benchmarks/bench.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/benchmarks/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/benchmarks/scene/extents.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/benchmarks/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/ernie.pc.in +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/bc7enc.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/docs/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/docs/index.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/docs/requirements.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/device/vulkan_devices.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/device/vulkan_devices.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/geometry/bounds.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/ies.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/ies.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/image.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/image.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/nanovdb.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/nanovdb.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/raster.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/raster.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/texture.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/io/texture.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/astronomy.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/astronomy.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/atmosphere.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/atmosphere.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/cloud.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/cloud.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/constants.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/reflectance_library.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/reflectance_library.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/reflectance_table.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/regolith.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/regolith.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/scattering.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/scattering.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/solar.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/solar.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/solar_table.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/spectrum.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/physics/spectrum.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/python/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/render/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/convert.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/extent_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/extent_cache.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schema.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/storage.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/view.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/algorithm.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/bytes.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/disk_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/disk_cache.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/file.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/file.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/glm.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/hash_index.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/linear_algebra.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/log.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/log.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/math.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/noise.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/noise.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/numbers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/parallel.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/random.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/text.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/version.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/version.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/util/worker_pool.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/mkdocs.yml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/pyproject.toml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/common.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/consumer/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/consumer/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/device/vulkan_devices_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/exr/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/exr/make_exr.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/exr/rgba_half_window.exr +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/exr/y_half_zips.exr +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ies/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ies/lamp.tilt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ktx2/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/float_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/volumes/cube.nvdb +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/fixtures/volumes/make_nvdb.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/geometry/bounds_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/io/ies_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/io/image_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/io/nanovdb_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/io/raster_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/io/texture_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/astronomy_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/atmosphere_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/cloud_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/reflectance_library_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/regolith_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/scattering_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/solar_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/physics/spectrum_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/extent_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/instancer_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/mesh_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/path_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/planet_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/shade_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/storage_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/scene/vol_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/algorithm_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/bytes_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/disk_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/file_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/hash_index_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/linear_algebra_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/log_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/math_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/noise_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/parallel_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/profiler_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/random_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/tensor_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/text_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/version_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/tests/util/worker_pool_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/LICENSES/MIT.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/NOTICE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_containers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_idct.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/zstd/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/zstd/zstd.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/basisu/zstd/zstd_errors.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/nanovdb/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/third_party/nanovdb/PNanoVDB.h +0 -0
|
@@ -15,7 +15,7 @@ project(
|
|
|
15
15
|
)
|
|
16
16
|
|
|
17
17
|
# Pre-release suffix such as .dev12, written by CI.
|
|
18
|
-
set(ERNIE_VERSION_SUFFIX ".
|
|
18
|
+
set(ERNIE_VERSION_SUFFIX ".dev37" CACHE STRING "Pre-release suffix of Ernie's version")
|
|
19
19
|
set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
|
|
20
20
|
|
|
21
21
|
option(ERNIE_BUILD_TESTS "Build Ernie's tests" OFF)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ernie-renderer
|
|
3
|
-
Version: 0.2.0.
|
|
3
|
+
Version: 0.2.0.dev37
|
|
4
4
|
Summary: Efficient Renderer for Natural and Interplanetary Environments: a physically based, spectral Vulkan ray tracer
|
|
5
5
|
Author: Alex Maietta
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -39,3 +39,13 @@ function(ernie_fetch name)
|
|
|
39
39
|
set(${lower}_SOURCE_DIR "${${lower}_SOURCE_DIR}" PARENT_SCOPE)
|
|
40
40
|
set(${lower}_BINARY_DIR "${${lower}_BINARY_DIR}" PARENT_SCOPE)
|
|
41
41
|
endfunction()
|
|
42
|
+
|
|
43
|
+
# Builds third-party targets without warnings: their code is not Ernie's to fix.
|
|
44
|
+
function(ernie_quiet_third_party)
|
|
45
|
+
foreach(target ${ARGN})
|
|
46
|
+
get_target_property(type ${target} TYPE)
|
|
47
|
+
if(NOT type STREQUAL "INTERFACE_LIBRARY")
|
|
48
|
+
target_compile_options(${target} PRIVATE "$<IF:$<CXX_COMPILER_ID:MSVC>,/w,-w>")
|
|
49
|
+
endif()
|
|
50
|
+
endforeach()
|
|
51
|
+
endfunction()
|
|
@@ -300,19 +300,27 @@ BucketId Scene::FindOrAddBucket(const SchemaDef* schema, std::vector<Token> apis
|
|
|
300
300
|
return *found;
|
|
301
301
|
}
|
|
302
302
|
BucketSchema entry{schema, {}};
|
|
303
|
+
const std::vector<ApiName> allApis = AllApis(schema, key.apiSchemas);
|
|
304
|
+
// The type's fallback overrides win over its API schemas', as USD's do.
|
|
305
|
+
const auto fallback = [&](const AttributeDef& def, const std::string& name) -> const Value& {
|
|
306
|
+
const Value* override = schema != nullptr ? schema->FallbackOverride(name) : nullptr;
|
|
307
|
+
for (auto api = allApis.begin(); override == nullptr && api != allApis.end(); ++api) {
|
|
308
|
+
override = api->schema->FallbackOverride(name);
|
|
309
|
+
}
|
|
310
|
+
return override != nullptr ? *override : def.fallback;
|
|
311
|
+
};
|
|
303
312
|
std::vector<ColumnLayout> layout;
|
|
304
313
|
const auto add = [&](const SchemaDef& declaring, const ApiName& api) {
|
|
305
314
|
for (const AttributeDef* def : declaring.AllAttributes()) {
|
|
306
315
|
const std::string name = api.Attribute(def->name);
|
|
307
|
-
|
|
308
|
-
layout.push_back(MakeLayout(paths, *def, name, override ? *override : def->fallback));
|
|
316
|
+
layout.push_back(MakeLayout(paths, *def, name, fallback(*def, name)));
|
|
309
317
|
entry.declared.emplace(layout.back().attribute, def);
|
|
310
318
|
}
|
|
311
319
|
};
|
|
312
320
|
if (schema != nullptr) {
|
|
313
321
|
add(*schema, {});
|
|
314
322
|
}
|
|
315
|
-
for (const ApiName& api :
|
|
323
|
+
for (const ApiName& api : allApis) {
|
|
316
324
|
add(*api.schema, api);
|
|
317
325
|
}
|
|
318
326
|
const BucketId bucket = store_.AddBucket(key, layout);
|
|
@@ -333,7 +341,16 @@ const std::vector<Token>& Scene::Apis(PrimId prim) const {
|
|
|
333
341
|
}
|
|
334
342
|
|
|
335
343
|
void Scene::ApplyApi(PrimId prim, std::string_view api) {
|
|
336
|
-
ApiName::Parse(api);
|
|
344
|
+
const ApiName parsed = ApiName::Parse(api);
|
|
345
|
+
const std::vector<std::string_view>& allowed = parsed.schema->appliesTo;
|
|
346
|
+
const SchemaDef* type = Schema(prim);
|
|
347
|
+
if (!allowed.empty() && std::ranges::none_of(allowed, [&](std::string_view name) {
|
|
348
|
+
return type != nullptr && type->IsA(*FindSchema(name));
|
|
349
|
+
})) {
|
|
350
|
+
throw std::invalid_argument(std::string(api) + " applies only to " +
|
|
351
|
+
std::string(allowed.front()) + " prims, not " +
|
|
352
|
+
Describe(*this, prim));
|
|
353
|
+
}
|
|
337
354
|
std::vector<Token> apis = Apis(prim);
|
|
338
355
|
apis.push_back(store_.Tokens().Intern(api));
|
|
339
356
|
MoveTo(prim, Schema(prim), std::move(apis));
|
|
@@ -356,12 +373,24 @@ bool Scene::HasApi(PrimId prim, std::string_view api) const {
|
|
|
356
373
|
|
|
357
374
|
std::vector<ApiName> Scene::AllApis(const SchemaDef* schema, std::span<const Token> applied) const {
|
|
358
375
|
std::vector<ApiName> apis;
|
|
376
|
+
// Each API schema once, followed by those built into it (MeshLightAPI's LightAPI, LightAPI's
|
|
377
|
+
// light-link collections).
|
|
378
|
+
const auto add = [&](const auto& self, std::string_view name) -> void {
|
|
379
|
+
const ApiName api = ApiName::Parse(name);
|
|
380
|
+
if (std::ranges::find(apis, api) != apis.end()) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
apis.push_back(api);
|
|
384
|
+
for (const std::string_view builtin : api.schema->AllBuiltinApis()) {
|
|
385
|
+
self(self, builtin);
|
|
386
|
+
}
|
|
387
|
+
};
|
|
359
388
|
for (const std::string_view builtin :
|
|
360
389
|
schema != nullptr ? schema->AllBuiltinApis() : std::vector<std::string_view>{}) {
|
|
361
|
-
|
|
390
|
+
add(add, builtin);
|
|
362
391
|
}
|
|
363
392
|
for (const Token token : applied) {
|
|
364
|
-
|
|
393
|
+
add(add, store_.Tokens().Text(token));
|
|
365
394
|
}
|
|
366
395
|
return apis;
|
|
367
396
|
}
|
|
@@ -429,4 +458,18 @@ ColumnType Scene::TypeForUndeclared(PrimId prim, std::string_view attribute,
|
|
|
429
458
|
return *type;
|
|
430
459
|
}
|
|
431
460
|
|
|
461
|
+
std::optional<PrimId> ExtentRows::Resolve(const Target& target) const {
|
|
462
|
+
return target.path != kNoPath ? store.Find(target.path) : std::nullopt;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
std::optional<Box> ExtentRows::ExtentInRowSpace(PrimId other, std::uint32_t row) const {
|
|
466
|
+
const std::optional<Box> extent = scene->Extent(other);
|
|
467
|
+
if (!extent) {
|
|
468
|
+
return std::nullopt;
|
|
469
|
+
}
|
|
470
|
+
const PrimId own = store.GetBucket(bucket).prims[row];
|
|
471
|
+
return extent->Transformed(glm::inverse(scene->WorldTransform(own)) *
|
|
472
|
+
scene->WorldTransform(other));
|
|
473
|
+
}
|
|
474
|
+
|
|
432
475
|
} // namespace ernie
|
|
@@ -121,7 +121,8 @@ class Scene {
|
|
|
121
121
|
/// Moves a prim to the bucket of its type and `apis`.
|
|
122
122
|
void MoveTo(PrimId prim, const SchemaDef* schema, std::vector<Token> apis);
|
|
123
123
|
const std::vector<Token>& Apis(PrimId prim) const;
|
|
124
|
-
/// @return A type's built-in API schemas, then the applied ones
|
|
124
|
+
/// @return A type's built-in API schemas, then the applied ones, each with those built into it,
|
|
125
|
+
/// each once.
|
|
125
126
|
std::vector<ApiName> AllApis(const SchemaDef* schema, std::span<const Token> applied) const;
|
|
126
127
|
/// @return The attribute's column when the prim authors it, or null.
|
|
127
128
|
const Column* AuthoredColumn(PrimId prim, std::string_view attribute) const;
|
|
@@ -127,12 +127,35 @@ struct ExtentRows {
|
|
|
127
127
|
std::string_view Text(Token token) const {
|
|
128
128
|
return store.Paths().Names().Text(token);
|
|
129
129
|
}
|
|
130
|
+
/// @return The live prim a relationship targets, or none.
|
|
131
|
+
std::optional<PrimId> Resolve(const Target& target) const;
|
|
132
|
+
/// @return Another prim's extent brought into a row's own space through the transforms
|
|
133
|
+
/// between, or none when it has none.
|
|
134
|
+
std::optional<Box> ExtentInRowSpace(PrimId other, std::uint32_t row) const;
|
|
130
135
|
};
|
|
131
136
|
|
|
132
137
|
/// Computes the extents of a bucket's rows [begin, end) into `out`, one box each, in each prim's
|
|
133
138
|
/// own space. Written as a loop over columns, as the GPU kernels are.
|
|
134
139
|
using ExtentFunction = void (*)(const ExtentRows& rows, RowRange range, std::span<Box> out);
|
|
135
140
|
|
|
141
|
+
/// @brief Fills `out` with `extent(row)` for each row of `range`: the loop every extent function
|
|
142
|
+
/// runs.
|
|
143
|
+
template <typename Extent>
|
|
144
|
+
void ComputeRows(RowRange range, std::span<Box> out, const Extent& extent) {
|
|
145
|
+
for (std::uint32_t row = range.begin; row < range.end; ++row) {
|
|
146
|
+
out[row - range.begin] = extent(row);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// The extent function of prims centred on their origin. `kHalves(rows)` reads the columns once
|
|
151
|
+
/// and returns each row's half-size by row.
|
|
152
|
+
template <auto kHalves>
|
|
153
|
+
void CentredExtent(const ExtentRows& rows, RowRange range, std::span<Box> out) {
|
|
154
|
+
const auto half = kHalves(rows);
|
|
155
|
+
ComputeRows(range, out,
|
|
156
|
+
[&](std::uint32_t row) { return Box::Around(glm::dvec3(0.0), half(row)); });
|
|
157
|
+
}
|
|
158
|
+
|
|
136
159
|
/// @brief How a prim type is bounded, as USD's Boundable and non-Boundable bases divide them.
|
|
137
160
|
struct ExtentRule {
|
|
138
161
|
enum class Kind : std::uint8_t {
|
|
@@ -179,6 +202,8 @@ struct SchemaDef {
|
|
|
179
202
|
/// Fallbacks the type changes for attributes of its bases or built-in schemas, as
|
|
180
203
|
/// DistantLight's brighter intensity.
|
|
181
204
|
std::vector<std::pair<std::string_view, Value>> fallbackOverrides;
|
|
205
|
+
/// The prim types an API schema may be applied to, as MeshLightAPI's Mesh; any when empty.
|
|
206
|
+
std::vector<std::string_view> appliesTo;
|
|
182
207
|
|
|
183
208
|
bool IsA(const SchemaDef& other) const;
|
|
184
209
|
bool IsOpen(std::string_view attribute) const;
|
|
@@ -224,6 +249,7 @@ struct ApiName {
|
|
|
224
249
|
std::string Attribute(std::string_view declared) const;
|
|
225
250
|
/// @return The name `Parse` reads.
|
|
226
251
|
std::string ToString() const;
|
|
252
|
+
bool operator==(const ApiName&) const = default;
|
|
227
253
|
};
|
|
228
254
|
|
|
229
255
|
/// @brief Checks a value against a declared attribute's limits and options; the scene checks its
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file camera.cpp
|
|
3
|
+
/// @brief The camera's registry entry and Ernie's camera API schemas'.
|
|
4
|
+
#include "ernie/scene/schemas/camera.h"
|
|
5
|
+
|
|
6
|
+
namespace ernie {
|
|
7
|
+
|
|
8
|
+
ERNIE_DEFINE_SCHEMA(Camera, Concrete, kNoExtent, ERNIE_CAMERA_ATTRIBUTES)
|
|
9
|
+
ERNIE_DEFINE_SCHEMA(ErnieLensAPI, SingleApply, kInheritExtent, ERNIE_LENS_API_ATTRIBUTES)
|
|
10
|
+
ERNIE_DEFINE_SCHEMA(ErniePolarizerAPI, SingleApply, kInheritExtent, ERNIE_POLARIZER_API_ATTRIBUTES)
|
|
11
|
+
ERNIE_DEFINE_SCHEMA(ErnieSensorAPI, SingleApply, kInheritExtent, ERNIE_SENSOR_API_ATTRIBUTES)
|
|
12
|
+
|
|
13
|
+
} // namespace ernie
|
|
@@ -114,12 +114,8 @@
|
|
|
114
114
|
|
|
115
115
|
#define ERNIE_SENSOR_API_ATTRIBUTES(X) \
|
|
116
116
|
X(glm::dvec2, SpectralRange, "ernie:spectral:range", glm::dvec2(380.0, 780.0), \
|
|
117
|
-
"Wavelengths in nm the sensor
|
|
118
|
-
|
|
119
|
-
.group = "Sensor", .lower = AtLeast(1.0)) \
|
|
120
|
-
X(std::string, SpectralMode, "ernie:spectral:mode", "spectral", \
|
|
121
|
-
"spectral: bands over the range; rgb: three bands of linear sRGB, faster.", \
|
|
122
|
-
.group = "Sensor", .options = {"spectral", "rgb"}) \
|
|
117
|
+
"Wavelengths in nm the sensor responds to; its products sample them in bands.", \
|
|
118
|
+
.group = "Sensor", .lower = Above(0.0)) \
|
|
123
119
|
X(std::string, SensorType, "ernie:sensor:type", "rgb", "A colour or a mono sensor.", \
|
|
124
120
|
.group = "Sensor", .options = {"rgb", "mono"}) \
|
|
125
121
|
X(bool, SensorNoise, "ernie:sensor:noise", true, "Whether it adds the noise below.", \
|
|
@@ -155,30 +151,15 @@
|
|
|
155
151
|
|
|
156
152
|
namespace ernie {
|
|
157
153
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
/// A camera's lens beyond USD's: fisheyes, distortion, vignetting and chromatic aberration.
|
|
170
|
-
class ErnieLensAPI : public ErnieLensAPIAccessors<ErnieLensAPI, SchemaView> {
|
|
171
|
-
ERNIE_API_SCHEMA_BODY(ErnieLensAPI)
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
/// A polarizer in front of a camera's lens, or a polarization sensor's mosaic.
|
|
175
|
-
class ErniePolarizerAPI : public ErniePolarizerAPIAccessors<ErniePolarizerAPI, SchemaView> {
|
|
176
|
-
ERNIE_API_SCHEMA_BODY(ErniePolarizerAPI)
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
/// A camera's sensor: its spectral bands, noise, ADC and quantum efficiency.
|
|
180
|
-
class ErnieSensorAPI : public ErnieSensorAPIAccessors<ErnieSensorAPI, SchemaView> {
|
|
181
|
-
ERNIE_API_SCHEMA_BODY(ErnieSensorAPI)
|
|
182
|
-
};
|
|
154
|
+
ERNIE_CONCRETE_SCHEMA(Camera, Xformable, ERNIE_CAMERA_ATTRIBUTES,
|
|
155
|
+
"A view looking down -z, y up, with a lens and film.");
|
|
156
|
+
ERNIE_API_SCHEMA(ErnieLensAPI, ERNIE_LENS_API_ATTRIBUTES,
|
|
157
|
+
"A camera's lens beyond USD's: fisheyes, distortion, vignetting and chromatic "
|
|
158
|
+
"aberration.");
|
|
159
|
+
ERNIE_API_SCHEMA(ErniePolarizerAPI, ERNIE_POLARIZER_API_ATTRIBUTES,
|
|
160
|
+
"A polarizer in front of a camera's lens, or a polarization sensor's mosaic.");
|
|
161
|
+
ERNIE_API_SCHEMA(ErnieSensorAPI, ERNIE_SENSOR_API_ATTRIBUTES,
|
|
162
|
+
"A camera's sensor: its spectral range, noise, ADC and quantum efficiency; its "
|
|
163
|
+
"products set how finely the range is sampled.");
|
|
183
164
|
|
|
184
165
|
} // namespace ernie
|
{ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev37}/ernie/scene/schemas/collection.cpp
RENAMED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
namespace ernie {
|
|
7
7
|
|
|
8
|
-
ERNIE_DEFINE_SCHEMA(CollectionAPI,
|
|
9
|
-
"A named set of prims.", ERNIE_COLLECTION_API_ATTRIBUTES)
|
|
8
|
+
ERNIE_DEFINE_SCHEMA(CollectionAPI, MultipleApply, kInheritExtent, ERNIE_COLLECTION_API_ATTRIBUTES)
|
|
10
9
|
|
|
11
10
|
} // namespace ernie
|
|
@@ -36,11 +36,7 @@ template <> struct ChoiceTokens<ExpansionRule> {
|
|
|
36
36
|
"expandPrimsAndProperties"};
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
/// A named set of prims, as light linking and material collections use them.
|
|
42
|
-
class CollectionAPI : public CollectionAPIAccessors<CollectionAPI, SchemaView> {
|
|
43
|
-
ERNIE_API_SCHEMA_BODY(CollectionAPI)
|
|
44
|
-
};
|
|
39
|
+
ERNIE_API_SCHEMA(CollectionAPI, ERNIE_COLLECTION_API_ATTRIBUTES,
|
|
40
|
+
"A named set of prims, as light linking and material collections use them.");
|
|
45
41
|
|
|
46
42
|
} // namespace ernie
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file geom.cpp
|
|
3
|
+
/// @brief UsdGeom's registry entries and the implicit shapes' extents, as UsdGeom computes them.
|
|
4
|
+
#include "ernie/scene/schemas/geom.h"
|
|
5
|
+
|
|
6
|
+
namespace ernie {
|
|
7
|
+
namespace {
|
|
8
|
+
|
|
9
|
+
/// @return The axis index (0, 1, 2) of an `axis` token.
|
|
10
|
+
int AxisIndex(const ExtentRows& rows, Token axis) {
|
|
11
|
+
return rows.Text(axis).front() - 'X';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
auto CubeHalves(const ExtentRows& rows) {
|
|
15
|
+
return [size = rows.Column<double>(Cube::kSize)](std::uint32_t row) {
|
|
16
|
+
return glm::dvec3(0.5 * size[row]);
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
auto SphereHalves(const ExtentRows& rows) {
|
|
21
|
+
return [radius = rows.Column<double>(Sphere::kRadius)](std::uint32_t row) {
|
|
22
|
+
return glm::dvec3(radius[row]);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// Cylinders, cones and capsules: a radius about the axis; capsules' caps add it along the axis.
|
|
27
|
+
template <bool kCapped> auto RoundHalves(const ExtentRows& rows) {
|
|
28
|
+
return [&rows, radius = rows.Column<double>(Cylinder::kRadius),
|
|
29
|
+
height = rows.Column<double>(Cylinder::kHeight),
|
|
30
|
+
axis = rows.Column<Token>(Cylinder::kAxis)](std::uint32_t row) {
|
|
31
|
+
glm::dvec3 half(radius[row]);
|
|
32
|
+
half[AxisIndex(rows, axis[row])] = 0.5 * height[row] + (kCapped ? radius[row] : 0.0);
|
|
33
|
+
return half;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
auto PlaneHalves(const ExtentRows& rows) {
|
|
38
|
+
return [&rows, width = rows.Column<double>(Plane::kWidth),
|
|
39
|
+
length = rows.Column<double>(Plane::kLength),
|
|
40
|
+
axis = rows.Column<Token>(Plane::kAxis)](std::uint32_t row) {
|
|
41
|
+
const int normal = AxisIndex(rows, axis[row]);
|
|
42
|
+
// Width lies along x, or z for an X normal; length along y, or z for a Y normal.
|
|
43
|
+
glm::dvec3 half(0.0);
|
|
44
|
+
half[normal == 0 ? 2 : 0] = 0.5 * width[row];
|
|
45
|
+
half[normal == 1 ? 2 : 1] = 0.5 * length[row];
|
|
46
|
+
return half;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} // namespace
|
|
51
|
+
|
|
52
|
+
ERNIE_DEFINE_SCHEMA(Imageable, Abstract, kInheritExtent, ERNIE_IMAGEABLE_ATTRIBUTES)
|
|
53
|
+
ERNIE_DEFINE_SCHEMA(Xformable, Abstract, kInheritExtent, ERNIE_XFORMABLE_ATTRIBUTES,
|
|
54
|
+
.openNamespaces = {tokens::kXformOpPrefix})
|
|
55
|
+
ERNIE_DEFINE_SCHEMA(Boundable, Abstract, kInheritExtent, ERNIE_BOUNDABLE_ATTRIBUTES)
|
|
56
|
+
ERNIE_DEFINE_SCHEMA(Gprim, Abstract, kInheritExtent, ERNIE_GPRIM_ATTRIBUTES,
|
|
57
|
+
.openNamespaces = {tokens::kPrimvarsPrefix})
|
|
58
|
+
// Grouping prims are where custom data lives, so they take attributes of any name.
|
|
59
|
+
ERNIE_DEFINE_SCHEMA(Xform, Concrete, kDescendantsExtent, ERNIE_NO_ATTRIBUTES,
|
|
60
|
+
.openNamespaces = {"*"})
|
|
61
|
+
ERNIE_DEFINE_SCHEMA(Scope, Concrete, kDescendantsExtent, ERNIE_NO_ATTRIBUTES,
|
|
62
|
+
.openNamespaces = {"*"})
|
|
63
|
+
ERNIE_DEFINE_SCHEMA(Cube, Concrete, ComputedExtent(CentredExtent<CubeHalves>),
|
|
64
|
+
ERNIE_CUBE_ATTRIBUTES)
|
|
65
|
+
ERNIE_DEFINE_SCHEMA(Sphere, Concrete, ComputedExtent(CentredExtent<SphereHalves>),
|
|
66
|
+
ERNIE_SPHERE_ATTRIBUTES)
|
|
67
|
+
ERNIE_DEFINE_SCHEMA(Cylinder, Concrete, ComputedExtent(CentredExtent<RoundHalves<false>>),
|
|
68
|
+
ERNIE_CYLINDER_ATTRIBUTES)
|
|
69
|
+
ERNIE_DEFINE_SCHEMA(Cone, Concrete, ComputedExtent(CentredExtent<RoundHalves<false>>),
|
|
70
|
+
ERNIE_CYLINDER_ATTRIBUTES)
|
|
71
|
+
ERNIE_DEFINE_SCHEMA(Capsule, Concrete, ComputedExtent(CentredExtent<RoundHalves<true>>),
|
|
72
|
+
ERNIE_CAPSULE_ATTRIBUTES)
|
|
73
|
+
ERNIE_DEFINE_SCHEMA(Plane, Concrete, ComputedExtent(CentredExtent<PlaneHalves>),
|
|
74
|
+
ERNIE_PLANE_ATTRIBUTES)
|
|
75
|
+
|
|
76
|
+
} // namespace ernie
|
|
@@ -99,85 +99,27 @@ template <> struct ChoiceTokens<Axis> {
|
|
|
99
99
|
static constexpr std::array<std::string_view, 3> kTokens{"X", "Y", "Z"};
|
|
100
100
|
};
|
|
101
101
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
/// What has an extent in its own space, computed from its attributes.
|
|
126
|
-
class Boundable : public BoundableAccessors<Boundable, Xformable> {
|
|
127
|
-
ERNIE_SCHEMA_BODY(Boundable, Xformable)
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
/// Geometry, drawn in a display colour or with a bound material.
|
|
131
|
-
class Gprim : public GprimAccessors<Gprim, Boundable> {
|
|
132
|
-
ERNIE_SCHEMA_BODY(Gprim, Boundable)
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
/// A transform grouping its children.
|
|
136
|
-
class Xform : public XformAccessors<Xform, Xformable> {
|
|
137
|
-
ERNIE_SCHEMA_BODY(Xform, Xformable)
|
|
138
|
-
ERNIE_SCHEMA_DEFINE(Xform)
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
/// A grouping without a transform of its own.
|
|
142
|
-
class Scope : public ScopeAccessors<Scope, Imageable> {
|
|
143
|
-
ERNIE_SCHEMA_BODY(Scope, Imageable)
|
|
144
|
-
ERNIE_SCHEMA_DEFINE(Scope)
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
/// A box centred on its origin, `size` along each axis.
|
|
148
|
-
class Cube : public CubeAccessors<Cube, Gprim> {
|
|
149
|
-
ERNIE_SCHEMA_BODY(Cube, Gprim)
|
|
150
|
-
ERNIE_SCHEMA_DEFINE(Cube)
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
/// A sphere centred on its origin.
|
|
154
|
-
class Sphere : public SphereAccessors<Sphere, Gprim> {
|
|
155
|
-
ERNIE_SCHEMA_BODY(Sphere, Gprim)
|
|
156
|
-
ERNIE_SCHEMA_DEFINE(Sphere)
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
/// A capped cylinder along its axis.
|
|
160
|
-
class Cylinder : public CylinderAccessors<Cylinder, Gprim> {
|
|
161
|
-
ERNIE_SCHEMA_BODY(Cylinder, Gprim)
|
|
162
|
-
ERNIE_SCHEMA_DEFINE(Cylinder)
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
/// A capped cone along its axis, its apex at +height / 2.
|
|
166
|
-
class Cone : public ConeAccessors<Cone, Gprim> {
|
|
167
|
-
ERNIE_SCHEMA_BODY(Cone, Gprim)
|
|
168
|
-
ERNIE_SCHEMA_DEFINE(Cone)
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
/// A cylinder with hemispherical caps along its axis.
|
|
172
|
-
class Capsule : public CapsuleAccessors<Capsule, Gprim> {
|
|
173
|
-
ERNIE_SCHEMA_BODY(Capsule, Gprim)
|
|
174
|
-
ERNIE_SCHEMA_DEFINE(Capsule)
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
/// A one-sided rectangle facing along its axis.
|
|
178
|
-
class Plane : public PlaneAccessors<Plane, Gprim> {
|
|
179
|
-
ERNIE_SCHEMA_BODY(Plane, Gprim)
|
|
180
|
-
ERNIE_SCHEMA_DEFINE(Plane)
|
|
181
|
-
};
|
|
102
|
+
ERNIE_SCHEMA(Imageable, SchemaView, ERNIE_IMAGEABLE_ATTRIBUTES,
|
|
103
|
+
"What every prim has: visibility, purpose and the world it is in.");
|
|
104
|
+
ERNIE_SCHEMA(Xformable, Imageable, ERNIE_XFORMABLE_ATTRIBUTES,
|
|
105
|
+
"What has a transform, composed from its xformOps.");
|
|
106
|
+
ERNIE_SCHEMA(Boundable, Xformable, ERNIE_BOUNDABLE_ATTRIBUTES,
|
|
107
|
+
"What has an extent in its own space, computed from its attributes.");
|
|
108
|
+
ERNIE_SCHEMA(Gprim, Boundable, ERNIE_GPRIM_ATTRIBUTES,
|
|
109
|
+
"Geometry, drawn in a display colour or with a bound material.");
|
|
110
|
+
ERNIE_CONCRETE_SCHEMA(Xform, Xformable, ERNIE_NO_ATTRIBUTES, "A transform grouping its children.");
|
|
111
|
+
ERNIE_CONCRETE_SCHEMA(Scope, Imageable, ERNIE_NO_ATTRIBUTES,
|
|
112
|
+
"A grouping without a transform of its own.");
|
|
113
|
+
ERNIE_CONCRETE_SCHEMA(Cube, Gprim, ERNIE_CUBE_ATTRIBUTES,
|
|
114
|
+
"A box centred on its origin, size along each axis.");
|
|
115
|
+
ERNIE_CONCRETE_SCHEMA(Sphere, Gprim, ERNIE_SPHERE_ATTRIBUTES, "A sphere centred on its origin.");
|
|
116
|
+
ERNIE_CONCRETE_SCHEMA(Cylinder, Gprim, ERNIE_CYLINDER_ATTRIBUTES,
|
|
117
|
+
"A capped cylinder along its axis.");
|
|
118
|
+
ERNIE_CONCRETE_SCHEMA(Cone, Gprim, ERNIE_CYLINDER_ATTRIBUTES,
|
|
119
|
+
"A capped cone along its axis, its apex at +height / 2.");
|
|
120
|
+
ERNIE_CONCRETE_SCHEMA(Capsule, Gprim, ERNIE_CAPSULE_ATTRIBUTES,
|
|
121
|
+
"A cylinder with hemispherical caps along its axis.");
|
|
122
|
+
ERNIE_CONCRETE_SCHEMA(Plane, Gprim, ERNIE_PLANE_ATTRIBUTES,
|
|
123
|
+
"A one-sided rectangle facing along its axis.");
|
|
182
124
|
|
|
183
125
|
} // namespace ernie
|
|
@@ -42,6 +42,36 @@ glm::dmat4 InstanceTransform(std::span<const float> position, std::span<const fl
|
|
|
42
42
|
return m;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
/// One row's instances: its prototypes' boxes, each placed at the instances that use it.
|
|
46
|
+
struct Instances {
|
|
47
|
+
std::vector<Box> prototypes;
|
|
48
|
+
std::vector<std::int64_t> indices;
|
|
49
|
+
std::vector<float> positions;
|
|
50
|
+
std::vector<float> rotations;
|
|
51
|
+
std::vector<float> scales;
|
|
52
|
+
bool wFirst = false;
|
|
53
|
+
|
|
54
|
+
Box Bounds() const {
|
|
55
|
+
Box box;
|
|
56
|
+
for (std::size_t i = 0; i < positions.size() / 3; ++i) {
|
|
57
|
+
const std::int64_t p = i < indices.size() ? indices[i] : 0;
|
|
58
|
+
if (p >= 0 && static_cast<std::size_t>(p) < prototypes.size()) {
|
|
59
|
+
box.Extend(prototypes[static_cast<std::size_t>(p)].Transformed(InstanceTransform(
|
|
60
|
+
Part(positions, i, 3), Part(rotations, i, 4), Part(scales, i, 3), wFirst)));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return box;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private:
|
|
67
|
+
/// @return Instance i's `n` values, or none when the array is unset or too short.
|
|
68
|
+
static std::span<const float> Part(const std::vector<float>& values, std::size_t i,
|
|
69
|
+
std::size_t n) {
|
|
70
|
+
return values.size() >= (i + 1) * n ? std::span(values).subspan(i * n, n)
|
|
71
|
+
: std::span<const float>();
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
45
75
|
void InstancerExtent(const ExtentRows& rows, RowRange range, std::span<Box> out) {
|
|
46
76
|
const auto prototypes = rows.Column<std::vector<Target>>(PointInstancer::kPrototypes);
|
|
47
77
|
const auto indices = rows.Column<Tensor>(PointInstancer::kProtoIndices);
|
|
@@ -50,44 +80,30 @@ void InstancerExtent(const ExtentRows& rows, RowRange range, std::span<Box> out)
|
|
|
50
80
|
const auto scales = rows.Column<Tensor>(PointInstancer::kScales);
|
|
51
81
|
const auto order = rows.Column<Token>(PointInstancer::kQuaternionOrder);
|
|
52
82
|
const auto authored = rows.Column<std::vector<float>>(Boundable::kExtent);
|
|
53
|
-
|
|
54
|
-
Box& box = out[row - range.begin] = Box();
|
|
83
|
+
ComputeRows(range, out, [&](std::uint32_t row) {
|
|
55
84
|
if (!OnHost({&indices[row], &positions[row], &orientations[row], &scales[row]})) {
|
|
56
|
-
|
|
57
|
-
continue;
|
|
85
|
+
return AuthoredExtent(authored[row]);
|
|
58
86
|
}
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const auto part = [&](const std::vector<float>& values, std::size_t n) {
|
|
77
|
-
return values.size() >= (i + 1) * n ? std::span(values).subspan(i * n, n)
|
|
78
|
-
: std::span<const float>();
|
|
79
|
-
};
|
|
80
|
-
box.Extend(protoBoxes[static_cast<std::size_t>(p)].Transformed(
|
|
81
|
-
InstanceTransform(part(xyz, 3), part(rotations, 4), part(scaling, 3), wFirst)));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
87
|
+
const Instances instances{
|
|
88
|
+
.prototypes = Map(prototypes[row],
|
|
89
|
+
[&](const Target& target) {
|
|
90
|
+
const std::optional<PrimId> prim = rows.Resolve(target);
|
|
91
|
+
return prim ? rows.scene->BoundsInParent(*prim) : Box();
|
|
92
|
+
}),
|
|
93
|
+
.indices = indices[row].Empty() ? std::vector<std::int64_t>{}
|
|
94
|
+
: CopyInts(indices[row], "protoIndices"),
|
|
95
|
+
.positions = FloatsOrNone(positions[row], 3, "positions"),
|
|
96
|
+
.rotations = FloatsOrNone(orientations[row], 4, "orientations"),
|
|
97
|
+
.scales = FloatsOrNone(scales[row], 3, "scales"),
|
|
98
|
+
.wFirst = rows.Text(order[row]) == "wxyz",
|
|
99
|
+
};
|
|
100
|
+
return instances.Bounds();
|
|
101
|
+
});
|
|
84
102
|
}
|
|
85
103
|
|
|
86
104
|
} // namespace
|
|
87
105
|
|
|
88
|
-
ERNIE_DEFINE_SCHEMA(PointInstancer,
|
|
89
|
-
ComputedFromOtherPrims(InstancerExtent),
|
|
90
|
-
"Prototypes placed at instances, bounded by their bounds at each instance.",
|
|
106
|
+
ERNIE_DEFINE_SCHEMA(PointInstancer, Concrete, ComputedFromOtherPrims(InstancerExtent),
|
|
91
107
|
ERNIE_POINT_INSTANCER_ATTRIBUTES, .openNamespaces = {tokens::kPrimvarsPrefix})
|
|
92
108
|
|
|
93
109
|
} // namespace ernie
|
|
@@ -52,12 +52,7 @@ template <> struct ChoiceTokens<QuaternionOrder> {
|
|
|
52
52
|
static constexpr std::array<std::string_view, 2> kTokens{"xyzw", "wxyz"};
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
/// Prototypes placed at instances, bounded by their bounds at each instance.
|
|
58
|
-
class PointInstancer : public PointInstancerAccessors<PointInstancer, Boundable> {
|
|
59
|
-
ERNIE_SCHEMA_BODY(PointInstancer, Boundable)
|
|
60
|
-
ERNIE_SCHEMA_DEFINE(PointInstancer)
|
|
61
|
-
};
|
|
55
|
+
ERNIE_CONCRETE_SCHEMA(PointInstancer, Boundable, ERNIE_POINT_INSTANCER_ATTRIBUTES,
|
|
56
|
+
"Prototypes placed at instances, bounded by their bounds at each instance.");
|
|
62
57
|
|
|
63
58
|
} // namespace ernie
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
/// @file laser.cpp
|
|
3
|
+
/// @brief The laser's registry entry and extent: its emitter, the larger of its aperture and waist.
|
|
4
|
+
#include "ernie/scene/schemas/laser.h"
|
|
5
|
+
|
|
6
|
+
#include <algorithm>
|
|
7
|
+
|
|
8
|
+
namespace ernie {
|
|
9
|
+
namespace {
|
|
10
|
+
|
|
11
|
+
auto EmitterHalves(const ExtentRows& rows) {
|
|
12
|
+
return [aperture = rows.Column<double>(LaserLight::kApertureRadius),
|
|
13
|
+
waist = rows.Column<glm::dvec2>(LaserLight::kWaistRadius)](std::uint32_t row) {
|
|
14
|
+
const double radius = std::max({aperture[row], waist[row].x, waist[row].y});
|
|
15
|
+
return glm::dvec3(radius, radius, 0.0);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
} // namespace
|
|
20
|
+
|
|
21
|
+
ERNIE_DEFINE_SCHEMA(LaserLight, Concrete, ComputedExtent(CentredExtent<EmitterHalves>),
|
|
22
|
+
ERNIE_LASER_LIGHT_ATTRIBUTES,
|
|
23
|
+
.fallbackOverrides = {{"ernie:power", 0.001},
|
|
24
|
+
{"ernie:polarization:degree", 0.98}})
|
|
25
|
+
|
|
26
|
+
} // namespace ernie
|