ernie-renderer 0.2.0.dev35__tar.gz → 0.2.0.dev40__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.dev40}/CMakeLists.txt +1 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/PKG-INFO +1 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/ErnieFetch.cmake +10 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/openexr.cmake +1 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/CMakeLists.txt +1 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/scene.cpp +79 -17
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/scene.h +6 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schema.h +26 -0
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/camera.cpp +13 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/camera.h +12 -31
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/collection.cpp +1 -2
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/collection.h +2 -6
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/geom.cpp +78 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/geom.h +70 -81
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/instancer.cpp +48 -32
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/instancer.h +2 -7
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/laser.cpp +26 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/laser.h +5 -8
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/lux.cpp +83 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/lux.h +43 -112
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/mesh.cpp +20 -18
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/mesh.h +51 -24
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/planet.cpp +16 -32
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/planet.h +8 -28
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/registry.cpp +14 -0
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/render.cpp +18 -0
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/render.h +113 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/shade.cpp +4 -12
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/shade.h +14 -30
- ernie_renderer-0.2.0.dev40/ernie/scene/schemas/vol.cpp +114 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schemas/vol.h +12 -35
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/tokens.h +2 -16
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/view.h +52 -16
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/CMakeLists.txt +1 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/api_test.cpp +7 -7
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/lux_test.cpp +23 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/mesh_test.cpp +21 -0
- ernie_renderer-0.2.0.dev40/tests/scene/render_test.cpp +48 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/scene_test.cpp +18 -18
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/schema_test.cpp +29 -1
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/xform_test.cpp +5 -5
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/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.dev40}/.clang-format +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.clang-tidy +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.dockerignore +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.gersemirc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.gitattributes +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.github/scripts/coverage_badge.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.github/scripts/install-lavapipe-windows.sh +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.github/workflows/ci.yml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.gitignore +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/CMakePresets.json +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/Dockerfile +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/benchmarks/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/benchmarks/bench.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/benchmarks/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/benchmarks/scene/extents.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/benchmarks/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/ernie.pc.in +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/bc7enc.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/docs/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/docs/index.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/docs/requirements.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/device/vulkan_devices.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/device/vulkan_devices.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/geometry/bounds.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/graph/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/ies.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/ies.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/image.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/image.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/nanovdb.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/nanovdb.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/raster.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/raster.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/texture.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/io/texture.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/astronomy.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/astronomy.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/atmosphere.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/atmosphere.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/cloud.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/cloud.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/constants.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/reflectance_library.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/reflectance_library.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/reflectance_table.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/regolith.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/regolith.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/scattering.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/scattering.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/solar.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/solar.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/solar_table.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/spectrum.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/physics/spectrum.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/python/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/render/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/convert.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/extent_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/extent_cache.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/schema.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/storage.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/storage.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/view.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/algorithm.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/bytes.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/disk_cache.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/disk_cache.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/file.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/file.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/glm.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/hash_index.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/linear_algebra.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/log.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/log.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/math.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/noise.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/noise.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/numbers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/parallel.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/random.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/text.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/version.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/version.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/ernie/util/worker_pool.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/mkdocs.yml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/pyproject.toml +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/common.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/consumer/CMakeLists.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/consumer/main.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/device/vulkan_devices_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/exr/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/exr/make_exr.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/exr/rgb_float_zip.exr +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/exr/rgba_half_window.exr +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/exr/y_half_zips.exr +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ies/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ies/downlight_quadrant.ies +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ies/floodlight_type_b.ies +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ies/lamp.tilt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ktx2/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ktx2/quadrants_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ktx2/quadrants_uastc_zstd.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ktx2/tilted_normal_etc1s.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/ktx2/tilted_normal_uastc.ktx2 +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/float_deflate_predictor3.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/float_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/int16_bigtiff_bigendian.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/rgb_lzw_predictor2.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/rgb_planar_lzw.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/rgb_planar_raw.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/tiff/rgb_tiled_deflate.tif +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/volumes/cube.nvdb +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/fixtures/volumes/make_nvdb.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/geometry/bounds_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/io/ies_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/io/image_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/io/nanovdb_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/io/raster_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/io/texture_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/astronomy_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/atmosphere_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/cloud_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/reflectance_library_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/regolith_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/scattering_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/solar_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/physics/spectrum_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/python/test_package.py +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/extent_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/instancer_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/path_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/planet_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/shade_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/storage_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/scene/vol_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/algorithm_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/bytes_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/disk_cache_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/file_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/hash_index_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/linear_algebra_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/log_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/math_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/noise_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/parallel_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/profiler_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/random_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/tensor_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/text_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/version_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/tests/util/worker_pool_test.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/LICENSES/Apache-2.0.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/LICENSES/BSD-3-clause.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/LICENSES/MIT.txt +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/NOTICE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/README.md +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_astc_cfgs.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_astc_hdr_core.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_astc_helpers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_containers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_containers_impl.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_dds_transcoder.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_etc1_mods.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_file_headers.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_idct.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder.cpp +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_internal.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_astc.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_astc_0_255.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_55.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_atc_56.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_alpha.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_bc7_m5_color.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_5.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_dxt1_6.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_45.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_tables_pvrtc2_alpha_33.inc +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_transcoder_uastc.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_xbc7_decoder.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/transcoder/basisu_xbc7_decoder.inl +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/zstd/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/zstd/zstd.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/basisu/zstd/zstd_errors.h +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/third_party/nanovdb/LICENSE +0 -0
- {ernie_renderer-0.2.0.dev35 → ernie_renderer-0.2.0.dev40}/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 ".dev40" 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.dev40
|
|
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()
|
|
@@ -169,12 +169,16 @@ void Scene::Write(PrimId prim, std::string_view attribute, Tensor array) {
|
|
|
169
169
|
store_.Set(prim, token, std::move(array));
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
const
|
|
172
|
+
template <typename T> const T* Scene::Authored(PrimId prim, std::string_view attribute) const {
|
|
173
173
|
const Column* column = AuthoredColumn(prim, attribute);
|
|
174
|
-
if (column == nullptr || column->values->Type() !=
|
|
174
|
+
if (column == nullptr || column->values->Type() != kColumnType<T>) {
|
|
175
175
|
return nullptr;
|
|
176
176
|
}
|
|
177
|
-
return &store_.Read<
|
|
177
|
+
return &store_.Read<T>(store_.PrimBucket(prim), column->attribute)[store_.PrimRow(prim)];
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const Tensor* Scene::Read(PrimId prim, std::string_view attribute) const {
|
|
181
|
+
return Authored<Tensor>(prim, attribute);
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
std::optional<Value> Scene::Get(PrimId prim, std::string_view attribute) const {
|
|
@@ -277,11 +281,17 @@ void Scene::AddTo(Box& bounds, PathId path, const glm::dmat4& parent, bool visib
|
|
|
277
281
|
bounds.Extend(extent->Transformed(world));
|
|
278
282
|
return;
|
|
279
283
|
}
|
|
284
|
+
bool loaded = false;
|
|
280
285
|
store_.Paths().ForEachChild(path, [&](PathId child) {
|
|
281
286
|
if (store_.Find(child)) {
|
|
287
|
+
loaded = true;
|
|
282
288
|
AddTo(bounds, child, world, visibleOnly);
|
|
283
289
|
}
|
|
284
290
|
});
|
|
291
|
+
// A model whose subtree isn't loaded is bounded by its hint.
|
|
292
|
+
if (!loaded) {
|
|
293
|
+
bounds.Extend(ExtentsHint(prim, !visibleOnly).Transformed(world));
|
|
294
|
+
}
|
|
285
295
|
}
|
|
286
296
|
|
|
287
297
|
PrimId Scene::Require(const Path& path) const {
|
|
@@ -300,19 +310,27 @@ BucketId Scene::FindOrAddBucket(const SchemaDef* schema, std::vector<Token> apis
|
|
|
300
310
|
return *found;
|
|
301
311
|
}
|
|
302
312
|
BucketSchema entry{schema, {}};
|
|
313
|
+
const std::vector<ApiName> allApis = AllApis(schema, key.apiSchemas);
|
|
314
|
+
// The type's fallback overrides win over its API schemas', as USD's do.
|
|
315
|
+
const auto fallback = [&](const AttributeDef& def, const std::string& name) -> const Value& {
|
|
316
|
+
const Value* override = schema != nullptr ? schema->FallbackOverride(name) : nullptr;
|
|
317
|
+
for (auto api = allApis.begin(); override == nullptr && api != allApis.end(); ++api) {
|
|
318
|
+
override = api->schema->FallbackOverride(name);
|
|
319
|
+
}
|
|
320
|
+
return override != nullptr ? *override : def.fallback;
|
|
321
|
+
};
|
|
303
322
|
std::vector<ColumnLayout> layout;
|
|
304
323
|
const auto add = [&](const SchemaDef& declaring, const ApiName& api) {
|
|
305
324
|
for (const AttributeDef* def : declaring.AllAttributes()) {
|
|
306
325
|
const std::string name = api.Attribute(def->name);
|
|
307
|
-
|
|
308
|
-
layout.push_back(MakeLayout(paths, *def, name, override ? *override : def->fallback));
|
|
326
|
+
layout.push_back(MakeLayout(paths, *def, name, fallback(*def, name)));
|
|
309
327
|
entry.declared.emplace(layout.back().attribute, def);
|
|
310
328
|
}
|
|
311
329
|
};
|
|
312
330
|
if (schema != nullptr) {
|
|
313
331
|
add(*schema, {});
|
|
314
332
|
}
|
|
315
|
-
for (const ApiName& api :
|
|
333
|
+
for (const ApiName& api : allApis) {
|
|
316
334
|
add(*api.schema, api);
|
|
317
335
|
}
|
|
318
336
|
const BucketId bucket = store_.AddBucket(key, layout);
|
|
@@ -333,7 +351,16 @@ const std::vector<Token>& Scene::Apis(PrimId prim) const {
|
|
|
333
351
|
}
|
|
334
352
|
|
|
335
353
|
void Scene::ApplyApi(PrimId prim, std::string_view api) {
|
|
336
|
-
ApiName::Parse(api);
|
|
354
|
+
const ApiName parsed = ApiName::Parse(api);
|
|
355
|
+
const std::vector<std::string_view>& allowed = parsed.schema->appliesTo;
|
|
356
|
+
const SchemaDef* type = Schema(prim);
|
|
357
|
+
if (!allowed.empty() && std::ranges::none_of(allowed, [&](std::string_view name) {
|
|
358
|
+
return type != nullptr && type->IsA(*FindSchema(name));
|
|
359
|
+
})) {
|
|
360
|
+
throw std::invalid_argument(std::string(api) + " applies only to " +
|
|
361
|
+
std::string(allowed.front()) + " prims, not " +
|
|
362
|
+
Describe(*this, prim));
|
|
363
|
+
}
|
|
337
364
|
std::vector<Token> apis = Apis(prim);
|
|
338
365
|
apis.push_back(store_.Tokens().Intern(api));
|
|
339
366
|
MoveTo(prim, Schema(prim), std::move(apis));
|
|
@@ -356,12 +383,24 @@ bool Scene::HasApi(PrimId prim, std::string_view api) const {
|
|
|
356
383
|
|
|
357
384
|
std::vector<ApiName> Scene::AllApis(const SchemaDef* schema, std::span<const Token> applied) const {
|
|
358
385
|
std::vector<ApiName> apis;
|
|
386
|
+
// Each API schema once, followed by those built into it (MeshLightAPI's LightAPI, LightAPI's
|
|
387
|
+
// light-link collections).
|
|
388
|
+
const auto add = [&](const auto& self, std::string_view name) -> void {
|
|
389
|
+
const ApiName api = ApiName::Parse(name);
|
|
390
|
+
if (std::ranges::find(apis, api) != apis.end()) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
apis.push_back(api);
|
|
394
|
+
for (const std::string_view builtin : api.schema->AllBuiltinApis()) {
|
|
395
|
+
self(self, builtin);
|
|
396
|
+
}
|
|
397
|
+
};
|
|
359
398
|
for (const std::string_view builtin :
|
|
360
399
|
schema != nullptr ? schema->AllBuiltinApis() : std::vector<std::string_view>{}) {
|
|
361
|
-
|
|
400
|
+
add(add, builtin);
|
|
362
401
|
}
|
|
363
402
|
for (const Token token : applied) {
|
|
364
|
-
|
|
403
|
+
add(add, store_.Tokens().Text(token));
|
|
365
404
|
}
|
|
366
405
|
return apis;
|
|
367
406
|
}
|
|
@@ -371,15 +410,24 @@ std::vector<std::string> Scene::AppliedApis(PrimId prim) const {
|
|
|
371
410
|
}
|
|
372
411
|
|
|
373
412
|
bool Scene::LeavesOutOfBounds(PrimId prim) const {
|
|
374
|
-
const
|
|
375
|
-
const Column* column = AuthoredColumn(prim, attribute);
|
|
376
|
-
return column ? std::optional(store_.Read<Token>(store_.PrimBucket(prim),
|
|
377
|
-
column->attribute)[store_.PrimRow(prim)])
|
|
378
|
-
: std::nullopt;
|
|
379
|
-
};
|
|
413
|
+
const Token* visibility = Authored<Token>(prim, Imageable::kVisibility);
|
|
380
414
|
// Purpose is inherited, so a subtree under another purpose is left out whole.
|
|
381
|
-
const
|
|
382
|
-
return
|
|
415
|
+
const Token* purpose = Authored<Token>(prim, Imageable::kPurpose);
|
|
416
|
+
return (visibility && *visibility == invisible_) || (purpose && *purpose != defaultPurpose_);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
Box Scene::ExtentsHint(PrimId prim, bool allPurposes) const {
|
|
420
|
+
const auto* hint = Authored<std::vector<float>>(prim, GeomModelAPI::kExtentsHint);
|
|
421
|
+
if (hint == nullptr) {
|
|
422
|
+
return {};
|
|
423
|
+
}
|
|
424
|
+
// Six floats per purpose, the default purpose first.
|
|
425
|
+
const std::size_t floats = allPurposes ? hint->size() : std::min<std::size_t>(6, hint->size());
|
|
426
|
+
Box box;
|
|
427
|
+
for (std::size_t i = 0; i + 6 <= floats; i += 6) {
|
|
428
|
+
box.Extend(AuthoredExtent(std::span(*hint).subspan(i, 6)));
|
|
429
|
+
}
|
|
430
|
+
return box;
|
|
383
431
|
}
|
|
384
432
|
|
|
385
433
|
const Column* Scene::AuthoredColumn(PrimId prim, std::string_view attribute) const {
|
|
@@ -429,4 +477,18 @@ ColumnType Scene::TypeForUndeclared(PrimId prim, std::string_view attribute,
|
|
|
429
477
|
return *type;
|
|
430
478
|
}
|
|
431
479
|
|
|
480
|
+
std::optional<PrimId> ExtentRows::Resolve(const Target& target) const {
|
|
481
|
+
return target.path != kNoPath ? store.Find(target.path) : std::nullopt;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
std::optional<Box> ExtentRows::ExtentInRowSpace(PrimId other, std::uint32_t row) const {
|
|
485
|
+
const std::optional<Box> extent = scene->Extent(other);
|
|
486
|
+
if (!extent) {
|
|
487
|
+
return std::nullopt;
|
|
488
|
+
}
|
|
489
|
+
const PrimId own = store.GetBucket(bucket).prims[row];
|
|
490
|
+
return extent->Transformed(glm::inverse(scene->WorldTransform(own)) *
|
|
491
|
+
scene->WorldTransform(other));
|
|
492
|
+
}
|
|
493
|
+
|
|
432
494
|
} // namespace ernie
|
|
@@ -121,10 +121,13 @@ 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;
|
|
129
|
+
/// @return The attribute's value when the prim authors it as a `T`, or null.
|
|
130
|
+
template <typename T> const T* Authored(PrimId prim, std::string_view attribute) const;
|
|
128
131
|
const AttributeDef* Declared(BucketId bucket, AttributeId attribute) const;
|
|
129
132
|
/// @return Whether the prim's type or an applied API schema leaves the attribute's namespace
|
|
130
133
|
/// open; any attribute for a prim without a type.
|
|
@@ -132,6 +135,8 @@ class Scene {
|
|
|
132
135
|
ColumnType TypeForUndeclared(PrimId prim, std::string_view attribute, const Value& value) const;
|
|
133
136
|
/// @return Whether the prim and its subtree are invisible or of a purpose bounds leave out.
|
|
134
137
|
bool LeavesOutOfBounds(PrimId prim) const;
|
|
138
|
+
/// @return GeomModelAPI's extentsHint: the default purpose's box, or with `allPurposes`, all.
|
|
139
|
+
Box ExtentsHint(PrimId prim, bool allPurposes) const;
|
|
135
140
|
/// Adds a subtree's extents under `parent`'s transform; with `visibleOnly`, only its visible
|
|
136
141
|
/// default-purpose prims'.
|
|
137
142
|
void AddTo(Box& bounds, PathId path, const glm::dmat4& parent, bool visibleOnly) 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.dev40}/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,78 @@
|
|
|
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(GeomModelAPI, SingleApply, kInheritExtent, ERNIE_MODEL_API_ATTRIBUTES)
|
|
64
|
+
ERNIE_DEFINE_SCHEMA(GeomSubset, Concrete, kNoExtent, ERNIE_SUBSET_ATTRIBUTES)
|
|
65
|
+
ERNIE_DEFINE_SCHEMA(Cube, Concrete, ComputedExtent(CentredExtent<CubeHalves>),
|
|
66
|
+
ERNIE_CUBE_ATTRIBUTES)
|
|
67
|
+
ERNIE_DEFINE_SCHEMA(Sphere, Concrete, ComputedExtent(CentredExtent<SphereHalves>),
|
|
68
|
+
ERNIE_SPHERE_ATTRIBUTES)
|
|
69
|
+
ERNIE_DEFINE_SCHEMA(Cylinder, Concrete, ComputedExtent(CentredExtent<RoundHalves<false>>),
|
|
70
|
+
ERNIE_CYLINDER_ATTRIBUTES)
|
|
71
|
+
ERNIE_DEFINE_SCHEMA(Cone, Concrete, ComputedExtent(CentredExtent<RoundHalves<false>>),
|
|
72
|
+
ERNIE_CYLINDER_ATTRIBUTES)
|
|
73
|
+
ERNIE_DEFINE_SCHEMA(Capsule, Concrete, ComputedExtent(CentredExtent<RoundHalves<true>>),
|
|
74
|
+
ERNIE_CAPSULE_ATTRIBUTES)
|
|
75
|
+
ERNIE_DEFINE_SCHEMA(Plane, Concrete, ComputedExtent(CentredExtent<PlaneHalves>),
|
|
76
|
+
ERNIE_PLANE_ATTRIBUTES)
|
|
77
|
+
|
|
78
|
+
} // namespace ernie
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#include "ernie/scene/view.h"
|
|
11
11
|
|
|
12
12
|
#include <array>
|
|
13
|
+
#include <span>
|
|
13
14
|
#include <string>
|
|
14
15
|
#include <string_view>
|
|
15
16
|
#include <vector>
|
|
@@ -51,6 +52,47 @@
|
|
|
51
52
|
"The winding of its front faces.", .group = "Geometry", \
|
|
52
53
|
.options = {"rightHanded", "leftHanded"}, .dirty = Dirty::Topology)
|
|
53
54
|
|
|
55
|
+
#define ERNIE_CARD_TEXTURE(X, Name, usdName) \
|
|
56
|
+
X(std::string, Name, usdName, "", "The image on the card facing this way.", .group = "Model", \
|
|
57
|
+
.asset = true, .dirty = Dirty::Params)
|
|
58
|
+
|
|
59
|
+
#define ERNIE_MODEL_API_ATTRIBUTES(X) \
|
|
60
|
+
X(std::string, DrawMode, "model:drawMode", "inherited", \
|
|
61
|
+
"Draws the subtree as itself, or as a stand-in: its origin axes, its bounds or cards.", \
|
|
62
|
+
.group = "Model", .options = {"origin", "bounds", "cards", "default", "inherited"}, \
|
|
63
|
+
.dirty = Dirty::Visibility) \
|
|
64
|
+
X(bool, ApplyDrawMode, "model:applyDrawMode", false, \
|
|
65
|
+
"Whether this prim's draw mode replaces its subtree.", .group = "Model", \
|
|
66
|
+
.dirty = Dirty::Visibility) \
|
|
67
|
+
X(glm::dvec3, DrawModeColor, "model:drawModeColor", glm::dvec3(0.18), \
|
|
68
|
+
"Linear RGB of the stand-in.", .group = "Model", .lower = AtLeast(0.0), .color = true, \
|
|
69
|
+
.dirty = Dirty::Params) \
|
|
70
|
+
X(std::string, CardGeometry, "model:cardGeometry", "cross", \
|
|
71
|
+
"Cards through the centre, on the bounds' faces, or as the textures place them.", \
|
|
72
|
+
.group = "Model", .options = {"cross", "box", "fromTexture"}, .dirty = Dirty::Params) \
|
|
73
|
+
X(std::string, CardVisibility, "model:cardVisibility", "inherited", \
|
|
74
|
+
"Every textured card, or only one per axis.", .group = "Model", \
|
|
75
|
+
.options = {"full", "simple", "inherited"}, .dirty = Dirty::Params) \
|
|
76
|
+
ERNIE_CARD_TEXTURE(X, CardTextureXPos, "model:cardTextureXPos") \
|
|
77
|
+
ERNIE_CARD_TEXTURE(X, CardTextureYPos, "model:cardTextureYPos") \
|
|
78
|
+
ERNIE_CARD_TEXTURE(X, CardTextureZPos, "model:cardTextureZPos") \
|
|
79
|
+
ERNIE_CARD_TEXTURE(X, CardTextureXNeg, "model:cardTextureXNeg") \
|
|
80
|
+
ERNIE_CARD_TEXTURE(X, CardTextureYNeg, "model:cardTextureYNeg") \
|
|
81
|
+
ERNIE_CARD_TEXTURE(X, CardTextureZNeg, "model:cardTextureZNeg") \
|
|
82
|
+
X(std::vector<float>, ExtentsHint, "extentsHint", std::vector<float>{}, \
|
|
83
|
+
"The subtree's local bounds per purpose (default, render, proxy, guide), six floats each, " \
|
|
84
|
+
"read while it isn't loaded.", .group = "Model")
|
|
85
|
+
|
|
86
|
+
#define ERNIE_SUBSET_ATTRIBUTES(X) \
|
|
87
|
+
X(std::string, ElementType, "elementType", "face", "What its indices count.", \
|
|
88
|
+
.group = "Subset", .options = {"face", "point", "edge", "segment", "tetrahedron"}, \
|
|
89
|
+
.dirty = Dirty::Topology) \
|
|
90
|
+
X(Tensor, Indices, "indices", Tensor(), "The elements in the subset.", .group = "Subset", \
|
|
91
|
+
.integer = true, .dirty = Dirty::Topology) \
|
|
92
|
+
X(std::string, FamilyName, "familyName", "", \
|
|
93
|
+
"The family of subsets it is one of, as materialBind for per-face materials.", \
|
|
94
|
+
.group = "Subset", .dirty = Dirty::Topology)
|
|
95
|
+
|
|
54
96
|
#define ERNIE_SHAPE_LENGTH .group = "Shape", .lower = AtLeast(0.0), .finite = true
|
|
55
97
|
|
|
56
98
|
#define ERNIE_AXIS_ATTRIBUTE(X) \
|
|
@@ -86,7 +128,7 @@ namespace ernie {
|
|
|
86
128
|
|
|
87
129
|
/// @return A Boundable's authored `extent` (min x, y, z, max x, y, z), which extent functions
|
|
88
130
|
/// read while the data they bound isn't on the host; empty when unset.
|
|
89
|
-
inline Box AuthoredExtent(
|
|
131
|
+
inline Box AuthoredExtent(std::span<const float> extent) {
|
|
90
132
|
if (extent.size() != 6) {
|
|
91
133
|
return {};
|
|
92
134
|
}
|
|
@@ -99,85 +141,32 @@ template <> struct ChoiceTokens<Axis> {
|
|
|
99
141
|
static constexpr std::array<std::string_view, 3> kTokens{"X", "Y", "Z"};
|
|
100
142
|
};
|
|
101
143
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
-
};
|
|
144
|
+
ERNIE_SCHEMA(Imageable, SchemaView, ERNIE_IMAGEABLE_ATTRIBUTES,
|
|
145
|
+
"What every prim has: visibility, purpose and the world it is in.");
|
|
146
|
+
ERNIE_SCHEMA(Xformable, Imageable, ERNIE_XFORMABLE_ATTRIBUTES,
|
|
147
|
+
"What has a transform, composed from its xformOps.");
|
|
148
|
+
ERNIE_SCHEMA(Boundable, Xformable, ERNIE_BOUNDABLE_ATTRIBUTES,
|
|
149
|
+
"What has an extent in its own space, computed from its attributes.");
|
|
150
|
+
ERNIE_SCHEMA(Gprim, Boundable, ERNIE_GPRIM_ATTRIBUTES,
|
|
151
|
+
"Geometry, drawn in a display colour or with a bound material.");
|
|
152
|
+
ERNIE_CONCRETE_SCHEMA(Xform, Xformable, ERNIE_NO_ATTRIBUTES, "A transform grouping its children.");
|
|
153
|
+
ERNIE_CONCRETE_SCHEMA(Scope, Imageable, ERNIE_NO_ATTRIBUTES,
|
|
154
|
+
"A grouping without a transform of its own.");
|
|
155
|
+
ERNIE_API_SCHEMA(GeomModelAPI, ERNIE_MODEL_API_ATTRIBUTES,
|
|
156
|
+
"A model's stand-ins and the bounds hint used while its subtree isn't loaded.");
|
|
157
|
+
ERNIE_CONCRETE_SCHEMA(GeomSubset, SchemaView, ERNIE_SUBSET_ATTRIBUTES,
|
|
158
|
+
"Some faces, points, edges, segments or tetrahedra of its parent, to bind a "
|
|
159
|
+
"material to or select.");
|
|
160
|
+
ERNIE_CONCRETE_SCHEMA(Cube, Gprim, ERNIE_CUBE_ATTRIBUTES,
|
|
161
|
+
"A box centred on its origin, size along each axis.");
|
|
162
|
+
ERNIE_CONCRETE_SCHEMA(Sphere, Gprim, ERNIE_SPHERE_ATTRIBUTES, "A sphere centred on its origin.");
|
|
163
|
+
ERNIE_CONCRETE_SCHEMA(Cylinder, Gprim, ERNIE_CYLINDER_ATTRIBUTES,
|
|
164
|
+
"A capped cylinder along its axis.");
|
|
165
|
+
ERNIE_CONCRETE_SCHEMA(Cone, Gprim, ERNIE_CYLINDER_ATTRIBUTES,
|
|
166
|
+
"A capped cone along its axis, its apex at +height / 2.");
|
|
167
|
+
ERNIE_CONCRETE_SCHEMA(Capsule, Gprim, ERNIE_CAPSULE_ATTRIBUTES,
|
|
168
|
+
"A cylinder with hemispherical caps along its axis.");
|
|
169
|
+
ERNIE_CONCRETE_SCHEMA(Plane, Gprim, ERNIE_PLANE_ATTRIBUTES,
|
|
170
|
+
"A one-sided rectangle facing along its axis.");
|
|
182
171
|
|
|
183
172
|
} // namespace ernie
|