ernie-renderer 0.1.0.dev189__tar.gz → 0.1.0.dev196__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.
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/CMakeLists.txt +1 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/PKG-INFO +1 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/slang.cmake +4 -0
- ernie_renderer-0.1.0.dev196/demos/batched/batch_camera.cpp +399 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/batched/batch_camera.py +14 -5
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/lighting/illuminants.cpp +3 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/lighting/illuminants.py +3 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/cli.cpp +5 -7
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/shading.slang +89 -27
- ernie_renderer-0.1.0.dev196/ernie/kernel/raster/terrain_horizon.slang +91 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/CMakeLists.txt +5 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/delegate.cpp +7 -4
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/ground_drawable.cpp +5 -4
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/mesh_drawable.cpp +16 -9
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/mesh_drawable.h +1 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/renderer.cpp +32 -5
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/renderer.h +9 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/terrain_drawable.cpp +23 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/terrain_drawable.h +2 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/resolve.cpp +34 -12
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_demos.py +1 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_lights_gpu_test.cpp +44 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/session_lights_test.cpp +27 -0
- ernie_renderer-0.1.0.dev196/ernie/test/util_ies_test.cpp +176 -0
- ernie_renderer-0.1.0.dev196/ernie/util/ies.cpp +305 -0
- ernie_renderer-0.1.0.dev196/ernie/util/ies.h +88 -0
- ernie_renderer-0.1.0.dev189/ernie/kernel/raster/terrain_horizon.slang +0 -80
- ernie_renderer-0.1.0.dev189/ernie/test/util_ies_test.cpp +0 -75
- ernie_renderer-0.1.0.dev189/ernie/util/ies.cpp +0 -189
- ernie_renderer-0.1.0.dev189/ernie/util/ies.h +0 -46
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.clang-format +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.clang-tidy +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.cmake-format.yaml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.gitattributes +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/dependabot.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/pull_request_template.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/scripts/ci_metrics.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/workflows/ci-metrics.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.github/workflows/ci.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.gitignore +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/CITATION.cff +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/CMakePresets.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/CONTRIBUTING.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/EmbedShaders.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ErnieCPackOptions.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ErnieLicenses.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/cppcheck/ernie.cfg +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/ernie_exports.map +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/dear_imgui/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/dear_imgui.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/embed_file.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/glfw.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/gui_fonts.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/imguizmo.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/implot.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/meshoptimizer.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/moltenvk.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/openexr.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/vma/vma.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/vma.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/main.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/util.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/util.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/viewer/sun_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/demos/viewer/sun_panel.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/Makefile +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/cpp.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/app.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/astronomy.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/batch.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/cameras.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/demo.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/rendering.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/scene.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/schemas.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/api/python/tokens.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/cameras.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/lighting.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/materials.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/scene.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/sensor-filters.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/shadows.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/spectral.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/star-fields.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/terrain.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/concepts/transforms.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/css/extra.css +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-aovs.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-brdfs.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-lenses.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-panels.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-render-delegates.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-sensor-filters.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-spectra.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/custom-star-catalogs.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/debug-draw.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/frame-callbacks.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/extending/index.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/getting-started/demos.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/getting-started/installation.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/getting-started/quickstart.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/getting-started/viewer.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/guides/batched-rendering.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/guides/gpu-interop.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/guides/scenes.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/index.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/docs/requirements.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/app.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/builtin_panels.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/camera_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/cli.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/create.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/create.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/demo.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/demo.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/file_dialog.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/file_dialog.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/icons.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/log_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/panel.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/prim_icons.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/prim_icons.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/prim_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/prim_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/profiler_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/properties_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/property_fields.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/property_fields.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/session.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/session.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/settings_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/stage_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/theme.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/theme.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/viewer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/app/viewer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/buffer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/buffer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/compute_interop.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/compute_interop.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/cuda_interop.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/cuda_interop.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/frame_uploads.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/frame_uploads.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/gpu_profile.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/gpu_timer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/gpu_timer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/image.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/image.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/offscreen_target.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/offscreen_target.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/pipeline.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/pipeline.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/shader_compiler.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/shader_compiler.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/swapchain.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/swapchain.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/vulkan_context.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/device/vulkan_context.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/cube_sphere_lod.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/cube_sphere_lod.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/frustum.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/frustum.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/lod_quadtree.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/lod_quadtree.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/mesh_data.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/mesh_data.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/primitives.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/geometry/primitives.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/brdf.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/hapke.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/lambert.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/lommel_seeliger.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/lunar_lambert.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/oren_nayar.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/closure/preview_surface.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/embedded_shaders.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/cube_faces.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_bayer.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_blooming.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_color_matrix.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_compand.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_compand_table.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_dark_current.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_defect_pixels.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_defocus.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_demosaic.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_detector_pattern.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_glare.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_jpeg.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_lag.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_measured_qe.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_psf.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_readout_taps.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_smear.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_spectral_transmission.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_tdi.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_temporal_average.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_tone_curve.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/filter_white_balance.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/lens.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/pyramid.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/film/sensor.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/cull.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/depth_range.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/frame.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/ground.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/hzb.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/instance_anchors.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/instance_compose.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/light_views.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/mesh.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/mesh_normals.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/meter.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/minimal_resolve.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/motion.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/motion_vectors.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/overlay.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/planet.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/planet_color.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/planet_shadow.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/points.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/present.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/projection_pinhole.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/projection_pushbroom.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/surface.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/terrain.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/terrain_color.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/terrain_shadow.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/terrain_update.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/views.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/app.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/bindings.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/demo.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/__main__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/app.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/batch.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/cli.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/demo.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/demos/__init__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/demos/__main__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/ernie/schema.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/render.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/scene.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/scene_json.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/schema.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/stub_schema.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/python/tensor.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/delegate.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/ground_drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/material.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/material.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/minimal_targets.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/minimal_targets.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/overlay_pass.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/overlay_pass.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/planet_drawable.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/planet_drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/points_drawable.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/points_drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/poisson_disk.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/poisson_disk.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/render_targets.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/render_targets.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/sensor_plan.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/sensor_plan.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/shadow_cascades.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/raster/shadow_cascades.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/base_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/base_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/brdf.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/brdf.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/cahvore.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/cahvore.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/camera.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/camera.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/camera_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/camera_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/edit_history.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/edit_history.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/geometry_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/geometry_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/instruments.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/instruments.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/isd.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/isd.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/light_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/light_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/material.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/material_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/material_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/orbit_controller.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/orbit_controller.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/overlay.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/overlay.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/prim_type.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/prim_type.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/render_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/render_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/scene.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/scene.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/scene_json.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/scene_json.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/schema.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/schema.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/sensor_filters.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/sensor_filters.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/terrain_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/terrain_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/tokens.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/wide_view.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/wide_view.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/backends.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/delegate.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/delegate.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/frame_params.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/frame_params.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/outputs.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/outputs.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/product_frame.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/renderer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/renderer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/resolve.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/session/sampling.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_demo_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_demo_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_file_dialog_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_panel_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_prim_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_session_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_theme_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/app_viewer_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/device_cuda_interop_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/device_frame_uploads_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/device_pipeline_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/device_shader_compiler_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/device_vulkan_context_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/cahvore/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/cahvore/m2020_camera_models.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/constVelocityLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/ctxLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/dawnfc_radtan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/lroWacPushFrame.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/orbitalFramer.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/orbitalLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/orbitalPushFrame.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/simpleFramerISD.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/isd/toughLroNacLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/fixtures/scene_basic.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/geometry_cube_sphere_lod_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/geometry_frustum_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/geometry_lod_quadtree_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/geometry_mesh_data_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/geometry_primitives_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/install/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/install/consumer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/install/run_install_test.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/conftest.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_app.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_batch.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_cahvore.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_cuda.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_filters.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_instruments.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_isd.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_map.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_materials.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_minimal.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_overlays.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_readme.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_render.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_scene.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_schema.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_schema_camera.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_schema_geometry.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_schema_material.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_schema_render.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_schema_terrain.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_stars.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_step.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform_gpu.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform_gpu_cameras.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform_gpu_compose.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform_gpu_lights.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform_gpu_map.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/python/test_xform_gpu_points.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_batch_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_culling_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_delegate_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_delegate_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_gpu_meshes_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_gpu_terrain_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_hex_tiling_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_lens_rays_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_mesh_drawable_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_motion_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_overlays_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_planet_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_points_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_poisson_disk_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_products_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_sensor_filters_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_sensor_plan_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_shadow_cascades_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_standard_filters_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_terrain_drawable_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_textures_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/raster_zero_copy_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_brdf_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_brdf_vulkan_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_cahvore_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_camera_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_camera_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_edit_history_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_geometry_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_isd_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_json_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_material_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_orbit_controller_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_overlay_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_path_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_prim_type_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_render_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_scene_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_schema_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_sensor_filters_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_terrain_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_wide_view_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/scene_xform_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/session_delegate_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/session_frame_params_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/session_gpu_xform_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/session_resolve_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/session_sampling_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/support/brdf_reference.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/support/delegate_scenes.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/support/delegate_scenes.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/support/terrain_harness.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/support/test_raster.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/support/vulkan_fixture.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/util_astronomy_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/util_image_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/util_spectrum_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/test/util_tensor_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/astronomy.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/astronomy.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/image.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/image.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/least_squares.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/profile.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/raster_checks.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/raster_view.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/shader_source.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/spectrum.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/spectrum.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/mkdocs.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/pyproject.toml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/cameramodelutilsjs/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/dlpack/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/dlpack/include/dlpack/dlpack.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/stb/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/stb/stb.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/stb/stb_easy_font.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/stb/stb_image.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/third_party/stb/stb_image_write.h +0 -0
|
@@ -17,7 +17,7 @@ project(
|
|
|
17
17
|
# reads it here too (pyproject.toml), and the packages turn it into "~dev12".
|
|
18
18
|
# One line, as CI rewrites it and the wheel's version regex reads it.
|
|
19
19
|
# cmake-format: off
|
|
20
|
-
set(ERNIE_VERSION_SUFFIX ".
|
|
20
|
+
set(ERNIE_VERSION_SUFFIX ".dev196" CACHE STRING "Pre-release suffix of Ernie's version, such as .dev12")
|
|
21
21
|
# cmake-format: on
|
|
22
22
|
set(ERNIE_VERSION "${PROJECT_VERSION}${ERNIE_VERSION_SUFFIX}")
|
|
23
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ernie-renderer
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev196
|
|
4
4
|
Summary: Efficient Renderer for Natural and Interplanetary Environments: a spectral Vulkan renderer with a USD-style scene and batched cameras
|
|
5
5
|
Keywords: rendering,spectral,vulkan,planetary,space,sensor-simulation,reinforcement-learning,robotics
|
|
6
6
|
Author: Alex Maietta
|
|
@@ -67,3 +67,7 @@ file(
|
|
|
67
67
|
"${slang_library_dir}/slang-compiler.dll"
|
|
68
68
|
"${slang_library_dir}/slang-glslang.dll")
|
|
69
69
|
set(ERNIE_SLANG_RUNTIME_DIR "${slang_library_dir}")
|
|
70
|
+
# Windows has no rpath: a program finds its DLLs beside it, so the build's programs get Slang's.
|
|
71
|
+
if(WIN32 AND CMAKE_RUNTIME_OUTPUT_DIRECTORY)
|
|
72
|
+
file(COPY ${ERNIE_SLANG_RUNTIME} DESTINATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
|
|
73
|
+
endif()
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Benchmarks batched cameras for reinforcement learning: one environment ("world") per view, each
|
|
3
|
+
// a clone of the first, with camera poses that change every step on the GPU, and reports the time
|
|
4
|
+
// per step and views rendered per second. The C++ twin of batch_camera.py.
|
|
5
|
+
//
|
|
6
|
+
// ernie --demo batched/batch_camera [--views 1024] [--bands 3] [--minimal texturedDiffuse]
|
|
7
|
+
// [--viewer null] [--sweep] [--output views.png]
|
|
8
|
+
//
|
|
9
|
+
// Each environment holds a few boxes and spheres over a shared ground under a sun with shadows.
|
|
10
|
+
// The views orbit their environment, a step's poses arrive as a CUDA array, and the observations
|
|
11
|
+
// stay on the GPU (a step mapped with MapDevice::Gpu), the way a training loop consumes them.
|
|
12
|
+
// Spectral bands (ernie:spectralBands) set most of the shading and sensor cost; RGB observations
|
|
13
|
+
// need few. --minimal draws with minimal shading (ernie:minimal:mode) instead: one forward pass
|
|
14
|
+
// straight into the observations, with no spectral shading or sensor filters; "none" renders
|
|
15
|
+
// black colour and distances alone.
|
|
16
|
+
//
|
|
17
|
+
// Each frame is one batch step, timed after a few steps' warm-up; --sweep first times 256, 1024
|
|
18
|
+
// and 4096 views at 3 and 16 bands, each in a scene of its own. The environments are clones at
|
|
19
|
+
// the origin, so the viewer shows them as one. --output writes 16 views of the last step, spread
|
|
20
|
+
// round the orbit, as a contact sheet.
|
|
21
|
+
|
|
22
|
+
#include "ernie/app/demo.h"
|
|
23
|
+
#include "ernie/device/compute_interop.h"
|
|
24
|
+
#include "ernie/scene/base_schemas.h"
|
|
25
|
+
#include "ernie/scene/camera_schemas.h"
|
|
26
|
+
#include "ernie/scene/geometry_schemas.h"
|
|
27
|
+
#include "ernie/scene/light_schemas.h"
|
|
28
|
+
#include "ernie/scene/render_schemas.h"
|
|
29
|
+
#include "ernie/scene/xform.h"
|
|
30
|
+
#include "util.h"
|
|
31
|
+
|
|
32
|
+
#include <glm/gtc/constants.hpp>
|
|
33
|
+
|
|
34
|
+
#include <algorithm>
|
|
35
|
+
#include <array>
|
|
36
|
+
#include <chrono>
|
|
37
|
+
#include <cmath>
|
|
38
|
+
#include <cstdint>
|
|
39
|
+
#include <cstdio>
|
|
40
|
+
#include <cstring>
|
|
41
|
+
#include <map>
|
|
42
|
+
#include <optional>
|
|
43
|
+
#include <stdexcept>
|
|
44
|
+
#include <string>
|
|
45
|
+
#include <vector>
|
|
46
|
+
|
|
47
|
+
namespace {
|
|
48
|
+
|
|
49
|
+
using namespace ernie;
|
|
50
|
+
using demos::Check;
|
|
51
|
+
using Clock = std::chrono::steady_clock;
|
|
52
|
+
|
|
53
|
+
constexpr int kSize = 64;
|
|
54
|
+
constexpr int kSteps = 60; // distinct poses, cycled
|
|
55
|
+
constexpr int kWarmup = 5; // steps before timing: uploads, pipelines, allocations
|
|
56
|
+
|
|
57
|
+
// An environment's things, cubes and spheres in turn: their colours and where they stand, the
|
|
58
|
+
// same in batch_camera.py.
|
|
59
|
+
struct Thing {
|
|
60
|
+
glm::dvec3 colour;
|
|
61
|
+
double x;
|
|
62
|
+
double y;
|
|
63
|
+
};
|
|
64
|
+
constexpr std::array<Thing, 6> kThings = {{
|
|
65
|
+
{{0.700, 0.918, 0.821}, -1.649, -1.199},
|
|
66
|
+
{{0.899, 0.204, 0.857}, 1.782, -0.192},
|
|
67
|
+
{{0.442, 0.423, 0.404}, -0.330, 0.027},
|
|
68
|
+
{{0.643, 0.996, 0.834}, 0.733, 2.934},
|
|
69
|
+
{{0.372, 0.328, 0.690}, -2.736, -2.786},
|
|
70
|
+
{{0.612, 0.573, 0.934}, 0.775, 0.085},
|
|
71
|
+
}};
|
|
72
|
+
|
|
73
|
+
constexpr std::array<const char*, 4> kMinimalModes = {"off", "none", "constantDiffuse",
|
|
74
|
+
"texturedDiffuse"};
|
|
75
|
+
|
|
76
|
+
const Path kCamera("/World/Camera");
|
|
77
|
+
const Path kProduct("/Render/BatchCamera");
|
|
78
|
+
|
|
79
|
+
void BuildScene(Scene& scene, int worlds, int bands) {
|
|
80
|
+
GroundPlane::Define(scene, "/World/Ground");
|
|
81
|
+
DistantLight::Define(scene, "/World/Sun").SetTransform(DistantLightTransform({0.4, -0.6, 0.7}));
|
|
82
|
+
Xform::Define(scene, "/Envs/Env0");
|
|
83
|
+
for (std::size_t i = 0; i < kThings.size(); ++i) {
|
|
84
|
+
const Path thing("/Envs/Env0/Thing" + std::to_string(i));
|
|
85
|
+
if (i % 2 == 0) {
|
|
86
|
+
Cube::Define(scene, thing).SetDisplayColor(kThings[i].colour);
|
|
87
|
+
} else {
|
|
88
|
+
Sphere::Define(scene, thing).SetDisplayColor(kThings[i].colour);
|
|
89
|
+
}
|
|
90
|
+
SetXform(scene, thing, {.translate = glm::dvec3(kThings[i].x, kThings[i].y, 0.5)});
|
|
91
|
+
}
|
|
92
|
+
for (int world = 0; world < worlds; ++world) {
|
|
93
|
+
const Path env("/Envs/Env" + std::to_string(world));
|
|
94
|
+
if (world > 0) {
|
|
95
|
+
scene.Clone("/Envs/Env0", env);
|
|
96
|
+
}
|
|
97
|
+
Xform(scene, env).SetWorld(world);
|
|
98
|
+
}
|
|
99
|
+
Camera::Define(scene, kCamera).SetFocalLength(18.0).SetSpectralBands(bands);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// One pose per view, circling its environment from its own heading: float32 (views, 4, 4) in
|
|
103
|
+
/// the math convention, rows of four.
|
|
104
|
+
Tensor Orbit(int views, double angle) {
|
|
105
|
+
std::vector<float> poses;
|
|
106
|
+
poses.reserve(static_cast<std::size_t>(views) * 16);
|
|
107
|
+
for (int v = 0; v < views; ++v) {
|
|
108
|
+
const double heading = angle + 2.0 * glm::pi<double>() * v / views;
|
|
109
|
+
const glm::dmat4 pose =
|
|
110
|
+
LookAtTransform({8.0 * std::cos(heading), 8.0 * std::sin(heading), 5.0},
|
|
111
|
+
{0.0, 0.0, 0.5}, {0.0, 0.0, 1.0});
|
|
112
|
+
for (int row = 0; row < 4; ++row) {
|
|
113
|
+
for (int col = 0; col < 4; ++col) {
|
|
114
|
+
poses.push_back(static_cast<float>(pose[col][row]));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return Tensor::Copy<float>(poses, {views, 4, 4});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/// The render vars a batch renders: distances besides the black colour of minimal "none".
|
|
122
|
+
std::vector<std::string> RenderVars(const std::string& minimal) {
|
|
123
|
+
if (minimal == "none") {
|
|
124
|
+
return {"LdrColor", "DistanceToCamera"};
|
|
125
|
+
}
|
|
126
|
+
return {"LdrColor"};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/// A product rendering `views` views through the camera, one world each, as Python's
|
|
130
|
+
/// ernie.batch.BatchCamera defines it: minimal shading unless `minimal` is "off".
|
|
131
|
+
void DefineBatch(Scene& scene, int views, const std::string& minimal) {
|
|
132
|
+
std::vector<Path> vars;
|
|
133
|
+
for (const std::string& name : RenderVars(minimal)) {
|
|
134
|
+
const Path var = kProduct.Child("Vars").Child(name);
|
|
135
|
+
RenderVar::Define(scene, var).SetSourceName(name);
|
|
136
|
+
vars.push_back(var);
|
|
137
|
+
}
|
|
138
|
+
RenderProduct product = RenderProduct::Define(scene, kProduct)
|
|
139
|
+
.SetCamera(kCamera)
|
|
140
|
+
.SetResolution({kSize, kSize})
|
|
141
|
+
.SetOrderedVars(vars);
|
|
142
|
+
if (minimal != "off") {
|
|
143
|
+
product.SetMinimalMode(minimal);
|
|
144
|
+
}
|
|
145
|
+
std::vector<std::int32_t> worlds(static_cast<std::size_t>(views));
|
|
146
|
+
for (int v = 0; v < views; ++v) {
|
|
147
|
+
worlds[static_cast<std::size_t>(v)] = v;
|
|
148
|
+
}
|
|
149
|
+
Camera(scene, kCamera)
|
|
150
|
+
.SetPoses(Orbit(views, 0.0))
|
|
151
|
+
.SetWorlds(Tensor::Copy<std::int32_t>(worlds, {views}));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/// Every step's poses, in CUDA memory, as a simulator would hand them over.
|
|
155
|
+
std::vector<Tensor> UploadPoses(ComputeInterop& compute, int views) {
|
|
156
|
+
std::vector<Tensor> poses;
|
|
157
|
+
for (int s = 0; s < kSteps; ++s) {
|
|
158
|
+
poses.push_back(compute.Upload(Orbit(views, 0.03 * s)));
|
|
159
|
+
}
|
|
160
|
+
return poses;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// Renders a step with `poses` and returns each render var's observations on the GPU, without
|
|
164
|
+
/// waiting for the render.
|
|
165
|
+
std::map<std::string, Tensor> StepBatch(Renderer& renderer, Scene& scene, const Tensor& poses) {
|
|
166
|
+
Camera(scene, kCamera).SetPoses(poses);
|
|
167
|
+
const Path products[] = {kProduct};
|
|
168
|
+
StepOperation operation = renderer.StepAsync(scene, products);
|
|
169
|
+
RenderProductSetOutputs outputs = operation.Outputs();
|
|
170
|
+
std::map<std::string, Tensor> observations;
|
|
171
|
+
for (auto& [name, var] : outputs.at(kProduct).vars) {
|
|
172
|
+
observations.emplace(name, var.Map(MapDevice::Gpu).tensor);
|
|
173
|
+
}
|
|
174
|
+
return observations;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
ComputeInterop& RequireCuda(Renderer& renderer) {
|
|
178
|
+
ComputeInterop* compute = renderer.Delegate().Compute();
|
|
179
|
+
if (compute == nullptr) {
|
|
180
|
+
throw std::runtime_error("This demo needs CUDA interop");
|
|
181
|
+
}
|
|
182
|
+
return *compute;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/// Seconds per step of `views` views at `bands` bands, in a scene of their own.
|
|
186
|
+
double Benchmark(Renderer& renderer, int views, int bands, const std::string& minimal) {
|
|
187
|
+
Scene scene;
|
|
188
|
+
BuildScene(scene, views, bands);
|
|
189
|
+
DefineBatch(scene, views, minimal);
|
|
190
|
+
ComputeInterop& compute = RequireCuda(renderer);
|
|
191
|
+
const std::vector<Tensor> poses = UploadPoses(compute, views);
|
|
192
|
+
for (int s = 0; s < kWarmup; ++s) {
|
|
193
|
+
StepBatch(renderer, scene, poses[static_cast<std::size_t>(s)]);
|
|
194
|
+
}
|
|
195
|
+
const Clock::time_point start = Clock::now();
|
|
196
|
+
std::map<std::string, Tensor> observations;
|
|
197
|
+
for (const Tensor& pose : poses) {
|
|
198
|
+
observations = StepBatch(renderer, scene, pose);
|
|
199
|
+
}
|
|
200
|
+
compute.Download(observations.at("LdrColor")); // the last step has finished
|
|
201
|
+
return std::chrono::duration<double>(Clock::now() - start).count() / kSteps;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
void PrintRate(int views, int bands, double perStep, const std::string& note = {}) {
|
|
205
|
+
std::printf("%6d views, %2d bands: %7.2f ms per step, %10.0f views per second%s\n", views,
|
|
206
|
+
bands, perStep * 1e3, views / perStep, note.c_str());
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
class BatchCameraDemo : public app::Demo {
|
|
210
|
+
public:
|
|
211
|
+
BatchCameraDemo(app::Viewer* viewer, const app::DemoOptions& options) : Demo(viewer, options) {
|
|
212
|
+
numFrames = kWarmup + kSteps;
|
|
213
|
+
bool sweep = false;
|
|
214
|
+
ParseOptions(options.extra, sweep);
|
|
215
|
+
Renderer& renderer = GetRenderer();
|
|
216
|
+
ComputeInterop& compute = RequireCuda(renderer);
|
|
217
|
+
std::printf("%s, %d x %d LdrColor observations\n", renderer.DeviceName().c_str(), kSize,
|
|
218
|
+
kSize);
|
|
219
|
+
if (sweep) {
|
|
220
|
+
for (const int bands : {3, 16}) {
|
|
221
|
+
for (const int views : {256, 1024, 4096}) {
|
|
222
|
+
PrintRate(views, bands, Benchmark(renderer, views, bands, "off"));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Minimal shading has no spectral bands to speak of: one row per mode.
|
|
226
|
+
for (std::size_t m = 1; m < kMinimalModes.size(); ++m) {
|
|
227
|
+
for (const int views : {256, 1024, 4096}) {
|
|
228
|
+
PrintRate(views, 3, Benchmark(renderer, views, 3, kMinimalModes[m]),
|
|
229
|
+
std::string(", minimal ") + kMinimalModes[m]);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
BuildScene(GetScene(), views_, bands_);
|
|
234
|
+
DefineBatch(GetScene(), views_, minimal_);
|
|
235
|
+
poses_ = UploadPoses(compute, views_);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
void Step() override {
|
|
239
|
+
if (frame == kWarmup) {
|
|
240
|
+
Images(); // the warm-up has finished
|
|
241
|
+
timerStart_ = Clock::now();
|
|
242
|
+
timedSteps_ = 0;
|
|
243
|
+
}
|
|
244
|
+
observations_ =
|
|
245
|
+
StepBatch(GetRenderer(), GetScene(), poses_[static_cast<std::size_t>(frame % kSteps)]);
|
|
246
|
+
if (timerStart_) {
|
|
247
|
+
++timedSteps_;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Without a viewer the batch step is the render.
|
|
252
|
+
void Render() override {
|
|
253
|
+
if (GetViewer() != nullptr) {
|
|
254
|
+
GetViewer()->Step();
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
void SaveOutput(const std::filesystem::path& path) override {
|
|
259
|
+
Report();
|
|
260
|
+
// 16 views spread round the orbit; neighbouring views differ by only a few degrees.
|
|
261
|
+
const Tensor images = Images();
|
|
262
|
+
const auto* texels = static_cast<const std::uint8_t*>(images.Data());
|
|
263
|
+
const int stride = std::max(views_ / 16, 1);
|
|
264
|
+
Tensor sheet = Tensor::Zeros(DType::UInt8, {4 * kSize, 4 * kSize, 4});
|
|
265
|
+
auto* to = static_cast<std::uint8_t*>(sheet.Data());
|
|
266
|
+
for (int i = 0; i < 16 && i * stride < views_; ++i) {
|
|
267
|
+
const int r = i / 4;
|
|
268
|
+
const int c = i % 4;
|
|
269
|
+
for (int y = 0; y < kSize; ++y) {
|
|
270
|
+
std::memcpy(to + ((r * kSize + y) * 4 * kSize + c * kSize) * 4,
|
|
271
|
+
texels +
|
|
272
|
+
((static_cast<std::size_t>(i * stride) * kSize + y) * kSize) * 4,
|
|
273
|
+
kSize * 4);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
app::WritePng(path, sheet);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
void Close() override {
|
|
280
|
+
Report();
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
void TestFinal() override {
|
|
284
|
+
Report();
|
|
285
|
+
const Tensor images = Images();
|
|
286
|
+
Check(images.Shape() == std::vector<std::int64_t>{views_, kSize, kSize, 4},
|
|
287
|
+
"the observations should hold a view per environment");
|
|
288
|
+
const std::size_t pixels = static_cast<std::size_t>(views_) * kSize * kSize;
|
|
289
|
+
// The values the checks look at: colours, or for minimal "none" (black by design) the
|
|
290
|
+
// distances in tenths of a metre, as the colours' scale.
|
|
291
|
+
std::vector<double> values(pixels * 3);
|
|
292
|
+
const auto* texels = static_cast<const std::uint8_t*>(images.Data());
|
|
293
|
+
if (minimal_ == "none") {
|
|
294
|
+
for (std::size_t i = 0; i < pixels; ++i) {
|
|
295
|
+
Check(texels[i * 4] == 0 && texels[i * 4 + 1] == 0 && texels[i * 4 + 2] == 0,
|
|
296
|
+
"minimal none renders no colour");
|
|
297
|
+
}
|
|
298
|
+
const Tensor distances =
|
|
299
|
+
RequireCuda(GetRenderer()).Download(observations_.at("DistanceToCamera"));
|
|
300
|
+
const auto* metres = static_cast<const float*>(distances.Data());
|
|
301
|
+
for (std::size_t i = 0; i < pixels; ++i) {
|
|
302
|
+
const double tenths =
|
|
303
|
+
std::isfinite(metres[i]) ? std::min(10.0 * metres[i], 255.0) : 0.0;
|
|
304
|
+
values[i * 3] = values[i * 3 + 1] = values[i * 3 + 2] = tenths;
|
|
305
|
+
}
|
|
306
|
+
} else {
|
|
307
|
+
for (std::size_t i = 0; i < pixels; ++i) {
|
|
308
|
+
for (int c = 0; c < 3; ++c) {
|
|
309
|
+
values[i * 3 + c] = texels[i * 4 + c];
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
double sum = 0.0;
|
|
314
|
+
double squares = 0.0;
|
|
315
|
+
for (const double value : values) {
|
|
316
|
+
sum += value;
|
|
317
|
+
squares += value * value;
|
|
318
|
+
}
|
|
319
|
+
const double mean = sum / static_cast<double>(values.size());
|
|
320
|
+
Check(std::sqrt(squares / static_cast<double>(values.size()) - mean * mean) > 1.0,
|
|
321
|
+
"the views should not render flat");
|
|
322
|
+
// Views from opposite headings see their environment from opposite sides.
|
|
323
|
+
if (views_ > 1) {
|
|
324
|
+
const std::size_t view = static_cast<std::size_t>(kSize) * kSize * 3;
|
|
325
|
+
const std::size_t opposite = static_cast<std::size_t>(views_ / 2) * view;
|
|
326
|
+
double largest = 0.0;
|
|
327
|
+
for (std::size_t i = 0; i < view; ++i) {
|
|
328
|
+
largest = std::max(largest, std::abs(values[i] - values[opposite + i]));
|
|
329
|
+
}
|
|
330
|
+
Check(largest > 16.0, "views from opposite headings should differ");
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
private:
|
|
335
|
+
/// --views, --bands, --minimal and --sweep among the demo's own arguments.
|
|
336
|
+
void ParseOptions(const std::vector<std::string>& extra, bool& sweep) {
|
|
337
|
+
for (std::size_t i = 0; i < extra.size(); ++i) {
|
|
338
|
+
const auto value = [&]() -> const std::string& {
|
|
339
|
+
if (i + 1 >= extra.size()) {
|
|
340
|
+
throw std::invalid_argument(extra[i] + " needs a value");
|
|
341
|
+
}
|
|
342
|
+
return extra[++i];
|
|
343
|
+
};
|
|
344
|
+
if (extra[i] == "--views") {
|
|
345
|
+
views_ = std::stoi(value());
|
|
346
|
+
} else if (extra[i] == "--bands") {
|
|
347
|
+
bands_ = std::stoi(value());
|
|
348
|
+
} else if (extra[i] == "--minimal") {
|
|
349
|
+
minimal_ = value();
|
|
350
|
+
if (std::find(kMinimalModes.begin(), kMinimalModes.end(), minimal_) ==
|
|
351
|
+
kMinimalModes.end()) {
|
|
352
|
+
throw std::invalid_argument("--minimal is off, none, constantDiffuse or "
|
|
353
|
+
"texturedDiffuse, not " +
|
|
354
|
+
minimal_);
|
|
355
|
+
}
|
|
356
|
+
} else if (extra[i] == "--sweep") {
|
|
357
|
+
sweep = true;
|
|
358
|
+
} else {
|
|
359
|
+
throw std::invalid_argument("Unknown option " + extra[i]);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (views_ < 1) {
|
|
363
|
+
throw std::invalid_argument("--views needs at least one view");
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/// The last step's views, uint8 (views, kSize, kSize, 4) on the host, waiting for the render.
|
|
368
|
+
Tensor Images() {
|
|
369
|
+
return RequireCuda(GetRenderer()).Download(observations_.at("LdrColor"));
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/// Prints the time per step since the warm-up, once the last step has finished; before the
|
|
373
|
+
/// output and the test, so that their downloads are not counted.
|
|
374
|
+
void Report() {
|
|
375
|
+
if (observations_.empty() || timedSteps_ == 0) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
Images(); // the last step has finished
|
|
379
|
+
const double perStep =
|
|
380
|
+
std::chrono::duration<double>(Clock::now() - *timerStart_).count() / timedSteps_;
|
|
381
|
+
std::string note = minimal_ == "off" ? std::string() : ", minimal " + minimal_;
|
|
382
|
+
note += GetViewer() == nullptr ? "" : " (with the viewer drawing)";
|
|
383
|
+
PrintRate(views_, bands_, perStep, note);
|
|
384
|
+
timedSteps_ = 0;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
int views_ = 1024;
|
|
388
|
+
int bands_ = 3;
|
|
389
|
+
std::string minimal_ = "off";
|
|
390
|
+
std::vector<Tensor> poses_;
|
|
391
|
+
std::map<std::string, Tensor> observations_;
|
|
392
|
+
std::optional<Clock::time_point> timerStart_;
|
|
393
|
+
int timedSteps_ = 0;
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
} // namespace
|
|
397
|
+
|
|
398
|
+
ERNIE_REGISTER_DEMO(BatchCameraDemo, "batched", "batch camera",
|
|
399
|
+
"A view per environment rendered in batches, timed per step.");
|
|
@@ -17,7 +17,7 @@ one forward pass straight into the observations, with no spectral shading or sen
|
|
|
17
17
|
Each frame is one batch step, timed after a few steps' warm-up; `--sweep` first times 256, 1024
|
|
18
18
|
and 4096 views at 3 and 16 bands, each in a scene of its own. The environments are clones at the
|
|
19
19
|
origin, so the viewer shows them as one. `--output` writes 16 views of the last step, spread round
|
|
20
|
-
the orbit, as a contact sheet.
|
|
20
|
+
the orbit, as a contact sheet. The Python twin of batch_camera.cpp.
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
23
|
import time
|
|
@@ -33,6 +33,17 @@ SIZE = 64
|
|
|
33
33
|
STEPS = 60 # distinct poses, cycled
|
|
34
34
|
WARMUP = 5 # steps before timing: uploads, pipelines, allocations
|
|
35
35
|
|
|
36
|
+
# An environment's things, cubes and spheres in turn: their colours and where they stand, the
|
|
37
|
+
# same in batch_camera.cpp.
|
|
38
|
+
THINGS = [
|
|
39
|
+
((0.700, 0.918, 0.821), (-1.649, -1.199)),
|
|
40
|
+
((0.899, 0.204, 0.857), (1.782, -0.192)),
|
|
41
|
+
((0.442, 0.423, 0.404), (-0.330, 0.027)),
|
|
42
|
+
((0.643, 0.996, 0.834), (0.733, 2.934)),
|
|
43
|
+
((0.372, 0.328, 0.690), (-2.736, -2.786)),
|
|
44
|
+
((0.612, 0.573, 0.934), (0.775, 0.085)),
|
|
45
|
+
]
|
|
46
|
+
|
|
36
47
|
|
|
37
48
|
def build_scene(scene, worlds, bands):
|
|
38
49
|
scene.define("/World/Ground", ernie.GroundPlane)
|
|
@@ -40,11 +51,9 @@ def build_scene(scene, worlds, bands):
|
|
|
40
51
|
tokens.TRANSFORM, ernie.distant_light_transform((0.4, -0.6, 0.7))
|
|
41
52
|
)
|
|
42
53
|
env0 = scene.define("/Envs/Env0", ernie.Xform)
|
|
43
|
-
|
|
44
|
-
for i in range(6):
|
|
54
|
+
for i, (colour, (x, y)) in enumerate(THINGS):
|
|
45
55
|
shape = ernie.Cube if i % 2 == 0 else ernie.Sphere
|
|
46
|
-
env0.define(f"Thing{i}", shape, display_color=
|
|
47
|
-
translate=(*rng.uniform(-3.0, 3.0, 2), 0.5))
|
|
56
|
+
env0.define(f"Thing{i}", shape, display_color=colour, translate=(x, y, 0.5))
|
|
48
57
|
for world in range(worlds):
|
|
49
58
|
env = env0 if world == 0 else ernie.Xform(scene.clone("/Envs/Env0", f"/Envs/Env{world}"))
|
|
50
59
|
env.world = world
|
|
@@ -131,10 +131,12 @@ class IlluminantsDemo : public app::Demo {
|
|
|
131
131
|
.SetPhotometricPower(1600.0)
|
|
132
132
|
.SetPhysicalCustomIlluminant(Fluorescent())
|
|
133
133
|
.SetTransform(LookAtTransform({-1.2, 0.6, 2.9}, {-0.25, 1.0, 1.0}, {0.0, 1.0, 0.0}));
|
|
134
|
+
// ISO 400, f/2, 1/125 s: the spot's lumens fill only its 40 degree cone, so the wall in it
|
|
135
|
+
// is bright; the cone's centre just clips.
|
|
134
136
|
Camera::Define(scene, "/World/Camera")
|
|
135
137
|
.SetFocalLength(18.0)
|
|
136
138
|
.SetSensorNoise(false)
|
|
137
|
-
.SetExposureTime(1.0 /
|
|
139
|
+
.SetExposureTime(1.0 / 125.0)
|
|
138
140
|
.SetExposureIso(400.0)
|
|
139
141
|
.SetExposureFStop(2.0)
|
|
140
142
|
.SetTransform(LookAtTransform({0.0, -2.6, 1.3}, {0.0, 1.0, 1.2}, {0.0, 0.0, 1.0}));
|
|
@@ -92,8 +92,10 @@ class Demo(ernie.demo.Demo):
|
|
|
92
92
|
physical_custom_illuminant=fluorescent()).set(
|
|
93
93
|
tokens.TRANSFORM,
|
|
94
94
|
ernie.look_at_transform((-1.2, 0.6, 2.9), (-0.25, 1.0, 1.0), (0.0, 1.0, 0.0)))
|
|
95
|
+
# ISO 400, f/2, 1/125 s: the spot's lumens fill only its 40 degree cone, so the wall in
|
|
96
|
+
# it is bright; the cone's centre just clips.
|
|
95
97
|
camera = world.define("Camera", ernie.Camera, focal_length=18.0, sensor_noise=False,
|
|
96
|
-
exposure_time=1.0 /
|
|
98
|
+
exposure_time=1.0 / 125.0, exposure_iso=400.0,
|
|
97
99
|
exposure_f_stop=2.0).set(
|
|
98
100
|
tokens.TRANSFORM, ernie.look_at_transform((0.0, -2.6, 1.3), (0.0, 1.0, 1.2)))
|
|
99
101
|
self.scene.define("/Render/Settings", ernie.RenderSettings, camera=camera,
|
|
@@ -92,14 +92,12 @@ int ErnieMain(std::span<const std::string> args, std::string_view version) {
|
|
|
92
92
|
std::string(kUsage).c_str(), std::string(DemoOptionsHelp()).c_str());
|
|
93
93
|
return 0;
|
|
94
94
|
}
|
|
95
|
-
//
|
|
95
|
+
// Without --demo, a first argument that is no option is a scene file; the other arguments are
|
|
96
|
+
// the demo's own (such as --views 64).
|
|
96
97
|
std::filesystem::path file;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
options.extra.erase(it);
|
|
101
|
-
break;
|
|
102
|
-
}
|
|
98
|
+
if (options.demo.empty() && !options.extra.empty() && !options.extra.front().starts_with("-")) {
|
|
99
|
+
file = options.extra.front();
|
|
100
|
+
options.extra.erase(options.extra.begin());
|
|
103
101
|
}
|
|
104
102
|
std::vector<DemoInfo> demos = RegisteredDemos();
|
|
105
103
|
if (options.list) {
|
{ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev196}/ernie/kernel/raster/shading.slang
RENAMED
|
@@ -147,6 +147,13 @@ struct ShadingConstants {
|
|
|
147
147
|
// width, height, the terrain's prim id and 1 when there is one.
|
|
148
148
|
float4 horizonGrid;
|
|
149
149
|
uint4 horizonInfo;
|
|
150
|
+
// The terrain's heights (`terrainHeights`): their cell size, the frame origin's height
|
|
151
|
+
// (subtracted from the terrain's), the no-data value and 1 when there is one; their width
|
|
152
|
+
// and height.
|
|
153
|
+
float4 heightsGrid;
|
|
154
|
+
uint4 heightsSize;
|
|
155
|
+
// The heights above the ground the horizon map's levels see from, in height units.
|
|
156
|
+
float4 horizonLevels;
|
|
150
157
|
}
|
|
151
158
|
|
|
152
159
|
[[vk::binding(0, 0)]] StructuredBuffer<ShadingUniforms> shadingViews;
|
|
@@ -549,35 +556,85 @@ float4 occlusionSlice(float3 n, float3 tangent, float3 v, float2 horizons) {
|
|
|
549
556
|
return float4(projectedLength * (t0 * tangent + t1 * v), projectedLength * arc);
|
|
550
557
|
}
|
|
551
558
|
|
|
552
|
-
// The terrain's horizon map (terrain_horizon.slang): per texel
|
|
553
|
-
//
|
|
554
|
-
// vertical
|
|
559
|
+
// The terrain's horizon map (terrain_horizon.slang): per texel and level (a height above the
|
|
560
|
+
// ground, `ShadingConstants::horizonLevels`), the tangents of the horizon's elevation towards
|
|
561
|
+
// azimuths 0 to 135 degrees (layer 2 level) and 180 to 315 (layer 2 level + 1), before vertical
|
|
562
|
+
// exaggeration.
|
|
555
563
|
[[vk::binding(19, 0)]] Texture2DArray<float4> horizonMap;
|
|
564
|
+
// The terrain's heights, before exaggeration, rows from its north edge.
|
|
565
|
+
[[vk::binding(21, 0)]] Texture2D<float> terrainHeights;
|
|
556
566
|
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
567
|
+
static const uint kHorizonLevels = 4;
|
|
568
|
+
|
|
569
|
+
// The horizon tangents of level `level` around texel `texel` (clamped to the map), as eight
|
|
570
|
+
// values, bilinear at fraction `f` towards the next texels.
|
|
571
|
+
void horizonAround(int2 texel, float2 f, uint level, out float4 first, out float4 second) {
|
|
572
|
+
let last = int2(pass.horizonInfo.xy) - 1;
|
|
573
|
+
float4 a[2], b[2], c[2], d[2];
|
|
574
|
+
for (uint side = 0; side < 2; ++side) {
|
|
575
|
+
let layer = 2 * level + side;
|
|
576
|
+
a[side] = horizonMap.Load(int4(clamp(texel, int2(0), last), layer, 0));
|
|
577
|
+
b[side] = horizonMap.Load(int4(clamp(texel + int2(1, 0), int2(0), last), layer, 0));
|
|
578
|
+
c[side] = horizonMap.Load(int4(clamp(texel + int2(0, 1), int2(0), last), layer, 0));
|
|
579
|
+
d[side] = horizonMap.Load(int4(clamp(texel + int2(1, 1), int2(0), last), layer, 0));
|
|
580
|
+
}
|
|
581
|
+
first = lerp(lerp(a[0], b[0], f.x), lerp(c[0], d[0], f.x), f.y);
|
|
582
|
+
second = lerp(lerp(a[1], b[1], f.x), lerp(c[1], d[1], f.x), f.y);
|
|
562
583
|
}
|
|
563
584
|
|
|
564
|
-
//
|
|
565
|
-
//
|
|
566
|
-
//
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
585
|
+
// How far world point `world` (relative to the frame's origin) stands above the terrain under
|
|
586
|
+
// it, in height units (before exaggeration): bilinear in the heights. False off the terrain or
|
|
587
|
+
// over no-data.
|
|
588
|
+
bool aboveTerrain(float3 world, out float above) {
|
|
589
|
+
above = 0.0;
|
|
590
|
+
let grid = pass.horizonGrid;
|
|
591
|
+
let size = int2(pass.heightsSize.xy);
|
|
592
|
+
let cell = float2(world.x - grid.x, grid.y - world.y) / pass.heightsGrid.x - 0.5;
|
|
593
|
+
if (any(cell < -0.5) || any(cell > float2(size) - 0.5)) {
|
|
594
|
+
return false;
|
|
595
|
+
}
|
|
596
|
+
let base = int2(floor(cell));
|
|
597
|
+
let f = saturate(cell - float2(base));
|
|
598
|
+
float h[4];
|
|
599
|
+
for (uint k = 0; k < 4; ++k) {
|
|
600
|
+
let at = clamp(base + int2(k & 1, k >> 1), int2(0), size - 1);
|
|
601
|
+
h[k] = terrainHeights.Load(int3(at, 0));
|
|
602
|
+
if ((pass.heightsGrid.w > 0.5 && h[k] == pass.heightsGrid.z) || isnan(h[k])) {
|
|
603
|
+
return false;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
let ground = lerp(lerp(h[0], h[1], f.x), lerp(h[2], h[3], f.x), f.y);
|
|
607
|
+
above = (world.z + pass.heightsGrid.y) / grid.w - ground;
|
|
608
|
+
return true;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// The dome's visibility and bent normal at world point `world` (relative to the frame's origin)
|
|
612
|
+
// with unit normal `n`, `above` height units over the terrain (0 on it), from the terrain's
|
|
613
|
+
// horizon map: the horizons around the point (bilinear in its texels, linear between the levels
|
|
614
|
+
// bracketing `above`, extrapolated past the highest), in four vertical slices whose horizons to
|
|
615
|
+
// either side are the map's opposite azimuths, integrated as `occlusionSlice` does about the
|
|
616
|
+
// vertical. They see the whole terrain, on screen or not, at the map's resolution.
|
|
617
|
+
float4 terrainOcclusion(float3 world, float3 n, float above) {
|
|
570
618
|
let grid = pass.horizonGrid;
|
|
571
619
|
let cell = float2(world.x - grid.x, grid.y - world.y) / grid.z - 0.5;
|
|
572
620
|
let base = int2(floor(cell));
|
|
573
621
|
let f = cell - float2(base);
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
622
|
+
uint lower = 0;
|
|
623
|
+
while (lower + 2 < kHorizonLevels && above > pass.horizonLevels[lower + 1]) {
|
|
624
|
+
lower += 1;
|
|
625
|
+
}
|
|
626
|
+
float4 first, second;
|
|
627
|
+
horizonAround(base, f, lower, first, second);
|
|
628
|
+
if (above > 0.0) {
|
|
629
|
+
float4 upperFirst, upperSecond;
|
|
630
|
+
horizonAround(base, f, lower + 1, upperFirst, upperSecond);
|
|
631
|
+
let span = pass.horizonLevels[lower + 1] - pass.horizonLevels[lower];
|
|
632
|
+
let t = span > 0.0 ? (above - pass.horizonLevels[lower]) / span : 0.0;
|
|
633
|
+
first = max(lerp(first, upperFirst, t), float4(-100.0));
|
|
634
|
+
second = max(lerp(second, upperSecond, t), float4(-100.0));
|
|
635
|
+
}
|
|
636
|
+
first *= grid.w;
|
|
637
|
+
second *= grid.w;
|
|
581
638
|
// Elevation tangents as cosines of the angle from the vertical: sin(atan(t)).
|
|
582
639
|
let up = float3(0.0, 0.0, 1.0);
|
|
583
640
|
let towards = first * rsqrt(1.0 + first * first);
|
|
@@ -627,12 +684,17 @@ void occlusionMain(uint3 id : SV_DispatchThreadID) {
|
|
|
627
684
|
let v = viewVector(ndc.xy, world);
|
|
628
685
|
let n = facingNormal(normalize(gNormal.Load(pixel).xyz), v);
|
|
629
686
|
var occlusion = domeOcclusion(int2(id.xy), id.z, world, ndc.z, n, v);
|
|
630
|
-
// Over terrain, the horizon map's occlusion too, which sees the
|
|
631
|
-
// visible of the two (as Unreal combines distance field and
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
687
|
+
// Over terrain, and on what stands over it, the horizon map's occlusion too, which sees the
|
|
688
|
+
// whole terrain: the less visible of the two (as Unreal combines distance field and
|
|
689
|
+
// screen-space occlusion).
|
|
690
|
+
if (pass.horizonInfo.w != 0) {
|
|
691
|
+
float above = 0.0;
|
|
692
|
+
let onTerrain = gIds.Load(pixel).y == pass.horizonInfo.z;
|
|
693
|
+
if (onTerrain || aboveTerrain(world, above)) {
|
|
694
|
+
let terrain = terrainOcclusion(world, n, onTerrain ? 0.0 : max(above, 0.0));
|
|
695
|
+
if (terrain.w < occlusion.w) {
|
|
696
|
+
occlusion = terrain;
|
|
697
|
+
}
|
|
636
698
|
}
|
|
637
699
|
}
|
|
638
700
|
occlusionRaw[id] = occlusion;
|