@forgeax/engine-render 0.1.20 → 0.1.23
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 +365 -29
- package/dist/assembly/backend-contract.d.ts +13 -0
- package/dist/assembly/backend-contract.d.ts.map +1 -1
- package/dist/assembly/device-feature-admission.d.ts +18 -0
- package/dist/assembly/device-feature-admission.d.ts.map +1 -0
- package/dist/assembly/directional-shadow-inspection.d.ts +38 -0
- package/dist/assembly/directional-shadow-inspection.d.ts.map +1 -0
- package/dist/assembly/factory.d.ts +30 -19
- package/dist/assembly/factory.d.ts.map +1 -1
- package/dist/assembly/host-contract.d.ts +19 -0
- package/dist/assembly/host-contract.d.ts.map +1 -1
- package/dist/assembly/render-target-host.d.ts +46 -0
- package/dist/assembly/render-target-host.d.ts.map +1 -0
- package/dist/assets/render-asset-port.d.ts.map +1 -1
- package/dist/authoring.mjs +4 -1
- package/dist/authoring.mjs.map +1 -1
- package/dist/capture/cube-views.d.ts +21 -0
- package/dist/capture/cube-views.d.ts.map +1 -0
- package/dist/capture/scheduler.d.ts +54 -0
- package/dist/capture/scheduler.d.ts.map +1 -0
- package/dist/{chunk-PCHBPYML.mjs → chunk-4L3P6DT5.mjs} +2 -2
- package/dist/chunk-4L3P6DT5.mjs.map +1 -0
- package/dist/{chunk-VFPLTKCU.mjs → chunk-4NPUASZR.mjs} +15 -4
- package/dist/chunk-4NPUASZR.mjs.map +1 -0
- package/dist/chunk-DIYW3M5D.mjs +5085 -0
- package/dist/chunk-DIYW3M5D.mjs.map +1 -0
- package/dist/chunk-FBC4R44J.mjs +1003 -0
- package/dist/chunk-FBC4R44J.mjs.map +1 -0
- package/dist/{chunk-CDTWTHZR.mjs → chunk-FF7K3FSO.mjs} +474 -168
- package/dist/chunk-FF7K3FSO.mjs.map +1 -0
- package/dist/chunk-HZUPSYW7.mjs +1104 -0
- package/dist/chunk-HZUPSYW7.mjs.map +1 -0
- package/dist/{chunk-TBQJOK2L.mjs → chunk-QODA5UKU.mjs} +321 -269
- package/dist/chunk-QODA5UKU.mjs.map +1 -0
- package/dist/chunk-YALPS44A.mjs +296 -0
- package/dist/chunk-YALPS44A.mjs.map +1 -0
- package/dist/{chunk-4XINDLAY.mjs → chunk-ZUWKAZ2I.mjs} +1963 -2178
- package/dist/chunk-ZUWKAZ2I.mjs.map +1 -0
- package/dist/cluster-binner.d.ts +5 -0
- package/dist/cluster-binner.d.ts.map +1 -1
- package/dist/components/camera.d.ts +1 -0
- package/dist/components/camera.d.ts.map +1 -1
- package/dist/components/cube-camera.d.ts +20 -0
- package/dist/components/cube-camera.d.ts.map +1 -0
- package/dist/components/directional-light.d.ts +11 -2
- package/dist/components/directional-light.d.ts.map +1 -1
- package/dist/components/directional-shadow-filter.d.ts +25 -0
- package/dist/components/directional-shadow-filter.d.ts.map +1 -0
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/light-helpers.d.ts +4 -0
- package/dist/components/light-helpers.d.ts.map +1 -1
- package/dist/components/light-probe.d.ts +9 -0
- package/dist/components/light-probe.d.ts.map +1 -0
- package/dist/components/rect-area-light.d.ts +12 -0
- package/dist/components/rect-area-light.d.ts.map +1 -0
- package/dist/components/reflection-probe.d.ts +17 -0
- package/dist/components/reflection-probe.d.ts.map +1 -0
- package/dist/components/scene-instance.d.ts +4 -0
- package/dist/components/scene-instance.d.ts.map +1 -1
- package/dist/components/spot-light.d.ts +3 -0
- package/dist/components/spot-light.d.ts.map +1 -1
- package/dist/construct-renderer.mjs +14836 -9620
- package/dist/construct-renderer.mjs.map +1 -1
- package/dist/device/gpu-residency.d.ts +8 -1
- package/dist/device/gpu-residency.d.ts.map +1 -1
- package/dist/device/lifecycle-transaction.d.ts +2 -0
- package/dist/device/lifecycle-transaction.d.ts.map +1 -0
- package/dist/environment/frame.d.ts.map +1 -1
- package/dist/environment/lifecycle.d.ts +5 -0
- package/dist/environment/lifecycle.d.ts.map +1 -1
- package/dist/errors/gpu-driven.d.ts +26 -0
- package/dist/errors/gpu-driven.d.ts.map +1 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/recover.d.ts +9 -1
- package/dist/errors/recover.d.ts.map +1 -1
- package/dist/errors/render.d.ts +166 -93
- package/dist/errors/render.d.ts.map +1 -1
- package/dist/extract/directional-shadow-projection.d.ts +23 -0
- package/dist/extract/directional-shadow-projection.d.ts.map +1 -0
- package/dist/extract/environment.d.ts +14 -0
- package/dist/extract/environment.d.ts.map +1 -1
- package/dist/extract/gpu-driven.d.ts +50 -0
- package/dist/extract/gpu-driven.d.ts.map +1 -0
- package/dist/extract/visibility.d.ts.map +1 -1
- package/dist/features/fullscreen.d.ts.map +1 -1
- package/dist/features/targets.d.ts.map +1 -1
- package/dist/features/types.d.ts +10 -0
- package/dist/features/types.d.ts.map +1 -1
- package/dist/fullscreen-post-process-pass.d.ts +13 -2
- package/dist/fullscreen-post-process-pass.d.ts.map +1 -1
- package/dist/gpu-driven/batch-topology.d.ts +34 -0
- package/dist/gpu-driven/batch-topology.d.ts.map +1 -1
- package/dist/gpu-driven/prepared-draw.d.ts +63 -0
- package/dist/gpu-driven/prepared-draw.d.ts.map +1 -0
- package/dist/gpu-driven/production-raster.d.ts +97 -2
- package/dist/gpu-driven/production-raster.d.ts.map +1 -1
- package/dist/gpu-driven/view-gpu.d.ts +64 -1
- package/dist/gpu-driven/view-gpu.d.ts.map +1 -1
- package/dist/gpu-scene-schema.d.ts +14 -0
- package/dist/gpu-scene-schema.d.ts.map +1 -1
- package/dist/gpu-scene.d.ts +8 -1
- package/dist/gpu-scene.d.ts.map +1 -1
- package/dist/gpu-usage.d.ts +0 -1
- package/dist/gpu-usage.d.ts.map +1 -1
- package/dist/hdrp-buffers.d.ts +21 -19
- package/dist/hdrp-buffers.d.ts.map +1 -1
- package/dist/ibl/IblPipelineCache.d.ts +4 -0
- package/dist/ibl/IblPipelineCache.d.ts.map +1 -1
- package/dist/ibl/kernel-cache.d.ts +36 -0
- package/dist/ibl/kernel-cache.d.ts.map +1 -0
- package/dist/index.d.ts +39 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +91 -6
- package/dist/index.mjs.map +1 -1
- package/dist/inspection-types.d.ts +214 -1
- package/dist/inspection-types.d.ts.map +1 -1
- package/dist/instances-derived-bounds.d.ts +50 -0
- package/dist/instances-derived-bounds.d.ts.map +1 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.mjs +23 -2
- package/dist/internal.mjs.map +1 -1
- package/dist/light-buffer-layout.d.ts +58 -140
- package/dist/light-buffer-layout.d.ts.map +1 -1
- package/dist/materials.d.ts.map +1 -1
- package/dist/mesh-material-bindings.d.ts +54 -0
- package/dist/mesh-material-bindings.d.ts.map +1 -1
- package/dist/pbr-pipeline.d.ts +38 -14
- package/dist/pbr-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-forward-lane.d.ts +2 -1
- package/dist/pipeline/standard-forward-lane.d.ts.map +1 -1
- package/dist/pipeline/standard-lighting/errors.d.ts +4 -0
- package/dist/pipeline/standard-lighting/errors.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/graph.d.ts +24 -0
- package/dist/pipeline/standard-lighting/graph.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/inspection.d.ts +38 -0
- package/dist/pipeline/standard-lighting/inspection.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/layout.d.ts +28 -0
- package/dist/pipeline/standard-lighting/layout.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/light-frame.d.ts +33 -0
- package/dist/pipeline/standard-lighting/light-frame.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/membership.d.ts +14 -0
- package/dist/pipeline/standard-lighting/membership.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/prepare.d.ts +16 -0
- package/dist/pipeline/standard-lighting/prepare.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/topology.d.ts +45 -0
- package/dist/pipeline/standard-lighting/topology.d.ts.map +1 -0
- package/dist/pipeline/standard-lighting/transport.d.ts +36 -0
- package/dist/pipeline/standard-lighting/transport.d.ts.map +1 -0
- package/dist/pipeline/standard-pipeline.d.ts +4 -13
- package/dist/pipeline/standard-pipeline.d.ts.map +1 -1
- package/dist/pipeline/standard-post.d.ts.map +1 -1
- package/dist/pipeline/standard-profile.d.ts +5 -26
- package/dist/pipeline/standard-profile.d.ts.map +1 -1
- package/dist/pipeline-builder.d.ts +2 -0
- package/dist/pipeline-builder.d.ts.map +1 -1
- package/dist/pipeline-spec.d.ts +40 -7
- package/dist/pipeline-spec.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/point-shadow-inspection.d.ts +21 -0
- package/dist/point-shadow-inspection.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/ltc-resources.d.ts +31 -0
- package/dist/prepare/extended-lighting/ltc-resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/resources.d.ts +72 -0
- package/dist/prepare/extended-lighting/resources.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts +42 -0
- package/dist/prepare/extended-lighting/spot-modifiers.d.ts.map +1 -0
- package/dist/prepare/extended-lighting/state.d.ts +24 -0
- package/dist/prepare/extended-lighting/state.d.ts.map +1 -0
- package/dist/record/frame-lighting.d.ts +33 -36
- package/dist/record/frame-lighting.d.ts.map +1 -1
- package/dist/record/frame-snapshot.d.ts +78 -24
- package/dist/record/frame-snapshot.d.ts.map +1 -1
- package/dist/record/frame-targets.d.ts +5 -0
- package/dist/record/frame-targets.d.ts.map +1 -1
- package/dist/record/frame.d.ts +16 -6
- package/dist/record/frame.d.ts.map +1 -1
- package/dist/record/gpu-pass-timing/contract.d.ts +96 -0
- package/dist/record/gpu-pass-timing/contract.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/errors.d.ts +18 -0
- package/dist/record/gpu-pass-timing/errors.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/index.d.ts +8 -0
- package/dist/record/gpu-pass-timing/index.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/parser.d.ts +11 -0
- package/dist/record/gpu-pass-timing/parser.d.ts.map +1 -0
- package/dist/record/gpu-pass-timing/session.d.ts +43 -0
- package/dist/record/gpu-pass-timing/session.d.ts.map +1 -0
- package/dist/record/gpu-timing.d.ts +20 -3
- package/dist/record/gpu-timing.d.ts.map +1 -1
- package/dist/record/helpers.d.ts +0 -20
- package/dist/record/helpers.d.ts.map +1 -1
- package/dist/record/main-pass-geometry.d.ts +6 -1
- package/dist/record/main-pass-geometry.d.ts.map +1 -1
- package/dist/record/main-pass-material.d.ts +25 -2
- package/dist/record/main-pass-material.d.ts.map +1 -1
- package/dist/record/main-pass-sprite-draws.d.ts.map +1 -1
- package/dist/record/main-pass.d.ts +2 -0
- package/dist/record/main-pass.d.ts.map +1 -1
- package/dist/record/mesh-ssbo.d.ts.map +1 -1
- package/dist/record/render-context.d.ts +98 -6
- package/dist/record/render-context.d.ts.map +1 -1
- package/dist/record/shadow-pass.d.ts.map +1 -1
- package/dist/record/skybox-post-pass.d.ts.map +1 -1
- package/dist/record/typed-frame-graph.d.ts +119 -4
- package/dist/record/typed-frame-graph.d.ts.map +1 -1
- package/dist/record/view-ubo.d.ts +7 -5
- package/dist/record/view-ubo.d.ts.map +1 -1
- package/dist/reflection/filter.d.ts +22 -0
- package/dist/reflection/filter.d.ts.map +1 -0
- package/dist/reflection/gpu-table.d.ts +25 -0
- package/dist/reflection/gpu-table.d.ts.map +1 -0
- package/dist/reflection/inspection.d.ts +10 -0
- package/dist/reflection/inspection.d.ts.map +1 -0
- package/dist/reflection/projection.d.ts +140 -0
- package/dist/reflection/projection.d.ts.map +1 -0
- package/dist/reflection/record-owner.d.ts +60 -0
- package/dist/reflection/record-owner.d.ts.map +1 -0
- package/dist/render-contract.d.ts +62 -14
- 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 +49 -2
- package/dist/render-pipeline.d.ts.map +1 -1
- package/dist/render-system-extract.d.ts +160 -31
- package/dist/render-system-extract.d.ts.map +1 -1
- package/dist/render-system.d.ts +28 -2
- package/dist/render-system.d.ts.map +1 -1
- package/dist/renderer.d.ts +43 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/scene/probe-blend-record.d.ts +22 -0
- package/dist/scene/probe-blend-record.d.ts.map +1 -0
- package/dist/scene/probe-blend.d.ts +142 -0
- package/dist/scene/probe-blend.d.ts.map +1 -0
- package/dist/scene/render-scene-types.d.ts +0 -6
- package/dist/scene/render-scene-types.d.ts.map +1 -1
- package/dist/scene/render-scene.d.ts +117 -9
- package/dist/scene/render-scene.d.ts.map +1 -1
- package/dist/scene/visibility/bounds.d.ts +20 -0
- package/dist/scene/visibility/bounds.d.ts.map +1 -0
- package/dist/scene/visibility/budget.d.ts +16 -0
- package/dist/scene/visibility/budget.d.ts.map +1 -0
- package/dist/scene/visibility/facet.d.ts +73 -0
- package/dist/scene/visibility/facet.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts +41 -0
- package/dist/scene/visibility/gpu-frame-timing.d.ts.map +1 -0
- package/dist/scene/visibility/gpu-lod.d.ts +46 -0
- package/dist/scene/visibility/gpu-lod.d.ts.map +1 -0
- package/dist/scene/visibility/inspection.d.ts +132 -0
- package/dist/scene/visibility/inspection.d.ts.map +1 -0
- package/dist/scene/visibility/lod-selector.d.ts +25 -0
- package/dist/scene/visibility/lod-selector.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts +81 -0
- package/dist/scene/visibility/occlusion-confidence.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-pass.d.ts +57 -0
- package/dist/scene/visibility/occlusion-pass.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts +57 -0
- package/dist/scene/visibility/occlusion-query-pool.d.ts.map +1 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts +96 -0
- package/dist/scene/visibility/occlusion-runtime.d.ts.map +1 -0
- package/dist/scene/visibility/types.d.ts +34 -0
- package/dist/scene/visibility/types.d.ts.map +1 -0
- package/dist/shadow-atlas.d.ts +3 -3
- package/dist/shadow-atlas.d.ts.map +1 -1
- package/dist/ssao-buffers.d.ts +3 -0
- package/dist/ssao-buffers.d.ts.map +1 -1
- package/dist/ssr/admission.d.ts +122 -0
- package/dist/ssr/admission.d.ts.map +1 -0
- package/dist/ssr/composition.d.ts +32 -0
- package/dist/ssr/composition.d.ts.map +1 -0
- package/dist/ssr/errors.d.ts +39 -0
- package/dist/ssr/errors.d.ts.map +1 -0
- package/dist/ssr/identity.d.ts +13 -0
- package/dist/ssr/identity.d.ts.map +1 -0
- package/dist/systems/skin-palette-allocator.d.ts +1 -1
- package/dist/targets/contracts.d.ts +66 -0
- package/dist/targets/contracts.d.ts.map +1 -0
- package/dist/targets/graph-projection.d.ts +29 -0
- package/dist/targets/graph-projection.d.ts.map +1 -0
- package/dist/targets/material-source.d.ts +34 -0
- package/dist/targets/material-source.d.ts.map +1 -0
- package/dist/targets/owner.d.ts +32 -0
- package/dist/targets/owner.d.ts.map +1 -0
- package/dist/targets/physical.d.ts +18 -0
- package/dist/targets/physical.d.ts.map +1 -0
- package/dist/targets/readback.d.ts +39 -0
- package/dist/targets/readback.d.ts.map +1 -0
- package/dist/temporal/frame-coordinator.d.ts +13 -0
- package/dist/temporal/frame-coordinator.d.ts.map +1 -1
- package/dist/temporal/frame.d.ts +2 -0
- package/dist/temporal/frame.d.ts.map +1 -1
- package/dist/temporal/index.mjs +6 -5
- package/dist/temporal/view.d.ts +7 -0
- package/dist/temporal/view.d.ts.map +1 -1
- package/dist/tilemap-chunk-extract-system.d.ts +1 -1
- package/dist/typed-render-graph-primitives.d.ts +5 -1
- package/dist/typed-render-graph-primitives.d.ts.map +1 -1
- package/dist/typed-shadow-passes.d.ts +1 -1
- package/dist/typed-shadow-passes.d.ts.map +1 -1
- package/dist/volume/passes.d.ts +9 -5
- package/dist/volume/passes.d.ts.map +1 -1
- package/package.json +20 -20
- package/src/__tests__/bloom-exact-zero.unit.test.ts +48 -19
- package/src/__tests__/bloom-lifecycle.integration.test.ts +41 -13
- package/src/__tests__/camera-target-consumption.unit.test.ts +53 -0
- package/src/__tests__/cluster-binner.unit.test.ts +35 -0
- package/src/__tests__/cluster-grid-default-surface.unit.test.ts +12 -2
- package/src/__tests__/cube-camera-scheduler.unit.test.ts +70 -0
- package/src/__tests__/cube-camera-single-submit.perf.test.ts +75 -0
- package/src/__tests__/cube-camera-view-matrices.unit.test.ts +41 -0
- package/src/__tests__/cube-camera-vocabulary.unit.test.ts +47 -0
- package/src/__tests__/cube-camera.integration.test.ts +42 -0
- package/src/__tests__/detached-inspection.integration.test.ts +6 -0
- package/src/__tests__/device-feature-admission.unit.test.ts +85 -0
- package/src/__tests__/direct-light-snapshot.unit.test.ts +62 -6
- package/src/__tests__/docs-gate-green.unit.test.ts +38 -0
- package/src/__tests__/environment-generation.integration.test.ts +16 -0
- package/src/__tests__/evidence-identity.ts +13 -0
- package/src/__tests__/evidence-identity.unit.test.ts +24 -0
- package/src/__tests__/extended-lighting-recovery.browser.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.dawn.test.ts +14 -0
- package/src/__tests__/extended-lighting-recovery.integration.test.ts +81 -0
- package/src/__tests__/extended-lighting-resources.unit.test.ts +51 -0
- package/src/__tests__/extended-lighting-zero-feature.integration.test.ts +52 -0
- package/src/__tests__/factory-contract.integration.test.ts +288 -29
- package/src/__tests__/fog-component.unit.test.ts +67 -0
- package/src/__tests__/fog.integration.test.ts +86 -0
- package/src/__tests__/frame-observation.contract.test.ts +15 -0
- package/src/__tests__/fullscreen-feature-plan.unit.test.ts +37 -0
- package/src/__tests__/gpu-driven-batch-topology-pbr.unit.test.ts +146 -0
- package/src/__tests__/gpu-driven-indirect-raster-evidence.ts +10 -8
- package/src/__tests__/gpu-driven-indirect-raster.dawn.test.ts +18 -1
- package/src/__tests__/gpu-driven-production.integration.test.ts +579 -17
- package/src/__tests__/gpu-driven-scaling.unit.test.ts +66 -2
- package/src/__tests__/gpu-driven-view-gpu-evidence.ts +26 -1
- package/src/__tests__/gpu-driven-view-graph.integration.test.ts +101 -6
- package/src/__tests__/gpu-driven-view.browser.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.dawn.test.ts +3 -3
- package/src/__tests__/gpu-driven-view.unit.test.ts +50 -0
- package/src/__tests__/gpu-lod-evidence.ts +188 -0
- package/src/__tests__/gpu-lod-fallback.integration.test.ts +10 -0
- package/src/__tests__/gpu-lod-indirect.integration.test.ts +40 -0
- package/src/__tests__/gpu-lod-parity.dawn.test.ts +29 -0
- package/src/__tests__/gpu-lod-readiness.integration.test.ts +52 -0
- package/src/__tests__/gpu-lod-schema.unit.test.ts +66 -0
- package/src/__tests__/gpu-lod-selector.unit.test.ts +28 -0
- package/src/__tests__/gpu-lod-silhouette.browser.test.ts +13 -0
- package/src/__tests__/gpu-pass-timing-browser-runner.ts +281 -0
- package/src/__tests__/gpu-pass-timing-coexistence.integration.test.ts +80 -0
- package/src/__tests__/gpu-pass-timing-contract.unit.test.ts +243 -0
- package/src/__tests__/gpu-pass-timing-exact-zero.unit.test.ts +131 -0
- package/src/__tests__/gpu-pass-timing-lifecycle.integration.test.ts +230 -0
- package/src/__tests__/gpu-pass-timing-observation.unit.test.ts +233 -0
- package/src/__tests__/gpu-pass-timing-session.unit.test.ts +438 -0
- package/src/__tests__/gpu-pass-timing.browser.test.ts +26 -0
- package/src/__tests__/gpu-pass-timing.rhi-null.unit.test.ts +125 -0
- package/src/__tests__/gpu-resource-store-stride.unit.test.ts +66 -1
- package/src/__tests__/gpu-scene.dawn.test.ts +8 -1
- package/src/__tests__/gpu-scene.unit.test.ts +49 -3
- package/src/__tests__/hdrp-group2-visibility.unit.test.ts +24 -0
- package/src/__tests__/instances-culling.integration.test.ts +94 -0
- package/src/__tests__/instances-derived-bounds.unit.test.ts +118 -0
- package/src/__tests__/light-buffer-layout.unit.test.ts +113 -3
- package/src/__tests__/light-inspection.unit.test.ts +55 -0
- package/src/__tests__/light-resource-error.unit.test.ts +43 -0
- package/src/__tests__/lighting-scene-roundtrip.integration.test.ts +109 -0
- package/src/__tests__/lod-bounds.unit.test.ts +42 -0
- package/src/__tests__/lod-cpu-lane.integration.test.ts +55 -0
- package/src/__tests__/lod-cpu-no-change.perf.test.ts +19 -0
- package/src/__tests__/lod-gpu-frame-timing.unit.test.ts +49 -0
- package/src/__tests__/lod-multi-view.integration.test.ts +63 -0
- package/src/__tests__/lod-occlusion-device-loss.integration.test.ts +27 -0
- package/src/__tests__/lod-occlusion-final-decision.integration.test.ts +47 -0
- package/src/__tests__/lod-occlusion-inspection.integration.test.ts +217 -0
- package/src/__tests__/lod-occlusion-inspection.schema.test-d.ts +14 -0
- package/src/__tests__/lod-occlusion-inspection.unit.test.ts +72 -0
- package/src/__tests__/lod-occlusion-visual-evidence.ts +91 -0
- package/src/__tests__/lod-occlusion.browser.test.ts +15 -0
- package/src/__tests__/lod-occlusion.dawn.test.ts +20 -0
- package/src/__tests__/lod-selector.profile.test.ts +35 -0
- package/src/__tests__/lod-selector.unit.test.ts +68 -0
- package/src/__tests__/lod-visibility-identity.unit.test.ts +198 -0
- package/src/__tests__/lod-visibility-lifecycle.integration.test.ts +132 -0
- package/src/__tests__/ltc-resources.unit.test.ts +32 -0
- package/src/__tests__/material-contract-inventory.unit.test.ts +17 -0
- package/src/__tests__/material-observation.integration.test.ts +101 -0
- package/src/__tests__/occlusion-confidence.unit.test.ts +168 -0
- package/src/__tests__/occlusion-invalidation.integration.test.ts +37 -0
- package/src/__tests__/occlusion-pass-routing.unit.test.ts +16 -0
- package/src/__tests__/occlusion-pass.dawn.test.ts +20 -0
- package/src/__tests__/occlusion-pass.integration.test.ts +43 -0
- package/src/__tests__/occlusion-pass.rhi-null.test.ts +22 -0
- package/src/__tests__/occlusion-query-pool.rhi-null.test.ts +21 -0
- package/src/__tests__/occlusion-query-pool.unit.test.ts +95 -0
- package/src/__tests__/occlusion-query-ticket.integration.test.ts +47 -0
- package/src/__tests__/occlusion-query.dawn.test.ts +16 -0
- package/src/__tests__/occlusion-query.evidence.ts +178 -0
- package/src/__tests__/occlusion-query.rhi-null.test.ts +31 -0
- package/src/__tests__/occlusion-runtime.unit.test.ts +120 -0
- package/src/__tests__/pbr-view-layout.unit.test.ts +16 -0
- package/src/__tests__/point-shadow-inspection.unit.test.ts +60 -0
- package/src/__tests__/prepared-gpu-driven-pbr.integration.test.ts +196 -0
- package/src/__tests__/probe-bindings.unit.test.ts +200 -0
- package/src/__tests__/probe-blend-numeric.unit.test.ts +67 -0
- package/src/__tests__/probe-blend-oracle.unit.test.ts +136 -0
- package/src/__tests__/probe-capacity.integration.test.ts +97 -0
- package/src/__tests__/probe-recovery.integration.test.ts +104 -0
- package/src/__tests__/probe-scene-dirty.integration.test.ts +211 -0
- package/src/__tests__/profiler-phase-catalog.test.ts +4 -1
- package/src/__tests__/profiler-phase-token.test.ts +1 -0
- package/src/__tests__/public-surface.test-d.ts +10 -0
- package/src/__tests__/rect-area-boundary.unit.test.ts +24 -0
- package/src/__tests__/reflection-fallback-graph.unit.test.ts +67 -0
- package/src/__tests__/reflection-fallback-inspection.unit.test.ts +77 -0
- package/src/__tests__/reflection-fallback-lifecycle.integration.test.ts +21 -0
- package/src/__tests__/reflection-fallback-projection.unit.test.ts +90 -0
- package/src/__tests__/reflection-fallback-source.unit.test.ts +32 -0
- package/src/__tests__/reflection-probe-authoring.unit.test.ts +71 -0
- package/src/__tests__/reflection-probe-filter.unit.test.ts +54 -0
- package/src/__tests__/reflection-probe-ibl-topology.unit.test.ts +45 -0
- package/src/__tests__/reflection-probe-owner-placement.unit.test.ts +39 -0
- package/src/__tests__/reflection-probe-pass-encode.integration.test.ts +101 -0
- package/src/__tests__/reflection-probe-performance.perf.test.ts +60 -0
- package/src/__tests__/reflection-probe-record-owner.characterization.unit.test.ts +120 -0
- package/src/__tests__/reflection-probe-recovery.integration.test.ts +55 -0
- package/src/__tests__/reflection-probe-selection.unit.test.ts +46 -0
- package/src/__tests__/render-error-code-owner.test-d.ts +19 -3
- package/src/__tests__/render-feature-docs.unit.test.ts +12 -7
- package/src/__tests__/render-graph-fallback.integration.test.ts +24 -0
- package/src/__tests__/render-perf/extended-lighting.bench.test.ts +66 -0
- package/src/__tests__/render-scene-projection.unit.test.ts +447 -18
- package/src/__tests__/render-target-admission.unit.test.ts +80 -0
- package/src/__tests__/render-target-graph-projection.unit.test.ts +102 -0
- package/src/__tests__/render-target-inspection.unit.test.ts +52 -0
- package/src/__tests__/render-target-material-source.test-d.ts +30 -0
- package/src/__tests__/render-target-material-source.unit.test.ts +97 -0
- package/src/__tests__/render-target-owner-placement.unit.test.ts +203 -0
- package/src/__tests__/render-target-owner.unit.test.ts +122 -0
- package/src/__tests__/render-target-probe-soak.perf.test.ts +94 -0
- package/src/__tests__/render-target-public-schema.json +107 -0
- package/src/__tests__/render-target-public-schema.unit.test.ts +91 -0
- package/src/__tests__/render-target-public-surface.test-d.ts +83 -0
- package/src/__tests__/render-target-readback.integration.test.ts +90 -0
- package/src/__tests__/render-target-recovery.integration.test.ts +85 -0
- package/src/__tests__/renderer-factory-material-contract.unit.test.ts +124 -0
- package/src/__tests__/renderer-lifecycle.integration.test.ts +14 -0
- package/src/__tests__/shader-stage-surface.unit.test.ts +19 -4
- package/src/__tests__/skin-motion-regression.unit.test.ts +154 -0
- package/src/__tests__/skinned-shadow-caster.test.ts +13 -4
- package/src/__tests__/spot-modifier-projection.unit.test.ts +70 -0
- package/src/__tests__/ssr-admission-matrix.integration.test.ts +206 -0
- package/src/__tests__/ssr-composition.unit.test.ts +46 -0
- package/src/__tests__/ssr-fallback-zero-work.bench.test.ts +94 -0
- package/src/__tests__/ssr-recovery-errors.unit.test.ts +58 -0
- package/src/__tests__/standard-cluster-capability.integration.test.ts +63 -0
- package/src/__tests__/standard-cluster-transport.unit.test.ts +121 -0
- package/src/__tests__/standard-cluster-variant-resolution.unit.test.ts +299 -0
- package/src/__tests__/standard-clustered-pipeline.unit.test.ts +15 -5
- package/src/__tests__/standard-lighting-inspection.integration.test.ts +138 -0
- package/src/__tests__/standard-lighting-ssot.unit.test.ts +18 -0
- package/src/__tests__/standard-lighting-write.unit.test.ts +441 -0
- package/src/__tests__/standard-lighting.integration.test.ts +67 -0
- package/src/__tests__/standard-pipeline.dawn.test.ts +206 -5
- package/src/__tests__/standard-pipeline.integration.test.ts +181 -150
- package/src/__tests__/standard-probe-binding.unit.test.ts +25 -0
- package/src/__tests__/standard-profile-oracle.unit.test.ts +23 -38
- package/src/__tests__/temporal-fallback-generation.integration.test.ts +16 -0
- package/src/__tests__/temporal-view.unit.test.ts +3 -3
- package/src/__tests__/transmission-prewarm.unit.test.ts +69 -0
- package/src/__tests__/typed-pipeline-topology.unit.test.ts +395 -14
- package/src/__tests__/urp-pipeline-targets.unit.test.ts +2 -2
- package/src/__tests__/visibility-budget.integration.test.ts +140 -0
- package/src/__tests__/visibility-budget.unit.test.ts +70 -0
- package/src/__tests__/visibility-extract.integration.test.ts +11 -6
- package/src/__tests__/visibility-resolver.unit.test.ts +15 -0
- package/src/__tests__/volumetric-fog-point-spot-accumulation.integration.test.ts +6 -3
- package/src/__tests__/volumetric-fog-stage-readback.dawn.test.ts +31 -28
- package/src/assembly/backend-contract.ts +13 -0
- package/src/assembly/device-feature-admission.ts +80 -0
- package/src/assembly/directional-shadow-inspection.ts +122 -0
- package/src/assembly/factory.ts +1411 -366
- package/src/assembly/host-contract.ts +35 -0
- package/src/assembly/render-target-host.ts +847 -0
- package/src/assets/asset-decoders.ts +1 -1
- package/src/assets/render-asset-port.ts +7 -1
- package/src/capture/cube-views.ts +69 -0
- package/src/capture/scheduler.ts +265 -0
- package/src/cluster-binner.ts +31 -0
- package/src/components/__tests__/lighting-authoring.unit.test.ts +39 -0
- package/src/components/__tests__/rect-area-light.unit.test.ts +33 -0
- package/src/components/__tests__/schema-contract.unit.test.ts +12 -0
- package/src/components/__tests__/schema-parity.unit.test.ts +9 -0
- package/src/components/camera.ts +4 -0
- package/src/components/cube-camera.ts +52 -0
- package/src/components/directional-light.ts +22 -2
- package/src/components/directional-shadow-filter.ts +57 -0
- package/src/components/index.ts +5 -0
- package/src/components/light-helpers.ts +133 -8
- package/src/components/light-probe.ts +13 -0
- package/src/components/rect-area-light.ts +15 -0
- package/src/components/reflection-probe.ts +49 -0
- package/src/components/scene-instance.ts +6 -0
- package/src/components/spot-light.ts +3 -0
- package/src/device/__tests__/extended-lighting-recovery.unit.test.ts +24 -0
- package/src/device/gpu-residency.ts +140 -9
- package/src/device/lifecycle-transaction.ts +12 -0
- package/src/environment/frame.ts +6 -24
- package/src/environment/lifecycle.ts +20 -1
- package/src/errors/gpu-driven.ts +92 -0
- package/src/errors/index.ts +1 -0
- package/src/errors/recover.ts +32 -0
- package/src/errors/render.ts +341 -143
- package/src/extract/camera.ts +3 -3
- package/src/extract/directional-shadow-projection.ts +61 -0
- package/src/extract/environment.ts +57 -0
- package/src/extract/gpu-driven.ts +108 -0
- package/src/extract/visibility.ts +2 -1
- package/src/features/fullscreen.ts +3 -0
- package/src/features/targets.ts +4 -1
- package/src/features/types.ts +10 -0
- package/src/fullscreen-post-process-pass.ts +43 -2
- package/src/gpu-driven/batch-topology.ts +207 -28
- package/src/gpu-driven/prepared-draw.ts +208 -0
- package/src/gpu-driven/production-raster.ts +953 -43
- package/src/gpu-driven/view-gpu.ts +411 -29
- package/src/gpu-scene-schema.ts +13 -0
- package/src/gpu-scene.ts +140 -64
- package/src/gpu-usage.ts +0 -1
- package/src/hdrp-buffers.ts +169 -63
- package/src/ibl/IblPipelineCache.ts +11 -0
- package/src/ibl/kernel-cache.ts +88 -0
- package/src/index.ts +222 -0
- package/src/inspection-types.ts +276 -1
- package/src/instances-derived-bounds.ts +171 -0
- package/src/internal.ts +38 -0
- package/src/light-buffer-layout.ts +155 -310
- package/src/materials.ts +16 -2
- package/src/mesh-material-bindings.ts +132 -0
- package/src/pbr-pipeline.ts +255 -60
- package/src/pipeline/standard-forward-lane.ts +93 -16
- package/src/pipeline/standard-lighting/errors.ts +6 -0
- package/src/pipeline/standard-lighting/graph.ts +158 -0
- package/src/pipeline/standard-lighting/inspection.ts +88 -0
- package/src/pipeline/standard-lighting/layout.ts +31 -0
- package/src/pipeline/standard-lighting/light-frame.ts +35 -0
- package/src/pipeline/standard-lighting/membership.ts +43 -0
- package/src/pipeline/standard-lighting/prepare.ts +37 -0
- package/src/pipeline/standard-lighting/topology.ts +120 -0
- package/src/pipeline/standard-lighting/transport.ts +78 -0
- package/src/pipeline/standard-pipeline.ts +124 -193
- package/src/pipeline/standard-post.ts +26 -7
- package/src/pipeline/standard-profile.ts +17 -47
- package/src/pipeline-builder.ts +5 -2
- package/src/pipeline-spec.ts +95 -21
- package/src/plugin.ts +4 -0
- package/src/point-shadow-inspection.ts +55 -0
- package/src/prepare/__tests__/extended-lighting-capability.unit.test.ts +56 -0
- package/src/prepare/extended-lighting/ltc-resources.ts +136 -0
- package/src/prepare/extended-lighting/resources.ts +389 -0
- package/src/prepare/extended-lighting/spot-modifiers.ts +194 -0
- package/src/prepare/extended-lighting/state.ts +92 -0
- package/src/record/__tests__/gpu-timing.unit.test.ts +177 -0
- package/src/record/__tests__/temporal-payload.unit.test.ts +64 -1
- package/src/record/__tests__/transparent-group2-selection.unit.test.ts +73 -0
- package/src/record/__tests__/typed-frame-graph-plan.unit.test.ts +20 -1
- package/src/record/__tests__/view-ubo-layout.unit.test.ts +40 -0
- package/src/record/frame-lighting.ts +591 -452
- package/src/record/frame-snapshot.ts +92 -39
- package/src/record/frame-targets.ts +17 -0
- package/src/record/frame.ts +662 -158
- package/src/record/gpu-pass-timing/contract.ts +180 -0
- package/src/record/gpu-pass-timing/errors.ts +34 -0
- package/src/record/gpu-pass-timing/index.ts +37 -0
- package/src/record/gpu-pass-timing/parser.ts +97 -0
- package/src/record/gpu-pass-timing/session.ts +938 -0
- package/src/record/gpu-timing.ts +112 -39
- package/src/record/helpers.ts +0 -58
- package/src/record/main-pass-geometry.ts +324 -119
- package/src/record/main-pass-material.ts +103 -10
- package/src/record/main-pass-sprite-draws.ts +99 -103
- package/src/record/main-pass.ts +71 -15
- package/src/record/mesh-ssbo.ts +47 -36
- package/src/record/render-context.ts +136 -3
- package/src/record/shadow-pass.ts +83 -68
- package/src/record/skybox-post-pass.ts +20 -4
- package/src/record/typed-frame-graph.ts +1034 -43
- package/src/record/view-ubo.ts +72 -47
- package/src/reflection/filter.ts +81 -0
- package/src/reflection/gpu-table.ts +44 -0
- package/src/reflection/inspection.ts +67 -0
- package/src/reflection/projection.ts +476 -0
- package/src/reflection/record-owner.ts +1283 -0
- package/src/render-contract.ts +93 -10
- package/src/render-graph-primitives.ts +9 -4
- package/src/render-pipeline.ts +122 -2
- package/src/render-system-extract.ts +1041 -225
- package/src/render-system.ts +1310 -85
- package/src/renderer.ts +222 -0
- package/src/scene/__tests__/changed-block-summary.candidate.test.ts +36 -0
- package/src/scene/probe-blend-record.ts +54 -0
- package/src/scene/probe-blend.ts +813 -0
- package/src/scene/render-scene-types.ts +0 -7
- package/src/scene/render-scene.ts +942 -171
- package/src/scene/visibility/bounds.ts +57 -0
- package/src/scene/visibility/budget.ts +40 -0
- package/src/scene/visibility/facet.ts +400 -0
- package/src/scene/visibility/gpu-frame-timing.ts +101 -0
- package/src/scene/visibility/gpu-lod.ts +119 -0
- package/src/scene/visibility/inspection.ts +313 -0
- package/src/scene/visibility/lod-selector.ts +84 -0
- package/src/scene/visibility/occlusion-confidence.ts +478 -0
- package/src/scene/visibility/occlusion-pass.ts +165 -0
- package/src/scene/visibility/occlusion-query-pool.ts +178 -0
- package/src/scene/visibility/occlusion-runtime.ts +672 -0
- package/src/scene/visibility/types.ts +50 -0
- package/src/shadow-atlas.ts +5 -5
- package/src/ssao-buffers.ts +9 -2
- package/src/ssr/admission.ts +451 -0
- package/src/ssr/composition.ts +73 -0
- package/src/ssr/errors.ts +76 -0
- package/src/ssr/identity.ts +12 -0
- package/src/systems/skin-palette-allocator.ts +1 -1
- package/src/targets/contracts.ts +182 -0
- package/src/targets/graph-projection.ts +169 -0
- package/src/targets/material-source.ts +143 -0
- package/src/targets/owner.ts +214 -0
- package/src/targets/physical.ts +18 -0
- package/src/targets/readback.ts +153 -0
- package/src/temporal/frame-coordinator.ts +26 -0
- package/src/temporal/frame.ts +14 -1
- package/src/temporal/view.ts +11 -0
- package/src/tilemap-chunk-extract-system.ts +4 -4
- package/src/transmission/__tests__/standard-transmission.dawn.test.ts +59 -20
- package/src/typed-render-graph-primitives.ts +53 -3
- package/src/typed-shadow-passes.ts +46 -40
- package/src/volume/passes.ts +61 -58
- package/dist/.tsbuildinfo +0 -1
- package/dist/chunk-4XINDLAY.mjs.map +0 -1
- package/dist/chunk-CDTWTHZR.mjs.map +0 -1
- package/dist/chunk-M2MP4ZOU.mjs +0 -73
- package/dist/chunk-M2MP4ZOU.mjs.map +0 -1
- package/dist/chunk-PCHBPYML.mjs.map +0 -1
- package/dist/chunk-TBQJOK2L.mjs.map +0 -1
- package/dist/chunk-VFPLTKCU.mjs.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RenderIntentInvalidError, ShadowInvalidConfigError, VolumeOwnerConflictError, VolumeDensityShapeMismatchError, VolumeInvalidBoundsError, VolumeInvalidParametersError } from './chunk-QODA5UKU.mjs';
|
|
2
2
|
import { defineComponent, Entity } from '@forgeax/engine-ecs';
|
|
3
3
|
import { TONEMAP_SHADER_MODE } from '@forgeax/engine-shader';
|
|
4
|
-
import { err, ok } from '@forgeax/engine-types';
|
|
4
|
+
import { R_MIN, err, ok } from '@forgeax/engine-types';
|
|
5
|
+
import { SpawnLightInvalidBoundsError } from '@forgeax/engine-ecs/projection';
|
|
5
6
|
import { Transform, projectHierarchy } from '@forgeax/engine-scene';
|
|
6
7
|
|
|
7
8
|
var Atmosphere = defineComponent("Atmosphere", {
|
|
@@ -106,6 +107,10 @@ var Camera = defineComponent("Camera", {
|
|
|
106
107
|
bloomThreshold: { type: "f32", default: 1 },
|
|
107
108
|
bloomIntensity: { type: "f32", default: 1 },
|
|
108
109
|
bloomBlurRadius: { type: "f32", default: 4 },
|
|
110
|
+
// M1 target camera role: zero means this camera is eligible for display;
|
|
111
|
+
// non-zero shared targets are auxiliary producers whose views and receipt
|
|
112
|
+
// promotion remain owned by Renderer.
|
|
113
|
+
target: { type: "shared<RenderTarget>", simulationTransient: true },
|
|
109
114
|
// feat-20260709 M3 / D-3: clear-color is one inline `array<f32,4>` column.
|
|
110
115
|
// The earlier 4-scalar form (clearR/G/B/A) was chosen when this was believed
|
|
111
116
|
// to be the only SoA-safe shape; the Transform (pos/quat/scale) and light
|
|
@@ -165,6 +170,75 @@ function orthographic(opts) {
|
|
|
165
170
|
top: opts.top
|
|
166
171
|
};
|
|
167
172
|
}
|
|
173
|
+
var CUBE_CAMERA_UPDATE_ONCE = 0;
|
|
174
|
+
var CUBE_CAMERA_UPDATE_ON_DEMAND = 1;
|
|
175
|
+
var CUBE_CAMERA_UPDATE_CONTINUOUS = 2;
|
|
176
|
+
var CUBE_CAMERA_FACE_ORDER = ["+X", "-X", "+Y", "-Y", "+Z", "-Z"];
|
|
177
|
+
function cubeCameraUpdateIntentFromF32(value) {
|
|
178
|
+
switch (value) {
|
|
179
|
+
case CUBE_CAMERA_UPDATE_ONCE:
|
|
180
|
+
return "once";
|
|
181
|
+
case CUBE_CAMERA_UPDATE_ON_DEMAND:
|
|
182
|
+
return "on-demand";
|
|
183
|
+
case CUBE_CAMERA_UPDATE_CONTINUOUS:
|
|
184
|
+
return "continuous";
|
|
185
|
+
default:
|
|
186
|
+
throw new RenderIntentInvalidError("CubeCamera", value);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function cubeCameraUpdateIntentToF32(intent) {
|
|
190
|
+
switch (intent) {
|
|
191
|
+
case "once":
|
|
192
|
+
return CUBE_CAMERA_UPDATE_ONCE;
|
|
193
|
+
case "on-demand":
|
|
194
|
+
return CUBE_CAMERA_UPDATE_ON_DEMAND;
|
|
195
|
+
case "continuous":
|
|
196
|
+
return CUBE_CAMERA_UPDATE_CONTINUOUS;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
var CubeCamera = defineComponent("CubeCamera", {
|
|
200
|
+
target: { type: "shared<RenderTarget>", simulationTransient: true },
|
|
201
|
+
near: { type: "f32", default: 0.1 },
|
|
202
|
+
far: { type: "f32", default: 100 },
|
|
203
|
+
updateIntent: { type: "f32", default: CUBE_CAMERA_UPDATE_ONCE },
|
|
204
|
+
requestVersion: { type: "u32", default: 0 },
|
|
205
|
+
faceBudget: { type: "u32", default: 1 }
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// src/components/directional-shadow-filter.ts
|
|
209
|
+
var DirectionalShadowFilterValue = Object.freeze({
|
|
210
|
+
pcf1: 1,
|
|
211
|
+
pcf3: 2,
|
|
212
|
+
pcf5: 3,
|
|
213
|
+
pcssMedium: 4,
|
|
214
|
+
pcssHigh: 5
|
|
215
|
+
});
|
|
216
|
+
function directionalShadowQualityFromF32(value, angularRadiusRadians, maxPenumbraTexels) {
|
|
217
|
+
switch (value) {
|
|
218
|
+
case DirectionalShadowFilterValue.pcf1:
|
|
219
|
+
return { kind: "pcf", kernel: 1 };
|
|
220
|
+
case DirectionalShadowFilterValue.pcf3:
|
|
221
|
+
return { kind: "pcf", kernel: 3 };
|
|
222
|
+
case DirectionalShadowFilterValue.pcf5:
|
|
223
|
+
return { kind: "pcf", kernel: 5 };
|
|
224
|
+
case DirectionalShadowFilterValue.pcssMedium:
|
|
225
|
+
return {
|
|
226
|
+
kind: "pcss",
|
|
227
|
+
preset: "medium",
|
|
228
|
+
angularRadiusRadians,
|
|
229
|
+
maxPenumbraTexels
|
|
230
|
+
};
|
|
231
|
+
case DirectionalShadowFilterValue.pcssHigh:
|
|
232
|
+
return {
|
|
233
|
+
kind: "pcss",
|
|
234
|
+
preset: "high",
|
|
235
|
+
angularRadiusRadians,
|
|
236
|
+
maxPenumbraTexels
|
|
237
|
+
};
|
|
238
|
+
default:
|
|
239
|
+
return void 0;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
168
242
|
var DirectionalLight = defineComponent("DirectionalLight", {
|
|
169
243
|
// direction is the ONLY field with no default (D-5): omitting it lands the
|
|
170
244
|
// array layer-3 all-zero [0,0,0], which the renderer owner rejects -- there is no
|
|
@@ -188,7 +262,13 @@ var DirectionalLight = defineComponent("DirectionalLight", {
|
|
|
188
262
|
// reach. Default 200 world units (matches UE-style "dynamic shadow
|
|
189
263
|
// distance"; the old farPlane default was 50).
|
|
190
264
|
shadowDistance: { type: "f32", default: 200 },
|
|
191
|
-
|
|
265
|
+
shadowFilter: {
|
|
266
|
+
type: "enum",
|
|
267
|
+
default: DirectionalShadowFilterValue.pcf3,
|
|
268
|
+
labels: DirectionalShadowFilterValue
|
|
269
|
+
},
|
|
270
|
+
shadowAngularRadius: { type: "f32", default: 465e-5 },
|
|
271
|
+
maxPenumbraTexels: { type: "f32", default: 32 }
|
|
192
272
|
});
|
|
193
273
|
var Fog = defineComponent("Fog", {
|
|
194
274
|
color: { type: "array<f32, 3>", default: new Float32Array([0.5, 0.5, 0.5]) },
|
|
@@ -202,6 +282,221 @@ var Instances = defineComponent("Instances", {
|
|
|
202
282
|
var Layer = defineComponent("Layer", {
|
|
203
283
|
value: { type: "i32", default: 0 }
|
|
204
284
|
});
|
|
285
|
+
|
|
286
|
+
// src/components/light-helpers.ts
|
|
287
|
+
var RANGE_ZERO_FALLBACK_INV_R2 = 1e8;
|
|
288
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
289
|
+
var PCSS_RADIUS_MIN = 1e-4;
|
|
290
|
+
var PCSS_RADIUS_MAX = 0.05;
|
|
291
|
+
var PCSS_PENUMBRA_MIN = 1;
|
|
292
|
+
var PCSS_PENUMBRA_MAX = 64;
|
|
293
|
+
function degToCos(deg) {
|
|
294
|
+
return Math.cos(deg * DEG_TO_RAD);
|
|
295
|
+
}
|
|
296
|
+
function computeInvRangeSquared(range) {
|
|
297
|
+
if (range === Number.POSITIVE_INFINITY) return 0;
|
|
298
|
+
if (range === 0) return RANGE_ZERO_FALLBACK_INV_R2;
|
|
299
|
+
return 1 / (range * range);
|
|
300
|
+
}
|
|
301
|
+
function validateDirection(componentName, direction) {
|
|
302
|
+
const dir = direction;
|
|
303
|
+
if (dir === void 0 || (dir[0] ?? 0) === 0 && (dir[1] ?? 0) === 0 && (dir[2] ?? 0) === 0) {
|
|
304
|
+
return new SpawnLightInvalidBoundsError(
|
|
305
|
+
componentName,
|
|
306
|
+
"direction",
|
|
307
|
+
dir === void 0 ? [0, 0, 0] : [dir[0] ?? 0, dir[1] ?? 0, dir[2] ?? 0]
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
function validateDirectionalLightData(data) {
|
|
313
|
+
const directionError = validateDirection(
|
|
314
|
+
"DirectionalLight",
|
|
315
|
+
data.direction
|
|
316
|
+
);
|
|
317
|
+
if (directionError !== null) return err(directionError);
|
|
318
|
+
if (data.castShadow === false) return ok(void 0);
|
|
319
|
+
const mapSize = data.mapSize ?? 2048;
|
|
320
|
+
if (mapSize < 1) {
|
|
321
|
+
return err(new ShadowInvalidConfigError("mapSize", mapSize, 1));
|
|
322
|
+
}
|
|
323
|
+
const cascadeCount = data.cascadeCount ?? 4;
|
|
324
|
+
if (cascadeCount < 1 || cascadeCount > 4 || !Number.isInteger(cascadeCount)) {
|
|
325
|
+
return err(new ShadowInvalidConfigError("cascadeCount", cascadeCount, 1, 4));
|
|
326
|
+
}
|
|
327
|
+
const splitLambda = data.splitLambda ?? 0.75;
|
|
328
|
+
if (splitLambda < 0 || splitLambda > 1) {
|
|
329
|
+
return err(new ShadowInvalidConfigError("splitLambda", splitLambda, 0, 1));
|
|
330
|
+
}
|
|
331
|
+
const cascadeBlend = data.cascadeBlend ?? 0.2;
|
|
332
|
+
if (cascadeBlend < 0 || cascadeBlend > 0.5) {
|
|
333
|
+
return err(new ShadowInvalidConfigError("cascadeBlend", cascadeBlend, 0, 0.5));
|
|
334
|
+
}
|
|
335
|
+
const shadowDistance = data.shadowDistance ?? 200;
|
|
336
|
+
if (shadowDistance <= 0) {
|
|
337
|
+
return err(new ShadowInvalidConfigError("shadowDistance", shadowDistance, 0, ">"));
|
|
338
|
+
}
|
|
339
|
+
const shadowFilter = data.shadowFilter ?? DirectionalShadowFilterValue.pcf3;
|
|
340
|
+
const allowedFilters = Object.values(DirectionalShadowFilterValue);
|
|
341
|
+
if (!Number.isFinite(shadowFilter) || !allowedFilters.includes(shadowFilter)) {
|
|
342
|
+
return err(
|
|
343
|
+
new ShadowInvalidConfigError(
|
|
344
|
+
"shadowFilter",
|
|
345
|
+
shadowFilter,
|
|
346
|
+
{ kind: "allowed-values", values: allowedFilters },
|
|
347
|
+
void 0,
|
|
348
|
+
"one of [pcf1, pcf3, pcf5, pcssMedium, pcssHigh]"
|
|
349
|
+
)
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
if (shadowFilter === DirectionalShadowFilterValue.pcssMedium || shadowFilter === DirectionalShadowFilterValue.pcssHigh) {
|
|
353
|
+
const shadowAngularRadius = data.shadowAngularRadius ?? 465e-5;
|
|
354
|
+
if (!Number.isFinite(shadowAngularRadius)) {
|
|
355
|
+
return err(
|
|
356
|
+
new ShadowInvalidConfigError("shadowAngularRadius", shadowAngularRadius, {
|
|
357
|
+
kind: "range",
|
|
358
|
+
min: PCSS_RADIUS_MIN,
|
|
359
|
+
max: PCSS_RADIUS_MAX
|
|
360
|
+
})
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
if (shadowAngularRadius < PCSS_RADIUS_MIN || shadowAngularRadius > PCSS_RADIUS_MAX) {
|
|
364
|
+
return err(
|
|
365
|
+
new ShadowInvalidConfigError("shadowAngularRadius", shadowAngularRadius, {
|
|
366
|
+
kind: "range",
|
|
367
|
+
min: PCSS_RADIUS_MIN,
|
|
368
|
+
max: PCSS_RADIUS_MAX
|
|
369
|
+
})
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
const maxPenumbraTexels = data.maxPenumbraTexels ?? 32;
|
|
373
|
+
if (!Number.isFinite(maxPenumbraTexels) || !Number.isInteger(maxPenumbraTexels) || maxPenumbraTexels < PCSS_PENUMBRA_MIN || maxPenumbraTexels > PCSS_PENUMBRA_MAX) {
|
|
374
|
+
return err(
|
|
375
|
+
new ShadowInvalidConfigError(
|
|
376
|
+
"maxPenumbraTexels",
|
|
377
|
+
maxPenumbraTexels,
|
|
378
|
+
{ kind: "range", min: PCSS_PENUMBRA_MIN, max: PCSS_PENUMBRA_MAX },
|
|
379
|
+
void 0,
|
|
380
|
+
"a finite integer in [1, 64]"
|
|
381
|
+
)
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
return ok(void 0);
|
|
386
|
+
}
|
|
387
|
+
function validateSpotLightData(data) {
|
|
388
|
+
const directionError = validateDirection(
|
|
389
|
+
"SpotLight",
|
|
390
|
+
data.direction
|
|
391
|
+
);
|
|
392
|
+
if (directionError !== null) return err(directionError);
|
|
393
|
+
if (data.castShadow === false) return ok(void 0);
|
|
394
|
+
const range = data.range ?? 10;
|
|
395
|
+
if (typeof range !== "number" || Number.isNaN(range) || range < 0) {
|
|
396
|
+
return err(new SpawnLightInvalidBoundsError("SpotLight", "range", range));
|
|
397
|
+
}
|
|
398
|
+
const innerConeDeg = data.innerConeDeg ?? 0;
|
|
399
|
+
const outerConeDeg = data.outerConeDeg ?? 45;
|
|
400
|
+
if (outerConeDeg > 90) {
|
|
401
|
+
return err(new SpawnLightInvalidBoundsError("SpotLight", "outerNinety", outerConeDeg));
|
|
402
|
+
}
|
|
403
|
+
if (outerConeDeg <= innerConeDeg) {
|
|
404
|
+
return err(new SpawnLightInvalidBoundsError("SpotLight", "innerOuter", outerConeDeg));
|
|
405
|
+
}
|
|
406
|
+
const mapSize = data.mapSize ?? 2048;
|
|
407
|
+
if (mapSize < 1) return err(new ShadowInvalidConfigError("mapSize", mapSize, 1));
|
|
408
|
+
const nearPlane = data.nearPlane;
|
|
409
|
+
const farPlane = data.farPlane;
|
|
410
|
+
if (nearPlane !== void 0 && farPlane !== void 0 && farPlane <= nearPlane) {
|
|
411
|
+
return err(new ShadowInvalidConfigError("farPlane", farPlane, nearPlane));
|
|
412
|
+
}
|
|
413
|
+
const pcfKernelSize = data.pcfKernelSize ?? 3;
|
|
414
|
+
if (pcfKernelSize < 1 || pcfKernelSize % 2 === 0) {
|
|
415
|
+
return err(
|
|
416
|
+
new ShadowInvalidConfigError(
|
|
417
|
+
"pcfKernelSize",
|
|
418
|
+
pcfKernelSize,
|
|
419
|
+
{ kind: "lower-bound", operator: ">=", value: 1 },
|
|
420
|
+
void 0,
|
|
421
|
+
"an odd integer >= 1"
|
|
422
|
+
)
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
const shadowIntensity = data.shadowIntensity ?? 1;
|
|
426
|
+
if (!Number.isFinite(shadowIntensity) || shadowIntensity < 0 || shadowIntensity > 1) {
|
|
427
|
+
return err(new ShadowInvalidConfigError("shadowIntensity", shadowIntensity, 0, 1));
|
|
428
|
+
}
|
|
429
|
+
return ok(void 0);
|
|
430
|
+
}
|
|
431
|
+
function validatePointLightData(data) {
|
|
432
|
+
const range = data.range ?? 10;
|
|
433
|
+
if (typeof range !== "number" || Number.isNaN(range) || range < 0) {
|
|
434
|
+
return err(new SpawnLightInvalidBoundsError("PointLight", "range", range));
|
|
435
|
+
}
|
|
436
|
+
return ok(void 0);
|
|
437
|
+
}
|
|
438
|
+
function validatePointLightShadowData(data) {
|
|
439
|
+
const mapSize = data.mapSize ?? 512;
|
|
440
|
+
if (mapSize < 1) return err(new ShadowInvalidConfigError("mapSize", mapSize, 1));
|
|
441
|
+
const nearPlane = data.nearPlane ?? 0.1;
|
|
442
|
+
const farPlane = data.farPlane ?? 25;
|
|
443
|
+
if (farPlane <= nearPlane) {
|
|
444
|
+
return err(new ShadowInvalidConfigError("farPlane", farPlane, nearPlane));
|
|
445
|
+
}
|
|
446
|
+
const pcfKernelSize = data.pcfKernelSize ?? 3;
|
|
447
|
+
if (pcfKernelSize < 1 || pcfKernelSize % 2 === 0) {
|
|
448
|
+
return err(
|
|
449
|
+
new ShadowInvalidConfigError(
|
|
450
|
+
"pcfKernelSize",
|
|
451
|
+
pcfKernelSize,
|
|
452
|
+
{ kind: "lower-bound", operator: ">=", value: 1 },
|
|
453
|
+
void 0,
|
|
454
|
+
"an odd integer >= 1"
|
|
455
|
+
)
|
|
456
|
+
);
|
|
457
|
+
}
|
|
458
|
+
return ok(void 0);
|
|
459
|
+
}
|
|
460
|
+
function validateRectAreaLightData(data) {
|
|
461
|
+
const intensity = data.intensity ?? 1;
|
|
462
|
+
if (typeof intensity !== "number" || !Number.isFinite(intensity) || intensity < 0) {
|
|
463
|
+
return err(new SpawnLightInvalidBoundsError("RectAreaLight", "intensity", intensity));
|
|
464
|
+
}
|
|
465
|
+
const color = data.color ?? [1, 1, 1];
|
|
466
|
+
if (color.length !== 3 || Array.from(color).some(
|
|
467
|
+
(value) => typeof value !== "number" || !Number.isFinite(value) || value < 0
|
|
468
|
+
)) {
|
|
469
|
+
return err(new SpawnLightInvalidBoundsError("RectAreaLight", "color", Array.from(color)));
|
|
470
|
+
}
|
|
471
|
+
for (const field of ["width", "height", "range"]) {
|
|
472
|
+
const value = data[field] ?? (field === "range" ? 10 : 1);
|
|
473
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
474
|
+
return err(new SpawnLightInvalidBoundsError("RectAreaLight", field, value));
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
return ok(void 0);
|
|
478
|
+
}
|
|
479
|
+
function validateLightProbeData(data) {
|
|
480
|
+
const irradiance = data.irradiance;
|
|
481
|
+
if (irradiance === void 0 || irradiance.length !== 27 || Array.from(irradiance).some((value) => typeof value !== "number" || !Number.isFinite(value))) {
|
|
482
|
+
return err(
|
|
483
|
+
new SpawnLightInvalidBoundsError(
|
|
484
|
+
"LightProbe",
|
|
485
|
+
"irradiance",
|
|
486
|
+
irradiance === void 0 ? [] : Array.from(irradiance)
|
|
487
|
+
)
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
const radius = data.radius ?? R_MIN;
|
|
491
|
+
if (typeof radius !== "number" || !Number.isFinite(radius) || radius < R_MIN) {
|
|
492
|
+
return err(new SpawnLightInvalidBoundsError("LightProbe", "radius", radius));
|
|
493
|
+
}
|
|
494
|
+
return ok(void 0);
|
|
495
|
+
}
|
|
496
|
+
var LightProbe = defineComponent("LightProbe", {
|
|
497
|
+
irradiance: { type: "array<f32, 27>" },
|
|
498
|
+
radius: { type: "f32", default: R_MIN }
|
|
499
|
+
});
|
|
205
500
|
var Lines = defineComponent(
|
|
206
501
|
"Lines",
|
|
207
502
|
{
|
|
@@ -276,6 +571,46 @@ var schema = {
|
|
|
276
571
|
data: "buffer"
|
|
277
572
|
};
|
|
278
573
|
var PostProcessParams = defineComponent("PostProcessParams", schema);
|
|
574
|
+
var RectAreaLight = defineComponent("RectAreaLight", {
|
|
575
|
+
color: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
|
|
576
|
+
intensity: { type: "f32", default: 1 },
|
|
577
|
+
width: { type: "f32", default: 1 },
|
|
578
|
+
height: { type: "f32", default: 1 },
|
|
579
|
+
range: { type: "f32", default: 10 }
|
|
580
|
+
});
|
|
581
|
+
var REFLECTION_PROBE_UPDATE_ONCE = 0;
|
|
582
|
+
var REFLECTION_PROBE_UPDATE_ON_CHANGE = 1;
|
|
583
|
+
var REFLECTION_PROBE_UPDATE_CONTINUOUS = 2;
|
|
584
|
+
function reflectionProbeUpdateIntentFromF32(value) {
|
|
585
|
+
switch (value) {
|
|
586
|
+
case REFLECTION_PROBE_UPDATE_ONCE:
|
|
587
|
+
return "once";
|
|
588
|
+
case REFLECTION_PROBE_UPDATE_ON_CHANGE:
|
|
589
|
+
return "on-change";
|
|
590
|
+
case REFLECTION_PROBE_UPDATE_CONTINUOUS:
|
|
591
|
+
return "continuous";
|
|
592
|
+
default:
|
|
593
|
+
throw new RenderIntentInvalidError("ReflectionProbe", value);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
function reflectionProbeUpdateIntentToF32(intent) {
|
|
597
|
+
switch (intent) {
|
|
598
|
+
case "once":
|
|
599
|
+
return REFLECTION_PROBE_UPDATE_ONCE;
|
|
600
|
+
case "on-change":
|
|
601
|
+
return REFLECTION_PROBE_UPDATE_ON_CHANGE;
|
|
602
|
+
case "continuous":
|
|
603
|
+
return REFLECTION_PROBE_UPDATE_CONTINUOUS;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
var ReflectionProbe = defineComponent("ReflectionProbe", {
|
|
607
|
+
halfExtents: { type: "array<f32, 3>", default: new Float32Array([1, 1, 1]) },
|
|
608
|
+
priority: { type: "f32", default: 0 },
|
|
609
|
+
intensity: { type: "f32", default: 1 },
|
|
610
|
+
resolution: { type: "u32", default: 256 },
|
|
611
|
+
updateIntent: { type: "f32", default: REFLECTION_PROBE_UPDATE_ONCE },
|
|
612
|
+
invalidationVersion: { type: "u32", default: 0 }
|
|
613
|
+
});
|
|
279
614
|
var SceneInstance = defineComponent(
|
|
280
615
|
"SceneInstance",
|
|
281
616
|
{
|
|
@@ -320,6 +655,9 @@ var SpotLight = defineComponent("SpotLight", {
|
|
|
320
655
|
range: { type: "f32", default: 10 },
|
|
321
656
|
innerConeDeg: { type: "f32", default: 0 },
|
|
322
657
|
outerConeDeg: { type: "f32", default: 45 },
|
|
658
|
+
iesProfile: { type: "shared<IesProfileAsset>" },
|
|
659
|
+
cookie: { type: "shared<TextureAsset>" },
|
|
660
|
+
rollDeg: { type: "f32", default: 0 },
|
|
323
661
|
// Shadow opt-out gate: defaults to true so zero-config spawns cast shadows.
|
|
324
662
|
castShadow: { type: "bool", default: true },
|
|
325
663
|
// 7 shadow fields aligned with the shared light shadow vocabulary.
|
|
@@ -372,175 +710,142 @@ var Visibility = defineComponent(
|
|
|
372
710
|
}
|
|
373
711
|
}
|
|
374
712
|
);
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
function
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
if (hasPoints && hasLines) {
|
|
385
|
-
return invalidStyle(
|
|
386
|
-
input,
|
|
387
|
-
"Points/Lines",
|
|
388
|
-
"components",
|
|
389
|
-
"Points + Lines",
|
|
390
|
-
"exactly one style component"
|
|
391
|
-
);
|
|
392
|
-
}
|
|
393
|
-
if (!hasPoints && !hasLines) {
|
|
394
|
-
return invalidStyle(input, "Points/Lines", "components", void 0, "one style component");
|
|
713
|
+
|
|
714
|
+
// src/scene/visibility/budget.ts
|
|
715
|
+
var DEFAULT_CONFIGURED_QUERY_BUDGET = 2048;
|
|
716
|
+
var MAX_QUERY_BUDGET = 4096;
|
|
717
|
+
var VISIBILITY_CANDIDATE_COUNT = 1e5;
|
|
718
|
+
var VISIBILITY_OCCLUDED_COUNT = 9e4;
|
|
719
|
+
function createVisibilityBudget(configuredQueryBudget = DEFAULT_CONFIGURED_QUERY_BUDGET) {
|
|
720
|
+
if (!Number.isSafeInteger(configuredQueryBudget) || configuredQueryBudget <= 0) {
|
|
721
|
+
throw new RangeError("configuredQueryBudget must be a positive safe integer");
|
|
395
722
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
const
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
supported: ["line-list"]
|
|
723
|
+
const effectiveQueryBudget = Math.min(configuredQueryBudget, MAX_QUERY_BUDGET);
|
|
724
|
+
const oneSweepCandidates = oneSweep(VISIBILITY_CANDIDATE_COUNT, effectiveQueryBudget);
|
|
725
|
+
const oneSweepOccluded = oneSweep(VISIBILITY_OCCLUDED_COUNT, effectiveQueryBudget);
|
|
726
|
+
const retestSubmits = Math.max(6, oneSweepOccluded);
|
|
727
|
+
return Object.freeze({
|
|
728
|
+
configuredQueryBudget,
|
|
729
|
+
effectiveQueryBudget,
|
|
730
|
+
oneSweepCandidates,
|
|
731
|
+
oneSweepOccluded,
|
|
732
|
+
settleSubmits: 2 * oneSweepCandidates,
|
|
733
|
+
retestSubmits,
|
|
734
|
+
expirySubmits: Math.max(8, retestSubmits + oneSweepOccluded)
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
function oneSweep(candidateCount, effectiveQueryBudget) {
|
|
738
|
+
return Math.ceil(candidateCount / effectiveQueryBudget);
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
// src/mesh-material-bindings.ts
|
|
742
|
+
var EMPTY_RESIDENCY = Object.freeze({
|
|
743
|
+
readiness: "pending",
|
|
744
|
+
samplers: Object.freeze([]),
|
|
745
|
+
textures: Object.freeze([])
|
|
746
|
+
});
|
|
747
|
+
function projectMeshMaterialBindingObservation(input) {
|
|
748
|
+
const residency = input.bindings.map((_, index) => {
|
|
749
|
+
const value = input.residency?.[index] ?? EMPTY_RESIDENCY;
|
|
750
|
+
return Object.freeze({
|
|
751
|
+
...value,
|
|
752
|
+
samplers: Object.freeze(value.samplers.map((sampler) => Object.freeze({ ...sampler }))),
|
|
753
|
+
textures: Object.freeze(value.textures.map((texture) => Object.freeze({ ...texture }))),
|
|
754
|
+
...value.preparationFailure === void 0 ? {} : {
|
|
755
|
+
preparationFailure: Object.freeze({
|
|
756
|
+
...value.preparationFailure,
|
|
757
|
+
...value.preparationFailure.detail === void 0 ? {} : { detail: Object.freeze({ ...value.preparationFailure.detail }) }
|
|
432
758
|
})
|
|
433
|
-
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
759
|
+
}
|
|
760
|
+
});
|
|
761
|
+
});
|
|
762
|
+
return {
|
|
763
|
+
worldId: input.worldId,
|
|
764
|
+
entityKey: input.entityKey,
|
|
765
|
+
bindings: Object.freeze([...input.bindings]),
|
|
766
|
+
diagnostics: Object.freeze([...input.diagnostics]),
|
|
767
|
+
residency: Object.freeze(residency)
|
|
768
|
+
};
|
|
769
|
+
}
|
|
770
|
+
function summarizeMeshMaterialBindings(observations) {
|
|
771
|
+
let ready = 0;
|
|
772
|
+
let pending = 0;
|
|
773
|
+
let failed = 0;
|
|
774
|
+
let lastKnownGood = 0;
|
|
775
|
+
let textureCount = 0;
|
|
776
|
+
let samplerCount = 0;
|
|
777
|
+
for (const observation of observations) {
|
|
778
|
+
for (const residency of observation.residency) {
|
|
779
|
+
switch (residency.readiness) {
|
|
780
|
+
case "ready":
|
|
781
|
+
ready += 1;
|
|
782
|
+
break;
|
|
783
|
+
case "pending":
|
|
784
|
+
pending += 1;
|
|
785
|
+
break;
|
|
786
|
+
case "failed":
|
|
787
|
+
failed += 1;
|
|
788
|
+
break;
|
|
789
|
+
case "last-known-good":
|
|
790
|
+
lastKnownGood += 1;
|
|
791
|
+
break;
|
|
792
|
+
}
|
|
793
|
+
textureCount += residency.textures.length;
|
|
794
|
+
samplerCount += residency.samplers.length;
|
|
440
795
|
}
|
|
441
|
-
acceptedSubmeshes.push(submeshIndex);
|
|
442
|
-
if (component === "Points") pointCount += elementCount;
|
|
443
|
-
else segmentCount += elementCount / 2;
|
|
444
|
-
}
|
|
445
|
-
if (!sawNonEmpty) return topologyMismatch(input, 0, expected, "empty-range");
|
|
446
|
-
return ok({ pointCount, segmentCount, submeshes: acceptedSubmeshes });
|
|
447
|
-
}
|
|
448
|
-
function checkMaterial(input) {
|
|
449
|
-
const passes = input.material.passes ?? [];
|
|
450
|
-
const unlitModules = /* @__PURE__ */ new Set(["forgeax_material::unlit", "forgeax::default-unlit"]);
|
|
451
|
-
if (passes.length !== 1 || passes[0] === void 0) {
|
|
452
|
-
const pass2 = passes.find(
|
|
453
|
-
(candidate) => candidate.name === "deferred" || candidate.name === "shadow-caster"
|
|
454
|
-
) ?? passes[0];
|
|
455
|
-
return err(
|
|
456
|
-
new PointsLinesMaterialUnsupportedError({
|
|
457
|
-
entity: input.entity,
|
|
458
|
-
material: input.materialId ?? "<anonymous>",
|
|
459
|
-
pass: pass2?.name ?? "<empty>",
|
|
460
|
-
module: pass2?.program.module ?? "<empty>",
|
|
461
|
-
reason: "points-lines admission requires one unlit forward pass"
|
|
462
|
-
})
|
|
463
|
-
);
|
|
464
|
-
}
|
|
465
|
-
const pass = passes[0];
|
|
466
|
-
const lightMode = pass.renderState?.tags?.LightMode;
|
|
467
|
-
if (!unlitModules.has(pass.program.module) || pass.name !== "forward" || lightMode === "ShadowCaster") {
|
|
468
|
-
return err(
|
|
469
|
-
new PointsLinesMaterialUnsupportedError({
|
|
470
|
-
entity: input.entity,
|
|
471
|
-
material: input.materialId ?? "<anonymous>",
|
|
472
|
-
pass: pass.name,
|
|
473
|
-
module: pass.program.module,
|
|
474
|
-
reason: "points-lines admission requires an engine-owned unlit forward pass"
|
|
475
|
-
})
|
|
476
|
-
);
|
|
477
796
|
}
|
|
478
|
-
return
|
|
797
|
+
return {
|
|
798
|
+
total: ready + pending + failed + lastKnownGood,
|
|
799
|
+
ready,
|
|
800
|
+
pending,
|
|
801
|
+
failed,
|
|
802
|
+
lastKnownGood,
|
|
803
|
+
textureCount,
|
|
804
|
+
samplerCount
|
|
805
|
+
};
|
|
479
806
|
}
|
|
480
|
-
function
|
|
481
|
-
const
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
const material = checkMaterial(input);
|
|
486
|
-
if (!material.ok) return material;
|
|
487
|
-
if (style.value.component === "Points" && input.limits?.maxPoints !== void 0) {
|
|
488
|
-
if (topology.value.pointCount > input.limits.maxPoints) {
|
|
489
|
-
return err(
|
|
490
|
-
new PointsLinesBudgetExceededError({
|
|
491
|
-
lane: "admission",
|
|
492
|
-
requested: topology.value.pointCount,
|
|
493
|
-
limit: input.limits.maxPoints,
|
|
494
|
-
unit: "points"
|
|
495
|
-
})
|
|
496
|
-
);
|
|
497
|
-
}
|
|
807
|
+
function resolveMeshMaterialBindings(mesh, rendererOverrides, deps) {
|
|
808
|
+
const bindings = [];
|
|
809
|
+
const diagnostics = [];
|
|
810
|
+
if (!Array.isArray(mesh.materialSlots)) {
|
|
811
|
+
return { ok: false, code: "mesh-material-slots-missing" };
|
|
498
812
|
}
|
|
499
|
-
if (
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
);
|
|
813
|
+
if (rendererOverrides.length > mesh.materialSlots.length) {
|
|
814
|
+
diagnostics.push({
|
|
815
|
+
code: "mesh-renderer-material-override-overflow",
|
|
816
|
+
slotIndex: mesh.materialSlots.length
|
|
817
|
+
});
|
|
818
|
+
}
|
|
819
|
+
for (let slotIndex = 0; slotIndex < mesh.materialSlots.length; slotIndex++) {
|
|
820
|
+
const override = rendererOverrides[slotIndex] ?? 0;
|
|
821
|
+
if (override !== 0 && deps.isValidOverride(override)) {
|
|
822
|
+
bindings.push({ handle: override, source: "renderer-override" });
|
|
823
|
+
continue;
|
|
509
824
|
}
|
|
825
|
+
if (override !== 0) {
|
|
826
|
+
diagnostics.push({
|
|
827
|
+
code: "mesh-renderer-material-override-invalid",
|
|
828
|
+
slotIndex,
|
|
829
|
+
handle: override
|
|
830
|
+
});
|
|
831
|
+
}
|
|
832
|
+
const declaredDefault = mesh.materialSlots[slotIndex]?.defaultMaterial;
|
|
833
|
+
if (declaredDefault !== void 0) {
|
|
834
|
+
const handle = deps.resolveMeshDefault(declaredDefault);
|
|
835
|
+
if (handle === void 0) {
|
|
836
|
+
return {
|
|
837
|
+
ok: false,
|
|
838
|
+
code: "mesh-default-material-not-ready",
|
|
839
|
+
slotIndex,
|
|
840
|
+
defaultMaterial: declaredDefault
|
|
841
|
+
};
|
|
842
|
+
}
|
|
843
|
+
bindings.push({ handle, source: "mesh-default" });
|
|
844
|
+
continue;
|
|
845
|
+
}
|
|
846
|
+
bindings.push({ handle: 0, source: "engine-default" });
|
|
510
847
|
}
|
|
511
|
-
return
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
// src/volume/inspection.ts
|
|
515
|
-
function resourceStage(input) {
|
|
516
|
-
if (!input.authored || input.recovery === void 0) return "none";
|
|
517
|
-
if (input.recovery.status === "candidate") return "candidate";
|
|
518
|
-
if (input.recovery.status === "recovering") return "recovering";
|
|
519
|
-
if (input.recovery.status === "degraded") return "lkg";
|
|
520
|
-
return "accepted";
|
|
521
|
-
}
|
|
522
|
-
function inspectVolumetricFog(input) {
|
|
523
|
-
const recovery = input.recovery;
|
|
524
|
-
const status = !input.authored ? "off" : input.capability === "unavailable" ? "unavailable" : input.degraded === true || recovery?.status === "degraded" ? "degraded" : "available";
|
|
525
|
-
return Object.freeze({
|
|
526
|
-
status,
|
|
527
|
-
resourceStage: resourceStage(input),
|
|
528
|
-
guid: recovery?.guid,
|
|
529
|
-
generation: recovery?.generation,
|
|
530
|
-
digest: input.acceptedDigest,
|
|
531
|
-
candidateGeneration: recovery?.candidateGeneration,
|
|
532
|
-
candidateDigest: recovery?.candidateDigest,
|
|
533
|
-
lkgGeneration: recovery?.lkgGeneration,
|
|
534
|
-
candidateFailure: recovery?.candidateFailure,
|
|
535
|
-
deviceEpoch: recovery?.deviceEpoch ?? 0,
|
|
536
|
-
format: input.format,
|
|
537
|
-
passCount: input.passCount ?? 0,
|
|
538
|
-
sampleCount: input.sampleCount ?? 0,
|
|
539
|
-
memoryBytes: input.memoryBytes ?? 0,
|
|
540
|
-
resourceFacts: input.resourceFacts,
|
|
541
|
-
selectedLight: recovery?.selectedLight,
|
|
542
|
-
candidateSelectedLight: recovery?.candidateSelectedLight
|
|
543
|
-
});
|
|
848
|
+
return { ok: true, bindings, diagnostics };
|
|
544
849
|
}
|
|
545
850
|
function hasVolumetricFogCapability(caps, shaders) {
|
|
546
851
|
return caps.compute && caps.storageTexture && shaders !== void 0;
|
|
@@ -689,7 +994,7 @@ function resolveVisibility(world, hierarchy = projectHierarchy(world)) {
|
|
|
689
994
|
return result;
|
|
690
995
|
};
|
|
691
996
|
};
|
|
692
|
-
|
|
997
|
+
const snapshot = {
|
|
693
998
|
diagnostics: hierarchy.diagnostics,
|
|
694
999
|
hasAnyIntent: intentCount > 0,
|
|
695
1000
|
hasAnyHiddenIntent,
|
|
@@ -702,6 +1007,7 @@ function resolveVisibility(world, hierarchy = projectHierarchy(world)) {
|
|
|
702
1007
|
return resolveEntity?.(entity)?.effective ?? "visible";
|
|
703
1008
|
}
|
|
704
1009
|
};
|
|
1010
|
+
return snapshot;
|
|
705
1011
|
}
|
|
706
1012
|
var VolumetricFog = defineComponent("VolumetricFog", {
|
|
707
1013
|
light: { type: "entity" },
|
|
@@ -747,6 +1053,6 @@ function extractVolumetricFog(inputs) {
|
|
|
747
1053
|
return ok({ status: "available", fog: validated.value });
|
|
748
1054
|
}
|
|
749
1055
|
|
|
750
|
-
export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, ANTIALIAS_TAA, Atmosphere, BLOOM_DISABLED, BLOOM_ENABLED, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, Camera, DirectionalLight, Fog, Instances, Layer, Lines, MeshFilter, MeshRenderer, MotionBlur, PointLight, PointLightShadow, PointShapeValue, Points, PostProcessParams, SKYBOX_MODE_CUBEMAP, SceneInstance, SkyboxBackground, Skylight, SortKey, SpotLight, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, Visibility, VisibilityStateValue, VolumetricFog,
|
|
751
|
-
//# sourceMappingURL=chunk-
|
|
752
|
-
//# sourceMappingURL=chunk-
|
|
1056
|
+
export { ANTIALIAS_FXAA, ANTIALIAS_MSAA, ANTIALIAS_NONE, ANTIALIAS_TAA, Atmosphere, BLOOM_DISABLED, BLOOM_ENABLED, CAMERA_PROJECTION_ORTHOGRAPHIC, CAMERA_PROJECTION_PERSPECTIVE, CUBE_CAMERA_FACE_ORDER, CUBE_CAMERA_UPDATE_CONTINUOUS, CUBE_CAMERA_UPDATE_ONCE, CUBE_CAMERA_UPDATE_ON_DEMAND, Camera, CubeCamera, DirectionalLight, DirectionalShadowFilterValue, Fog, Instances, Layer, LightProbe, Lines, MeshFilter, MeshRenderer, MotionBlur, PointLight, PointLightShadow, PointShapeValue, Points, PostProcessParams, REFLECTION_PROBE_UPDATE_CONTINUOUS, REFLECTION_PROBE_UPDATE_ONCE, REFLECTION_PROBE_UPDATE_ON_CHANGE, RectAreaLight, ReflectionProbe, SKYBOX_MODE_CUBEMAP, SceneInstance, SkyboxBackground, Skylight, SortKey, SpotLight, TONEMAP_ACES_FILMIC, TONEMAP_AGX, TONEMAP_CINEON, TONEMAP_LINEAR, TONEMAP_NEUTRAL, TONEMAP_NONE, TONEMAP_REINHARD, TONEMAP_REINHARD_EXTENDED, Visibility, VisibilityStateValue, VolumetricFog, antialiasFromF32, bloomEnabledFromF32, cameraProjectionFromF32, computeInvRangeSquared, createVisibilityBudget, cubeCameraUpdateIntentFromF32, cubeCameraUpdateIntentToF32, degToCos, directionalShadowQualityFromF32, extractVolumetricFog, hasVolumetricFogCapability, orthographic, perspective, pointShapeFromU32, projectMeshMaterialBindingObservation, reflectionProbeUpdateIntentFromF32, reflectionProbeUpdateIntentToF32, resolveIntegratedVolumeConsumer, resolveMeshMaterialBindings, resolveSelectedVolumetricLight, resolveVisibility, resolveVolumetricFogLightPair, summarizeMeshMaterialBindings, tonemapFromF32, tonemapToU32, validateDirection, validateDirectionalLightData, validateLightProbeData, validatePointLightData, validatePointLightShadowData, validateRectAreaLightData, validateSpotLightData, validateVolumetricFog, visibilityStateFromU32 };
|
|
1057
|
+
//# sourceMappingURL=chunk-FF7K3FSO.mjs.map
|
|
1058
|
+
//# sourceMappingURL=chunk-FF7K3FSO.mjs.map
|