@aura3d/engine 4.3.6 → 4.5.0
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 +1 -1
- package/dist/animation/AnimationTrack.d.ts.map +1 -1
- package/dist/animation/AnimationTrack.js +3 -1
- package/dist/animation/AnimationTrack.js.map +1 -1
- package/dist/animation/pose/PoseMixer.d.ts.map +1 -1
- package/dist/animation/pose/PoseMixer.js +3 -0
- package/dist/animation/pose/PoseMixer.js.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.d.ts.map +1 -1
- package/dist/assets/GLTFAnimationRuntime.js +11 -4
- package/dist/assets/GLTFAnimationRuntime.js.map +1 -1
- package/dist/assets/GLTFLoader.d.ts +2 -0
- package/dist/assets/GLTFLoader.d.ts.map +1 -1
- package/dist/assets/GLTFLoader.js +17 -3
- package/dist/assets/GLTFLoader.js.map +1 -1
- package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
- package/dist/aura3d-cli/cli-help.js +3 -0
- package/dist/aura3d-cli/cli-help.js.map +1 -1
- package/dist/aura3d-cli/cli.d.ts.map +1 -1
- package/dist/aura3d-cli/cli.js +26 -1
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/deploy-browser-check.d.ts +78 -0
- package/dist/aura3d-cli/deploy-browser-check.d.ts.map +1 -0
- package/dist/aura3d-cli/deploy-browser-check.js +167 -0
- package/dist/aura3d-cli/deploy-browser-check.js.map +1 -0
- package/dist/aura3d-cli/migrate-three/emit.d.ts.map +1 -1
- package/dist/aura3d-cli/migrate-three/emit.js +109 -29
- package/dist/aura3d-cli/migrate-three/emit.js.map +1 -1
- package/dist/aura3d-cli/migrate-three/mappings.d.ts +15 -0
- package/dist/aura3d-cli/migrate-three/mappings.d.ts.map +1 -1
- package/dist/aura3d-cli/migrate-three/mappings.js +70 -60
- package/dist/aura3d-cli/migrate-three/mappings.js.map +1 -1
- package/dist/aura3d-cli/migrate-three/parse.d.ts +9 -0
- package/dist/aura3d-cli/migrate-three/parse.d.ts.map +1 -1
- package/dist/aura3d-cli/migrate-three/parse.js +1 -1
- package/dist/aura3d-cli/migrate-three/parse.js.map +1 -1
- package/dist/create-aura3d/index.js +1 -1
- package/dist/engine/agent-api/Clock.d.ts +4 -1
- package/dist/engine/agent-api/Clock.d.ts.map +1 -1
- package/dist/engine/agent-api/Clock.js +8 -2
- package/dist/engine/agent-api/Clock.js.map +1 -1
- package/dist/engine/agent-api/animationMask.d.ts +14 -0
- package/dist/engine/agent-api/animationMask.d.ts.map +1 -0
- package/dist/engine/agent-api/animationMask.js +23 -0
- package/dist/engine/agent-api/animationMask.js.map +1 -0
- package/dist/engine/agent-api/app/actorAnimationHandle.d.ts +2 -0
- package/dist/engine/agent-api/app/actorAnimationHandle.d.ts.map +1 -1
- package/dist/engine/agent-api/app/actorAnimationHandle.js +21 -1
- package/dist/engine/agent-api/app/actorAnimationHandle.js.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
- package/dist/engine/agent-api/app/createAuraApp.js +55 -5
- package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
- package/dist/engine/agent-api/app/frameLoop.js +28 -6
- package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
- package/dist/engine/agent-api/app/mountRenderer.d.ts +6 -1
- package/dist/engine/agent-api/app/mountRenderer.d.ts.map +1 -1
- package/dist/engine/agent-api/app/mountRenderer.js +2 -2
- package/dist/engine/agent-api/app/mountRenderer.js.map +1 -1
- package/dist/engine/agent-api/app/renderPath.d.ts +57 -0
- package/dist/engine/agent-api/app/renderPath.d.ts.map +1 -0
- package/dist/engine/agent-api/app/renderPath.js +163 -0
- package/dist/engine/agent-api/app/renderPath.js.map +1 -0
- package/dist/engine/agent-api/app/rendererOptions.d.ts +7 -0
- package/dist/engine/agent-api/app/rendererOptions.d.ts.map +1 -1
- package/dist/engine/agent-api/app/rendererOptions.js +20 -0
- package/dist/engine/agent-api/app/rendererOptions.js.map +1 -1
- package/dist/engine/agent-api/app/routeState.d.ts.map +1 -1
- package/dist/engine/agent-api/app/routeState.js +8 -3
- package/dist/engine/agent-api/app/routeState.js.map +1 -1
- package/dist/engine/agent-api/app/runtimeNodes.d.ts.map +1 -1
- package/dist/engine/agent-api/app/runtimeNodes.js +35 -0
- package/dist/engine/agent-api/app/runtimeNodes.js.map +1 -1
- package/dist/engine/agent-api/camera/extension.d.ts.map +1 -1
- package/dist/engine/agent-api/camera/extension.js +2 -2
- package/dist/engine/agent-api/camera/extension.js.map +1 -1
- package/dist/engine/agent-api/camera/rigs/fromSpec.d.ts +2 -0
- package/dist/engine/agent-api/camera/rigs/fromSpec.d.ts.map +1 -1
- package/dist/engine/agent-api/camera/rigs/fromSpec.js +11 -1
- package/dist/engine/agent-api/camera/rigs/fromSpec.js.map +1 -1
- package/dist/engine/agent-api/compiler/animation.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/animation.js +2 -1
- package/dist/engine/agent-api/compiler/animation.js.map +1 -1
- package/dist/engine/agent-api/compiler/camera.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/camera.js +10 -0
- package/dist/engine/agent-api/compiler/camera.js.map +1 -1
- package/dist/engine/agent-api/compiler/compileScene.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/compileScene.js +9 -2
- package/dist/engine/agent-api/compiler/compileScene.js.map +1 -1
- package/dist/engine/agent-api/compiler/environment.d.ts +19 -2
- package/dist/engine/agent-api/compiler/environment.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/environment.js +81 -12
- package/dist/engine/agent-api/compiler/environment.js.map +1 -1
- package/dist/engine/agent-api/compiler/geometry.d.ts +18 -1
- package/dist/engine/agent-api/compiler/geometry.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/geometry.js +25 -5
- package/dist/engine/agent-api/compiler/geometry.js.map +1 -1
- package/dist/engine/agent-api/compiler/lights.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/lights.js +14 -6
- package/dist/engine/agent-api/compiler/lights.js.map +1 -1
- package/dist/engine/agent-api/compiler/observations.d.ts +9 -1
- package/dist/engine/agent-api/compiler/observations.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/observations.js +5 -4
- package/dist/engine/agent-api/compiler/observations.js.map +1 -1
- package/dist/engine/agent-api/compiler/optionCoverage.js +17 -0
- package/dist/engine/agent-api/compiler/optionCoverage.js.map +1 -1
- package/dist/engine/agent-api/compiler/postprocess.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/postprocess.js +2 -0
- package/dist/engine/agent-api/compiler/postprocess.js.map +1 -1
- package/dist/engine/agent-api/compiler/primitives.d.ts +22 -0
- package/dist/engine/agent-api/compiler/primitives.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/primitives.js +88 -3
- package/dist/engine/agent-api/compiler/primitives.js.map +1 -1
- package/dist/engine/agent-api/compiler/renderInput.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/renderInput.js +40 -4
- package/dist/engine/agent-api/compiler/renderInput.js.map +1 -1
- package/dist/engine/agent-api/compiler/renderer.d.ts +1 -1
- package/dist/engine/agent-api/compiler/renderer.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/renderer.js +22 -8
- package/dist/engine/agent-api/compiler/renderer.js.map +1 -1
- package/dist/engine/agent-api/compiler/shadows.d.ts +32 -1
- package/dist/engine/agent-api/compiler/shadows.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/shadows.js +99 -4
- package/dist/engine/agent-api/compiler/shadows.js.map +1 -1
- package/dist/engine/agent-api/diagnostics.d.ts +22 -0
- package/dist/engine/agent-api/diagnostics.d.ts.map +1 -1
- package/dist/engine/agent-api/diagnostics.js +53 -1
- package/dist/engine/agent-api/diagnostics.js.map +1 -1
- package/dist/engine/agent-api/feel/extension.d.ts.map +1 -1
- package/dist/engine/agent-api/feel/extension.js +2 -1
- package/dist/engine/agent-api/feel/extension.js.map +1 -1
- package/dist/engine/agent-api/looks/lookFill.d.ts +4 -0
- package/dist/engine/agent-api/looks/lookFill.d.ts.map +1 -0
- package/dist/engine/agent-api/looks/lookFill.js +29 -0
- package/dist/engine/agent-api/looks/lookFill.js.map +1 -0
- package/dist/engine/agent-api/looks/lookPresets.d.ts +13 -0
- package/dist/engine/agent-api/looks/lookPresets.d.ts.map +1 -1
- package/dist/engine/agent-api/looks/lookPresets.js +5 -0
- package/dist/engine/agent-api/looks/lookPresets.js.map +1 -1
- package/dist/engine/agent-api/looks/looks.d.ts.map +1 -1
- package/dist/engine/agent-api/looks/looks.js +6 -0
- package/dist/engine/agent-api/looks/looks.js.map +1 -1
- package/dist/engine/agent-api/looks/structuralQA.d.ts.map +1 -1
- package/dist/engine/agent-api/looks/structuralQA.js +4 -2
- package/dist/engine/agent-api/looks/structuralQA.js.map +1 -1
- package/dist/engine/agent-api/nodes/game/instanceTransforms.d.ts +5 -4
- package/dist/engine/agent-api/nodes/game/instanceTransforms.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/game/instanceTransforms.js +61 -5
- package/dist/engine/agent-api/nodes/game/instanceTransforms.js.map +1 -1
- package/dist/engine/agent-api/nodes/groups.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/groups.js +2 -1
- package/dist/engine/agent-api/nodes/groups.js.map +1 -1
- package/dist/engine/agent-api/nodes/interactions.d.ts +32 -10
- package/dist/engine/agent-api/nodes/interactions.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/interactions.js +40 -11
- package/dist/engine/agent-api/nodes/interactions.js.map +1 -1
- package/dist/engine/agent-api/nodes/model.d.ts +3 -0
- package/dist/engine/agent-api/nodes/model.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/model.js +4 -1
- package/dist/engine/agent-api/nodes/model.js.map +1 -1
- package/dist/engine/agent-api/nodes/optionDiagnostics.d.ts +14 -0
- package/dist/engine/agent-api/nodes/optionDiagnostics.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/optionDiagnostics.js +34 -0
- package/dist/engine/agent-api/nodes/optionDiagnostics.js.map +1 -0
- package/dist/engine/agent-api/nodes/orbitInteraction.d.ts +9 -0
- package/dist/engine/agent-api/nodes/orbitInteraction.d.ts.map +1 -0
- package/dist/engine/agent-api/nodes/orbitInteraction.js +52 -0
- package/dist/engine/agent-api/nodes/orbitInteraction.js.map +1 -0
- package/dist/engine/agent-api/nodes/physics.d.ts +1 -0
- package/dist/engine/agent-api/nodes/physics.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/physics.js +15 -3
- package/dist/engine/agent-api/nodes/physics.js.map +1 -1
- package/dist/engine/agent-api/nodes/primitives.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/primitives.js +23 -0
- package/dist/engine/agent-api/nodes/primitives.js.map +1 -1
- package/dist/engine/agent-api/nodes/scene.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/scene.js +4 -2
- package/dist/engine/agent-api/nodes/scene.js.map +1 -1
- package/dist/engine/agent-api/nodes/text3d.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/text3d.js +11 -2
- package/dist/engine/agent-api/nodes/text3d.js.map +1 -1
- package/dist/engine/agent-api/nodes/types/runtime.d.ts +33 -0
- package/dist/engine/agent-api/nodes/types/runtime.d.ts.map +1 -1
- package/dist/engine/agent-api/nodes/types.d.ts +42 -0
- package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
- package/dist/engine/agent-api/platform.d.ts +5 -0
- package/dist/engine/agent-api/platform.d.ts.map +1 -1
- package/dist/engine/agent-api/platform.js +15 -0
- package/dist/engine/agent-api/platform.js.map +1 -1
- package/dist/engine/agent-api/postBridge.d.ts.map +1 -1
- package/dist/engine/agent-api/postBridge.js +5 -1
- package/dist/engine/agent-api/postBridge.js.map +1 -1
- package/dist/engine/agent-api/sceneKitDiagnostics.d.ts.map +1 -1
- package/dist/engine/agent-api/sceneKitDiagnostics.js +5 -2
- package/dist/engine/agent-api/sceneKitDiagnostics.js.map +1 -1
- package/dist/engine/contracts/animation.d.ts +5 -3
- package/dist/engine/contracts/animation.d.ts.map +1 -1
- package/dist/engine/contracts/animation.js.map +1 -1
- package/dist/engine/contracts/flags.d.ts.map +1 -1
- package/dist/engine/contracts/flags.js +2 -1
- package/dist/engine/contracts/flags.js.map +1 -1
- package/dist/engine/contracts/stubs/game.d.ts.map +1 -1
- package/dist/engine/contracts/stubs/game.js +9 -1
- package/dist/engine/contracts/stubs/game.js.map +1 -1
- package/dist/engine/contracts/urlCache.d.ts +4 -0
- package/dist/engine/contracts/urlCache.d.ts.map +1 -0
- package/dist/engine/contracts/urlCache.js +25 -0
- package/dist/engine/contracts/urlCache.js.map +1 -0
- package/dist/engine/lanes/prd01/outputSurface.d.ts.map +1 -1
- package/dist/engine/lanes/prd01/outputSurface.js +25 -1
- package/dist/engine/lanes/prd01/outputSurface.js.map +1 -1
- package/dist/math/SphericalHarmonics3.d.ts +6 -3
- package/dist/math/SphericalHarmonics3.d.ts.map +1 -1
- package/dist/math/SphericalHarmonics3.js +8 -5
- package/dist/math/SphericalHarmonics3.js.map +1 -1
- package/dist/math/three/Box3.d.ts +106 -0
- package/dist/math/three/Box3.d.ts.map +1 -0
- package/dist/math/three/Box3.js +348 -0
- package/dist/math/three/Box3.js.map +1 -0
- package/dist/math/three/Color.d.ts +127 -0
- package/dist/math/three/Color.d.ts.map +1 -0
- package/dist/math/three/Color.js +501 -0
- package/dist/math/three/Color.js.map +1 -0
- package/dist/math/three/Euler.d.ts +50 -0
- package/dist/math/three/Euler.d.ts.map +1 -0
- package/dist/math/three/Euler.js +210 -0
- package/dist/math/three/Euler.js.map +1 -0
- package/dist/math/three/Frustum.d.ts +59 -0
- package/dist/math/three/Frustum.d.ts.map +1 -0
- package/dist/math/three/Frustum.js +135 -0
- package/dist/math/three/Frustum.js.map +1 -0
- package/dist/math/three/Matrix3.d.ts +56 -0
- package/dist/math/three/Matrix3.d.ts.map +1 -0
- package/dist/math/three/Matrix3.js +248 -0
- package/dist/math/three/Matrix3.js.map +1 -0
- package/dist/math/three/Matrix4.d.ts +79 -0
- package/dist/math/three/Matrix4.d.ts.map +1 -0
- package/dist/math/three/Matrix4.js +708 -0
- package/dist/math/three/Matrix4.js.map +1 -0
- package/dist/math/three/Plane.d.ts +65 -0
- package/dist/math/three/Plane.d.ts.map +1 -0
- package/dist/math/three/Plane.js +135 -0
- package/dist/math/three/Plane.js.map +1 -0
- package/dist/math/three/Quaternion.d.ts +91 -0
- package/dist/math/three/Quaternion.d.ts.map +1 -0
- package/dist/math/three/Quaternion.js +444 -0
- package/dist/math/three/Quaternion.js.map +1 -0
- package/dist/math/three/Ray.d.ts +56 -0
- package/dist/math/three/Ray.d.ts.map +1 -0
- package/dist/math/three/Ray.js +340 -0
- package/dist/math/three/Ray.js.map +1 -0
- package/dist/math/three/Sphere.d.ts +58 -0
- package/dist/math/three/Sphere.d.ts.map +1 -0
- package/dist/math/three/Sphere.js +166 -0
- package/dist/math/three/Sphere.js.map +1 -0
- package/dist/math/three/Triangle.d.ts +58 -0
- package/dist/math/three/Triangle.d.ts.map +1 -0
- package/dist/math/three/Triangle.js +229 -0
- package/dist/math/three/Triangle.js.map +1 -0
- package/dist/math/three/Vector2.d.ts +88 -0
- package/dist/math/three/Vector2.d.ts.map +1 -0
- package/dist/math/three/Vector2.js +283 -0
- package/dist/math/three/Vector2.js.map +1 -0
- package/dist/math/three/Vector3.d.ts +137 -0
- package/dist/math/three/Vector3.d.ts.map +1 -0
- package/dist/math/three/Vector3.js +458 -0
- package/dist/math/three/Vector3.js.map +1 -0
- package/dist/math/three/Vector4.d.ts +100 -0
- package/dist/math/three/Vector4.d.ts.map +1 -0
- package/dist/math/three/Vector4.js +443 -0
- package/dist/math/three/Vector4.js.map +1 -0
- package/dist/math/three/index.d.ts +29 -0
- package/dist/math/three/index.d.ts.map +1 -0
- package/dist/math/three/index.js +29 -0
- package/dist/math/three/index.js.map +1 -0
- package/dist/react/index.d.ts +8 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +47 -20
- package/dist/react/index.js.map +1 -1
- package/dist/rendering/DepthPass.d.ts.map +1 -1
- package/dist/rendering/DepthPass.js +3 -2
- package/dist/rendering/DepthPass.js.map +1 -1
- package/dist/rendering/ForwardPass.d.ts +13 -0
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +64 -11
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/MaterialBinding.js +6 -2
- package/dist/rendering/MaterialBinding.js.map +1 -1
- package/dist/rendering/Renderer.d.ts +8 -0
- package/dist/rendering/Renderer.d.ts.map +1 -1
- package/dist/rendering/Renderer.js +37 -6
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/ShaderChunks.d.ts.map +1 -1
- package/dist/rendering/ShaderChunks.js +3 -1
- package/dist/rendering/ShaderChunks.js.map +1 -1
- package/dist/rendering/ShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/ShaderLibrary.js +17 -5
- package/dist/rendering/ShaderLibrary.js.map +1 -1
- package/dist/rendering/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/rendering/ShaderLibraryCore.js +2 -1
- package/dist/rendering/ShaderLibraryCore.js.map +1 -1
- package/dist/rendering/WebGL2Device.d.ts +16 -1
- package/dist/rendering/WebGL2Device.d.ts.map +1 -1
- package/dist/rendering/WebGL2Device.js +94 -37
- package/dist/rendering/WebGL2Device.js.map +1 -1
- package/dist/rendering/WebGL2StateCache.d.ts +22 -0
- package/dist/rendering/WebGL2StateCache.d.ts.map +1 -1
- package/dist/rendering/WebGL2StateCache.js +71 -42
- package/dist/rendering/WebGL2StateCache.js.map +1 -1
- package/dist/rendering/contracts/core.d.ts.map +1 -1
- package/dist/rendering/contracts/core.js +22 -2
- package/dist/rendering/contracts/core.js.map +1 -1
- package/dist/rendering/contracts/program.d.ts.map +1 -1
- package/dist/rendering/contracts/program.js +8 -1
- package/dist/rendering/contracts/program.js.map +1 -1
- package/dist/rendering/contracts/quality.d.ts +21 -0
- package/dist/rendering/contracts/quality.d.ts.map +1 -1
- package/dist/rendering/contracts/quality.js +5 -0
- package/dist/rendering/contracts/quality.js.map +1 -1
- package/dist/rendering/contracts/renderItem.d.ts +6 -0
- package/dist/rendering/contracts/renderItem.d.ts.map +1 -1
- package/dist/rendering/contracts/structuralMemo.d.ts +23 -0
- package/dist/rendering/contracts/structuralMemo.d.ts.map +1 -0
- package/dist/rendering/contracts/structuralMemo.js +81 -0
- package/dist/rendering/contracts/structuralMemo.js.map +1 -0
- package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
- package/dist/rendering/environment/EnvironmentCache.js +6 -1
- package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
- package/dist/rendering/environment/FirstFrameGate.d.ts +23 -0
- package/dist/rendering/environment/FirstFrameGate.d.ts.map +1 -0
- package/dist/rendering/environment/FirstFrameGate.js +58 -0
- package/dist/rendering/environment/FirstFrameGate.js.map +1 -0
- package/dist/rendering/environment/Rgb9e5Cube.d.ts.map +1 -1
- package/dist/rendering/environment/Rgb9e5Cube.js +8 -4
- package/dist/rendering/environment/Rgb9e5Cube.js.map +1 -1
- package/dist/rendering/environment/probeBuild.d.ts +29 -0
- package/dist/rendering/environment/probeBuild.d.ts.map +1 -1
- package/dist/rendering/environment/probeBuild.js +124 -45
- package/dist/rendering/environment/probeBuild.js.map +1 -1
- package/dist/rendering/forward/Lighting.d.ts +11 -3
- package/dist/rendering/forward/Lighting.d.ts.map +1 -1
- package/dist/rendering/forward/Lighting.js +25 -15
- package/dist/rendering/forward/Lighting.js.map +1 -1
- package/dist/rendering/forward/contactShadowMaskStore.d.ts +41 -0
- package/dist/rendering/forward/contactShadowMaskStore.d.ts.map +1 -0
- package/dist/rendering/forward/contactShadowMaskStore.js +85 -0
- package/dist/rendering/forward/contactShadowMaskStore.js.map +1 -0
- package/dist/rendering/geometry/Shape.d.ts.map +1 -1
- package/dist/rendering/geometry/Shape.js +7 -2
- package/dist/rendering/geometry/Shape.js.map +1 -1
- package/dist/rendering/geometry/Support.d.ts +4 -0
- package/dist/rendering/geometry/Support.d.ts.map +1 -1
- package/dist/rendering/geometry/Support.js +3 -2
- package/dist/rendering/geometry/Support.js.map +1 -1
- package/dist/rendering/index.d.ts +6 -0
- package/dist/rendering/index.d.ts.map +1 -1
- package/dist/rendering/index.js +5 -0
- package/dist/rendering/index.js.map +1 -1
- package/dist/rendering/passes/ContactShadowPass.d.ts +40 -3
- package/dist/rendering/passes/ContactShadowPass.d.ts.map +1 -1
- package/dist/rendering/passes/ContactShadowPass.js +73 -13
- package/dist/rendering/passes/ContactShadowPass.js.map +1 -1
- package/dist/rendering/passes/Prd02ContactShadowsContributor.d.ts +19 -0
- package/dist/rendering/passes/Prd02ContactShadowsContributor.d.ts.map +1 -1
- package/dist/rendering/passes/Prd02ContactShadowsContributor.js +179 -28
- package/dist/rendering/passes/Prd02ContactShadowsContributor.js.map +1 -1
- package/dist/rendering/program/ProgramFeatures.d.ts +6 -0
- package/dist/rendering/program/ProgramFeatures.d.ts.map +1 -1
- package/dist/rendering/program/ProgramFeatures.js +11 -5
- package/dist/rendering/program/ProgramFeatures.js.map +1 -1
- package/dist/rendering/program/ProgramGenerator.d.ts +6 -0
- package/dist/rendering/program/ProgramGenerator.d.ts.map +1 -1
- package/dist/rendering/program/ProgramGenerator.js +36 -1
- package/dist/rendering/program/ProgramGenerator.js.map +1 -1
- package/dist/rendering/program/ProgramKey.d.ts.map +1 -1
- package/dist/rendering/program/ProgramKey.js +4 -1
- package/dist/rendering/program/ProgramKey.js.map +1 -1
- package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts +1 -1
- package/dist/rendering/program/chunks/shadow_forward.glsl.d.ts.map +1 -1
- package/dist/rendering/program/chunks/shadow_forward.glsl.js +4 -1
- package/dist/rendering/program/chunks/shadow_forward.glsl.js.map +1 -1
- package/dist/rendering/quality/DirectPath.d.ts +43 -0
- package/dist/rendering/quality/DirectPath.d.ts.map +1 -0
- package/dist/rendering/quality/DirectPath.js +42 -0
- package/dist/rendering/quality/DirectPath.js.map +1 -0
- package/dist/rendering/renderer/Background.d.ts +0 -5
- package/dist/rendering/renderer/Background.d.ts.map +1 -1
- package/dist/rendering/renderer/Background.js +25 -2
- package/dist/rendering/renderer/Background.js.map +1 -1
- package/dist/rendering/renderer/InstanceFrustumCull.d.ts +39 -0
- package/dist/rendering/renderer/InstanceFrustumCull.d.ts.map +1 -0
- package/dist/rendering/renderer/InstanceFrustumCull.js +127 -0
- package/dist/rendering/renderer/InstanceFrustumCull.js.map +1 -0
- package/dist/rendering/renderer/ShadowOrchestration.d.ts +2 -0
- package/dist/rendering/renderer/ShadowOrchestration.d.ts.map +1 -1
- package/dist/rendering/renderer/ShadowOrchestration.js +1 -0
- package/dist/rendering/renderer/ShadowOrchestration.js.map +1 -1
- package/dist/rendering/renderer/coreOutputPostRoute.d.ts +0 -5
- package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
- package/dist/rendering/renderer/coreOutputPostRoute.js +12 -2
- package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
- package/dist/rendering/resources/InstanceBuffer.d.ts +2 -0
- package/dist/rendering/resources/InstanceBuffer.d.ts.map +1 -1
- package/dist/rendering/resources/InstanceBuffer.js +23 -0
- package/dist/rendering/resources/InstanceBuffer.js.map +1 -1
- package/dist/rendering/shaders/chunks/contact_shadow.glsl.d.ts +11 -6
- package/dist/rendering/shaders/chunks/contact_shadow.glsl.d.ts.map +1 -1
- package/dist/rendering/shaders/chunks/contact_shadow.glsl.js +41 -19
- package/dist/rendering/shaders/chunks/contact_shadow.glsl.js.map +1 -1
- package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.d.ts +12 -0
- package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.js +21 -0
- package/dist/rendering/shaders/chunks/contact_shadow_mask.glsl.js.map +1 -0
- package/dist/rendering/shadows/CascadeUse.d.ts +28 -0
- package/dist/rendering/shadows/CascadeUse.d.ts.map +1 -0
- package/dist/rendering/shadows/CascadeUse.js +45 -0
- package/dist/rendering/shadows/CascadeUse.js.map +1 -0
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts +7 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +12 -3
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
- package/dist/rendering/shadows/Prd02ShadowBridge.d.ts +12 -1
- package/dist/rendering/shadows/Prd02ShadowBridge.d.ts.map +1 -1
- package/dist/rendering/shadows/Prd02ShadowBridge.js +17 -5
- package/dist/rendering/shadows/Prd02ShadowBridge.js.map +1 -1
- package/dist/rendering/shadows/ShadowFilterTier.d.ts +51 -0
- package/dist/rendering/shadows/ShadowFilterTier.d.ts.map +1 -0
- package/dist/rendering/shadows/ShadowFilterTier.js +89 -0
- package/dist/rendering/shadows/ShadowFilterTier.js.map +1 -0
- package/dist/rendering/shadows/ShadowSystem.d.ts +15 -0
- package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.js +12 -2
- package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
- package/dist/rendering/shadows/shadowLegacy.d.ts +12 -0
- package/dist/rendering/shadows/shadowLegacy.d.ts.map +1 -1
- package/dist/rendering/shadows/shadowLegacy.js +24 -0
- package/dist/rendering/shadows/shadowLegacy.js.map +1 -1
- package/dist/rendering/webgl2/BloomFusion.d.ts +31 -0
- package/dist/rendering/webgl2/BloomFusion.d.ts.map +1 -0
- package/dist/rendering/webgl2/BloomFusion.js +25 -0
- package/dist/rendering/webgl2/BloomFusion.js.map +1 -0
- package/dist/rendering/webgl2/ContextLifecycle.d.ts +14 -0
- package/dist/rendering/webgl2/ContextLifecycle.d.ts.map +1 -1
- package/dist/rendering/webgl2/ContextLifecycle.js +30 -3
- package/dist/rendering/webgl2/ContextLifecycle.js.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.d.ts +30 -0
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +259 -27
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/dist/rendering/webgl2/MultiDraw.d.ts.map +1 -1
- package/dist/rendering/webgl2/MultiDraw.js +9 -1
- package/dist/rendering/webgl2/MultiDraw.js.map +1 -1
- package/dist/rendering/webgl2/Samplers.d.ts +10 -1
- package/dist/rendering/webgl2/Samplers.d.ts.map +1 -1
- package/dist/rendering/webgl2/Samplers.js +24 -1
- package/dist/rendering/webgl2/Samplers.js.map +1 -1
- package/dist/rendering/webgl2/TextureFormats.d.ts +12 -0
- package/dist/rendering/webgl2/TextureFormats.d.ts.map +1 -1
- package/dist/rendering/webgl2/TextureFormats.js +16 -0
- package/dist/rendering/webgl2/TextureFormats.js.map +1 -1
- package/package.json +25 -25
- package/templates/cinematic-scene/package.json +2 -2
- package/templates/mini-game/package.json +2 -2
- package/templates/product-viewer/package.json +2 -2
- package/templates/production-asset-inspector/package.json +1 -1
- package/templates/production-material-studio/package.json +1 -1
- package/templates/production-product-configurator/package.json +1 -1
- package/templates/production-product-viewer/package.json +1 -1
- package/dist/environments/EnvironmentPreview.d.ts +0 -13
- package/dist/environments/EnvironmentPreview.d.ts.map +0 -1
- package/dist/environments/EnvironmentPreview.js +0 -16
- package/dist/environments/EnvironmentPreview.js.map +0 -1
- package/dist/environments/EnvironmentRegistry.d.ts +0 -35
- package/dist/environments/EnvironmentRegistry.d.ts.map +0 -1
- package/dist/environments/EnvironmentRegistry.js +0 -39
- package/dist/environments/EnvironmentRegistry.js.map +0 -1
- package/dist/environments/HDRIEnvironment.d.ts +0 -38
- package/dist/environments/HDRIEnvironment.d.ts.map +0 -1
- package/dist/environments/HDRIEnvironment.js +0 -34
- package/dist/environments/HDRIEnvironment.js.map +0 -1
- package/dist/environments/PMREMPreset.d.ts +0 -14
- package/dist/environments/PMREMPreset.d.ts.map +0 -1
- package/dist/environments/PMREMPreset.js +0 -16
- package/dist/environments/PMREMPreset.js.map +0 -1
- package/dist/environments/index.d.ts +0 -6
- package/dist/environments/index.d.ts.map +0 -1
- package/dist/environments/index.js +0 -3
- package/dist/environments/index.js.map +0 -1
- package/dist/environments/node.d.ts +0 -7
- package/dist/environments/node.d.ts.map +0 -1
- package/dist/environments/node.js +0 -5
- package/dist/environments/node.js.map +0 -1
- package/dist/environments/production-runtime/ProductionEnvironmentCorpus.d.ts +0 -78
- package/dist/environments/production-runtime/ProductionEnvironmentCorpus.d.ts.map +0 -1
- package/dist/environments/production-runtime/ProductionEnvironmentCorpus.js +0 -67
- package/dist/environments/production-runtime/ProductionEnvironmentCorpus.js.map +0 -1
- package/dist/environments/production-runtime/index.d.ts +0 -3
- package/dist/environments/production-runtime/index.d.ts.map +0 -1
- package/dist/environments/production-runtime/index.js +0 -2
- package/dist/environments/production-runtime/index.js.map +0 -1
- package/dist/environments/threejs-example-parity/index.d.ts +0 -17
- package/dist/environments/threejs-example-parity/index.d.ts.map +0 -1
- package/dist/environments/threejs-example-parity/index.js +0 -49
- package/dist/environments/threejs-example-parity/index.js.map +0 -1
- package/templates/cinematic-scene/node_modules/.vite/deps/_metadata.json +0 -8
- package/templates/cinematic-scene/node_modules/.vite/deps/package.json +0 -3
- package/templates/cinematic-scene/test-results/.last-run.json +0 -6
- package/templates/cinematic-scene/test-results/route-health-Aura3D-cinematic-scene-reaches-ready-state/error-context.md +0 -64
- package/templates/mini-game/package-lock.json +0 -1312
- package/templates/product-viewer/node_modules/.vite/deps/_metadata.json +0 -8
- package/templates/product-viewer/node_modules/.vite/deps/package.json +0 -3
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseRenderPass, type RenderPassContext } from "../RenderPass.js";
|
|
2
|
+
import type { RenderDevice } from "../RenderDevice.js";
|
|
2
3
|
import type { Texture } from "../Texture.js";
|
|
3
4
|
import type { RenderItem } from "../ForwardPass.js";
|
|
4
5
|
import { type DepthPassOptions } from "../DepthPass.js";
|
|
@@ -15,8 +16,15 @@ export interface ContactShadowPassInput {
|
|
|
15
16
|
readonly camera: {
|
|
16
17
|
readonly viewMatrix: Float32Array;
|
|
17
18
|
readonly projectionMatrix: Float32Array;
|
|
19
|
+
/**
|
|
20
|
+
* The combined matrix the forward pass rasterizes with. The production renderer's frame camera carries only this
|
|
21
|
+
* (its separate view/projection come through as identity), so the pass works from it when present and falls back
|
|
22
|
+
* to `projectionMatrix * viewMatrix` otherwise.
|
|
23
|
+
*/
|
|
24
|
+
readonly viewProjectionMatrix?: Float32Array;
|
|
18
25
|
readonly near: number;
|
|
19
26
|
readonly far: number;
|
|
27
|
+
readonly orthographic?: boolean;
|
|
20
28
|
};
|
|
21
29
|
/** C-07-IN-2: real scene depth when the C-01 prepass is provided. */
|
|
22
30
|
readonly sceneDepth?: {
|
|
@@ -33,22 +41,51 @@ export interface ContactShadowPassInput {
|
|
|
33
41
|
readonly depthPassOptions?: Omit<DepthPassOptions, "casters" | "viewProjectionMatrix">;
|
|
34
42
|
readonly options?: ContactShadowOptions;
|
|
35
43
|
}
|
|
44
|
+
export interface ContactShadowProbe {
|
|
45
|
+
readonly mask: {
|
|
46
|
+
readonly width: number;
|
|
47
|
+
readonly height: number;
|
|
48
|
+
readonly min: number;
|
|
49
|
+
readonly mean: number;
|
|
50
|
+
readonly fractionBelow098: number;
|
|
51
|
+
} | null;
|
|
52
|
+
readonly depth: {
|
|
53
|
+
readonly width: number;
|
|
54
|
+
readonly height: number;
|
|
55
|
+
readonly coveredFraction: number;
|
|
56
|
+
readonly min: number | null;
|
|
57
|
+
readonly max: number | null;
|
|
58
|
+
} | null;
|
|
59
|
+
readonly error?: string;
|
|
60
|
+
}
|
|
36
61
|
/** @internal Contact-mask program sources (GLSL validation in unit tests). */
|
|
37
62
|
export declare const CONTACT_MASK_SHADER_SOURCES: {
|
|
38
63
|
readonly vertex: "#version 300 es\n// @aura3d-shader:prd02_contact_mask\nin vec2 a_position;\nout vec2 v_uv;\nvoid main() { v_uv = a_position * 0.5 + 0.5; gl_Position = vec4(a_position, 0.0, 1.0); }\n";
|
|
39
|
-
readonly fragment: "#version 300 es\n// @aura3d-shader:prd02_contact_mask\nprecision highp float;\nin vec2 v_uv;\nlayout(location = 0) out vec4 o_vis;\n\nuniform highp sampler2D u_prd02ContactDepth; // scene depth buffer ([0,1])\nuniform mat4
|
|
64
|
+
readonly fragment: "#version 300 es\n// @aura3d-shader:prd02_contact_mask\nprecision highp float;\nin vec2 v_uv;\nlayout(location = 0) out vec4 o_vis;\n\nuniform highp sampler2D u_prd02ContactDepth; // scene depth buffer ([0,1])\nuniform mat4 u_prd02ContactInvViewProj; // clip -> world\nuniform mat4 u_prd02ContactViewProj; // world -> clip\nuniform vec3 u_prd02ContactSun; // shadowed-light direction TOWARD the light, world space\nuniform vec4 u_prd02ContactParams; // (length_m, thickness_m, steps, jitter)\nuniform vec3 u_prd02ContactNearFar; // (near, far, orthographic 0|1); only the orthographic flag is read\n\nfloat a3d_prd02ContactNoise(vec2 px) {\n return fract(52.9829189 * fract(0.06711056 * px.x + 0.00583715 * px.y));\n}\n\nvec3 a3d_prd02ContactWorld(vec2 uv, float z) {\n vec4 w = u_prd02ContactInvViewProj * vec4(uv * 2.0 - 1.0, z * 2.0 - 1.0, 1.0);\n return w.xyz / w.w;\n}\n\n// How far the march point sits behind the visible surface at the same screen position, in world units along the view\n// direction. Perspective: the clip-space w difference (view-space distance). Orthographic: the projection is linear, but the\n// near/far the frame camera reports are not guaranteed to be the ones the projection matrix was built with (the first GPU\n// run of an orthographic scene gave a mask of all ones for that reason), so the gap is measured in world space along the\n// view direction recovered from the inverse view-projection instead.\nfloat a3d_prd02ContactBehind(vec4 clip, vec3 p, vec3 blockerPos, vec2 suv) {\n if (u_prd02ContactNearFar.z > 0.5) {\n vec3 viewDir = normalize(a3d_prd02ContactWorld(suv, 1.0) - a3d_prd02ContactWorld(suv, 0.0));\n return dot(p - blockerPos, viewDir);\n }\n return clip.w - (u_prd02ContactViewProj * vec4(blockerPos, 1.0)).w;\n}\n\nfloat a3d_contactShadow(vec2 uv) {\n float sceneZ = texture(u_prd02ContactDepth, uv).r;\n vec3 pos = a3d_prd02ContactWorld(uv, sceneZ);\n float len = u_prd02ContactParams.x;\n float thickness = u_prd02ContactParams.y;\n float steps = max(u_prd02ContactParams.z, 1.0);\n float jitter = a3d_prd02ContactNoise(gl_FragCoord.xy) * u_prd02ContactParams.w;\n float occluded = 0.0;\n for (int i = 1; i <= 16; i++) {\n if (float(i) > steps) break;\n float t = (float(i) - jitter) / steps;\n vec3 p = pos + u_prd02ContactSun * (t * len);\n vec4 clip = u_prd02ContactViewProj * vec4(p, 1.0);\n if (clip.w <= 0.0) continue;\n vec3 r = clip.xyz / clip.w;\n vec2 suv = r.xy * 0.5 + 0.5;\n if (suv.x < 0.0 || suv.x > 1.0 || suv.y < 0.0 || suv.y > 1.0) continue;\n float blockerZ = texture(u_prd02ContactDepth, suv).r;\n vec3 blockerPos = a3d_prd02ContactWorld(suv, blockerZ);\n // The ray point must sit behind the visible surface by more than the thickness parameter (self-shadow bias) and by less than\n // twice the march length. The upper bound stops a foreground prop between the camera and the receiver from\n // \"occluding\" every ray whose screen position lands behind it (ghost shadows), while still letting a solid\n // caster shade rays that dive up to one march length into its volume.\n float behind = a3d_prd02ContactBehind(clip, p, blockerPos, suv);\n if (behind > thickness && behind < len * 2.0) occluded = max(occluded, 1.0 - t);\n }\n return 1.0 - occluded;\n}\n\nvoid main() { o_vis = vec4(a3d_contactShadow(v_uv)); }\n";
|
|
40
65
|
};
|
|
41
66
|
export declare class ContactShadowPass extends BaseRenderPass {
|
|
42
|
-
private
|
|
67
|
+
private input;
|
|
43
68
|
private mask;
|
|
44
69
|
private ownDepth;
|
|
45
70
|
private program;
|
|
46
71
|
private triBuffer;
|
|
47
|
-
private
|
|
72
|
+
private depthPass;
|
|
48
73
|
private lastMask;
|
|
49
74
|
private lastDepthSource;
|
|
50
75
|
private executed;
|
|
51
76
|
constructor(input: ContactShadowPassInput);
|
|
77
|
+
/**
|
|
78
|
+
* Re-point the pass at this frame's camera, light and casters while keeping its
|
|
79
|
+
* render targets and program (WP-4: the contributor reuses one pass per device
|
|
80
|
+
* instead of allocating a mask and depth target every frame).
|
|
81
|
+
*/
|
|
82
|
+
configure(input: ContactShadowPassInput): void;
|
|
83
|
+
/**
|
|
84
|
+
* Diagnostics-only readback of the mask and the pass's own depth target (opt-in from the contributor via
|
|
85
|
+
* `globalThis.__A3D_CONTACT_PROBE__`; never on in production). It exists so a remote GPU run can tell "the mask is all
|
|
86
|
+
* ones", "the depth pass drew nothing" and "the consumer never sampled it" apart, which pixel deltas alone cannot.
|
|
87
|
+
*/
|
|
88
|
+
probe(device: RenderDevice): ContactShadowProbe;
|
|
52
89
|
maskTexture(): Texture | null;
|
|
53
90
|
depthSource(): string;
|
|
54
91
|
passExecuted(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactShadowPass.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/ContactShadowPass.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"ContactShadowPass.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/ContactShadowPass.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,17 +42,26 @@ export class ContactShadowPass extends BaseRenderPass {
|
|
|
42
42
|
ownDepth = null;
|
|
43
43
|
program = null;
|
|
44
44
|
triBuffer = null;
|
|
45
|
-
depthPass;
|
|
45
|
+
depthPass = null;
|
|
46
46
|
lastMask = null;
|
|
47
47
|
lastDepthSource = "none";
|
|
48
48
|
executed = false;
|
|
49
49
|
constructor(input) {
|
|
50
50
|
super("prd02-contact-shadows", [MASK_LABEL], [MASK_LABEL]);
|
|
51
|
+
this.input = input;
|
|
52
|
+
this.configure(input);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Re-point the pass at this frame's camera, light and casters while keeping its
|
|
56
|
+
* render targets and program (WP-4: the contributor reuses one pass per device
|
|
57
|
+
* instead of allocating a mask and depth target every frame).
|
|
58
|
+
*/
|
|
59
|
+
configure(input) {
|
|
51
60
|
this.input = input;
|
|
52
61
|
if (!input.sceneDepth?.available && input.casters?.length) {
|
|
53
62
|
this.depthPass = new DepthPass({
|
|
54
63
|
casters: input.casters,
|
|
55
|
-
viewProjectionMatrix:
|
|
64
|
+
viewProjectionMatrix: cameraViewProjection(input.camera),
|
|
56
65
|
...(input.depthPassOptions ?? {}),
|
|
57
66
|
});
|
|
58
67
|
}
|
|
@@ -60,6 +69,60 @@ export class ContactShadowPass extends BaseRenderPass {
|
|
|
60
69
|
this.depthPass = null;
|
|
61
70
|
}
|
|
62
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Diagnostics-only readback of the mask and the pass's own depth target (opt-in from the contributor via
|
|
74
|
+
* `globalThis.__A3D_CONTACT_PROBE__`; never on in production). It exists so a remote GPU run can tell "the mask is all
|
|
75
|
+
* ones", "the depth pass drew nothing" and "the consumer never sampled it" apart, which pixel deltas alone cannot.
|
|
76
|
+
*/
|
|
77
|
+
probe(device) {
|
|
78
|
+
const previous = device.getRenderTarget?.() ?? null;
|
|
79
|
+
let mask = null;
|
|
80
|
+
let depth = null;
|
|
81
|
+
try {
|
|
82
|
+
if (this.mask && this.executed) {
|
|
83
|
+
device.setRenderTarget(this.mask);
|
|
84
|
+
const pixels = device.readPixels(0, 0, this.mask.width, this.mask.height);
|
|
85
|
+
let min = 255;
|
|
86
|
+
let sum = 0;
|
|
87
|
+
let below = 0;
|
|
88
|
+
const n = this.mask.width * this.mask.height;
|
|
89
|
+
for (let i = 0; i < n; i += 1) {
|
|
90
|
+
const r = pixels[i * 4];
|
|
91
|
+
if (r < min)
|
|
92
|
+
min = r;
|
|
93
|
+
sum += r;
|
|
94
|
+
if (r < 250)
|
|
95
|
+
below += 1;
|
|
96
|
+
}
|
|
97
|
+
mask = { width: this.mask.width, height: this.mask.height, min: min / 255, mean: sum / n / 255, fractionBelow098: below / n };
|
|
98
|
+
}
|
|
99
|
+
if (this.ownDepth && device.readDepthPixels) {
|
|
100
|
+
device.setRenderTarget(this.ownDepth);
|
|
101
|
+
const values = device.readDepthPixels(0, 0, this.ownDepth.width, this.ownDepth.height);
|
|
102
|
+
let min = 1;
|
|
103
|
+
let max = 0;
|
|
104
|
+
let covered = 0;
|
|
105
|
+
for (let i = 0; i < values.length; i += 1) {
|
|
106
|
+
const v = values[i];
|
|
107
|
+
if (v < 0.9999) {
|
|
108
|
+
covered += 1;
|
|
109
|
+
if (v < min)
|
|
110
|
+
min = v;
|
|
111
|
+
if (v > max)
|
|
112
|
+
max = v;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
depth = { width: this.ownDepth.width, height: this.ownDepth.height, coveredFraction: covered / values.length, min: covered ? min : null, max: covered ? max : null };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return { mask, depth, error: error instanceof Error ? error.message : String(error) };
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
device.setRenderTarget(previous);
|
|
123
|
+
}
|
|
124
|
+
return { mask, depth };
|
|
125
|
+
}
|
|
63
126
|
maskTexture() { return this.lastMask; }
|
|
64
127
|
depthSource() { return this.lastDepthSource; }
|
|
65
128
|
passExecuted() { return this.executed; }
|
|
@@ -109,7 +172,8 @@ export class ContactShadowPass extends BaseRenderPass {
|
|
|
109
172
|
this.triBuffer ??= device.createBuffer("vertex", 24, new Float32Array([-1, -1, 3, -1, -1, 3]));
|
|
110
173
|
const o = this.input.options ?? {};
|
|
111
174
|
const steps = Math.min(16, Math.max(1, o.steps ?? 12));
|
|
112
|
-
const
|
|
175
|
+
const viewProjection = cameraViewProjection(this.input.camera);
|
|
176
|
+
const sun = normalize3([this.input.sunDirection[0], this.input.sunDirection[1], this.input.sunDirection[2]]);
|
|
113
177
|
device.setRenderTarget(this.mask);
|
|
114
178
|
device.draw({
|
|
115
179
|
label: "prd02-contact-shadow-mask",
|
|
@@ -125,11 +189,11 @@ export class ContactShadowPass extends BaseRenderPass {
|
|
|
125
189
|
texture: depthTex,
|
|
126
190
|
sampler: new Sampler({ minFilter: "nearest", magFilter: "nearest", addressU: "clamp-to-edge", addressV: "clamp-to-edge" }),
|
|
127
191
|
})],
|
|
128
|
-
["
|
|
129
|
-
["
|
|
130
|
-
["u_prd02ContactSun",
|
|
192
|
+
["u_prd02ContactInvViewProj", invertMat4(viewProjection)],
|
|
193
|
+
["u_prd02ContactViewProj", viewProjection],
|
|
194
|
+
["u_prd02ContactSun", sun],
|
|
131
195
|
["u_prd02ContactParams", [o.length ?? 0.25, o.thickness ?? 0.05, steps, 0.9]],
|
|
132
|
-
["u_prd02ContactNearFar", [this.input.camera.near, this.input.camera.far]],
|
|
196
|
+
["u_prd02ContactNearFar", [this.input.camera.near, this.input.camera.far, this.input.camera.orthographic ? 1 : 0]],
|
|
133
197
|
]),
|
|
134
198
|
});
|
|
135
199
|
this.lastMask = this.mask.colorTexture;
|
|
@@ -137,12 +201,8 @@ export class ContactShadowPass extends BaseRenderPass {
|
|
|
137
201
|
device.setRenderTarget(prevTarget);
|
|
138
202
|
}
|
|
139
203
|
}
|
|
140
|
-
function
|
|
141
|
-
return
|
|
142
|
-
m[0] * d[0] + m[4] * d[1] + m[8] * d[2],
|
|
143
|
-
m[1] * d[0] + m[5] * d[1] + m[9] * d[2],
|
|
144
|
-
m[2] * d[0] + m[6] * d[1] + m[10] * d[2],
|
|
145
|
-
];
|
|
204
|
+
function cameraViewProjection(camera) {
|
|
205
|
+
return (camera.viewProjectionMatrix ?? multiplyMat4(camera.projectionMatrix, camera.viewMatrix));
|
|
146
206
|
}
|
|
147
207
|
function normalize3(v) {
|
|
148
208
|
const l = Math.hypot(v[0], v[1], v[2]) || 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactShadowPass.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/ContactShadowPass.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,4EAA4E;AAC5E,wEAAwE;AACxE,8EAA8E;AAC9E,8EAA8E;AAC9E,4DAA4D;AAE5D,OAAO,EAAE,cAAc,EAA0B,MAAM,eAAe,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAyB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"ContactShadowPass.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/ContactShadowPass.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,31 @@ interface ContactShadowsDiagnostics {
|
|
|
5
5
|
readonly contactShadows: {
|
|
6
6
|
readonly passExecuted: boolean;
|
|
7
7
|
readonly depthSource: string;
|
|
8
|
+
/**
|
|
9
|
+
* Set when the scene asked for the mask but nothing can show it this frame (no shadow-casting directional
|
|
10
|
+
* light, or no drawn program samples the mask). Absent when the mask is working or was not requested.
|
|
11
|
+
*/
|
|
12
|
+
readonly unavailable?: string;
|
|
13
|
+
/** Present only when `globalThis.__A3D_CONTACT_PROBE__ === true` (GPU diagnostics runs). */
|
|
14
|
+
readonly probe?: Readonly<Record<string, unknown>>;
|
|
8
15
|
};
|
|
9
16
|
}
|
|
10
17
|
/** Latest C-31 contact-shadow diagnostics (engine lane reads via rendering barrel). */
|
|
11
18
|
export declare function prd02ContactShadowDiagnostics(): ContactShadowsDiagnostics;
|
|
19
|
+
export declare const CONTACT_SHADOWS_NO_SUN_REASON = "no-shadow-casting-directional-light";
|
|
20
|
+
export declare const CONTACT_SHADOWS_NO_CONSUMER_REASON = "no-drawn-program-samples-the-mask";
|
|
12
21
|
/** C-27 tier + opt-in + sub-flag resolution. Returns null when the pass must not run. */
|
|
13
22
|
export declare function contactShadowRequest(ctx: FrameContributorContext): ContactShadowOptions | null;
|
|
23
|
+
/**
|
|
24
|
+
* Orthographic cameras do not always say so: the frame camera's `projection` defaults to "perspective" when the scene
|
|
25
|
+
* camera has no such field (OrthographicCamera has none), which on the first GPU orthographic run left the mask at all
|
|
26
|
+
* ones. The combined view-projection settles it: an orthographic matrix leaves clip w at exactly 1 (fourth row 0,0,0,1;
|
|
27
|
+
* column-major elements 3, 7, 11, 15), a perspective one does not.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isOrthographicFrameCamera(camera: {
|
|
30
|
+
readonly projection: string;
|
|
31
|
+
readonly viewProjectionMatrix: ArrayLike<number>;
|
|
32
|
+
}): boolean;
|
|
14
33
|
export declare function createPrd02ContactShadowsContributor(): FrameContributor;
|
|
15
34
|
export {};
|
|
16
35
|
//# sourceMappingURL=Prd02ContactShadowsContributor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prd02ContactShadowsContributor.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/Prd02ContactShadowsContributor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Prd02ContactShadowsContributor.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/Prd02ContactShadowsContributor.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAqB,KAAK,oBAAoB,EAA4D,MAAM,qBAAqB,CAAC;AAW7I,eAAO,MAAM,wBAAwB,4BAAmB,CAAC;AAEzD,UAAU,yBAAyB;IACjC,QAAQ,CAAC,cAAc,EAAE;QACvB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;QAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B;;;WAGG;QACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,4FAA4F;QAC5F,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACpD,CAAC;CACH;AAQD,uFAAuF;AACvF,wBAAgB,6BAA6B,IAAI,yBAAyB,CAOzE;AAUD,eAAO,MAAM,6BAA6B,wCAAwC,CAAC;AACnF,eAAO,MAAM,kCAAkC,sCAAsC,CAAC;AAiBtF,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,uBAAuB,GAAG,oBAAoB,GAAG,IAAI,CAe9F;AAoCD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,oBAAoB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,OAAO,CAM5I;AA6HD,wBAAgB,oCAAoC,IAAI,gBAAgB,CAuCvE"}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
// PRD-02 §6.5 — `prd02.contactShadows` frame contributor (
|
|
2
|
-
// `
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
1
|
+
// PRD-02 §6.5 — `prd02.contactShadows` frame contributor (lane flag
|
|
2
|
+
// `A3D_QR_LIGHTING`, feature sub-flag `A3D_QR_LIGHTING_CONTACT`). Runs
|
|
3
|
+
// ContactShadowPass when the scene opted in (`effects.contactShadows` →
|
|
4
|
+
// `source.shadow.prd02Contact`), when the tier allows it (C-27 `shadow.contact`,
|
|
5
|
+
// Ultra only in the frozen table — Q-11-3 asks for Medium/High), or when the
|
|
6
|
+
// sub-flag forces it. Opt-in works at any tier except Low. Records
|
|
7
|
+
// `contactShadows.passExecuted` for C-31 diagnostics.
|
|
8
|
+
//
|
|
9
|
+
// Two modes, never both in one frame:
|
|
10
|
+
// - feeds shading (explicit opt-in or sub-flag): phase `shadows`, before the forward pass, renders its own half
|
|
11
|
+
// resolution depth, and publishes the mask to the forward store. Needs a shadow-casting directional light,
|
|
12
|
+
// because the mask is marched along that sun and only the sun's visibility term samples it; without one the
|
|
13
|
+
// pass does not run and a diagnostic says why.
|
|
14
|
+
// - tier default (Ultra, no opt-in): phase `after-opaque` exactly as before WP-4 (scene depth, no extra depth
|
|
15
|
+
// pass, nothing published), so that path costs and renders what it always did.
|
|
9
16
|
import { BaseRenderPass } from "../RenderPass.js";
|
|
10
17
|
import { ContactShadowPass, CONTACT_MASK_BLACKBOARD_KEY } from "./ContactShadowPass.js";
|
|
18
|
+
import { contactShadowMask, contactShadowMaskDrawCounters, setContactShadowMask } from "../forward/contactShadowMaskStore.js";
|
|
19
|
+
import { MaterialInstance } from "../MaterialInstance.js";
|
|
11
20
|
import { collectShadowSystemLights } from "../shadows/Prd02ShadowsContributor.js";
|
|
12
21
|
import { resolvePrd02ShadowCasterVariant, prd02DepthFeatures, registerPrd02DepthShader, prd02ShadowCasterEligible } from "../shadows/Prd02DepthShaderLibrary.js";
|
|
13
22
|
import { createLeanCoreShaderLibrary } from "../ShaderLibraryCore.js";
|
|
@@ -17,10 +26,27 @@ export const CONTACT_SHADOWS_SUB_FLAG = SUB_FLAG_CONTACT;
|
|
|
17
26
|
let latestContactDiagnostics = {
|
|
18
27
|
contactShadows: { passExecuted: false, depthSource: "none" }
|
|
19
28
|
};
|
|
29
|
+
let latestContactDevice;
|
|
20
30
|
/** Latest C-31 contact-shadow diagnostics (engine lane reads via rendering barrel). */
|
|
21
31
|
export function prd02ContactShadowDiagnostics() {
|
|
22
|
-
|
|
32
|
+
const probe = latestContactDiagnostics.contactShadows.probe;
|
|
33
|
+
if (!probe || !latestContactDevice)
|
|
34
|
+
return latestContactDiagnostics;
|
|
35
|
+
// Probing runs only: add the forward pass's draw counters, read live so they cover the whole last frame.
|
|
36
|
+
return {
|
|
37
|
+
contactShadows: { ...latestContactDiagnostics.contactShadows, probe: { ...probe, drawCounters: { ...contactShadowMaskDrawCounters(latestContactDevice) } } }
|
|
38
|
+
};
|
|
23
39
|
}
|
|
40
|
+
const warnedOnce = new Set();
|
|
41
|
+
/** One console warning per distinct message per page: a scene that asks for a mask nothing can show should hear about it once. */
|
|
42
|
+
function warnOnce(message) {
|
|
43
|
+
if (warnedOnce.has(message))
|
|
44
|
+
return;
|
|
45
|
+
warnedOnce.add(message);
|
|
46
|
+
console.warn(`[prd02.contactShadows] ${message}`);
|
|
47
|
+
}
|
|
48
|
+
export const CONTACT_SHADOWS_NO_SUN_REASON = "no-shadow-casting-directional-light";
|
|
49
|
+
export const CONTACT_SHADOWS_NO_CONSUMER_REASON = "no-drawn-program-samples-the-mask";
|
|
24
50
|
/** `ctx.tier` is a settings object — recover its tier name (the ctx carries
|
|
25
51
|
* the shared QUALITY_TIERS constants; fall back to shadow-shape matching). */
|
|
26
52
|
function tierNameOf(ctx) {
|
|
@@ -77,41 +103,145 @@ function depthLibraryFor(device) {
|
|
|
77
103
|
}
|
|
78
104
|
return lib;
|
|
79
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Depth for the mask is rendered by the pass itself (half resolution, camera space) because the
|
|
108
|
+
* mask must exist BEFORE the forward pass samples it; the C-01 scene-depth copy only exists
|
|
109
|
+
* after the opaque pass. Every opaque item writes depth, including receivers authored with
|
|
110
|
+
* `castShadow: false` (floors): the march needs the receiver surface, not just the casters.
|
|
111
|
+
*/
|
|
112
|
+
function contactDepthEligible(item) {
|
|
113
|
+
if (item.castShadow !== false)
|
|
114
|
+
return prd02ShadowCasterEligible(item);
|
|
115
|
+
const material = item.material;
|
|
116
|
+
const base = material instanceof MaterialInstance ? material.baseMaterial : material;
|
|
117
|
+
return base?.renderState.blend !== true;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Orthographic cameras do not always say so: the frame camera's `projection` defaults to "perspective" when the scene
|
|
121
|
+
* camera has no such field (OrthographicCamera has none), which on the first GPU orthographic run left the mask at all
|
|
122
|
+
* ones. The combined view-projection settles it: an orthographic matrix leaves clip w at exactly 1 (fourth row 0,0,0,1;
|
|
123
|
+
* column-major elements 3, 7, 11, 15), a perspective one does not.
|
|
124
|
+
*/
|
|
125
|
+
export function isOrthographicFrameCamera(camera) {
|
|
126
|
+
if (camera.projection === "orthographic")
|
|
127
|
+
return true;
|
|
128
|
+
const m = camera.viewProjectionMatrix;
|
|
129
|
+
if (m.length < 16)
|
|
130
|
+
return false;
|
|
131
|
+
const eps = 1e-6;
|
|
132
|
+
return Math.abs(m[3]) < eps && Math.abs(m[7]) < eps && Math.abs(m[11]) < eps && Math.abs(m[15] - 1) < eps;
|
|
133
|
+
}
|
|
134
|
+
// One pass per device: the mask and depth targets are allocated lazily by the pass, so a pass per
|
|
135
|
+
// frame would leak two render targets every frame.
|
|
136
|
+
const contactPasses = new WeakMap();
|
|
80
137
|
class Prd02ContactShadowsRenderPass extends BaseRenderPass {
|
|
81
138
|
ctx;
|
|
139
|
+
request;
|
|
140
|
+
mode;
|
|
82
141
|
pass;
|
|
83
|
-
|
|
142
|
+
sunTowardLight;
|
|
143
|
+
casterCount;
|
|
144
|
+
constructor(ctx, request, mode, sunDirection) {
|
|
84
145
|
super("prd02.contactShadows", [], []);
|
|
85
146
|
this.ctx = ctx;
|
|
86
|
-
|
|
87
|
-
this.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
147
|
+
this.request = request;
|
|
148
|
+
this.mode = mode;
|
|
149
|
+
const shading = mode === "shading";
|
|
150
|
+
// `CollectedLight.direction` is the direction the light travels; the march wants the direction
|
|
151
|
+
// TOWARD the light (the forward shaders use `lightDirection = -direction` the same way).
|
|
152
|
+
const input = {
|
|
153
|
+
sunDirection: sunDirection ? [-sunDirection[0], -sunDirection[1], -sunDirection[2]] : [0, 1, 0],
|
|
154
|
+
camera: ctx.camera
|
|
155
|
+
? {
|
|
156
|
+
viewMatrix: ctx.camera.viewMatrix,
|
|
157
|
+
projectionMatrix: ctx.camera.projectionMatrix,
|
|
158
|
+
// The frame camera's separate view/projection can be identity (the production renderer resolves
|
|
159
|
+
// cameras that expose only a combined matrix), so the march works from the combined one.
|
|
160
|
+
viewProjectionMatrix: ctx.camera.viewProjectionMatrix,
|
|
161
|
+
near: ctx.camera.near,
|
|
162
|
+
far: ctx.camera.far,
|
|
163
|
+
orthographic: isOrthographicFrameCamera(ctx.camera)
|
|
164
|
+
}
|
|
165
|
+
: {
|
|
166
|
+
viewMatrix: new Float32Array(16).fill(0),
|
|
167
|
+
projectionMatrix: new Float32Array(16).fill(0),
|
|
168
|
+
near: 0.1,
|
|
169
|
+
far: 100
|
|
170
|
+
},
|
|
171
|
+
// Shading mode: forward has not run yet in the `shadows` phase, so the pass renders its own depth.
|
|
172
|
+
// Tier-default mode: the C-01 scene depth copy exists after the opaque pass, as before WP-4.
|
|
173
|
+
...(shading ? {} : { sceneDepth: ctx.sceneDepth }),
|
|
174
|
+
casters: shading ? ctx.items.filter(contactDepthEligible) : ctx.items.filter(prd02ShadowCasterEligible),
|
|
97
175
|
depthPassOptions: {
|
|
98
176
|
shaderLibrary: depthLibraryFor(ctx.device),
|
|
99
177
|
variantResolver: (item) => resolvePrd02ShadowCasterVariant(item, ctx.flags, ctx.tier, prd02DepthFeatures()),
|
|
100
178
|
depthVariantFeatures: prd02DepthFeatures()
|
|
101
179
|
},
|
|
102
180
|
options: request
|
|
103
|
-
}
|
|
181
|
+
};
|
|
182
|
+
let pass = contactPasses.get(ctx.device);
|
|
183
|
+
if (pass)
|
|
184
|
+
pass.configure(input);
|
|
185
|
+
else {
|
|
186
|
+
pass = new ContactShadowPass(input);
|
|
187
|
+
contactPasses.set(ctx.device, pass);
|
|
188
|
+
}
|
|
189
|
+
this.pass = pass;
|
|
190
|
+
this.sunTowardLight = input.sunDirection;
|
|
191
|
+
this.casterCount = input.casters.length;
|
|
104
192
|
}
|
|
105
193
|
execute(context) {
|
|
106
194
|
this.pass.execute(context);
|
|
107
|
-
|
|
195
|
+
const mask = this.pass.maskTexture();
|
|
196
|
+
this.ctx.blackboard.set(CONTACT_MASK_BLACKBOARD_KEY, mask);
|
|
197
|
+
latestContactDevice = this.ctx.device;
|
|
198
|
+
let unavailable;
|
|
199
|
+
if (this.mode === "shading") {
|
|
200
|
+
// The forward counters still hold the PREVIOUS frame's draws here (they reset on publish): a mask that
|
|
201
|
+
// was published but that no drawn program sampled means the effect is silently doing nothing.
|
|
202
|
+
const last = contactShadowMaskDrawCounters(this.ctx.device);
|
|
203
|
+
if (contactShadowMask(this.ctx.device) !== undefined && last.calls > 0 && last.maskedDraws === 0) {
|
|
204
|
+
unavailable = CONTACT_SHADOWS_NO_CONSUMER_REASON;
|
|
205
|
+
warnOnce("effects.contactShadows() has no visible effect: no drawn program samples the mask. The mask darkens the shadow-casting sun's light on materials that receive shadows; textured-PBR materials with glTF extension textures (clearcoat, transmission and similar) do not sample it.");
|
|
206
|
+
}
|
|
207
|
+
// Publish only a mask that was actually marched against real depth; the empty fallback mask
|
|
208
|
+
// (all ones) is harmless but binding it would cost a texture fetch per fragment for nothing.
|
|
209
|
+
const intensity = this.request.intensity ?? 1;
|
|
210
|
+
const position = this.ctx.camera?.position ?? [0, 0, 0];
|
|
211
|
+
setContactShadowMask(this.ctx.device, mask && this.pass.passExecuted() && intensity > 0
|
|
212
|
+
? { texture: mask, width: context.width, height: context.height, strength: intensity, cameraPosition: [position[0], position[1], position[2]] }
|
|
213
|
+
: undefined);
|
|
214
|
+
}
|
|
215
|
+
const probing = globalThis.__A3D_CONTACT_PROBE__ === true;
|
|
108
216
|
latestContactDiagnostics = {
|
|
109
217
|
contactShadows: {
|
|
110
218
|
passExecuted: this.pass.passExecuted(),
|
|
111
|
-
depthSource: this.pass.depthSource()
|
|
219
|
+
depthSource: this.pass.depthSource(),
|
|
220
|
+
...(unavailable ? { unavailable } : {}),
|
|
221
|
+
...(probing ? { probe: this.collectProbe(context) } : {})
|
|
112
222
|
}
|
|
113
223
|
};
|
|
114
224
|
}
|
|
225
|
+
collectProbe(context) {
|
|
226
|
+
const camera = this.ctx.camera;
|
|
227
|
+
return {
|
|
228
|
+
...this.pass.probe(context.device),
|
|
229
|
+
publishedToShading: this.mode === "shading",
|
|
230
|
+
request: this.request,
|
|
231
|
+
sunTowardLight: this.sunTowardLight,
|
|
232
|
+
frameSize: [context.width, context.height],
|
|
233
|
+
camera: camera
|
|
234
|
+
? { view: Array.from(camera.viewMatrix), projection: Array.from(camera.projectionMatrix), viewProjection: Array.from(camera.viewProjectionMatrix), near: camera.near, far: camera.far }
|
|
235
|
+
: null,
|
|
236
|
+
casterCount: this.casterCount
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/** Records that the scene asked for the mask but this frame cannot produce one, and says so once. */
|
|
241
|
+
function recordUnavailable(ctx, reason, detail) {
|
|
242
|
+
latestContactDevice = ctx.device;
|
|
243
|
+
latestContactDiagnostics = { contactShadows: { passExecuted: false, depthSource: "none", unavailable: reason } };
|
|
244
|
+
warnOnce(detail);
|
|
115
245
|
}
|
|
116
246
|
export function createPrd02ContactShadowsContributor() {
|
|
117
247
|
prd02DepthFeatures();
|
|
@@ -119,14 +249,35 @@ export function createPrd02ContactShadowsContributor() {
|
|
|
119
249
|
id: "prd02.contactShadows",
|
|
120
250
|
owner: "prd02",
|
|
121
251
|
flag: "A3D_QR_LIGHTING",
|
|
122
|
-
|
|
252
|
+
// Feeding shading runs in `shadows`, before the forward pass is queued, so the mask exists when forward
|
|
253
|
+
// shading samples it (u_contactShadowMask). The tier-default path keeps its pre-WP-4 `after-opaque` slot.
|
|
254
|
+
phases: ["shadows", "after-opaque"],
|
|
123
255
|
passes: (phase, ctx) => {
|
|
256
|
+
const request = contactShadowRequest(ctx);
|
|
257
|
+
const feedsShading = contactShadowOptIn(ctx) !== null || ctx.flags.on(CONTACT_SHADOWS_SUB_FLAG);
|
|
258
|
+
if (phase === "shadows") {
|
|
259
|
+
// A frame that does not build a mask clears the previous one; the shading branch publishes in execute()
|
|
260
|
+
// and leaves the previous frame's mask and draw counters in place until then, so it can check them.
|
|
261
|
+
if (!request || !ctx.camera || !feedsShading) {
|
|
262
|
+
setContactShadowMask(ctx.device, undefined);
|
|
263
|
+
return [];
|
|
264
|
+
}
|
|
265
|
+
// The mask is marched along the shadow-casting sun and only that light's visibility samples it. With no
|
|
266
|
+
// such light there is no direction to march and no consumer, so do not guess one.
|
|
267
|
+
const { sunDirection } = collectShadowSystemLights(ctx);
|
|
268
|
+
if (!sunDirection) {
|
|
269
|
+
setContactShadowMask(ctx.device, undefined);
|
|
270
|
+
recordUnavailable(ctx, CONTACT_SHADOWS_NO_SUN_REASON, "effects.contactShadows() has no visible effect: the scene has no shadow-casting directional light. The mask darkens the sun's light only; add a directional light with shadow: true.");
|
|
271
|
+
return [];
|
|
272
|
+
}
|
|
273
|
+
return [new Prd02ContactShadowsRenderPass(ctx, request, "shading", sunDirection)];
|
|
274
|
+
}
|
|
124
275
|
if (phase !== "after-opaque")
|
|
125
276
|
return [];
|
|
126
|
-
|
|
127
|
-
if (!request || !ctx.camera)
|
|
277
|
+
if (!request || !ctx.camera || feedsShading)
|
|
128
278
|
return [];
|
|
129
|
-
|
|
279
|
+
const { sunDirection } = collectShadowSystemLights(ctx);
|
|
280
|
+
return [new Prd02ContactShadowsRenderPass(ctx, request, "tier-default", sunDirection)];
|
|
130
281
|
}
|
|
131
282
|
};
|
|
132
283
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prd02ContactShadowsContributor.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/Prd02ContactShadowsContributor.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,gEAAgE;AAChE,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,kEAAkE;AAElE,OAAO,EAAE,cAAc,EAA0B,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAA6B,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC9J,OAAO,EAAE,2BAA2B,EAAsB,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3F,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAMzD,IAAI,wBAAwB,GAA8B;IACxD,cAAc,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE;CAC7D,CAAC;AAEF,uFAAuF;AACvF,MAAM,UAAU,6BAA6B;IAC3C,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED;+EAC+E;AAC/E,SAAS,UAAU,CAAC,GAA4B;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAyC,EAAE,CAAC;QACrG,IAAI,QAAQ,KAAK,GAAG,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAyC,EAAE,CAAC;QACrG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM;YACnC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;gBACnD,QAAQ,CAAC,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;gBACrD,QAAQ,CAAC,MAAM,CAAC,iBAAiB,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,GAA4B;IAC/D,wEAAwE;IACxE,8DAA8D;IAC9D,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC5G,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,IAAI,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,2EAA2E;QAC3E,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;8EAC8E;AAC9E,SAAS,kBAAkB,CAAC,GAA4B;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IACjC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,GAAG,GAAI,MAA2D,CAAC,YAAY,CAAC;IACtF,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,MAAM,qBAAqB,GAAG,IAAI,OAAO,EAAyB,CAAC;AACnE,SAAS,eAAe,CAAC,MAAc;IACrC,IAAI,GAAG,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,2BAA2B,EAAE,CAAC;QACpC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC9B,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,6BAA8B,SAAQ,cAAc;IAG3B;IAFZ,IAAI,CAAoB;IAEzC,YAA6B,GAA4B,EAAE,OAA6B;QACtF,KAAK,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QADX,QAAG,GAAH,GAAG,CAAyB;QAEvD,MAAM,EAAE,YAAY,EAAE,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAAC;YAChC,YAAY,EAAE,YAAY,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI;gBACpB,UAAU,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxC,gBAAgB,EAAE,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9C,IAAI,EAAE,GAAG;gBACT,GAAG,EAAE,GAAG;aACT;YACD,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC;YACpD,gBAAgB,EAAE;gBAChB,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC1C,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CACxB,+BAA+B,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBAClF,oBAAoB,EAAE,kBAAkB,EAAE;aAC3C;YACD,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,OAA0B;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9E,wBAAwB,GAAG;YACzB,cAAc,EAAE;gBACd,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;aACrC;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,oCAAoC;IAClD,kBAAkB,EAAE,CAAC;IACrB,OAAO;QACL,EAAE,EAAE,sBAAsB;QAC1B,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACrB,IAAI,KAAK,KAAK,cAAc;gBAAE,OAAO,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,6BAA6B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"Prd02ContactShadowsContributor.js","sourceRoot":"","sources":["../../../../../packages/rendering/src/passes/Prd02ContactShadowsContributor.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
* passes, warmup) key identically.
|
|
9
9
|
*/
|
|
10
10
|
import type { ProgramFeatures, TextureSlotFeature } from "../contracts/program.js";
|
|
11
|
+
/**
|
|
12
|
+
* Feature bit (in `ProgramFeatures.features`): this forward program writes straight to the canvas (the direct render
|
|
13
|
+
* path: no post chain, no OutputPass), so it must encode its own output. Set by `ForwardPass` and the warm-up exactly
|
|
14
|
+
* when the frame's output colour space is `srgb`; absent on every HDR/post-chain program, which stay byte-identical.
|
|
15
|
+
*/
|
|
16
|
+
export declare const PROGRAM_OUTPUT_SRGB_FEATURE = "a3d.output.srgb";
|
|
11
17
|
export declare const DEFAULT_SHADOW_RECEIVE: ProgramFeatures["shadows"];
|
|
12
18
|
export declare const DEFAULT_LIGHTS: ProgramFeatures["lights"];
|
|
13
19
|
export declare const DEFAULT_PROGRAM_FEATURES: ProgramFeatures;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgramFeatures.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/program/ProgramFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,eAAO,MAAM,sBAAsB,EAAE,eAAe,CAAC,SAAS,CAK7D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CAOpD,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAkBtC,CAAC;AAUF,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,eAAe,CA2BxG;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAM,CAEzE;AAED,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAMzE,CAAC;AAEF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAEpE"}
|
|
1
|
+
{"version":3,"file":"ProgramFeatures.d.ts","sourceRoot":"","sources":["../../../../../packages/rendering/src/program/ProgramFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEhF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,oBAAoB,CAAC;AAE7D,eAAO,MAAM,sBAAsB,EAAE,eAAe,CAAC,SAAS,CAK7D,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CAOpD,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAkBtC,CAAC;AAUF,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAG,eAAe,CA2BxG;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,MAAM,CAEzE;AAED,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAMzE,CAAC;AAEF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAEpE"}
|