@forgeax/engine-render 0.1.28 → 0.1.30
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.
- package/README.md +856 -126
- package/dist/assembly/atmosphere-shader-prewarm.d.ts +6 -0
- package/dist/assembly/atmosphere-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/device-feature-admission.d.ts +4 -3
- package/dist/assembly/device-feature-admission.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-host.d.ts +27 -0
- package/dist/assembly/dynamic-geometry-host.d.ts.map +1 -1
- package/dist/assembly/dynamic-geometry-runtime.d.ts +20 -0
- package/dist/assembly/dynamic-geometry-runtime.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +3 -1
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/gpu-driven-owner.d.ts +10 -0
- package/dist/assembly/gpu-driven-owner.d.ts.map +1 -0
- package/dist/assembly/host-contract.d.ts +14 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/material/assembly.d.ts +31 -1
- package/dist/assembly/material/assembly.d.ts.map +1 -1
- package/dist/assembly/material/pipeline-helpers.d.ts +24 -0
- package/dist/assembly/material/pipeline-helpers.d.ts.map +1 -0
- package/dist/assembly/material-shader-policy.d.ts +3 -1
- package/dist/assembly/material-shader-policy.d.ts.map +1 -1
- package/dist/assembly/recovery/device-loss-fanout.d.ts.map +1 -1
- package/dist/assembly/recovery/failure-location.d.ts +12 -0
- package/dist/assembly/recovery/failure-location.d.ts.map +1 -0
- package/dist/assembly/recovery/recovery-attempt.d.ts +1 -6
- package/dist/assembly/recovery/recovery-attempt.d.ts.map +1 -1
- package/dist/assembly/recovery/renderer-recover.d.ts +7 -4
- package/dist/assembly/recovery/renderer-recover.d.ts.map +1 -1
- package/dist/assembly/renderer-facade.d.ts.map +1 -1
- package/dist/assembly/renderer-feature-inspection.d.ts +5 -0
- package/dist/assembly/renderer-feature-inspection.d.ts.map +1 -0
- package/dist/assembly/renderer-frame-transaction.d.ts +19 -0
- package/dist/assembly/renderer-frame-transaction.d.ts.map +1 -1
- package/dist/assembly/renderer-helpers.d.ts +3 -0
- package/dist/assembly/renderer-helpers.d.ts.map +1 -1
- package/dist/assembly/renderer-inspection.d.ts +4 -0
- package/dist/assembly/renderer-inspection.d.ts.map +1 -1
- package/dist/assembly/shader-prewarm-policy.d.ts +7 -1
- package/dist/assembly/shader-prewarm-policy.d.ts.map +1 -1
- package/dist/assembly/skin-palette-owner.d.ts +8 -0
- package/dist/assembly/skin-palette-owner.d.ts.map +1 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts +6 -0
- package/dist/assembly/ssr-shader-prewarm.d.ts.map +1 -0
- package/dist/assembly/webgpu-device-loss.d.ts +15 -0
- package/dist/assembly/webgpu-device-loss.d.ts.map +1 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts +38 -0
- package/dist/assembly/webgpu-pbr-ready.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts +11 -0
- package/dist/assembly/webgpu-ready-mipmap.d.ts.map +1 -0
- package/dist/assembly/webgpu-ready.d.ts +7 -3
- package/dist/assembly/webgpu-ready.d.ts.map +1 -1
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts +10 -0
- package/dist/assembly/webgpu-renderer-bootstrap.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts +62 -0
- package/dist/assembly/webgpu-renderer-contract.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts +9 -0
- package/dist/assembly/webgpu-renderer-guards.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts +6 -0
- package/dist/assembly/webgpu-renderer-observation.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts +12 -0
- package/dist/assembly/webgpu-renderer-recovery-failure.d.ts.map +1 -0
- package/dist/assembly/webgpu-renderer.d.ts +7 -141
- package/dist/assembly/webgpu-renderer.d.ts.map +1 -1
- package/dist/assembly/webgpu-vertex-layouts.d.ts +28 -84
- package/dist/assembly/webgpu-vertex-layouts.d.ts.map +1 -1
- package/dist/authoring.mjs +2 -2
- package/dist/capture/scene-projection.d.ts +41 -0
- package/dist/capture/scene-projection.d.ts.map +1 -0
- package/dist/{chunk-J52NMQKR.mjs → chunk-7MQ3XBSP.mjs} +1098 -844
- package/dist/chunk-7MQ3XBSP.mjs.map +1 -0
- package/dist/{chunk-GF523LHF.mjs → chunk-BLXGONR2.mjs} +30 -12
- package/dist/chunk-BLXGONR2.mjs.map +1 -0
- package/dist/{chunk-VSL23LZE.mjs → chunk-C3DDSXYK.mjs} +1188 -463
- package/dist/chunk-C3DDSXYK.mjs.map +1 -0
- package/dist/{chunk-IQMKJLNU.mjs → chunk-FUUO4UND.mjs} +443 -30
- package/dist/chunk-FUUO4UND.mjs.map +1 -0
- package/dist/{chunk-J6KACNOH.mjs → chunk-JRBDO2KB.mjs} +617 -7
- package/dist/chunk-JRBDO2KB.mjs.map +1 -0
- package/dist/{chunk-GE3SDD72.mjs → chunk-MDQJPY3T.mjs} +20 -40
- package/dist/chunk-MDQJPY3T.mjs.map +1 -0
- package/dist/{chunk-MYJ5RPJO.mjs → chunk-NO4WZCAH.mjs} +3 -3
- package/dist/chunk-NO4WZCAH.mjs.map +1 -0
- package/dist/{chunk-RBDBZ5R7.mjs → chunk-PA5DRJNI.mjs} +2 -2
- package/dist/chunk-PA5DRJNI.mjs.map +1 -0
- package/dist/{chunk-MBU4ZVE7.mjs → chunk-PSEQ6QPH.mjs} +4655 -892
- package/dist/chunk-PSEQ6QPH.mjs.map +1 -0
- package/dist/{chunk-JAASCMXA.mjs → chunk-S5UE2T5P.mjs} +289 -41
- package/dist/chunk-S5UE2T5P.mjs.map +1 -0
- package/dist/components/camera.d.ts +62 -2
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/directional-light.d.ts +2 -2
- package/dist/components/dynamic-resolution.d.ts +15 -0
- package/dist/components/dynamic-resolution.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/instances.d.ts +6 -20
- package/dist/components/instances.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/reflection-probe.d.ts +1 -0
- package/dist/components/reflection-probe.d.ts.map +1 -1
- package/dist/components/scene-instance.d.ts +2 -1
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/screen-space-reflection.d.ts +14 -0
- package/dist/components/screen-space-reflection.d.ts.map +1 -0
- package/dist/components/skylight.d.ts +4 -1
- package/dist/components/skylight.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +14809 -7570
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/device-scope.d.ts +2 -0
- package/dist/device/device-scope.d.ts.map +1 -1
- package/dist/device/gpu-residency.d.ts +3 -14
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/dynamic-geometry.d.ts.map +1 -1
- package/dist/environment/background.d.ts +7 -0
- package/dist/environment/background.d.ts.map +1 -0
- package/dist/environment/ibl.d.ts +11 -0
- package/dist/environment/ibl.d.ts.map +1 -0
- package/dist/environment/storage.d.ts +14 -0
- package/dist/environment/storage.d.ts.map +1 -0
- package/dist/errors/gpu-driven.d.ts +6 -3
- package/dist/errors/gpu-driven.d.ts.map +1 -1
- package/dist/errors/render.d.ts +41 -4
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/camera.d.ts.map +1 -1
- package/dist/extract/contracts.d.ts +7 -0
- package/dist/extract/contracts.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +50 -3
- package/dist/extract/gpu-driven.d.ts.map +1 -1
- package/dist/features/host.d.ts +23 -1
- package/dist/features/host.d.ts.map +1 -1
- package/dist/features/noise-texture.d.ts +17 -0
- package/dist/features/noise-texture.d.ts.map +1 -0
- package/dist/features/plan.d.ts +83 -2
- package/dist/features/plan.d.ts.map +1 -1
- package/dist/features/prepared-gpu-work.d.ts +37 -4
- package/dist/features/prepared-gpu-work.d.ts.map +1 -1
- package/dist/features/prepared-graphics-store.d.ts.map +1 -1
- package/dist/features/prepared-graphics.d.ts +5 -0
- package/dist/features/prepared-graphics.d.ts.map +1 -1
- package/dist/features/render-graph-compute.d.ts +5 -3
- package/dist/features/render-graph-compute.d.ts.map +1 -1
- package/dist/features/render-graph-contribution.d.ts +11 -3
- package/dist/features/render-graph-contribution.d.ts.map +1 -1
- package/dist/features/render-graph-raster.d.ts +19 -3
- package/dist/features/render-graph-raster.d.ts.map +1 -1
- package/dist/features/types.d.ts +11 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +2 -0
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -1
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/material-artifacts.d.ts +24 -0
- package/dist/gpu-driven/material-artifacts.d.ts.map +1 -0
- package/dist/gpu-driven/material-bindings.d.ts +7 -0
- package/dist/gpu-driven/material-bindings.d.ts.map +1 -0
- package/dist/gpu-driven/pbr-program.d.ts +10 -0
- package/dist/gpu-driven/pbr-program.d.ts.map +1 -0
- package/dist/gpu-driven/prepared-draw.d.ts +2 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -1
- package/dist/gpu-driven/production-raster.d.ts +169 -27
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/shadow-views.d.ts +126 -0
- package/dist/gpu-driven/shadow-views.d.ts.map +1 -0
- package/dist/gpu-driven/view-gpu.d.ts +18 -2
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-resource.d.ts +5 -2
- package/dist/gpu-resource.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +2 -8
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +14 -0
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-texture-usage.d.ts +1 -0
- package/dist/gpu-texture-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +9 -0
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +2 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/frame-resources.d.ts +8 -0
- package/dist/ibl/frame-resources.d.ts.map +1 -0
- package/dist/ibl/skylight-bind-group.d.ts +3 -1
- package/dist/ibl/skylight-bind-group.d.ts.map +1 -1
- package/dist/index.d.ts +87 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +10 -8
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +180 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +11 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -1
- package/dist/instances.d.ts +89 -44
- package/dist/instances.d.ts.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +117 -9
- package/dist/internal.mjs.map +1 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/material-row.d.ts +15 -0
- package/dist/material-row.d.ts.map +1 -0
- package/dist/materials.d.ts +15 -0
- package/dist/materials.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +23 -5
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/render-extent.d.ts +51 -0
- package/dist/pipeline/render-extent.d.ts.map +1 -0
- package/dist/pipeline/standard-build-context.d.ts +7 -0
- package/dist/pipeline/standard-build-context.d.ts.map +1 -0
- package/dist/pipeline/standard-forward-lane.d.ts +3 -2
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts +12 -0
- package/dist/pipeline/standard-output/auto-exposure/capability.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts +70 -0
- package/dist/pipeline/standard-output/auto-exposure/gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts +75 -0
- package/dist/pipeline/standard-output/auto-exposure/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts +111 -0
- package/dist/pipeline/standard-output/auto-exposure/inspection.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts +16 -0
- package/dist/pipeline/standard-output/auto-exposure/oracle.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts +14 -0
- package/dist/pipeline/standard-output/auto-exposure/preset.d.ts.map +1 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts +46 -0
- package/dist/pipeline/standard-output/auto-exposure/state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/color-transform.d.ts +27 -0
- package/dist/pipeline/standard-output/color-transform.d.ts.map +1 -0
- package/dist/pipeline/standard-output/graph.d.ts +15 -0
- package/dist/pipeline/standard-output/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts +29 -0
- package/dist/pipeline/standard-output/lut-admission.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts +48 -0
- package/dist/pipeline/standard-output/lut-gpu.d.ts.map +1 -0
- package/dist/pipeline/standard-output/lut-state.d.ts +68 -0
- package/dist/pipeline/standard-output/lut-state.d.ts.map +1 -0
- package/dist/pipeline/standard-output/resources.d.ts +10 -0
- package/dist/pipeline/standard-output/resources.d.ts.map +1 -0
- package/dist/pipeline/standard-output/types.d.ts +39 -0
- package/dist/pipeline/standard-output/types.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts +2 -2
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline/standard-profile.d.ts +2 -1
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +5 -2
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec-types.d.ts +4 -0
- package/dist/pipeline-spec-types.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +1 -9
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/points-lines/standard-owner.d.ts +1 -1
- package/dist/points-lines/standard-owner.d.ts.map +1 -1
- package/dist/post-process-errors.d.ts +9 -2
- package/dist/post-process-errors.d.ts.map +1 -1
- package/dist/prepare/extended-lighting/resources.d.ts +3 -3
- package/dist/prepare/prepared-graphics-resolver.d.ts +6 -1
- package/dist/prepare/prepared-graphics-resolver.d.ts.map +1 -1
- package/dist/record/dynamic-geometry-consumption.d.ts +15 -0
- package/dist/record/dynamic-geometry-consumption.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +3 -3
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +109 -13
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +41 -5
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +13 -9
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +43 -3
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts +2 -10
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +14 -2
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts +15 -6
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/prepared-material-bindings.d.ts +19 -0
- package/dist/record/prepared-material-bindings.d.ts.map +1 -0
- package/dist/record/recovery-pipeline.d.ts +1 -0
- package/dist/record/recovery-pipeline.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +101 -22
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts +62 -7
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +39 -8
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +1 -0
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/recovery/render-system-candidate.d.ts +10 -2
- package/dist/recovery/render-system-candidate.d.ts.map +1 -1
- package/dist/recovery/render-system-roots.d.ts +11 -0
- package/dist/recovery/render-system-roots.d.ts.map +1 -0
- package/dist/recovery/types.d.ts +76 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/reflection/background.d.ts +14 -0
- package/dist/reflection/background.d.ts.map +1 -0
- package/dist/reflection/filter.d.ts.map +1 -1
- package/dist/reflection/projection.d.ts +1 -0
- package/dist/reflection/projection.d.ts.map +1 -1
- package/dist/reflection/record-owner.d.ts +4 -4
- package/dist/reflection/record-owner.d.ts.map +1 -1
- package/dist/render-contract.d.ts +211 -53
- package/dist/render-contract.d.ts.map +1 -1
- package/dist/render-graph-primitives.d.ts +1 -0
- package/dist/render-graph-primitives.d.ts.map +1 -1
- package/dist/render-pipeline.d.ts +81 -6
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract-tail.d.ts +15 -6
- package/dist/render-system-extract-tail.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +128 -41
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system-projections.d.ts +22 -0
- package/dist/render-system-projections.d.ts.map +1 -0
- package/dist/render-system.d.ts +27 -77
- package/dist/render-system.d.ts.map +1 -1
- package/dist/scene/render-scene-types.d.ts +14 -7
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +31 -11
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/shadow-visibility.d.ts +5 -0
- package/dist/scene/shadow-visibility.d.ts.map +1 -0
- package/dist/ssao-config.d.ts +8 -6
- package/dist/ssao-config.d.ts.map +1 -1
- package/dist/ssr/admission.d.ts +70 -1
- package/dist/ssr/admission.d.ts.map +1 -1
- package/dist/ssr/compose.d.ts +13 -0
- package/dist/ssr/compose.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +35 -0
- package/dist/ssr/errors.d.ts.map +1 -1
- package/dist/ssr/graph.d.ts +60 -0
- package/dist/ssr/graph.d.ts.map +1 -0
- package/dist/ssr/history.d.ts +97 -0
- package/dist/ssr/history.d.ts.map +1 -0
- package/dist/ssr/hiz.d.ts +37 -0
- package/dist/ssr/hiz.d.ts.map +1 -0
- package/dist/ssr/inspection.d.ts +42 -0
- package/dist/ssr/inspection.d.ts.map +1 -0
- package/dist/ssr/resources.d.ts +58 -0
- package/dist/ssr/resources.d.ts.map +1 -0
- package/dist/ssr/temporal.d.ts +38 -0
- package/dist/ssr/temporal.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +32 -10
- package/dist/systems/skin-palette-allocator.d.ts.map +1 -1
- package/dist/systems/skin-palette-types.d.ts +15 -0
- package/dist/systems/skin-palette-types.d.ts.map +1 -1
- package/dist/systems/transparent-dispatch.d.ts +9 -0
- package/dist/systems/transparent-dispatch.d.ts.map +1 -0
- package/dist/targets/material-source.d.ts +7 -0
- package/dist/targets/material-source.d.ts.map +1 -1
- package/dist/temporal/frame-coordinator.d.ts +7 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/gpu.d.ts +8 -0
- package/dist/temporal/gpu.d.ts.map +1 -1
- package/dist/temporal/history.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -6
- package/dist/temporal/inspection.d.ts.map +1 -1
- package/dist/temporal/standard-scene-data.d.ts +4 -2
- package/dist/temporal/standard-scene-data.d.ts.map +1 -1
- package/dist/temporal/target-coverage-attachment.d.ts +15 -0
- package/dist/temporal/target-coverage-attachment.d.ts.map +1 -0
- package/dist/temporal/temporal-view.d.ts +6 -0
- package/dist/temporal/temporal-view.d.ts.map +1 -1
- package/dist/temporal/view.d.ts +6 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/typed-render-graph-primitives.d.ts +41 -1
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +3 -1
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/component.d.ts +1 -0
- package/dist/volume/component.d.ts.map +1 -1
- package/dist/volume/temporal.d.ts +6 -0
- package/dist/volume/temporal.d.ts.map +1 -1
- package/package.json +21 -20
- package/src/__tests__/auto-exposure-gpu-evidence.ts +291 -0
- package/src/__tests__/auto-exposure-inspection.unit.test.ts +80 -0
- package/src/__tests__/auto-exposure-transaction.integration.test.ts +99 -0
- package/src/__tests__/auto-exposure.browser.test.ts +33 -0
- package/src/__tests__/auto-exposure.dawn.test.ts +33 -0
- package/src/__tests__/capture-scene-projection.unit.test.ts +24 -0
- package/src/__tests__/detached-inspection.integration.test.ts +5 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +15 -24
- package/src/__tests__/device-loss-fanout.unit.test.ts +43 -0
- package/src/__tests__/device-scope-lifecycle.unit.test.ts +18 -0
- package/src/__tests__/device-scope-stale-matrix.unit.test.ts +18 -0
- package/src/__tests__/docs-gate-green.unit.test.ts +3 -3
- package/src/__tests__/dynamic-geometry-batch.unit.test.ts +157 -0
- package/src/__tests__/dynamic-geometry.unit.test.ts +36 -0
- package/src/__tests__/dynamic-resolution-plugin.integration.test.ts +81 -0
- package/src/__tests__/factory-contract.integration.test.ts +231 -9
- package/src/__tests__/fallback-row-stride-surface.unit.test.ts +19 -0
- package/src/__tests__/feature-depth-input.dawn.test.ts +121 -0
- package/src/__tests__/feature-noise.unit.test.ts +38 -0
- package/src/__tests__/fixtures/taa-resolve-pinned-baseline.wgsl +301 -0
- package/src/__tests__/frame-camera-selection.unit.test.ts +131 -0
- package/src/__tests__/frame-observation.contract.test.ts +21 -0
- package/src/__tests__/frame-plan-contract.unit.test.ts +24 -0
- package/src/__tests__/frame-targets.unit.test.ts +24 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +3 -0
- package/src/__tests__/gpu-driven-baseline.characterization.test.ts +79 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +307 -7
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +122 -142
- package/src/__tests__/gpu-driven-indirect-raster.browser.test.ts +10 -1
- package/src/__tests__/gpu-driven-lod-cache.unit.test.ts +261 -0
- package/src/__tests__/gpu-driven-mesh-world-identity.unit.test.ts +346 -0
- package/src/__tests__/gpu-driven-pbr.dawn.test.ts +1422 -0
- package/src/__tests__/gpu-driven-pbr.integration.test.ts +21 -0
- package/src/__tests__/gpu-driven-production-fixture.ts +96 -0
- package/src/__tests__/gpu-driven-production.integration.test.ts +1076 -106
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +1 -3
- package/src/__tests__/gpu-driven-shadow-views.browser.test.ts +63 -0
- package/src/__tests__/gpu-driven-shadow-views.dawn.test.ts +294 -0
- package/src/__tests__/gpu-driven-shadow-views.integration.test.ts +97 -0
- package/src/__tests__/gpu-driven-shadow-views.unit.test.ts +168 -0
- package/src/__tests__/gpu-driven-skin-contract.test-d.ts +11 -0
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +72 -20
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +30 -9
- package/src/__tests__/gpu-driven-view.unit.test.ts +160 -52
- package/src/__tests__/gpu-pass-timing-browser-runner.ts +15 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +20 -2
- package/src/__tests__/gpu-resource-scope.unit.test.ts +71 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +42 -0
- package/src/__tests__/gpu-scene-render-graph-gpu.ts +19 -5
- package/src/__tests__/gpu-scene.dawn.test.ts +40 -13
- package/src/__tests__/gpu-scene.unit.test.ts +613 -33
- package/src/__tests__/instances-culling.integration.test.ts +36 -10
- package/src/__tests__/instances-derived-bounds.unit.test.ts +54 -0
- package/src/__tests__/instances-store.unit.test.ts +242 -39
- package/src/__tests__/ktx2-basis-gpu-consumer.dawn.test.ts +6 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +13 -16
- package/src/__tests__/lut-lkg-transaction.integration.test.ts +122 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +5 -6
- package/src/__tests__/material-dispatch-shader-id.unit.test.ts +51 -0
- package/src/__tests__/material-lane-selection.unit.test.ts +60 -0
- package/src/__tests__/material-numeric-upload.unit.test.ts +53 -0
- package/src/__tests__/material-texture-handles.unit.test.ts +18 -0
- package/src/__tests__/material-texture-source.unit.test.ts +87 -0
- package/src/__tests__/materials-authoring-validation.unit.test.ts +41 -0
- package/src/__tests__/materials-standard-contract.unit.test.ts +57 -3
- package/src/__tests__/mesh-buffer-usage-surface.unit.test.ts +4 -0
- package/src/__tests__/mesh-submission-lifetime.unit.test.ts +8 -0
- package/src/__tests__/morph-neutral-admission.unit.test.ts +19 -0
- package/src/__tests__/normal-fallback.dawn.test.ts +122 -0
- package/src/__tests__/particle-material-input-layout.unit.test.ts +104 -0
- package/src/__tests__/physical-clearcoat.integration.test.ts +42 -3
- package/src/__tests__/pipeline-texture-specialization.unit.test.ts +138 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +2 -0
- package/src/__tests__/post-process-error-policy-owner.unit.test.ts +6 -5
- package/src/__tests__/prepared-gpu-driven-pbr-contract.test-d.ts +31 -0
- package/src/__tests__/prepared-gpu-driven-pbr-contract.unit.test.ts +39 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +251 -9
- package/src/__tests__/prepared-graphics-capability.unit.test.ts +21 -0
- package/src/__tests__/prepared-graphics-pipeline-warmup.unit.test.ts +6 -2
- package/src/__tests__/profiler-phase-catalog.test.ts +5 -0
- package/src/__tests__/public-surface.test-d.ts +3 -0
- package/src/__tests__/recovery-candidate-prepare.contract.test.ts +30 -12
- package/src/__tests__/reflection-fallback-async-publication.unit.test.ts +171 -0
- package/src/__tests__/reflection-probe-authoring.unit.test.ts +12 -10
- package/src/__tests__/reflection-probe-box.dawn.test.ts +71 -0
- package/src/__tests__/reflection-probe-filter.unit.test.ts +9 -0
- package/src/__tests__/reflection-probe-orientation.dawn.test.ts +294 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +5 -14
- package/src/__tests__/reflection-probe-updates.unit.test.ts +129 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +7 -0
- package/src/__tests__/render-error-detail-ssot.test-d.ts +27 -1
- package/src/__tests__/render-error-exhaustive.test-d.ts +15 -0
- package/src/__tests__/render-extent.unit.test.ts +63 -0
- package/src/__tests__/render-feature-gpu-work.integration.test.ts +285 -2
- package/src/__tests__/render-feature-plan.unit.test.ts +245 -0
- package/src/__tests__/render-feature-shadow-order.unit.test.ts +228 -0
- package/src/__tests__/render-feature-zero-work.unit.test.ts +35 -1
- package/src/__tests__/render-graph-fallback.integration.test.ts +2 -2
- package/src/__tests__/render-owner-cohesion.unit.test.ts +55 -0
- package/src/__tests__/render-scene-mixed-updates.integration.test.ts +426 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +915 -23
- package/src/__tests__/render-scene-resource-updates.integration.test.ts +214 -0
- package/src/__tests__/render-scene-skin-lifecycle.integration.test.ts +173 -0
- package/src/__tests__/render-scene-temporal-retry.unit.test.ts +133 -0
- package/src/__tests__/render-target-material-source.test-d.ts +27 -3
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +233 -9
- package/src/__tests__/renderer-frame-transaction.integration.test.ts +923 -5
- package/src/__tests__/shader-manifest-fixture.ts +45 -0
- package/src/__tests__/skin-motion-regression.unit.test.ts +0 -33
- package/src/__tests__/skin-palette-persistent.integration.test.ts +28 -0
- package/src/__tests__/skin-palette-persistent.unit.test.ts +247 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +125 -14
- package/src/__tests__/specular-environment-scale.dawn.test.ts +158 -0
- package/src/__tests__/ssao-config.unit.test.ts +7 -0
- package/src/__tests__/ssao-surface.dawn.test.ts +252 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +7 -1
- package/src/__tests__/ssr-confidence-compose.unit.test.ts +84 -0
- package/src/__tests__/ssr-coordinate-oracle.unit.test.ts +28 -0
- package/src/__tests__/ssr-cube-silhouette.dawn.test.ts +270 -0
- package/src/__tests__/ssr-format-probe-gating.integration.test.ts +82 -0
- package/src/__tests__/ssr-gpu-dispatch.browser.test.ts +99 -0
- package/src/__tests__/ssr-gpu-dispatch.dawn.test.ts +116 -0
- package/src/__tests__/ssr-gpu-dispatch.ts +951 -0
- package/src/__tests__/ssr-graph-topology.unit.test.ts +104 -0
- package/src/__tests__/ssr-history-filter.dawn.test.ts +198 -0
- package/src/__tests__/ssr-hit-color.dawn.test.ts +273 -0
- package/src/__tests__/ssr-hiz-odd-reduction.dawn.test.ts +569 -0
- package/src/__tests__/ssr-hiz-rescue.dawn.test.ts +279 -0
- package/src/__tests__/ssr-hiz.browser.test.ts +150 -0
- package/src/__tests__/ssr-hiz.dawn.test.ts +150 -0
- package/src/__tests__/ssr-hiz.unit.test.ts +56 -0
- package/src/__tests__/ssr-inspection.unit.test.ts +105 -0
- package/src/__tests__/ssr-memory-budget.unit.test.ts +45 -0
- package/src/__tests__/ssr-performance-sequence-aggregation.unit.test.ts +15 -0
- package/src/__tests__/ssr-public-surface.test-d.ts +37 -0
- package/src/__tests__/ssr-receiver-coverage.dawn.test.ts +387 -0
- package/src/__tests__/ssr-reflection-mip-reducer.dawn.test.ts +309 -0
- package/src/__tests__/ssr-reprojection-probe.ts +90 -0
- package/src/__tests__/ssr-roughness-mip.dawn.test.ts +163 -0
- package/src/__tests__/ssr-shader-prewarm.unit.test.ts +59 -0
- package/src/__tests__/ssr-spatial.integration.test.ts +141 -0
- package/src/__tests__/ssr-stable-lattice.dawn.test.ts +475 -0
- package/src/__tests__/ssr-temporal-history.unit.test.ts +202 -0
- package/src/__tests__/ssr-texel-crossing.dawn.test.ts +448 -0
- package/src/__tests__/ssr-zero-work.integration.test.ts +87 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +84 -12
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +29 -0
- package/src/__tests__/standard-output-chain-contract.unit.test.ts +99 -0
- package/src/__tests__/standard-output-chain.integration.test.ts +73 -0
- package/src/__tests__/standard-output-gpu-evidence.ts +205 -0
- package/src/__tests__/standard-output.browser.test.ts +15 -0
- package/src/__tests__/standard-output.dawn.test.ts +15 -0
- package/src/__tests__/standard-pbr-artifact-assembly.unit.test.ts +275 -0
- package/src/__tests__/standard-pipeline.integration.test.ts +320 -3
- package/src/__tests__/standard-profile-oracle.unit.test.ts +49 -0
- package/src/__tests__/standard-surface-lighting.unit.test.ts +41 -0
- package/src/__tests__/standard-texture-specialization.dawn.test.ts +141 -0
- package/src/__tests__/surface-adjacent-regressions.integration.test.ts +6 -3
- package/src/__tests__/taa-coverage-edge.dawn.test.ts +199 -0
- package/src/__tests__/taa-history-clipping.dawn.test.ts +328 -0
- package/src/__tests__/taa-neighborhood-equivalence.dawn.test.ts +782 -0
- package/src/__tests__/taa-stability-feedback.browser.test.ts +23 -0
- package/src/__tests__/taa-stability-feedback.dawn.test.ts +68 -0
- package/src/__tests__/taa-stability-feedback.ts +342 -0
- package/src/__tests__/temporal-history-lifecycle.unit.test.ts +49 -7
- package/src/__tests__/temporal-reset-matrix.unit.test.ts +9 -0
- package/src/__tests__/temporal-transaction.integration.test.ts +28 -0
- package/src/__tests__/temporal-view.unit.test.ts +17 -0
- package/src/__tests__/texture-usage-surface.unit.test.ts +4 -2
- package/src/__tests__/transmission-prewarm.unit.test.ts +57 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +109 -4
- package/src/__tests__/typed-scene-pass-material-cache.integration.test.ts +126 -0
- package/src/__tests__/vertex-layouts-ssot.unit.test.ts +47 -0
- package/src/__tests__/visibility-extract.perf.test.ts +20 -8
- package/src/__tests__/visibility-instances.integration.test.ts +19 -7
- package/src/__tests__/visibility-producer-matrix.integration.test.ts +20 -9
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +62 -13
- package/src/__tests__/volumetric-fog-topology.unit.test.ts +7 -7
- package/src/assembly/atmosphere-shader-prewarm.ts +39 -0
- package/src/assembly/device-feature-admission.ts +9 -4
- package/src/assembly/dynamic-geometry-host.ts +284 -163
- package/src/assembly/dynamic-geometry-runtime.ts +71 -0
- package/src/assembly/factory.ts +4 -0
- package/src/assembly/gpu-driven-owner.ts +29 -0
- package/src/assembly/host-contract.ts +19 -0
- package/src/assembly/material/assembly.ts +383 -1
- package/src/assembly/material/pipeline-helpers.ts +100 -0
- package/src/assembly/material-shader-policy.ts +110 -46
- package/src/assembly/recovery/device-loss-fanout.ts +5 -0
- package/src/assembly/recovery/failure-location.ts +62 -0
- package/src/assembly/recovery/recovery-attempt.ts +2 -29
- package/src/assembly/recovery/renderer-recover.ts +16 -17
- package/src/assembly/renderer-facade.ts +34 -1
- package/src/assembly/renderer-feature-inspection.ts +13 -0
- package/src/assembly/renderer-frame-transaction.ts +63 -0
- package/src/assembly/renderer-helpers.ts +26 -0
- package/src/assembly/renderer-inspection.ts +6 -0
- package/src/assembly/shader-prewarm-policy.ts +46 -1
- package/src/assembly/skin-palette-owner.ts +21 -0
- package/src/assembly/ssr-shader-prewarm.ts +41 -0
- package/src/assembly/webgpu-device-loss.ts +75 -0
- package/src/assembly/webgpu-pbr-ready.ts +232 -0
- package/src/assembly/webgpu-ready-mipmap.ts +26 -0
- package/src/assembly/webgpu-ready.ts +161 -131
- package/src/assembly/webgpu-renderer-bootstrap.ts +85 -0
- package/src/assembly/webgpu-renderer-contract.ts +69 -0
- package/src/assembly/webgpu-renderer-guards.ts +32 -0
- package/src/assembly/webgpu-renderer-observation.ts +43 -0
- package/src/assembly/webgpu-renderer-recovery-failure.ts +62 -0
- package/src/assembly/webgpu-renderer.ts +744 -730
- package/src/assembly/webgpu-vertex-layouts.ts +233 -87
- package/src/capture/scene-projection.ts +37 -0
- package/src/components/__tests__/camera-exposure.contract.unit.test.ts +153 -0
- package/src/components/__tests__/dynamic-resolution-schema.unit.test.ts +65 -0
- package/src/components/__tests__/light-radius.integration.test.ts +59 -0
- package/src/components/camera.ts +287 -7
- package/src/components/directional-light.ts +3 -3
- package/src/components/dynamic-resolution.ts +67 -0
- package/src/components/index.ts +2 -0
- package/src/components/instances.ts +45 -18
- package/src/components/light-helpers.ts +6 -1
- package/src/components/reflection-probe.ts +1 -0
- package/src/components/scene-instance.ts +2 -1
- package/src/components/screen-space-reflection.ts +21 -0
- package/src/components/skylight.ts +4 -1
- package/src/components/sprite-animation.ts +2 -2
- package/src/components/sprite-instances.ts +1 -1
- package/src/device/device-scope.ts +13 -7
- package/src/device/gpu-residency.ts +45 -42
- package/src/dynamic-geometry.ts +13 -8
- package/src/environment/background.ts +281 -0
- package/src/environment/ibl.ts +211 -0
- package/src/environment/storage.ts +63 -0
- package/src/errors/gpu-driven.ts +49 -8
- package/src/errors/render.ts +91 -3
- package/src/extract/camera.ts +37 -1
- package/src/extract/contracts.ts +10 -0
- package/src/extract/gpu-driven.ts +240 -10
- package/src/features/host.ts +237 -19
- package/src/features/noise-texture.ts +91 -0
- package/src/features/plan.ts +553 -24
- package/src/features/prepared-gpu-work.ts +631 -49
- package/src/features/prepared-graphics-store.ts +31 -0
- package/src/features/prepared-graphics.ts +5 -0
- package/src/features/render-graph-compute.ts +41 -8
- package/src/features/render-graph-contribution.ts +141 -3
- package/src/features/render-graph-raster.ts +143 -30
- package/src/features/types.ts +11 -0
- package/src/fullscreen-post-process-pass.ts +3 -0
- package/src/gpu-driven/batch-topology.ts +452 -108
- package/src/gpu-driven/material-artifacts.ts +179 -0
- package/src/gpu-driven/material-bindings.ts +41 -0
- package/src/gpu-driven/pbr-program.ts +31 -0
- package/src/gpu-driven/prepared-draw.ts +42 -6
- package/src/gpu-driven/production-raster.ts +2806 -716
- package/src/gpu-driven/shadow-views.ts +539 -0
- package/src/gpu-driven/view-gpu.ts +188 -41
- package/src/gpu-resource.ts +21 -2
- package/src/gpu-scene-schema.ts +61 -11
- package/src/gpu-scene.ts +197 -99
- package/src/gpu-texture-usage.ts +1 -0
- package/src/hdrp-buffers.ts +141 -36
- package/src/ibl/IblPipelineCache.ts +5 -0
- package/src/ibl/frame-resources.ts +38 -0
- package/src/ibl/skylight-bind-group.ts +32 -21
- package/src/index.ts +194 -75
- package/src/inspection-types.ts +207 -1
- package/src/instances-derived-bounds.ts +258 -34
- package/src/instances.ts +459 -150
- package/src/internal.ts +22 -0
- package/src/lifecycle.ts +2 -0
- package/src/material-row.ts +194 -0
- package/src/materials.ts +44 -8
- package/src/pbr-pipeline.ts +172 -19
- package/src/pipeline/render-extent.ts +111 -0
- package/src/pipeline/standard-build-context.ts +7 -0
- package/src/pipeline/standard-forward-lane.ts +74 -29
- package/src/pipeline/standard-output/__tests__/lut-admission.unit.test.ts +103 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/capability.unit.test.ts +40 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/gpu.contract.unit.test.ts +125 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/graph.contract.unit.test.ts +94 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/oracle.test.ts +108 -0
- package/src/pipeline/standard-output/auto-exposure/__tests__/preset.test.ts +26 -0
- package/src/pipeline/standard-output/auto-exposure/capability.ts +38 -0
- package/src/pipeline/standard-output/auto-exposure/gpu.ts +567 -0
- package/src/pipeline/standard-output/auto-exposure/graph.ts +221 -0
- package/src/pipeline/standard-output/auto-exposure/inspection.ts +231 -0
- package/src/pipeline/standard-output/auto-exposure/oracle.ts +291 -0
- package/src/pipeline/standard-output/auto-exposure/preset.ts +28 -0
- package/src/pipeline/standard-output/auto-exposure/state.ts +156 -0
- package/src/pipeline/standard-output/color-transform.ts +124 -0
- package/src/pipeline/standard-output/graph.ts +139 -0
- package/src/pipeline/standard-output/lut-admission.ts +121 -0
- package/src/pipeline/standard-output/lut-gpu.ts +399 -0
- package/src/pipeline/standard-output/lut-state.ts +176 -0
- package/src/pipeline/standard-output/resources.ts +121 -0
- package/src/pipeline/standard-output/types.ts +58 -0
- package/src/pipeline/standard-pipeline.ts +232 -70
- package/src/pipeline/standard-post.ts +190 -27
- package/src/pipeline/standard-profile.ts +2 -1
- package/src/pipeline-builder.ts +28 -9
- package/src/pipeline-spec-types.ts +4 -0
- package/src/pipeline-spec.ts +37 -29
- package/src/plugin.ts +4 -0
- package/src/points-lines/standard-owner.ts +6 -14
- package/src/post-process-errors.ts +26 -18
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +2 -2
- package/src/prepare/extended-lighting/resources.ts +3 -3
- package/src/prepare/prepared-graphics-resolver.ts +9 -2
- package/src/record/__tests__/main-pass-geometry.unit.test.ts +68 -0
- package/src/record/__tests__/material-bg-cache.unit.test.ts +45 -0
- package/src/record/__tests__/material-slot-plan.unit.test.ts +57 -0
- package/src/record/__tests__/mesh-ssbo.unit.test.ts +40 -1
- package/src/record/__tests__/recovery-pipeline.unit.test.ts +20 -1
- package/src/record/__tests__/sprite-material-abi.unit.test.ts +41 -6
- package/src/record/__tests__/temporal-payload.unit.test.ts +2 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +45 -0
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +5 -0
- package/src/record/dynamic-geometry-consumption.ts +59 -0
- package/src/record/frame-lighting.ts +15 -12
- package/src/record/frame-snapshot.ts +146 -34
- package/src/record/frame-targets.ts +9 -0
- package/src/record/frame.ts +838 -170
- package/src/record/main-pass-geometry.ts +209 -103
- package/src/record/main-pass-material.ts +157 -40
- package/src/record/main-pass-sprite-draws.ts +16 -107
- package/src/record/main-pass.ts +141 -12
- package/src/record/material-uniforms.ts +1 -1
- package/src/record/mesh-ssbo.ts +59 -15
- package/src/record/prepared-material-bindings.ts +238 -0
- package/src/record/recovery-pipeline.ts +69 -90
- package/src/record/render-context.ts +123 -24
- package/src/record/shadow-pass.ts +1389 -230
- package/src/record/skybox-post-pass.ts +14 -3
- package/src/record/typed-frame-graph.ts +1064 -47
- package/src/record/view-ubo.ts +12 -1
- package/src/recovery/render-system-candidate.ts +135 -68
- package/src/recovery/render-system-roots.ts +113 -0
- package/src/recovery/types.ts +77 -0
- package/src/reflection/background.ts +151 -0
- package/src/reflection/filter.ts +3 -0
- package/src/reflection/projection.ts +16 -6
- package/src/reflection/record-owner.ts +308 -140
- package/src/render-contract.ts +237 -49
- package/src/render-graph-primitives.ts +34 -5
- package/src/render-pipeline.ts +90 -2
- package/src/render-system-extract-tail.ts +431 -162
- package/src/render-system-extract.ts +478 -119
- package/src/render-system-projections.ts +241 -0
- package/src/render-system.ts +715 -828
- package/src/scene/render-scene-types.ts +13 -4
- package/src/scene/render-scene.ts +577 -355
- package/src/scene/shadow-visibility.ts +21 -0
- package/src/ssao-config.ts +25 -8
- package/src/ssr/admission.ts +380 -14
- package/src/ssr/compose.ts +144 -0
- package/src/ssr/errors.ts +48 -0
- package/src/ssr/graph.ts +797 -0
- package/src/ssr/history.ts +436 -0
- package/src/ssr/hiz.ts +124 -0
- package/src/ssr/inspection.ts +124 -0
- package/src/ssr/resources.ts +202 -0
- package/src/ssr/temporal.ts +164 -0
- package/src/systems/skin-palette-allocator.ts +495 -148
- package/src/systems/skin-palette-types.ts +17 -0
- package/src/systems/transparent-dispatch.ts +90 -0
- package/src/targets/material-source.ts +34 -0
- package/src/temporal/coverage.ts +1 -1
- package/src/temporal/frame-coordinator.ts +23 -2
- package/src/temporal/gpu.ts +79 -12
- package/src/temporal/history.ts +3 -1
- package/src/temporal/inspection.ts +2 -1
- package/src/temporal/standard-scene-data.ts +10 -2
- package/src/temporal/target-coverage-attachment.ts +72 -0
- package/src/temporal/temporal-view.ts +11 -2
- package/src/temporal/view.ts +12 -2
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +219 -139
- package/src/typed-render-graph-primitives.ts +304 -74
- package/src/typed-shadow-passes.ts +122 -12
- package/src/volume/component.ts +1 -0
- package/src/volume/passes.ts +3 -3
- package/src/volume/temporal.ts +10 -0
- package/dist/chunk-GE3SDD72.mjs.map +0 -1
- package/dist/chunk-GF523LHF.mjs.map +0 -1
- package/dist/chunk-IQMKJLNU.mjs.map +0 -1
- package/dist/chunk-J52NMQKR.mjs.map +0 -1
- package/dist/chunk-J6KACNOH.mjs.map +0 -1
- package/dist/chunk-JAASCMXA.mjs.map +0 -1
- package/dist/chunk-MBU4ZVE7.mjs.map +0 -1
- package/dist/chunk-MYJ5RPJO.mjs.map +0 -1
- package/dist/chunk-RBDBZ5R7.mjs.map +0 -1
- package/dist/chunk-VSL23LZE.mjs.map +0 -1
- package/src/__tests__/instances-world-ownership.integration.test.ts +0 -62
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +0 -36
package/src/components/camera.ts
CHANGED
|
@@ -43,6 +43,179 @@ export const CAMERA_PROJECTION_PERSPECTIVE = 0;
|
|
|
43
43
|
/** Numeric encoding of orthographic projection (schema value for `projection`). */
|
|
44
44
|
export const CAMERA_PROJECTION_ORTHOGRAPHIC = 1;
|
|
45
45
|
|
|
46
|
+
/** Closed public exposure authoring contract shared by all camera routes. */
|
|
47
|
+
export type CameraExposure =
|
|
48
|
+
| { readonly kind: 'manual'; readonly multiplier: number }
|
|
49
|
+
| {
|
|
50
|
+
readonly kind: 'auto';
|
|
51
|
+
readonly fallback: number;
|
|
52
|
+
readonly compensationEv: number;
|
|
53
|
+
readonly rangeEv: readonly [min: number, max: number];
|
|
54
|
+
readonly rates: readonly [up: number, down: number];
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** Numeric encoding of manual exposure in the Camera SoA column. */
|
|
58
|
+
export const CAMERA_EXPOSURE_MODE_MANUAL = 0;
|
|
59
|
+
/** Numeric encoding of GPU-adapted exposure in the Camera SoA column. */
|
|
60
|
+
export const CAMERA_EXPOSURE_MODE_AUTO = 1;
|
|
61
|
+
|
|
62
|
+
/** Product-supported white-balance temperature range in Kelvin. */
|
|
63
|
+
export const CAMERA_TEMPERATURE_MIN = 1000;
|
|
64
|
+
export const CAMERA_TEMPERATURE_MAX = 40000;
|
|
65
|
+
/** Product-supported normalized tint range. */
|
|
66
|
+
export const CAMERA_TINT_MIN = -1;
|
|
67
|
+
export const CAMERA_TINT_MAX = 1;
|
|
68
|
+
|
|
69
|
+
/** Closed validation failures for the Camera authoring/column boundary. */
|
|
70
|
+
export type CameraErrorCode =
|
|
71
|
+
| 'camera-exposure-invalid'
|
|
72
|
+
| 'camera-color-grading-invalid'
|
|
73
|
+
| 'camera-exposure-mode-invalid'
|
|
74
|
+
| 'camera-tonemap-invalid'
|
|
75
|
+
| 'camera-antialias-invalid'
|
|
76
|
+
| 'camera-bloom-invalid';
|
|
77
|
+
|
|
78
|
+
export interface CameraErrorDetail {
|
|
79
|
+
readonly field: string;
|
|
80
|
+
readonly actual: number | string;
|
|
81
|
+
readonly expected: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Structured Camera error; callers can branch on the closed `code` union. */
|
|
85
|
+
export class CameraError<Code extends CameraErrorCode = CameraErrorCode> extends Error {
|
|
86
|
+
readonly code: Code;
|
|
87
|
+
readonly expected: string;
|
|
88
|
+
readonly hint: string;
|
|
89
|
+
readonly detail: CameraErrorDetail;
|
|
90
|
+
|
|
91
|
+
constructor(code: Code, field: string, actual: number | string, expected: string, hint: string) {
|
|
92
|
+
super(`${code}: ${field}=${String(actual)}; expected ${expected}`);
|
|
93
|
+
this.name = 'CameraError';
|
|
94
|
+
this.code = code;
|
|
95
|
+
this.expected = expected;
|
|
96
|
+
this.hint = hint;
|
|
97
|
+
this.detail = Object.freeze({ field, actual, expected });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function actualValue(value: unknown): number | string {
|
|
102
|
+
if (typeof value === 'number' || typeof value === 'string') return value;
|
|
103
|
+
try {
|
|
104
|
+
return JSON.stringify(value) ?? String(value);
|
|
105
|
+
} catch {
|
|
106
|
+
return String(value);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function cameraError<Code extends CameraErrorCode>(
|
|
111
|
+
code: Code,
|
|
112
|
+
field: string,
|
|
113
|
+
actual: unknown,
|
|
114
|
+
expected: string,
|
|
115
|
+
hint: string,
|
|
116
|
+
): CameraError<Code> {
|
|
117
|
+
return new CameraError(code, field, actualValue(actual), expected, hint);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function finitePositive(value: number): boolean {
|
|
121
|
+
return Number.isFinite(value) && value > 0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Validate the closed exposure union before it is projected into columns. */
|
|
125
|
+
export function validateCameraExposure(exposure: CameraExposure): CameraExposure {
|
|
126
|
+
if (typeof exposure !== 'object' || exposure === null) {
|
|
127
|
+
throw cameraError(
|
|
128
|
+
'camera-exposure-invalid',
|
|
129
|
+
'value',
|
|
130
|
+
exposure,
|
|
131
|
+
'an object with kind manual or auto',
|
|
132
|
+
'choose one member of the CameraExposure union',
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
if (exposure.kind === 'manual') {
|
|
136
|
+
if (!finitePositive(exposure.multiplier)) {
|
|
137
|
+
throw cameraError(
|
|
138
|
+
'camera-exposure-invalid',
|
|
139
|
+
'multiplier',
|
|
140
|
+
exposure.multiplier,
|
|
141
|
+
'a finite number greater than zero',
|
|
142
|
+
'set Camera.exposure to a positive finite manual multiplier',
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
return exposure;
|
|
146
|
+
}
|
|
147
|
+
if (exposure.kind === 'auto') {
|
|
148
|
+
const [min, max] = exposure.rangeEv;
|
|
149
|
+
const [up, down] = exposure.rates;
|
|
150
|
+
if (
|
|
151
|
+
!finitePositive(exposure.fallback) ||
|
|
152
|
+
!Number.isFinite(exposure.compensationEv) ||
|
|
153
|
+
!Number.isFinite(min) ||
|
|
154
|
+
!Number.isFinite(max) ||
|
|
155
|
+
min > max ||
|
|
156
|
+
!Number.isFinite(up) ||
|
|
157
|
+
!Number.isFinite(down) ||
|
|
158
|
+
up < 0 ||
|
|
159
|
+
down < 0
|
|
160
|
+
) {
|
|
161
|
+
throw cameraError(
|
|
162
|
+
'camera-exposure-invalid',
|
|
163
|
+
'auto',
|
|
164
|
+
JSON.stringify(exposure),
|
|
165
|
+
'finite fallback/compensation, an ordered range, and non-negative rates',
|
|
166
|
+
'inspect fallback, compensationEv, rangeEv, and rates before rebuilding the camera',
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return exposure;
|
|
170
|
+
}
|
|
171
|
+
throw cameraError(
|
|
172
|
+
'camera-exposure-invalid',
|
|
173
|
+
'kind',
|
|
174
|
+
(exposure as { readonly kind?: unknown }).kind,
|
|
175
|
+
"'manual' or 'auto'",
|
|
176
|
+
'choose one member of the CameraExposure union',
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Validate the Camera-owned white-balance and LUT authoring fields. */
|
|
181
|
+
export function validateCameraColorGrading(
|
|
182
|
+
temperature: number,
|
|
183
|
+
tint: number,
|
|
184
|
+
colorLutStrength: number,
|
|
185
|
+
): void {
|
|
186
|
+
if (
|
|
187
|
+
!Number.isFinite(temperature) ||
|
|
188
|
+
temperature < CAMERA_TEMPERATURE_MIN ||
|
|
189
|
+
temperature > CAMERA_TEMPERATURE_MAX
|
|
190
|
+
) {
|
|
191
|
+
throw cameraError(
|
|
192
|
+
'camera-color-grading-invalid',
|
|
193
|
+
'temperature',
|
|
194
|
+
temperature,
|
|
195
|
+
`a finite value in [${CAMERA_TEMPERATURE_MIN}, ${CAMERA_TEMPERATURE_MAX}]`,
|
|
196
|
+
'set Camera.temperature to a supported Kelvin value',
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
if (!Number.isFinite(tint) || tint < CAMERA_TINT_MIN || tint > CAMERA_TINT_MAX) {
|
|
200
|
+
throw cameraError(
|
|
201
|
+
'camera-color-grading-invalid',
|
|
202
|
+
'tint',
|
|
203
|
+
tint,
|
|
204
|
+
`a finite value in [${CAMERA_TINT_MIN}, ${CAMERA_TINT_MAX}]`,
|
|
205
|
+
'set Camera.tint to a normalized value between -1 and 1',
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
if (!Number.isFinite(colorLutStrength) || colorLutStrength < 0 || colorLutStrength > 1) {
|
|
209
|
+
throw cameraError(
|
|
210
|
+
'camera-color-grading-invalid',
|
|
211
|
+
'colorLutStrength',
|
|
212
|
+
colorLutStrength,
|
|
213
|
+
'a finite value in [0, 1]',
|
|
214
|
+
'set Camera.colorLutStrength to zero to disable the LUT or a blend in [0, 1]',
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
46
219
|
/**
|
|
47
220
|
* Map a `camera.projection` numeric value to the closed `CameraProjection`
|
|
48
221
|
* string-literal union. Values other than 0 / 1 fall back to `'perspective'`
|
|
@@ -152,7 +325,13 @@ export function tonemapToU32(mode: Tonemap): number {
|
|
|
152
325
|
case 'none':
|
|
153
326
|
return TONEMAP_NONE;
|
|
154
327
|
}
|
|
155
|
-
throw
|
|
328
|
+
throw cameraError(
|
|
329
|
+
'camera-tonemap-invalid',
|
|
330
|
+
'tonemap',
|
|
331
|
+
mode,
|
|
332
|
+
'one of the closed Tonemap values',
|
|
333
|
+
'select a supported Camera tonemap mode',
|
|
334
|
+
);
|
|
156
335
|
}
|
|
157
336
|
|
|
158
337
|
/**
|
|
@@ -192,8 +371,12 @@ export function antialiasFromF32(value: number): Antialias {
|
|
|
192
371
|
if (value === ANTIALIAS_FXAA) return 'fxaa';
|
|
193
372
|
if (value === ANTIALIAS_MSAA) return 'msaa';
|
|
194
373
|
if (value === ANTIALIAS_TAA) return 'taa';
|
|
195
|
-
throw
|
|
196
|
-
|
|
374
|
+
throw cameraError(
|
|
375
|
+
'camera-antialias-invalid',
|
|
376
|
+
'antialias',
|
|
377
|
+
value,
|
|
378
|
+
`${ANTIALIAS_NONE}, ${ANTIALIAS_FXAA}, ${ANTIALIAS_MSAA}, or ${ANTIALIAS_TAA}`,
|
|
379
|
+
'select a supported Camera antialias mode',
|
|
197
380
|
);
|
|
198
381
|
}
|
|
199
382
|
|
|
@@ -205,8 +388,8 @@ export function antialiasFromF32(value: number): Antialias {
|
|
|
205
388
|
* `'off'` - default; no bloom post-processing (zero-overhead opt-out path)
|
|
206
389
|
* `'on'` - bloom bright-pass + separable blur + composite pipeline
|
|
207
390
|
*
|
|
208
|
-
* Bloom is a discrete enum (0/1) — illegal values fail-fast with
|
|
209
|
-
* (charter P3), matching antialiasFromF32 precedent.
|
|
391
|
+
* Bloom is a discrete enum (0/1) — illegal values fail-fast with the closed
|
|
392
|
+
* CameraError contract (charter P3), matching antialiasFromF32 precedent.
|
|
210
393
|
*/
|
|
211
394
|
export type BloomEnabled = 'off' | 'on';
|
|
212
395
|
|
|
@@ -222,8 +405,12 @@ export const BLOOM_ENABLED = 1;
|
|
|
222
405
|
export function bloomEnabledFromF32(value: number): BloomEnabled {
|
|
223
406
|
if (value === BLOOM_DISABLED) return 'off';
|
|
224
407
|
if (value === BLOOM_ENABLED) return 'on';
|
|
225
|
-
throw
|
|
226
|
-
|
|
408
|
+
throw cameraError(
|
|
409
|
+
'camera-bloom-invalid',
|
|
410
|
+
'bloom',
|
|
411
|
+
value,
|
|
412
|
+
`${BLOOM_DISABLED} or ${BLOOM_ENABLED}`,
|
|
413
|
+
'select Camera bloom off or on',
|
|
227
414
|
);
|
|
228
415
|
}
|
|
229
416
|
|
|
@@ -313,7 +500,15 @@ export const Camera = defineComponent('Camera', {
|
|
|
313
500
|
top: { type: 'f32', default: 1 },
|
|
314
501
|
tonemap: { type: 'f32', default: 0 },
|
|
315
502
|
exposure: { type: 'f32', default: 1.0 },
|
|
503
|
+
exposureMode: { type: 'f32', default: CAMERA_EXPOSURE_MODE_MANUAL },
|
|
504
|
+
compensationEv: { type: 'f32', default: 0 },
|
|
505
|
+
rangeEv: { type: 'array<f32, 2>', default: new Float32Array([-8, 8]) },
|
|
506
|
+
rates: { type: 'array<f32, 2>', default: new Float32Array([3, 1]) },
|
|
316
507
|
whitePoint: { type: 'f32', default: 4.0 },
|
|
508
|
+
temperature: { type: 'f32', default: 6504 },
|
|
509
|
+
tint: { type: 'f32', default: 0 },
|
|
510
|
+
colorLut: { type: 'shared<TextureAsset>', default: 0 as never },
|
|
511
|
+
colorLutStrength: { type: 'f32', default: 0 },
|
|
317
512
|
antialias: { type: 'f32', default: 0 },
|
|
318
513
|
historyVersion: { type: 'u32', default: 0 },
|
|
319
514
|
bloom: { type: 'f32', default: 0 },
|
|
@@ -356,6 +551,79 @@ export const Camera = defineComponent('Camera', {
|
|
|
356
551
|
export type CameraData = ShapeOf<SchemaOf<typeof Camera>>;
|
|
357
552
|
type CameraPod = CameraData;
|
|
358
553
|
|
|
554
|
+
/** Project the Camera SoA columns back into the public closed union. */
|
|
555
|
+
export function cameraExposureFromColumns(
|
|
556
|
+
input: Pick<CameraData, 'exposureMode' | 'exposure' | 'compensationEv' | 'rangeEv' | 'rates'>,
|
|
557
|
+
): CameraExposure {
|
|
558
|
+
if (input.exposureMode === CAMERA_EXPOSURE_MODE_MANUAL) {
|
|
559
|
+
return validateCameraExposure({ kind: 'manual', multiplier: input.exposure });
|
|
560
|
+
}
|
|
561
|
+
if (input.exposureMode === CAMERA_EXPOSURE_MODE_AUTO) {
|
|
562
|
+
return validateCameraExposure({
|
|
563
|
+
kind: 'auto',
|
|
564
|
+
fallback: input.exposure,
|
|
565
|
+
compensationEv: input.compensationEv,
|
|
566
|
+
rangeEv: [input.rangeEv[0] ?? -8, input.rangeEv[1] ?? 8],
|
|
567
|
+
rates: [input.rates[0] ?? 3, input.rates[1] ?? 1],
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
throw cameraError(
|
|
571
|
+
'camera-exposure-mode-invalid',
|
|
572
|
+
'exposureMode',
|
|
573
|
+
input.exposureMode,
|
|
574
|
+
`${CAMERA_EXPOSURE_MODE_MANUAL} or ${CAMERA_EXPOSURE_MODE_AUTO}`,
|
|
575
|
+
'set Camera.exposureMode to the manual or auto encoding',
|
|
576
|
+
);
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
function cameraExposureColumns(
|
|
580
|
+
exposure: CameraExposure,
|
|
581
|
+
): Pick<CameraData, 'exposureMode' | 'exposure' | 'compensationEv' | 'rangeEv' | 'rates'> {
|
|
582
|
+
const checked = validateCameraExposure(exposure);
|
|
583
|
+
if (checked.kind === 'manual') {
|
|
584
|
+
return {
|
|
585
|
+
exposureMode: CAMERA_EXPOSURE_MODE_MANUAL,
|
|
586
|
+
exposure: checked.multiplier,
|
|
587
|
+
compensationEv: 0,
|
|
588
|
+
rangeEv: new Float32Array([-8, 8]),
|
|
589
|
+
rates: new Float32Array([3, 1]),
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
return {
|
|
593
|
+
exposureMode: CAMERA_EXPOSURE_MODE_AUTO,
|
|
594
|
+
exposure: checked.fallback,
|
|
595
|
+
compensationEv: checked.compensationEv,
|
|
596
|
+
rangeEv: new Float32Array(checked.rangeEv),
|
|
597
|
+
rates: new Float32Array(checked.rates),
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
interface CameraColorGradingOpts {
|
|
602
|
+
exposure?: CameraExposure;
|
|
603
|
+
temperature?: number;
|
|
604
|
+
tint?: number;
|
|
605
|
+
colorLut?: CameraPod['colorLut'];
|
|
606
|
+
colorLutStrength?: number;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
function cameraColorGradingColumns(
|
|
610
|
+
opts: CameraColorGradingOpts,
|
|
611
|
+
): ReturnType<typeof cameraExposureColumns> &
|
|
612
|
+
Pick<CameraData, 'temperature' | 'tint' | 'colorLut' | 'colorLutStrength'> {
|
|
613
|
+
const exposure = opts.exposure ?? { kind: 'manual', multiplier: 1 };
|
|
614
|
+
const temperature = opts.temperature ?? 6504;
|
|
615
|
+
const tint = opts.tint ?? 0;
|
|
616
|
+
const colorLutStrength = opts.colorLutStrength ?? 0;
|
|
617
|
+
validateCameraColorGrading(temperature, tint, colorLutStrength);
|
|
618
|
+
return {
|
|
619
|
+
...cameraExposureColumns(exposure),
|
|
620
|
+
temperature,
|
|
621
|
+
tint,
|
|
622
|
+
colorLut: opts.colorLut ?? (0 as CameraPod['colorLut']),
|
|
623
|
+
colorLutStrength,
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
|
|
359
627
|
// ─── Camera factory functions (w13 SSOT refactoring) ─────────────────────
|
|
360
628
|
//
|
|
361
629
|
// Standalone factory functions that return 20-field CameraPod objects
|
|
@@ -396,6 +664,11 @@ interface CameraPerspectiveOpts {
|
|
|
396
664
|
* receive aspect-sync regardless of this flag.
|
|
397
665
|
*/
|
|
398
666
|
autoAspect?: boolean;
|
|
667
|
+
exposure?: CameraExposure;
|
|
668
|
+
temperature?: number;
|
|
669
|
+
tint?: number;
|
|
670
|
+
colorLut?: CameraPod['colorLut'];
|
|
671
|
+
colorLutStrength?: number;
|
|
399
672
|
}
|
|
400
673
|
|
|
401
674
|
interface CameraOrthographicOpts {
|
|
@@ -405,6 +678,11 @@ interface CameraOrthographicOpts {
|
|
|
405
678
|
top: number;
|
|
406
679
|
near?: number;
|
|
407
680
|
far?: number;
|
|
681
|
+
exposure?: CameraExposure;
|
|
682
|
+
temperature?: number;
|
|
683
|
+
tint?: number;
|
|
684
|
+
colorLut?: CameraPod['colorLut'];
|
|
685
|
+
colorLutStrength?: number;
|
|
408
686
|
}
|
|
409
687
|
|
|
410
688
|
/**
|
|
@@ -474,6 +752,7 @@ export function perspective(opts: CameraPerspectiveOpts): CameraPod {
|
|
|
474
752
|
far: opts.far ?? 100,
|
|
475
753
|
projection: CAMERA_PROJECTION_PERSPECTIVE,
|
|
476
754
|
...(opts.autoAspect !== undefined ? { autoAspect: opts.autoAspect } : {}),
|
|
755
|
+
...cameraColorGradingColumns(opts),
|
|
477
756
|
};
|
|
478
757
|
}
|
|
479
758
|
|
|
@@ -513,5 +792,6 @@ export function orthographic(opts: CameraOrthographicOpts): CameraPod {
|
|
|
513
792
|
right: opts.right,
|
|
514
793
|
bottom: opts.bottom,
|
|
515
794
|
top: opts.top,
|
|
795
|
+
...cameraColorGradingColumns(opts),
|
|
516
796
|
};
|
|
517
797
|
}
|
|
@@ -60,8 +60,8 @@ export {
|
|
|
60
60
|
* splitLambda ∈ [0,1] — PSSM split weight (default 0.75)
|
|
61
61
|
* cascadeBlend ∈ [0,0.5] — blend width between cascades (default 0.2)
|
|
62
62
|
* mapSize >= 1 — shadow map resolution (default 2048)
|
|
63
|
-
* depthBias —
|
|
64
|
-
* normalBias —
|
|
63
|
+
* depthBias — normalized receiver depth subtraction (default 0.00001)
|
|
64
|
+
* normalBias — world-space receiver normal offset (default 0.05)
|
|
65
65
|
* shadowDistance > 0 — how far shadows reach in front of the camera,
|
|
66
66
|
* in world units (default 200). This is the sole
|
|
67
67
|
* coverage knob: the CSM cascades are PSSM-split
|
|
@@ -123,7 +123,7 @@ export const DirectionalLight = defineComponent('DirectionalLight', {
|
|
|
123
123
|
splitLambda: { type: 'f32', default: 0.75 },
|
|
124
124
|
cascadeBlend: { type: 'f32', default: 0.2 },
|
|
125
125
|
mapSize: { type: 'f32', default: 2048 },
|
|
126
|
-
depthBias: { type: 'f32', default: 0.
|
|
126
|
+
depthBias: { type: 'f32', default: 0.00001 },
|
|
127
127
|
normalBias: { type: 'f32', default: 0.05 },
|
|
128
128
|
// Sole shadow coverage knob (feat replaces nearPlane/farPlane). The PSSM
|
|
129
129
|
// near end derives from the active camera near; shadowDistance is the far
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { defineComponent, type SchemaOf, type ShapeOf } from '@forgeax/engine-ecs';
|
|
2
|
+
import { err, ok, type Result } from '@forgeax/engine-types';
|
|
3
|
+
import {
|
|
4
|
+
type DynamicResolutionError,
|
|
5
|
+
DynamicResolutionInvalidParameterError,
|
|
6
|
+
DynamicResolutionRequiresTaaError,
|
|
7
|
+
} from '../errors/render';
|
|
8
|
+
|
|
9
|
+
/** Optional Camera companion that enables fixed or adaptive internal scaling. */
|
|
10
|
+
export const DynamicResolution = defineComponent('DynamicResolution', {
|
|
11
|
+
targetGpuMs: { type: 'f32', default: 16.67 },
|
|
12
|
+
minScale: { type: 'f32', default: 0.67 },
|
|
13
|
+
maxScale: { type: 'f32', default: 1.0 },
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export type DynamicResolutionData = ShapeOf<SchemaOf<typeof DynamicResolution>>;
|
|
17
|
+
|
|
18
|
+
const DEFAULT_DYNAMIC_RESOLUTION: DynamicResolutionData = Object.freeze({
|
|
19
|
+
targetGpuMs: 16.67,
|
|
20
|
+
minScale: 0.67,
|
|
21
|
+
maxScale: 1,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
function invalid(
|
|
25
|
+
field: 'targetGpuMs' | 'minScale' | 'maxScale',
|
|
26
|
+
value: number,
|
|
27
|
+
expected: string,
|
|
28
|
+
): DynamicResolutionInvalidParameterError {
|
|
29
|
+
return new DynamicResolutionInvalidParameterError({ field, value, expected });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Validate one detached DynamicResolution authoring POD before graph work. */
|
|
33
|
+
export function validateDynamicResolutionParameters(
|
|
34
|
+
input: Partial<DynamicResolutionData> | undefined,
|
|
35
|
+
): Result<DynamicResolutionData, DynamicResolutionInvalidParameterError> {
|
|
36
|
+
const value = input ?? {};
|
|
37
|
+
const targetGpuMs = value.targetGpuMs ?? DEFAULT_DYNAMIC_RESOLUTION.targetGpuMs;
|
|
38
|
+
const minScale = value.minScale ?? DEFAULT_DYNAMIC_RESOLUTION.minScale;
|
|
39
|
+
const maxScale = value.maxScale ?? DEFAULT_DYNAMIC_RESOLUTION.maxScale;
|
|
40
|
+
if (!Number.isFinite(targetGpuMs) || targetGpuMs <= 0) {
|
|
41
|
+
return err(invalid('targetGpuMs', targetGpuMs, 'finite and greater than 0'));
|
|
42
|
+
}
|
|
43
|
+
if (!Number.isFinite(minScale) || minScale < 0.5 || minScale > 1) {
|
|
44
|
+
return err(invalid('minScale', minScale, 'finite and in [0.5, 1.0]'));
|
|
45
|
+
}
|
|
46
|
+
if (!Number.isFinite(maxScale) || maxScale < 0.5 || maxScale > 1) {
|
|
47
|
+
return err(invalid('maxScale', maxScale, 'finite and in [0.5, 1.0]'));
|
|
48
|
+
}
|
|
49
|
+
if (minScale > maxScale) {
|
|
50
|
+
return err(invalid('minScale', minScale, 'less than or equal to maxScale'));
|
|
51
|
+
}
|
|
52
|
+
return ok(Object.freeze({ targetGpuMs, minScale, maxScale }));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Validate the Camera companion relationship at the extraction boundary. */
|
|
56
|
+
export function validateDynamicResolutionCamera(
|
|
57
|
+
input: Partial<DynamicResolutionData> | undefined,
|
|
58
|
+
antialias: 'none' | 'fxaa' | 'msaa' | 'taa',
|
|
59
|
+
): Result<DynamicResolutionData | undefined, DynamicResolutionError> {
|
|
60
|
+
if (input === undefined) return ok(undefined);
|
|
61
|
+
const parameters = validateDynamicResolutionParameters(input);
|
|
62
|
+
if (!parameters.ok) return parameters;
|
|
63
|
+
if (antialias !== 'taa') {
|
|
64
|
+
return err(new DynamicResolutionRequiresTaaError({ antialias }));
|
|
65
|
+
}
|
|
66
|
+
return parameters;
|
|
67
|
+
}
|
package/src/components/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './atmosphere';
|
|
|
2
2
|
export * from './camera';
|
|
3
3
|
export * from './cube-camera';
|
|
4
4
|
export * from './directional-light';
|
|
5
|
+
export * from './dynamic-resolution';
|
|
5
6
|
export * from './fog';
|
|
6
7
|
export { Instances, type InstancesData } from './instances';
|
|
7
8
|
export { Layer } from './layer';
|
|
@@ -27,6 +28,7 @@ export {
|
|
|
27
28
|
type SceneInstanceOverrideRecord,
|
|
28
29
|
type SceneInstanceState,
|
|
29
30
|
} from './scene-instance';
|
|
31
|
+
export * from './screen-space-reflection';
|
|
30
32
|
export {
|
|
31
33
|
SKYBOX_MODE_CUBEMAP,
|
|
32
34
|
SkyboxBackground,
|
|
@@ -1,23 +1,50 @@
|
|
|
1
|
+
// @forgeax/engine-render - renderer-owned large instance association.
|
|
2
|
+
//
|
|
3
|
+
// The ECS component deliberately carries only a stable collection identity.
|
|
4
|
+
// Matrix bytes, revision, capacity, dirty ranges, GPU residency and fallback
|
|
5
|
+
// policy belong to InstanceCollectionStore, exposed from the same Renderer.
|
|
6
|
+
// This keeps large payloads out of the ECS managed BufferPool while retaining
|
|
7
|
+
// ordinary query and entity-lifetime semantics.
|
|
8
|
+
//
|
|
9
|
+
// Authoring example:
|
|
10
|
+
//
|
|
11
|
+
// const transforms = new Float32Array(instanceCount * 16);
|
|
12
|
+
// for (let index = 0; index < instanceCount; index += 1) {
|
|
13
|
+
// const offset = index * 16;
|
|
14
|
+
// transforms[offset] = 1;
|
|
15
|
+
// transforms[offset + 5] = 1;
|
|
16
|
+
// transforms[offset + 10] = 1;
|
|
17
|
+
// transforms[offset + 15] = 1;
|
|
18
|
+
// }
|
|
19
|
+
// const collection = renderer.instances.create({
|
|
20
|
+
// transforms,
|
|
21
|
+
// }).unwrap();
|
|
22
|
+
// world.spawn(
|
|
23
|
+
// { component: MeshFilter, data: { assetHandle: HANDLE_CUBE } },
|
|
24
|
+
// { component: MeshRenderer, data: {} },
|
|
25
|
+
// { component: Instances, data: { collectionId: collection.collectionId } },
|
|
26
|
+
// );
|
|
27
|
+
//
|
|
28
|
+
// Updates stay on the renderer owner and publish one revision:
|
|
29
|
+
//
|
|
30
|
+
// renderer.instances.update(collection.collectionId, {
|
|
31
|
+
// start: 12,
|
|
32
|
+
// transforms: patch,
|
|
33
|
+
// });
|
|
34
|
+
//
|
|
35
|
+
// Render extraction snapshots the validated packed column-major matrices once
|
|
36
|
+
// per frame. Direct, GPU-driven and fallback lanes consume that same detached
|
|
37
|
+
// projection; callers never split one logical collection into ECS chunks.
|
|
38
|
+
|
|
1
39
|
import { defineComponent } from '@forgeax/engine-ecs';
|
|
40
|
+
import type { InstanceCollectionData } from '../instances';
|
|
2
41
|
|
|
3
|
-
/**
|
|
4
|
-
* World-owned local transforms for one explicit instanced renderable.
|
|
5
|
-
* Packed column-major mat4 values compose as entityWorld * instanceLocal.
|
|
6
|
-
* ECS owns copying, mutation and entity lifetime, including large arrays.
|
|
7
|
-
* Renderer extraction derives its own snapshot and GPU residency; neither
|
|
8
|
-
* authoring nor glTF SceneAsset lowering requires a Renderer identity.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* const transforms = new Float32Array(20_000 * 16);
|
|
12
|
-
* for (let i = 0; i < 20_000; i++) {
|
|
13
|
-
* transforms[i * 16] = transforms[i * 16 + 5] =
|
|
14
|
-
* transforms[i * 16 + 10] = transforms[i * 16 + 15] = 1;
|
|
15
|
-
* }
|
|
16
|
-
* const entity = world.spawn({ component: Instances, data: { transforms } }).unwrap();
|
|
17
|
-
* world.set(entity, Instances, { transforms }).unwrap();
|
|
18
|
-
*/
|
|
42
|
+
/** Per-entity association with a renderer-owned instance collection. */
|
|
19
43
|
export const Instances = defineComponent('Instances', {
|
|
20
|
-
|
|
44
|
+
collectionId: { type: 'u32', default: 0 },
|
|
21
45
|
});
|
|
22
46
|
|
|
23
|
-
|
|
47
|
+
/** Type-level hint for the `data` object at the Instances spawn site. */
|
|
48
|
+
export type InstancesData = InstanceCollectionData;
|
|
49
|
+
|
|
50
|
+
export type { InstanceCollectionId } from '../instances';
|
|
@@ -149,7 +149,12 @@ export function validateDirectionalLightData(
|
|
|
149
149
|
}),
|
|
150
150
|
);
|
|
151
151
|
}
|
|
152
|
-
|
|
152
|
+
// ECS stores this field as f32; both authored endpoints round outward.
|
|
153
|
+
// Accept their stored representations, but not the adjacent out-of-range f32.
|
|
154
|
+
if (
|
|
155
|
+
shadowAngularRadius < Math.fround(PCSS_RADIUS_MIN) ||
|
|
156
|
+
shadowAngularRadius > Math.fround(PCSS_RADIUS_MAX)
|
|
157
|
+
) {
|
|
153
158
|
return err(
|
|
154
159
|
new ShadowInvalidConfigError('shadowAngularRadius', shadowAngularRadius, {
|
|
155
160
|
kind: 'range',
|
|
@@ -40,6 +40,7 @@ export function reflectionProbeUpdateIntentToF32(intent: ReflectionProbeUpdateIn
|
|
|
40
40
|
export const ReflectionProbe = defineComponent('ReflectionProbe', {
|
|
41
41
|
halfExtents: { type: 'array<f32, 3>', default: new Float32Array([1, 1, 1]) },
|
|
42
42
|
priority: { type: 'f32', default: 0 },
|
|
43
|
+
boxProjection: { type: 'bool', default: false },
|
|
43
44
|
intensity: { type: 'f32', default: 1 },
|
|
44
45
|
resolution: { type: 'u32', default: 256 },
|
|
45
46
|
updateIntent: { type: 'f32', default: REFLECTION_PROBE_UPDATE_ONCE },
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
// `world.get(root, SceneInstance)` path as another component)
|
|
38
38
|
|
|
39
39
|
import { defineComponent, type EntityHandle } from '@forgeax/engine-ecs';
|
|
40
|
-
import type {
|
|
40
|
+
import type { MountOverride } from '@forgeax/engine-scene';
|
|
41
|
+
import type { LocalEntityId } from '@forgeax/engine-types';
|
|
41
42
|
|
|
42
43
|
/**
|
|
43
44
|
* Per-component, per-field override record carried in `SceneInstanceState`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @forgeax/engine-render - ScreenSpaceReflection authoring component.
|
|
2
|
+
//
|
|
3
|
+
// The component is an opt-in camera effect. It carries only the three
|
|
4
|
+
// bounded authoring values; all graph, resource, history, and backend state
|
|
5
|
+
// remains renderer-owned.
|
|
6
|
+
|
|
7
|
+
import { defineComponent, type SchemaOf, type ShapeOf } from '@forgeax/engine-ecs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Schema-derived ScreenSpaceReflection authoring data.
|
|
11
|
+
*
|
|
12
|
+
* The defaults are conservative and are validated against the active camera
|
|
13
|
+
* view range before a spatial candidate is admitted.
|
|
14
|
+
*/
|
|
15
|
+
export const ScreenSpaceReflection = defineComponent('ScreenSpaceReflection', {
|
|
16
|
+
maxDistance: { type: 'f32', default: 40 },
|
|
17
|
+
thickness: { type: 'f32', default: 0.2 },
|
|
18
|
+
maxRoughness: { type: 'f32', default: 0.6 },
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export type ScreenSpaceReflectionData = ShapeOf<SchemaOf<typeof ScreenSpaceReflection>>;
|
|
@@ -40,7 +40,10 @@ import { defineComponent } from '@forgeax/engine-ecs';
|
|
|
40
40
|
* Skylight ambient environment light.
|
|
41
41
|
*
|
|
42
42
|
* A single Skylight entity provides ambient lighting for all StandardMaterial
|
|
43
|
-
* surfaces.
|
|
43
|
+
* surfaces. When Atmosphere is selected and equirect is omitted, the same sky
|
|
44
|
+
* cube supplies diffuse and roughness-filtered specular IBL. Color/intensity
|
|
45
|
+
* still scale the result; without Atmosphere the solid-color behavior applies.
|
|
46
|
+
* Two authored inputs share one component:
|
|
44
47
|
*
|
|
45
48
|
* - **Solid-color ambient (no equirect).** Omit `equirect` for a constant
|
|
46
49
|
* ambient = `color` * `intensity` applied immediately, with no async GPU
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
// Why array<f32> (variable) and not array<f32, N> (fixed) for regions?
|
|
32
32
|
// The length `frameCount * 4` is data-dependent: `frameCount` is itself a
|
|
33
33
|
// per-entity column read at runtime, not a schema-time literal. Same
|
|
34
|
-
// shape as
|
|
35
|
-
// on the live instance count;
|
|
34
|
+
// shape as the renderer-owned 3D instance collection snapshot whose length
|
|
35
|
+
// depends on the live instance count; the owners remain separate.
|
|
36
36
|
//
|
|
37
37
|
// dt accumulator clock model (requirements section 2.5 q6 + plan-strategy
|
|
38
38
|
// section 2 D-5):
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
// composes per instance:
|
|
42
42
|
// world_position[i] = entity_world * instances_local[i] * vertex_position
|
|
43
43
|
// `SpriteInstances.transforms[i*16..i*16+15]` is interpreted as a local-
|
|
44
|
-
// space transform under the entity,
|
|
44
|
+
// space transform under the entity, matching the 3D collection projection.
|
|
45
45
|
// Set the entity's `Transform` to identity to make `instances_local[i]`
|
|
46
46
|
// directly world-space.
|
|
47
47
|
//
|