ernie-renderer 0.1.0.dev189__tar.gz → 0.1.0.dev202__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.dev202}/CMakeLists.txt +1 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/PKG-INFO +2 -2
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/README.md +1 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/slang.cmake +4 -0
- ernie_renderer-0.1.0.dev202/demos/batched/batch_camera.cpp +399 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/batched/batch_camera.py +14 -5
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/lighting/illuminants.cpp +10 -15
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/lighting/illuminants.py +6 -7
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/viewer/sun_panel.cpp +12 -12
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/viewer/sun_panel.py +7 -10
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/getting-started/demos.md +7 -7
- ernie_renderer-0.1.0.dev202/docs/js/sidebar.js +29 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/cli.cpp +5 -7
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/demo.cpp +96 -47
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/demo.h +15 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/CMakeLists.txt +2 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/embedded_shaders.h +2 -0
- ernie_renderer-0.1.0.dev202/ernie/kernel/film/filter_flare.slang +118 -0
- ernie_renderer-0.1.0.dev202/ernie/kernel/film/filter_stray_light.slang +99 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/sensor.slang +21 -2
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/shading.slang +89 -27
- ernie_renderer-0.1.0.dev202/ernie/kernel/raster/terrain_horizon.slang +91 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/CMakeLists.txt +5 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/demo.cpp +3 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/scene.cpp +9 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/delegate.cpp +7 -4
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/ground_drawable.cpp +5 -4
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/mesh_drawable.cpp +16 -9
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/mesh_drawable.h +1 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/renderer.cpp +56 -7
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/renderer.h +9 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/terrain_drawable.cpp +23 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/terrain_drawable.h +2 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/isd.cpp +64 -3
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/isd.h +29 -6
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/sensor_filters.cpp +73 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/sensor_filters.h +8 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/resolve.cpp +34 -12
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/README.md +1 -0
- ernie_renderer-0.1.0.dev202/ernie/test/fixtures/isd/jitterFramer.json +97 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_demos.py +1 -1
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_isd.py +14 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_lights_gpu_test.cpp +44 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_standard_filters_gpu_test.cpp +124 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_isd_test.cpp +66 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/session_lights_test.cpp +27 -0
- ernie_renderer-0.1.0.dev202/ernie/test/util_ies_test.cpp +176 -0
- ernie_renderer-0.1.0.dev202/ernie/util/ies.cpp +305 -0
- ernie_renderer-0.1.0.dev202/ernie/util/ies.h +88 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/mkdocs.yml +4 -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.dev202}/.clang-format +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.clang-tidy +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.cmake-format.yaml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.gitattributes +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/dependabot.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/pull_request_template.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/scripts/ci_metrics.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/workflows/ci-metrics.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.github/workflows/ci.yml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.gitignore +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/.pre-commit-config.yaml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/CITATION.cff +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/CMakePresets.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/CONTRIBUTING.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/EmbedShaders.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ErnieCPackOptions.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ErnieConfig.cmake.in +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ErnieInstall.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ErnieLicenses.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ErniePackaging.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ErnieTesting.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/cppcheck/ernie.cfg +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/ernie_exports.map +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/dear_imgui/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/dear_imgui.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/dlpack.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/embed_file.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/glfw.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/glm.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/googletest.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/gui_fonts.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/imguizmo.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/implot.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/json.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/meshoptimizer.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/moltenvk.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/nanobind.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/openexr.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/stb.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/tracy.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/vma/vma.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/vma.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/volk.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/cmake/third_party/vulkan_headers.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/main.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/util.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/demos/util.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/Makefile +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/cpp.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/app.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/astronomy.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/batch.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/cameras.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/demo.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/rendering.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/scene.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/schemas.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/api/python/tokens.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/cameras.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/lighting.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/materials.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/scene.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/sensor-filters.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/shadows.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/spectral.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/star-fields.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/terrain.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/concepts/transforms.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/css/extra.css +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-aovs.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-brdfs.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-lenses.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-panels.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-render-delegates.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-sensor-filters.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-spectra.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/custom-star-catalogs.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/debug-draw.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/frame-callbacks.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/extending/index.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/getting-started/installation.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/getting-started/quickstart.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/getting-started/viewer.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/guides/batched-rendering.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/guides/gpu-interop.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/guides/scenes.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/index.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/docs/requirements.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/app.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/builtin_panels.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/camera_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/cli.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/create.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/create.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/file_dialog.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/file_dialog.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/icons.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/log_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/main.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/panel.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_icons.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_icons.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/prim_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/profiler_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/properties_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/property_fields.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/property_fields.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/session.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/session.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/settings_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/stage_panel.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/theme.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/theme.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/viewer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/app/viewer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/buffer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/buffer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/compute_interop.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/compute_interop.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/cuda_interop.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/cuda_interop.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/frame_uploads.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/frame_uploads.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/gpu_profile.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/gpu_timer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/gpu_timer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/image.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/image.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/offscreen_target.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/offscreen_target.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/pipeline.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/pipeline.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/shader_compiler.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/shader_compiler.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/swapchain.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/swapchain.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/vulkan_context.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/device/vulkan_context.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/cube_sphere_lod.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/cube_sphere_lod.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/frustum.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/frustum.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/lod_quadtree.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/lod_quadtree.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/mesh_data.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/mesh_data.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/primitives.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/geometry/primitives.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/brdf.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/hapke.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/lambert.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/lommel_seeliger.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/lunar_lambert.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/oren_nayar.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/closure/preview_surface.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/cube_faces.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_bayer.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_blooming.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_color_matrix.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_compand.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_compand_table.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_dark_current.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_defect_pixels.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_defocus.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_demosaic.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_detector_pattern.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_glare.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_jpeg.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_lag.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_measured_qe.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_psf.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_readout_taps.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_smear.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_spectral_transmission.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_tdi.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_temporal_average.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_tone_curve.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/filter_white_balance.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/lens.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/film/pyramid.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/cull.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/depth_range.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/frame.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/ground.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/hzb.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/instance_anchors.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/instance_compose.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/light_views.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/mesh.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/mesh_normals.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/meter.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/minimal_resolve.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/motion.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/motion_vectors.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/overlay.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/planet.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/planet_color.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/planet_shadow.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/points.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/present.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/projection_pinhole.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/projection_pushbroom.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/surface.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_color.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_shadow.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/terrain_update.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/kernel/raster/views.slang +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/app.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/bindings.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/__init__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/__main__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/app.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/batch.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/cli.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/demo.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/demos/__init__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/demos/__main__.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/ernie/schema.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/module.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/render.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/scene_json.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/schema.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/stub_schema.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/python/tensor.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/delegate.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/ground_drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/material.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/material.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/minimal_targets.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/minimal_targets.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/overlay_pass.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/overlay_pass.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/planet_drawable.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/planet_drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/points_drawable.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/points_drawable.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/poisson_disk.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/poisson_disk.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/render_targets.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/render_targets.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/sensor_plan.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/sensor_plan.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/shadow_cascades.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/raster/shadow_cascades.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/base_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/base_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/brdf.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/brdf.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/cahvore.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/cahvore.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/camera_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/edit_history.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/edit_history.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/geometry_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/geometry_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/instruments.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/instruments.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/light_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/light_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/material.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/material_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/material_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/orbit_controller.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/orbit_controller.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/overlay.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/overlay.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/path.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/path.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/prim_type.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/prim_type.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/render_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/render_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene_json.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/scene_json.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/schema.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/schema.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/terrain_schemas.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/terrain_schemas.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/tokens.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/value.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/wide_view.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/wide_view.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/xform.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/scene/xform.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/backends.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/delegate.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/delegate.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/frame_params.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/frame_params.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/outputs.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/outputs.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/product_frame.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/renderer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/renderer.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/resolve.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/session/sampling.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_demo_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_demo_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_file_dialog_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_panel_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_prim_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_session_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_theme_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/app_viewer_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/device_cuda_interop_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/device_frame_uploads_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/device_pipeline_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/device_shader_compiler_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/device_vulkan_context_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/cahvore/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/cahvore/m2020_camera_models.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/images/grey16.png +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/constVelocityLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/ctxLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/dawnfc_radtan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/lroWacPushFrame.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/orbitalFramer.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/orbitalLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/orbitalPushFrame.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/simpleFramerISD.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/isd/toughLroNacLineScan.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/fixtures/scene_basic.json +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_cube_sphere_lod_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_frustum_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_lod_quadtree_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_mesh_data_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/geometry_primitives_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/install/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/install/consumer.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/install/run_install_test.cmake +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/conftest.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_app.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_batch.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_cahvore.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_cuda.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_filters.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_instruments.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_map.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_materials.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_minimal.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_overlays.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_readme.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_render.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_scene.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_camera.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_geometry.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_material.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_render.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_schema_terrain.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_stars.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_step.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_cameras.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_compose.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_lights.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_map.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/python/test_xform_gpu_points.py +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_batch_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_culling_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_delegate_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_delegate_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_gpu_meshes_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_gpu_terrain_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_hex_tiling_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_lens_rays_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_mesh_drawable_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_motion_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_overlays_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_planet_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_points_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_poisson_disk_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_products_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_sensor_filters_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_sensor_plan_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_shadow_cascades_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_terrain_drawable_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_textures_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/raster_zero_copy_gpu_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_brdf_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_brdf_vulkan_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_cahvore_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_camera_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_camera_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_edit_history_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_geometry_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_json_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_material_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_orbit_controller_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_overlay_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_path_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_prim_type_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_render_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_scene_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_schema_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_sensor_filters_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_terrain_schemas_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_wide_view_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/scene_xform_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/session_delegate_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/session_frame_params_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/session_gpu_xform_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/session_resolve_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/session_sampling_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/support/brdf_reference.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/support/delegate_scenes.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/support/delegate_scenes.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/support/terrain_harness.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/support/test_raster.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/support/vulkan_fixture.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/util_astronomy_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/util_image_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/util_spectrum_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/test/util_tensor_test.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/CMakeLists.txt +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/astronomy.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/astronomy.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/image.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/image.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/least_squares.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/profile.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/profiler.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/profiler.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/raster_checks.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/raster_view.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/shader_source.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/spectrum.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/spectrum.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/tensor.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/ernie/util/tensor.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/pyproject.toml +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/README.md +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/cameramodelutilsjs/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/dlpack/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/dlpack/include/dlpack/dlpack.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/stb/LICENSE +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb.cpp +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb_easy_font.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/third_party/stb/stb_image.h +0 -0
- {ernie_renderer-0.1.0.dev189 → ernie_renderer-0.1.0.dev202}/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 ".dev202" 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.dev202
|
|
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
|
|
@@ -37,7 +37,7 @@ Description-Content-Type: text/markdown
|
|
|
37
37
|
|
|
38
38
|
Ernie is a physically accurate, real-time, spectral renderer for interplanetary environments.
|
|
39
39
|
|
|
40
|
-
We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux
|
|
40
|
+
We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux, and builds on Windows and macOS (experimental: not yet tested there). Ernie is designed around physical quantities rather than artistic parameters: lights, materials and cameras are described the way they are measured, so a render can be compared against a real instrument. For reinforcement learning, Ernie renders batches of cameras in one step, shares data zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), and has a fast mode with simpler shading.
|
|
41
41
|
|
|
42
42
|
Ernie's key features related to planetary robotics and sensing:
|
|
43
43
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
Ernie is a physically accurate, real-time, spectral renderer for interplanetary environments.
|
|
8
8
|
|
|
9
|
-
We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux
|
|
9
|
+
We provide C++ and Python APIs and a Hydra-like scene API. It is a Vulkan 1.3 rasterizer that runs on Linux, and builds on Windows and macOS (experimental: not yet tested there). Ernie is designed around physical quantities rather than artistic parameters: lights, materials and cameras are described the way they are measured, so a render can be compared against a real instrument. For reinforcement learning, Ernie renders batches of cameras in one step, shares data zero copy with any DLPack tensor (PyTorch, JAX, Warp, NumPy), and has a fast mode with simpler shading.
|
|
10
10
|
|
|
11
11
|
Ernie's key features related to planetary robotics and sensing:
|
|
12
12
|
|
|
@@ -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
|
|
@@ -28,8 +28,6 @@
|
|
|
28
28
|
#include "ernie/scene/xform.h"
|
|
29
29
|
#include "util.h"
|
|
30
30
|
|
|
31
|
-
#include <imgui.h>
|
|
32
|
-
|
|
33
31
|
#include <algorithm>
|
|
34
32
|
#include <array>
|
|
35
33
|
#include <cmath>
|
|
@@ -131,10 +129,12 @@ class IlluminantsDemo : public app::Demo {
|
|
|
131
129
|
.SetPhotometricPower(1600.0)
|
|
132
130
|
.SetPhysicalCustomIlluminant(Fluorescent())
|
|
133
131
|
.SetTransform(LookAtTransform({-1.2, 0.6, 2.9}, {-0.25, 1.0, 1.0}, {0.0, 1.0, 0.0}));
|
|
132
|
+
// ISO 400, f/2, 1/125 s: the spot's lumens fill only its 40 degree cone, so the wall in it
|
|
133
|
+
// is bright; the cone's centre just clips.
|
|
134
134
|
Camera::Define(scene, "/World/Camera")
|
|
135
135
|
.SetFocalLength(18.0)
|
|
136
136
|
.SetSensorNoise(false)
|
|
137
|
-
.SetExposureTime(1.0 /
|
|
137
|
+
.SetExposureTime(1.0 / 125.0)
|
|
138
138
|
.SetExposureIso(400.0)
|
|
139
139
|
.SetExposureFStop(2.0)
|
|
140
140
|
.SetTransform(LookAtTransform({0.0, -2.6, 1.3}, {0.0, 1.0, 1.2}, {0.0, 0.0, 1.0}));
|
|
@@ -144,20 +144,15 @@ class IlluminantsDemo : public app::Demo {
|
|
|
144
144
|
.SetAmbient(0.0);
|
|
145
145
|
LightWith(0);
|
|
146
146
|
|
|
147
|
+
// The demo's option, in the Demos panel: the illuminant.
|
|
148
|
+
std::vector<std::string> names;
|
|
149
|
+
for (const Illuminant& illuminant : kIlluminants) {
|
|
150
|
+
names.emplace_back(illuminant.name);
|
|
151
|
+
}
|
|
152
|
+
Widgets().Combo("Illuminant", std::move(names), 0,
|
|
153
|
+
[this](std::size_t index) { LightWith(static_cast<int>(index)); });
|
|
147
154
|
if (viewer != nullptr) {
|
|
148
|
-
// In the viewer, a panel switches the illuminant.
|
|
149
155
|
viewer->SetActiveCamera("/World/Camera");
|
|
150
|
-
viewer->AddPanel("Illuminant", app::Dock::Right, [this](app::Viewer&) {
|
|
151
|
-
int index = illuminant_;
|
|
152
|
-
for (int i = 0; i < static_cast<int>(kIlluminants.size()); ++i) {
|
|
153
|
-
if (ImGui::RadioButton(kIlluminants[i].name, i == index)) {
|
|
154
|
-
index = i;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (index != illuminant_) {
|
|
158
|
-
LightWith(index);
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
156
|
}
|
|
162
157
|
}
|
|
163
158
|
|
|
@@ -92,22 +92,21 @@ 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,
|
|
100
102
|
resolution=(448, 300), ambient=0.0)
|
|
101
103
|
self.light_with(0)
|
|
102
104
|
|
|
105
|
+
# The demo's option, in the Demos panel: the illuminant.
|
|
106
|
+
self.widgets.combo("Illuminant", [name for name, _, _ in ILLUMINANTS], 0,
|
|
107
|
+
on_change=self.light_with)
|
|
103
108
|
if viewer is not None:
|
|
104
|
-
# In the viewer, a panel switches the illuminant.
|
|
105
|
-
from ernie.app import Dock
|
|
106
|
-
|
|
107
109
|
viewer.active_camera = camera.path
|
|
108
|
-
panel = viewer.add_panel("Illuminant", Dock.RIGHT)
|
|
109
|
-
panel.combo("Illuminant", [name for name, _, _ in ILLUMINANTS], 0,
|
|
110
|
-
on_change=self.light_with)
|
|
111
110
|
|
|
112
111
|
def light_with(self, index):
|
|
113
112
|
_, illuminant, kelvin = ILLUMINANTS[index]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
-
// Opens the viewer on a scene built in code, with
|
|
3
|
-
// twin of sun_panel.py.
|
|
2
|
+
// Opens the viewer on a scene built in code, with options in the Demos panel that move the sun.
|
|
3
|
+
// The C++ twin of sun_panel.py.
|
|
4
4
|
//
|
|
5
5
|
// ernie --demo viewer/sun_panel [--viewer null --output sun.png]
|
|
6
6
|
|
|
@@ -43,15 +43,15 @@ class SunPanelDemo : public app::Demo {
|
|
|
43
43
|
.SetFocalLength(24.0)
|
|
44
44
|
.SetTransform(LookAtTransform({0.0, -14.0, 6.0}, {0.0, 0.0, 0.5}, {0.0, 0.0, 1.0}));
|
|
45
45
|
AimSun();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// The demo's options, in the Demos panel: sliders drawn with Dear ImGui that move the sun,
|
|
49
|
+
// which the next frame renders.
|
|
50
|
+
void Gui() override {
|
|
51
|
+
bool changed = ImGui::SliderFloat("Elevation", &elevation_, 1.0f, 90.0f);
|
|
52
|
+
changed |= ImGui::SliderFloat("Azimuth", &azimuth_, 0.0f, 360.0f);
|
|
53
|
+
if (changed) {
|
|
54
|
+
AimSun();
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -76,4 +76,4 @@ class SunPanelDemo : public app::Demo {
|
|
|
76
76
|
} // namespace
|
|
77
77
|
|
|
78
78
|
ERNIE_REGISTER_DEMO(SunPanelDemo, "viewer", "sun panel",
|
|
79
|
-
"A scene built in code, with
|
|
79
|
+
"A scene built in code, with options that move the sun.");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
-
"""Opens the viewer on a scene built in code, with
|
|
3
|
-
Python twin of sun_panel.cpp.
|
|
2
|
+
"""Opens the viewer on a scene built in code, with options in the Demos panel that move the sun.
|
|
3
|
+
The Python twin of sun_panel.cpp.
|
|
4
4
|
|
|
5
5
|
python -m ernie.demos viewer/sun_panel [--viewer null --output sun.png]
|
|
6
6
|
"""
|
|
@@ -31,14 +31,11 @@ class Demo(ernie.demo.Demo):
|
|
|
31
31
|
self.elevation = 45.0
|
|
32
32
|
self.azimuth = 30.0
|
|
33
33
|
self.aim_sun()
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
on_change=lambda value: self.aim_sun(elevation=value))
|
|
40
|
-
panel.slider("Azimuth", 0.0, 360.0, self.azimuth,
|
|
41
|
-
on_change=lambda value: self.aim_sun(azimuth=value))
|
|
34
|
+
# The demo's options, in the Demos panel: sliders that move the sun.
|
|
35
|
+
self.widgets.slider("Elevation", 1.0, 90.0, self.elevation,
|
|
36
|
+
on_change=lambda value: self.aim_sun(elevation=value))
|
|
37
|
+
self.widgets.slider("Azimuth", 0.0, 360.0, self.azimuth,
|
|
38
|
+
on_change=lambda value: self.aim_sun(azimuth=value))
|
|
42
39
|
|
|
43
40
|
def aim_sun(self, elevation=None, azimuth=None):
|
|
44
41
|
self.elevation = self.elevation if elevation is None else elevation
|