@adobe/data-gpu 0.9.69
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/CLAUDE.md +98 -0
- package/LICENSE +21 -0
- package/dist/core/core-plugin.d.ts +44 -0
- package/dist/core/core-plugin.js +90 -0
- package/dist/core/core-plugin.js.map +1 -0
- package/dist/core/frame-time/frame-time-plugin.d.ts +25 -0
- package/dist/core/frame-time/frame-time-plugin.js +41 -0
- package/dist/core/frame-time/frame-time-plugin.js.map +1 -0
- package/dist/core/frame-time/frame-time.d.ts +18 -0
- package/dist/core/frame-time/frame-time.js +3 -0
- package/dist/core/frame-time/frame-time.js.map +1 -0
- package/dist/core/frame-time/public.d.ts +1 -0
- package/dist/core/frame-time/public.js +3 -0
- package/dist/core/frame-time/public.js.map +1 -0
- package/dist/graphics/animation/animation-data-plugin.d.ts +216 -0
- package/dist/graphics/animation/animation-data-plugin.js +110 -0
- package/dist/graphics/animation/animation-data-plugin.js.map +1 -0
- package/dist/graphics/animation/animation-plugin.d.ts +214 -0
- package/dist/graphics/animation/animation-plugin.js +26 -0
- package/dist/graphics/animation/animation-plugin.js.map +1 -0
- package/dist/graphics/animation/animation-plugin.test.d.ts +1 -0
- package/dist/graphics/animation/animation-plugin.test.js +142 -0
- package/dist/graphics/animation/animation-plugin.test.js.map +1 -0
- package/dist/graphics/animation/animation-track/animation-track.d.ts +13 -0
- package/dist/graphics/animation/animation-track/animation-track.js +3 -0
- package/dist/graphics/animation/animation-track/animation-track.js.map +1 -0
- package/dist/graphics/animation/animation-track/componentwise-lerp.d.ts +7 -0
- package/dist/graphics/animation/animation-track/componentwise-lerp.js +22 -0
- package/dist/graphics/animation/animation-track/componentwise-lerp.js.map +1 -0
- package/dist/graphics/animation/animation-track/interpolate.d.ts +8 -0
- package/dist/graphics/animation/animation-track/interpolate.js +18 -0
- package/dist/graphics/animation/animation-track/interpolate.js.map +1 -0
- package/dist/graphics/animation/animation-track/public.d.ts +1 -0
- package/dist/graphics/animation/animation-track/public.js +3 -0
- package/dist/graphics/animation/animation-track/public.js.map +1 -0
- package/dist/graphics/animation/animation-track/sample.d.ts +7 -0
- package/dist/graphics/animation/animation-track/sample.js +44 -0
- package/dist/graphics/animation/animation-track/sample.js.map +1 -0
- package/dist/graphics/animation/interpolation-mode/interpolation-mode.d.ts +4 -0
- package/dist/graphics/animation/interpolation-mode/interpolation-mode.js +3 -0
- package/dist/graphics/animation/interpolation-mode/interpolation-mode.js.map +1 -0
- package/dist/graphics/animation/interpolation-mode/public.d.ts +1 -0
- package/dist/graphics/animation/interpolation-mode/public.js +3 -0
- package/dist/graphics/animation/interpolation-mode/public.js.map +1 -0
- package/dist/graphics/animation/interpolation-mode/schema.d.ts +4 -0
- package/dist/graphics/animation/interpolation-mode/schema.js +3 -0
- package/dist/graphics/animation/interpolation-mode/schema.js.map +1 -0
- package/dist/graphics/camera/camera-plugin.d.ts +112 -0
- package/dist/graphics/camera/camera-plugin.js +36 -0
- package/dist/graphics/camera/camera-plugin.js.map +1 -0
- package/dist/graphics/camera/camera.d.ts +4 -0
- package/dist/graphics/camera/camera.js +3 -0
- package/dist/graphics/camera/camera.js.map +1 -0
- package/dist/graphics/camera/orbit/attach-orbit-drag.d.ts +31 -0
- package/dist/graphics/camera/orbit/attach-orbit-drag.js +44 -0
- package/dist/graphics/camera/orbit/attach-orbit-drag.js.map +1 -0
- package/dist/graphics/camera/orbit/orbit-data-plugin.d.ts +290 -0
- package/dist/graphics/camera/orbit/orbit-data-plugin.js +42 -0
- package/dist/graphics/camera/orbit/orbit-data-plugin.js.map +1 -0
- package/dist/graphics/camera/orbit/orbit-plugin.d.ts +281 -0
- package/dist/graphics/camera/orbit/orbit-plugin.js +12 -0
- package/dist/graphics/camera/orbit/orbit-plugin.js.map +1 -0
- package/dist/graphics/camera/orbit/orbit-system-plugin.d.ts +292 -0
- package/dist/graphics/camera/orbit/orbit-system-plugin.js +71 -0
- package/dist/graphics/camera/orbit/orbit-system-plugin.js.map +1 -0
- package/dist/graphics/camera/orbit/orbit.d.ts +32 -0
- package/dist/graphics/camera/orbit/orbit.js +3 -0
- package/dist/graphics/camera/orbit/orbit.js.map +1 -0
- package/dist/graphics/camera/orbit/public.d.ts +5 -0
- package/dist/graphics/camera/orbit/public.js +6 -0
- package/dist/graphics/camera/orbit/public.js.map +1 -0
- package/dist/graphics/camera/public.d.ts +4 -0
- package/dist/graphics/camera/public.js +6 -0
- package/dist/graphics/camera/public.js.map +1 -0
- package/dist/graphics/camera/schema.d.ts +65 -0
- package/dist/graphics/camera/schema.js +19 -0
- package/dist/graphics/camera/schema.js.map +1 -0
- package/dist/graphics/camera/screen-to-world-ray.d.ts +10 -0
- package/dist/graphics/camera/screen-to-world-ray.js +31 -0
- package/dist/graphics/camera/screen-to-world-ray.js.map +1 -0
- package/dist/graphics/camera/to-view-projection.d.ts +3 -0
- package/dist/graphics/camera/to-view-projection.js +23 -0
- package/dist/graphics/camera/to-view-projection.js.map +1 -0
- package/dist/graphics/graphics-plugin.d.ts +121 -0
- package/dist/graphics/graphics-plugin.js +106 -0
- package/dist/graphics/graphics-plugin.js.map +1 -0
- package/dist/graphics/picking/pick-hit.d.ts +10 -0
- package/dist/graphics/picking/pick-hit.js +3 -0
- package/dist/graphics/picking/pick-hit.js.map +1 -0
- package/dist/graphics/picking/picking-plugin.d.ts +3819 -0
- package/dist/graphics/picking/picking-plugin.js +88 -0
- package/dist/graphics/picking/picking-plugin.js.map +1 -0
- package/dist/graphics/rendering/bone-collider-plugin.d.ts +1619 -0
- package/dist/graphics/rendering/bone-collider-plugin.js +207 -0
- package/dist/graphics/rendering/bone-collider-plugin.js.map +1 -0
- package/dist/graphics/rendering/display-transform-plugin.d.ts +52 -0
- package/dist/graphics/rendering/display-transform-plugin.js +25 -0
- package/dist/graphics/rendering/display-transform-plugin.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/brdf.wgsl.d.ts +2 -0
- package/dist/graphics/rendering/ibl-render/brdf.wgsl.js +42 -0
- package/dist/graphics/rendering/ibl-render/brdf.wgsl.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/brdf-lut.d.ts +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/brdf-lut.js +91 -0
- package/dist/graphics/rendering/ibl-render/ibl/brdf-lut.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/build-ibl-resources.d.ts +24 -0
- package/dist/graphics/rendering/ibl-render/ibl/build-ibl-resources.js +34 -0
- package/dist/graphics/rendering/ibl-render/ibl/build-ibl-resources.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/create-cubemap.d.ts +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/create-cubemap.js +12 -0
- package/dist/graphics/rendering/ibl-render/ibl/create-cubemap.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/cube-face-view.d.ts +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/cube-face-view.js +11 -0
- package/dist/graphics/rendering/ibl-render/ibl/cube-face-view.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/cubemap-sample-view.d.ts +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/cubemap-sample-view.js +9 -0
- package/dist/graphics/rendering/ibl-render/ibl/cubemap-sample-view.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/environment.d.ts +8 -0
- package/dist/graphics/rendering/ibl-render/ibl/environment.js +170 -0
- package/dist/graphics/rendering/ibl-render/ibl/environment.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/float-to-half.d.ts +2 -0
- package/dist/graphics/rendering/ibl-render/ibl/float-to-half.js +32 -0
- package/dist/graphics/rendering/ibl-render/ibl/float-to-half.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.d.ts +2 -0
- package/dist/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.js +59 -0
- package/dist/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/irradiance.d.ts +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/irradiance.js +94 -0
- package/dist/graphics/rendering/ibl-render/ibl/irradiance.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/parse-hdr.d.ts +6 -0
- package/dist/graphics/rendering/ibl-render/ibl/parse-hdr.js +106 -0
- package/dist/graphics/rendering/ibl-render/ibl/parse-hdr.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/prefilter.d.ts +5 -0
- package/dist/graphics/rendering/ibl-render/ibl/prefilter.js +103 -0
- package/dist/graphics/rendering/ibl-render/ibl/prefilter.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl/render-helpers.d.ts +4 -0
- package/dist/graphics/rendering/ibl-render/ibl/render-helpers.js +16 -0
- package/dist/graphics/rendering/ibl-render/ibl/render-helpers.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl-render-plugin.d.ts +1028 -0
- package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js +409 -0
- package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/ibl-shader.wgsl.d.ts +8 -0
- package/dist/graphics/rendering/ibl-render/ibl-shader.wgsl.js +173 -0
- package/dist/graphics/rendering/ibl-render/ibl-shader.wgsl.js.map +1 -0
- package/dist/graphics/rendering/ibl-render/skybox-shader.wgsl.d.ts +2 -0
- package/dist/graphics/rendering/ibl-render/skybox-shader.wgsl.js +50 -0
- package/dist/graphics/rendering/ibl-render/skybox-shader.wgsl.js.map +1 -0
- package/dist/graphics/rendering/interpolation-plugin.d.ts +485 -0
- package/dist/graphics/rendering/interpolation-plugin.js +98 -0
- package/dist/graphics/rendering/interpolation-plugin.js.map +1 -0
- package/dist/graphics/rendering/interpolation.test.d.ts +1 -0
- package/dist/graphics/rendering/interpolation.test.js +38 -0
- package/dist/graphics/rendering/interpolation.test.js.map +1 -0
- package/dist/graphics/rendering/jolt-ragdoll-plugin.d.ts +1628 -0
- package/dist/graphics/rendering/jolt-ragdoll-plugin.js +218 -0
- package/dist/graphics/rendering/jolt-ragdoll-plugin.js.map +1 -0
- package/dist/graphics/rendering/material-gpu/material-arrays.d.ts +47 -0
- package/dist/graphics/rendering/material-gpu/material-arrays.js +83 -0
- package/dist/graphics/rendering/material-gpu/material-arrays.js.map +1 -0
- package/dist/graphics/rendering/material-gpu/material-bind-group.d.ts +9 -0
- package/dist/graphics/rendering/material-gpu/material-bind-group.js +52 -0
- package/dist/graphics/rendering/material-gpu/material-bind-group.js.map +1 -0
- package/dist/graphics/rendering/material-gpu/material-gpu-plugin.d.ts +259 -0
- package/dist/graphics/rendering/material-gpu/material-gpu-plugin.js +90 -0
- package/dist/graphics/rendering/material-gpu/material-gpu-plugin.js.map +1 -0
- package/dist/graphics/rendering/model-collider-plugin.d.ts +1232 -0
- package/dist/graphics/rendering/model-collider-plugin.js +81 -0
- package/dist/graphics/rendering/model-collider-plugin.js.map +1 -0
- package/dist/graphics/rendering/pbr-core-plugin.d.ts +75 -0
- package/dist/graphics/rendering/pbr-core-plugin.js +39 -0
- package/dist/graphics/rendering/pbr-core-plugin.js.map +1 -0
- package/dist/graphics/rendering/pbr-render/pbr-array-shader.wgsl.d.ts +10 -0
- package/dist/graphics/rendering/pbr-render/pbr-array-shader.wgsl.js +145 -0
- package/dist/graphics/rendering/pbr-render/pbr-array-shader.wgsl.js.map +1 -0
- package/dist/graphics/rendering/pbr-render/pbr-render-plugin.d.ts +1266 -0
- package/dist/graphics/rendering/pbr-render/pbr-render-plugin.js +254 -0
- package/dist/graphics/rendering/pbr-render/pbr-render-plugin.js.map +1 -0
- package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.d.ts +1004 -0
- package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js +116 -0
- package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js.map +1 -0
- package/dist/graphics/rendering/ragdoll-trigger-plugin.d.ts +31 -0
- package/dist/graphics/rendering/ragdoll-trigger-plugin.js +20 -0
- package/dist/graphics/rendering/ragdoll-trigger-plugin.js.map +1 -0
- package/dist/graphics/rendering/rendering-plugin.d.ts +1 -0
- package/dist/graphics/rendering/rendering-plugin.js +3 -0
- package/dist/graphics/rendering/rendering-plugin.js.map +1 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/layout.d.ts +2 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/layout.js +18 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/layout.js.map +1 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/public.d.ts +1 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/public.js +3 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/public.js.map +1 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/skinning-attributes.d.ts +1 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/skinning-attributes.js +3 -0
- package/dist/graphics/rendering/skinning/skinning-attributes/skinning-attributes.js.map +1 -0
- package/dist/graphics/rendering/skinning/skinning-plugin.d.ts +1212 -0
- package/dist/graphics/rendering/skinning/skinning-plugin.js +207 -0
- package/dist/graphics/rendering/skinning/skinning-plugin.js.map +1 -0
- package/dist/graphics/rendering/standard-vertex/layout.d.ts +2 -0
- package/dist/graphics/rendering/standard-vertex/layout.js +16 -0
- package/dist/graphics/rendering/standard-vertex/layout.js.map +1 -0
- package/dist/graphics/rendering/standard-vertex/public.d.ts +2 -0
- package/dist/graphics/rendering/standard-vertex/public.js +4 -0
- package/dist/graphics/rendering/standard-vertex/public.js.map +1 -0
- package/dist/graphics/rendering/standard-vertex/schema.d.ts +52 -0
- package/dist/graphics/rendering/standard-vertex/schema.js +15 -0
- package/dist/graphics/rendering/standard-vertex/schema.js.map +1 -0
- package/dist/graphics/rendering/standard-vertex/standard-vertex.d.ts +4 -0
- package/dist/graphics/rendering/standard-vertex/standard-vertex.js +3 -0
- package/dist/graphics/rendering/standard-vertex/standard-vertex.js.map +1 -0
- package/dist/graphics/rendering/visible-material/color-material-options.d.ts +7 -0
- package/dist/graphics/rendering/visible-material/color-material-options.js +3 -0
- package/dist/graphics/rendering/visible-material/color-material-options.js.map +1 -0
- package/dist/graphics/rendering/visible-material/create-bind-group-layout.d.ts +8 -0
- package/dist/graphics/rendering/visible-material/create-bind-group-layout.js +35 -0
- package/dist/graphics/rendering/visible-material/create-bind-group-layout.js.map +1 -0
- package/dist/graphics/rendering/visible-material/create-color-bind-group.d.ts +10 -0
- package/dist/graphics/rendering/visible-material/create-color-bind-group.js +26 -0
- package/dist/graphics/rendering/visible-material/create-color-bind-group.js.map +1 -0
- package/dist/graphics/rendering/visible-material/public.d.ts +4 -0
- package/dist/graphics/rendering/visible-material/public.js +5 -0
- package/dist/graphics/rendering/visible-material/public.js.map +1 -0
- package/dist/graphics/rendering/visible-material/schema.d.ts +49 -0
- package/dist/graphics/rendering/visible-material/schema.js +23 -0
- package/dist/graphics/rendering/visible-material/schema.js.map +1 -0
- package/dist/graphics/rendering/visible-material/visible-material.d.ts +4 -0
- package/dist/graphics/rendering/visible-material/visible-material.js +3 -0
- package/dist/graphics/rendering/visible-material/visible-material.js.map +1 -0
- package/dist/graphics/scene/light/light-plugin.d.ts +30 -0
- package/dist/graphics/scene/light/light-plugin.js +35 -0
- package/dist/graphics/scene/light/light-plugin.js.map +1 -0
- package/dist/graphics/scene/light/light.d.ts +14 -0
- package/dist/graphics/scene/light/light.js +3 -0
- package/dist/graphics/scene/light/light.js.map +1 -0
- package/dist/graphics/scene/light/public.d.ts +1 -0
- package/dist/graphics/scene/light/public.js +2 -0
- package/dist/graphics/scene/light/public.js.map +1 -0
- package/dist/graphics/scene/model/geometry/geometry.d.ts +9 -0
- package/dist/graphics/scene/model/geometry/geometry.js +3 -0
- package/dist/graphics/scene/model/geometry/geometry.js.map +1 -0
- package/dist/graphics/scene/model/geometry/public.d.ts +1 -0
- package/dist/graphics/scene/model/geometry/public.js +3 -0
- package/dist/graphics/scene/model/geometry/public.js.map +1 -0
- package/dist/graphics/scene/model/gltf/accessor-view.d.ts +9 -0
- package/dist/graphics/scene/model/gltf/accessor-view.js +44 -0
- package/dist/graphics/scene/model/gltf/accessor-view.js.map +1 -0
- package/dist/graphics/scene/model/gltf/build-material-bind-group.d.ts +22 -0
- package/dist/graphics/scene/model/gltf/build-material-bind-group.js +75 -0
- package/dist/graphics/scene/model/gltf/build-material-bind-group.js.map +1 -0
- package/dist/graphics/scene/model/gltf/compute-world-matrices.d.ts +7 -0
- package/dist/graphics/scene/model/gltf/compute-world-matrices.js +38 -0
- package/dist/graphics/scene/model/gltf/compute-world-matrices.js.map +1 -0
- package/dist/graphics/scene/model/gltf/create-color-material.d.ts +3 -0
- package/dist/graphics/scene/model/gltf/create-color-material.js +34 -0
- package/dist/graphics/scene/model/gltf/create-color-material.js.map +1 -0
- package/dist/graphics/scene/model/gltf/decode-images.d.ts +12 -0
- package/dist/graphics/scene/model/gltf/decode-images.js +68 -0
- package/dist/graphics/scene/model/gltf/decode-images.js.map +1 -0
- package/dist/graphics/scene/model/gltf/gltf-schema.d.ts +152 -0
- package/dist/graphics/scene/model/gltf/gltf-schema.js +20 -0
- package/dist/graphics/scene/model/gltf/gltf-schema.js.map +1 -0
- package/dist/graphics/scene/model/gltf/load-gltf-model.d.ts +42 -0
- package/dist/graphics/scene/model/gltf/load-gltf-model.js +175 -0
- package/dist/graphics/scene/model/gltf/load-gltf-model.js.map +1 -0
- package/dist/graphics/scene/model/gltf/pack-vertex-buffer.d.ts +21 -0
- package/dist/graphics/scene/model/gltf/pack-vertex-buffer.js +106 -0
- package/dist/graphics/scene/model/gltf/pack-vertex-buffer.js.map +1 -0
- package/dist/graphics/scene/model/gltf/parse-animations.d.ts +18 -0
- package/dist/graphics/scene/model/gltf/parse-animations.js +51 -0
- package/dist/graphics/scene/model/gltf/parse-animations.js.map +1 -0
- package/dist/graphics/scene/model/gltf/parse-glb.d.ts +6 -0
- package/dist/graphics/scene/model/gltf/parse-glb.js +40 -0
- package/dist/graphics/scene/model/gltf/parse-glb.js.map +1 -0
- package/dist/graphics/scene/model/gltf/parse-skin.d.ts +19 -0
- package/dist/graphics/scene/model/gltf/parse-skin.js +43 -0
- package/dist/graphics/scene/model/gltf/parse-skin.js.map +1 -0
- package/dist/graphics/scene/model/model-loader-plugin.d.ts +922 -0
- package/dist/graphics/scene/model/model-loader-plugin.js +120 -0
- package/dist/graphics/scene/model/model-loader-plugin.js.map +1 -0
- package/dist/graphics/scene/model/model-plugin.d.ts +352 -0
- package/dist/graphics/scene/model/model-plugin.js +39 -0
- package/dist/graphics/scene/model/model-plugin.js.map +1 -0
- package/dist/graphics/scene/model/model.d.ts +11 -0
- package/dist/graphics/scene/model/model.js +3 -0
- package/dist/graphics/scene/model/model.js.map +1 -0
- package/dist/graphics/scene/model/public.d.ts +1 -0
- package/dist/graphics/scene/model/public.js +2 -0
- package/dist/graphics/scene/model/public.js.map +1 -0
- package/dist/graphics/scene/model/shape/convex-hull.d.ts +36 -0
- package/dist/graphics/scene/model/shape/convex-hull.js +152 -0
- package/dist/graphics/scene/model/shape/convex-hull.js.map +1 -0
- package/dist/graphics/scene/model/shape/convex-hull.test.d.ts +1 -0
- package/dist/graphics/scene/model/shape/convex-hull.test.js +78 -0
- package/dist/graphics/scene/model/shape/convex-hull.test.js.map +1 -0
- package/dist/graphics/scene/model/shape/shape-geometry-plugin.d.ts +631 -0
- package/dist/graphics/scene/model/shape/shape-geometry-plugin.js +61 -0
- package/dist/graphics/scene/model/shape/shape-geometry-plugin.js.map +1 -0
- package/dist/graphics/scene/model/shape/shape-mesh.d.ts +34 -0
- package/dist/graphics/scene/model/shape/shape-mesh.js +142 -0
- package/dist/graphics/scene/model/shape/shape-mesh.js.map +1 -0
- package/dist/graphics/scene/model/shape/upload-shape-mesh.d.ts +9 -0
- package/dist/graphics/scene/model/shape/upload-shape-mesh.js +12 -0
- package/dist/graphics/scene/model/shape/upload-shape-mesh.js.map +1 -0
- package/dist/graphics/scene/model/world-bounds-plugin.d.ts +909 -0
- package/dist/graphics/scene/model/world-bounds-plugin.js +93 -0
- package/dist/graphics/scene/model/world-bounds-plugin.js.map +1 -0
- package/dist/graphics/scene/node/node-data-plugin.d.ts +113 -0
- package/dist/graphics/scene/node/node-data-plugin.js +27 -0
- package/dist/graphics/scene/node/node-data-plugin.js.map +1 -0
- package/dist/graphics/scene/node/node-plugin.d.ts +102 -0
- package/dist/graphics/scene/node/node-plugin.js +12 -0
- package/dist/graphics/scene/node/node-plugin.js.map +1 -0
- package/dist/graphics/scene/node/node.d.ts +19 -0
- package/dist/graphics/scene/node/node.js +3 -0
- package/dist/graphics/scene/node/node.js.map +1 -0
- package/dist/graphics/scene/node/public.d.ts +1 -0
- package/dist/graphics/scene/node/public.js +2 -0
- package/dist/graphics/scene/node/public.js.map +1 -0
- package/dist/graphics/scene/node/transform-plugin.d.ts +123 -0
- package/dist/graphics/scene/node/transform-plugin.js +65 -0
- package/dist/graphics/scene/node/transform-plugin.js.map +1 -0
- package/dist/graphics/scene/scene-plugin.d.ts +461 -0
- package/dist/graphics/scene/scene-plugin.js +19 -0
- package/dist/graphics/scene/scene-plugin.js.map +1 -0
- package/dist/graphics/scene/scene-uniforms/create-bind-group-layout.d.ts +7 -0
- package/dist/graphics/scene/scene-uniforms/create-bind-group-layout.js +19 -0
- package/dist/graphics/scene/scene-uniforms/create-bind-group-layout.js.map +1 -0
- package/dist/graphics/scene/scene-uniforms/public.d.ts +3 -0
- package/dist/graphics/scene/scene-uniforms/public.js +5 -0
- package/dist/graphics/scene/scene-uniforms/public.js.map +1 -0
- package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.d.ts +137 -0
- package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.js +59 -0
- package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.js.map +1 -0
- package/dist/graphics/scene/scene-uniforms/scene-uniforms.d.ts +11 -0
- package/dist/graphics/scene/scene-uniforms/scene-uniforms.js +3 -0
- package/dist/graphics/scene/scene-uniforms/scene-uniforms.js.map +1 -0
- package/dist/graphics/scene/scene-uniforms/schema.d.ts +56 -0
- package/dist/graphics/scene/scene-uniforms/schema.js +15 -0
- package/dist/graphics/scene/scene-uniforms/schema.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/material/material-plugin.d.ts +221 -0
- package/dist/material/material-plugin.js +60 -0
- package/dist/material/material-plugin.js.map +1 -0
- package/dist/material/material.d.ts +31 -0
- package/dist/material/material.js +3 -0
- package/dist/material/material.js.map +1 -0
- package/dist/material/public.d.ts +2 -0
- package/dist/material/public.js +4 -0
- package/dist/material/public.js.map +1 -0
- package/dist/material/standard-materials.d.ts +3 -0
- package/dist/material/standard-materials.js +35 -0
- package/dist/material/standard-materials.js.map +1 -0
- package/dist/physics/body/body-type/body-type.d.ts +10 -0
- package/dist/physics/body/body-type/body-type.js +3 -0
- package/dist/physics/body/body-type/body-type.js.map +1 -0
- package/dist/physics/body/body-type/is-dynamic.d.ts +3 -0
- package/dist/physics/body/body-type/is-dynamic.js +6 -0
- package/dist/physics/body/body-type/is-dynamic.js.map +1 -0
- package/dist/physics/body/body-type/public.d.ts +2 -0
- package/dist/physics/body/body-type/public.js +4 -0
- package/dist/physics/body/body-type/public.js.map +1 -0
- package/dist/physics/body/body-type/schema.d.ts +4 -0
- package/dist/physics/body/body-type/schema.js +3 -0
- package/dist/physics/body/body-type/schema.js.map +1 -0
- package/dist/physics/body/collider-mesh.d.ts +11 -0
- package/dist/physics/body/collider-mesh.js +3 -0
- package/dist/physics/body/collider-mesh.js.map +1 -0
- package/dist/physics/body/collider-shape/collider-shape.d.ts +15 -0
- package/dist/physics/body/collider-shape/collider-shape.js +3 -0
- package/dist/physics/body/collider-shape/collider-shape.js.map +1 -0
- package/dist/physics/body/collider-shape/list.d.ts +3 -0
- package/dist/physics/body/collider-shape/list.js +5 -0
- package/dist/physics/body/collider-shape/list.js.map +1 -0
- package/dist/physics/body/collider-shape/mass-properties.d.ts +10 -0
- package/dist/physics/body/collider-shape/mass-properties.js +48 -0
- package/dist/physics/body/collider-shape/mass-properties.js.map +1 -0
- package/dist/physics/body/collider-shape/public.d.ts +4 -0
- package/dist/physics/body/collider-shape/public.js +6 -0
- package/dist/physics/body/collider-shape/public.js.map +1 -0
- package/dist/physics/body/collider-shape/schema.d.ts +4 -0
- package/dist/physics/body/collider-shape/schema.js +3 -0
- package/dist/physics/body/collider-shape/schema.js.map +1 -0
- package/dist/physics/body/collider-shape/to-index.d.ts +3 -0
- package/dist/physics/body/collider-shape/to-index.js +6 -0
- package/dist/physics/body/collider-shape/to-index.js.map +1 -0
- package/dist/physics/body/rigid-body.d.ts +23 -0
- package/dist/physics/body/rigid-body.js +3 -0
- package/dist/physics/body/rigid-body.js.map +1 -0
- package/dist/physics/body/static-collider.d.ts +25 -0
- package/dist/physics/body/static-collider.js +3 -0
- package/dist/physics/body/static-collider.js.map +1 -0
- package/dist/physics/joint/joint-plugin.d.ts +88 -0
- package/dist/physics/joint/joint-plugin.js +32 -0
- package/dist/physics/joint/joint-plugin.js.map +1 -0
- package/dist/physics/joint/joint-type/joint-type.d.ts +15 -0
- package/dist/physics/joint/joint-type/joint-type.js +3 -0
- package/dist/physics/joint/joint-type/joint-type.js.map +1 -0
- package/dist/physics/joint/joint-type/public.d.ts +1 -0
- package/dist/physics/joint/joint-type/public.js +3 -0
- package/dist/physics/joint/joint-type/public.js.map +1 -0
- package/dist/physics/joint/joint-type/schema.d.ts +4 -0
- package/dist/physics/joint/joint-type/schema.js +3 -0
- package/dist/physics/joint/joint-type/schema.js.map +1 -0
- package/dist/physics/joint/joint.d.ts +24 -0
- package/dist/physics/joint/joint.js +3 -0
- package/dist/physics/joint/joint.js.map +1 -0
- package/dist/physics/physics-clock-plugin.d.ts +86 -0
- package/dist/physics/physics-clock-plugin.js +37 -0
- package/dist/physics/physics-clock-plugin.js.map +1 -0
- package/dist/physics/physics-clock.test.d.ts +1 -0
- package/dist/physics/physics-clock.test.js +45 -0
- package/dist/physics/physics-clock.test.js.map +1 -0
- package/dist/physics/physics-data-plugin.d.ts +348 -0
- package/dist/physics/physics-data-plugin.js +71 -0
- package/dist/physics/physics-data-plugin.js.map +1 -0
- package/dist/physics/ragdoll/fit-bone-capsules.d.ts +39 -0
- package/dist/physics/ragdoll/fit-bone-capsules.js +87 -0
- package/dist/physics/ragdoll/fit-bone-capsules.js.map +1 -0
- package/dist/physics/ragdoll/fit-bone-capsules.test.d.ts +1 -0
- package/dist/physics/ragdoll/fit-bone-capsules.test.js +67 -0
- package/dist/physics/ragdoll/fit-bone-capsules.test.js.map +1 -0
- package/dist/physics/solvers/jolt-solver-plugin.d.ts +465 -0
- package/dist/physics/solvers/jolt-solver-plugin.js +440 -0
- package/dist/physics/solvers/jolt-solver-plugin.js.map +1 -0
- package/dist/physics/solvers/rapier-jolt.benchmark.test.d.ts +1 -0
- package/dist/physics/solvers/rapier-jolt.benchmark.test.js +35 -0
- package/dist/physics/solvers/rapier-jolt.benchmark.test.js.map +1 -0
- package/dist/physics/solvers/rapier-solver-plugin.d.ts +444 -0
- package/dist/physics/solvers/rapier-solver-plugin.js +284 -0
- package/dist/physics/solvers/rapier-solver-plugin.js.map +1 -0
- package/dist/physics/solvers/solver-benchmark.d.ts +45 -0
- package/dist/physics/solvers/solver-benchmark.js +115 -0
- package/dist/physics/solvers/solver-benchmark.js.map +1 -0
- package/package.json +34 -0
- package/src/core/core-plugin.ts +92 -0
- package/src/core/frame-time/frame-time-plugin.ts +44 -0
- package/src/core/frame-time/frame-time.ts +21 -0
- package/src/core/frame-time/public.ts +3 -0
- package/src/graphics/animation/animation-data-plugin.ts +119 -0
- package/src/graphics/animation/animation-plugin.test.ts +161 -0
- package/src/graphics/animation/animation-plugin.ts +26 -0
- package/src/graphics/animation/animation-track/animation-track.ts +17 -0
- package/src/graphics/animation/animation-track/componentwise-lerp.ts +24 -0
- package/src/graphics/animation/animation-track/interpolate.ts +24 -0
- package/src/graphics/animation/animation-track/public.ts +3 -0
- package/src/graphics/animation/animation-track/sample.ts +48 -0
- package/src/graphics/animation/interpolation-mode/interpolation-mode.ts +8 -0
- package/src/graphics/animation/interpolation-mode/public.ts +3 -0
- package/src/graphics/animation/interpolation-mode/schema.ts +5 -0
- package/src/graphics/camera/camera-plugin.ts +37 -0
- package/src/graphics/camera/camera.ts +8 -0
- package/src/graphics/camera/orbit/attach-orbit-drag.ts +62 -0
- package/src/graphics/camera/orbit/orbit-data-plugin.ts +44 -0
- package/src/graphics/camera/orbit/orbit-plugin.ts +13 -0
- package/src/graphics/camera/orbit/orbit-system-plugin.ts +74 -0
- package/src/graphics/camera/orbit/orbit.ts +36 -0
- package/src/graphics/camera/orbit/public.ts +7 -0
- package/src/graphics/camera/public.ts +6 -0
- package/src/graphics/camera/schema.ts +21 -0
- package/src/graphics/camera/screen-to-world-ray.ts +47 -0
- package/src/graphics/camera/to-view-projection.ts +29 -0
- package/src/graphics/graphics-plugin.ts +108 -0
- package/src/graphics/picking/pick-hit.ts +13 -0
- package/src/graphics/picking/picking-plugin.ts +101 -0
- package/src/graphics/plugins.md +120 -0
- package/src/graphics/rendering/bone-collider-plugin.ts +182 -0
- package/src/graphics/rendering/display-transform-plugin.ts +26 -0
- package/src/graphics/rendering/ibl-render/brdf.wgsl.ts +43 -0
- package/src/graphics/rendering/ibl-render/ibl/brdf-lut.ts +101 -0
- package/src/graphics/rendering/ibl-render/ibl/build-ibl-resources.ts +57 -0
- package/src/graphics/rendering/ibl-render/ibl/create-cubemap.ts +17 -0
- package/src/graphics/rendering/ibl-render/ibl/cube-face-view.ts +11 -0
- package/src/graphics/rendering/ibl-render/ibl/cubemap-sample-view.ts +9 -0
- package/src/graphics/rendering/ibl-render/ibl/environment.ts +190 -0
- package/src/graphics/rendering/ibl-render/ibl/float-to-half.ts +35 -0
- package/src/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.ts +60 -0
- package/src/graphics/rendering/ibl-render/ibl/irradiance.ts +105 -0
- package/src/graphics/rendering/ibl-render/ibl/parse-hdr.ts +108 -0
- package/src/graphics/rendering/ibl-render/ibl/prefilter.ts +121 -0
- package/src/graphics/rendering/ibl-render/ibl/render-helpers.ts +17 -0
- package/src/graphics/rendering/ibl-render/ibl-render-plugin.ts +415 -0
- package/src/graphics/rendering/ibl-render/ibl-shader.wgsl.ts +185 -0
- package/src/graphics/rendering/ibl-render/skybox-shader.wgsl.ts +51 -0
- package/src/graphics/rendering/interpolation-plugin.ts +97 -0
- package/src/graphics/rendering/interpolation.test.ts +52 -0
- package/src/graphics/rendering/jolt-ragdoll-plugin.ts +174 -0
- package/src/graphics/rendering/material-gpu/material-arrays.ts +113 -0
- package/src/graphics/rendering/material-gpu/material-bind-group.ts +61 -0
- package/src/graphics/rendering/material-gpu/material-gpu-plugin.ts +95 -0
- package/src/graphics/rendering/model-collider-plugin.ts +77 -0
- package/src/graphics/rendering/pbr-core-plugin.ts +40 -0
- package/src/graphics/rendering/pbr-render/pbr-array-shader.wgsl.ts +146 -0
- package/src/graphics/rendering/pbr-render/pbr-render-plugin.ts +247 -0
- package/src/graphics/rendering/pbr-render/physics-bridge-plugin.ts +106 -0
- package/src/graphics/rendering/ragdoll-trigger-plugin.ts +21 -0
- package/src/graphics/rendering/rendering-plugin.ts +3 -0
- package/src/graphics/rendering/skinning/skinning-attributes/layout.ts +20 -0
- package/src/graphics/rendering/skinning/skinning-attributes/public.ts +3 -0
- package/src/graphics/rendering/skinning/skinning-attributes/skinning-attributes.ts +3 -0
- package/src/graphics/rendering/skinning/skinning-plugin.ts +213 -0
- package/src/graphics/rendering/standard-vertex/layout.ts +19 -0
- package/src/graphics/rendering/standard-vertex/public.ts +4 -0
- package/src/graphics/rendering/standard-vertex/schema.ts +17 -0
- package/src/graphics/rendering/standard-vertex/standard-vertex.ts +8 -0
- package/src/graphics/rendering/visible-material/color-material-options.ts +10 -0
- package/src/graphics/rendering/visible-material/create-bind-group-layout.ts +35 -0
- package/src/graphics/rendering/visible-material/create-color-bind-group.ts +40 -0
- package/src/graphics/rendering/visible-material/public.ts +6 -0
- package/src/graphics/rendering/visible-material/schema.ts +25 -0
- package/src/graphics/rendering/visible-material/visible-material.ts +8 -0
- package/src/graphics/scene/light/light-plugin.ts +37 -0
- package/src/graphics/scene/light/light.ts +18 -0
- package/src/graphics/scene/light/public.ts +1 -0
- package/src/graphics/scene/model/geometry/geometry.ts +12 -0
- package/src/graphics/scene/model/geometry/public.ts +4 -0
- package/src/graphics/scene/model/gltf/accessor-view.ts +53 -0
- package/src/graphics/scene/model/gltf/build-material-bind-group.ts +110 -0
- package/src/graphics/scene/model/gltf/compute-world-matrices.ts +43 -0
- package/src/graphics/scene/model/gltf/create-color-material.ts +47 -0
- package/src/graphics/scene/model/gltf/decode-images.ts +93 -0
- package/src/graphics/scene/model/gltf/gltf-schema.ts +161 -0
- package/src/graphics/scene/model/gltf/load-gltf-model.ts +220 -0
- package/src/graphics/scene/model/gltf/pack-vertex-buffer.ts +116 -0
- package/src/graphics/scene/model/gltf/parse-animations.ts +66 -0
- package/src/graphics/scene/model/gltf/parse-glb.ts +51 -0
- package/src/graphics/scene/model/gltf/parse-skin.ts +67 -0
- package/src/graphics/scene/model/model-loader-plugin.ts +131 -0
- package/src/graphics/scene/model/model-plugin.ts +46 -0
- package/src/graphics/scene/model/model.ts +15 -0
- package/src/graphics/scene/model/public.ts +1 -0
- package/src/graphics/scene/model/shape/convex-hull.test.ts +72 -0
- package/src/graphics/scene/model/shape/convex-hull.ts +141 -0
- package/src/graphics/scene/model/shape/shape-geometry-plugin.ts +61 -0
- package/src/graphics/scene/model/shape/shape-mesh.ts +150 -0
- package/src/graphics/scene/model/shape/upload-shape-mesh.ts +14 -0
- package/src/graphics/scene/model/world-bounds-plugin.ts +88 -0
- package/src/graphics/scene/node/node-data-plugin.ts +28 -0
- package/src/graphics/scene/node/node-plugin.ts +13 -0
- package/src/graphics/scene/node/node.ts +23 -0
- package/src/graphics/scene/node/public.ts +1 -0
- package/src/graphics/scene/node/transform-plugin.ts +72 -0
- package/src/graphics/scene/scene-plugin.ts +20 -0
- package/src/graphics/scene/scene-uniforms/create-bind-group-layout.ts +19 -0
- package/src/graphics/scene/scene-uniforms/public.ts +5 -0
- package/src/graphics/scene/scene-uniforms/scene-uniforms-plugin.ts +64 -0
- package/src/graphics/scene/scene-uniforms/scene-uniforms.ts +15 -0
- package/src/graphics/scene/scene-uniforms/schema.ts +17 -0
- package/src/index.ts +72 -0
- package/src/material/material-plugin.ts +61 -0
- package/src/material/material.ts +38 -0
- package/src/material/public.ts +4 -0
- package/src/material/standard-materials.ts +43 -0
- package/src/physics/README.md +71 -0
- package/src/physics/body/body-type/body-type.ts +14 -0
- package/src/physics/body/body-type/is-dynamic.ts +8 -0
- package/src/physics/body/body-type/public.ts +4 -0
- package/src/physics/body/body-type/schema.ts +5 -0
- package/src/physics/body/collider-mesh.ts +13 -0
- package/src/physics/body/collider-shape/collider-shape.ts +19 -0
- package/src/physics/body/collider-shape/list.ts +7 -0
- package/src/physics/body/collider-shape/mass-properties.ts +47 -0
- package/src/physics/body/collider-shape/public.ts +6 -0
- package/src/physics/body/collider-shape/schema.ts +5 -0
- package/src/physics/body/collider-shape/to-index.ts +8 -0
- package/src/physics/body/rigid-body.ts +26 -0
- package/src/physics/body/static-collider.ts +28 -0
- package/src/physics/joint/joint-plugin.ts +33 -0
- package/src/physics/joint/joint-type/joint-type.ts +19 -0
- package/src/physics/joint/joint-type/public.ts +3 -0
- package/src/physics/joint/joint-type/schema.ts +5 -0
- package/src/physics/joint/joint.ts +27 -0
- package/src/physics/physics-clock-plugin.ts +61 -0
- package/src/physics/physics-clock.test.ts +55 -0
- package/src/physics/physics-data-plugin.ts +73 -0
- package/src/physics/ragdoll/fit-bone-capsules.test.ts +66 -0
- package/src/physics/ragdoll/fit-bone-capsules.ts +106 -0
- package/src/physics/solvers/README.md +63 -0
- package/src/physics/solvers/jolt-solver-plugin.ts +382 -0
- package/src/physics/solvers/rapier-jolt.benchmark.test.ts +39 -0
- package/src/physics/solvers/rapier-solver-plugin.ts +251 -0
- package/src/physics/solvers/solver-benchmark.ts +172 -0
- package/tsconfig.json +25 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixed-timestep physics clock — decouples the simulation rate from the render
|
|
3
|
+
* rate (Fiedler "fix your timestep"). Each render frame the accumulator absorbs
|
|
4
|
+
* the variable `frameTime.dt`; the solver then runs a whole number of fixed
|
|
5
|
+
* `fixedDt` steps (0, 1, or several), and `alpha` is the leftover fraction used
|
|
6
|
+
* to interpolate the rendered pose between the last two simulated states.
|
|
7
|
+
*
|
|
8
|
+
* Default 60 Hz; set another rate at init with `setFixedTimestep(hz)`.
|
|
9
|
+
*/
|
|
10
|
+
export interface PhysicsClock {
|
|
11
|
+
/** Fixed simulation step length, seconds (default 1/60). */
|
|
12
|
+
readonly fixedDt: number;
|
|
13
|
+
/** Unsimulated time carried to the next frame, seconds (< fixedDt). */
|
|
14
|
+
readonly accumulator: number;
|
|
15
|
+
/** accumulator / fixedDt ∈ [0,1): render interpolation fraction prev→current. */
|
|
16
|
+
readonly alpha: number;
|
|
17
|
+
/** Whole steps the solver should run this frame (0..maxSubSteps). */
|
|
18
|
+
readonly steps: number;
|
|
19
|
+
/** Cap on steps/frame — prevents the "spiral of death" after a long stall. */
|
|
20
|
+
readonly maxSubSteps: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Provides the `physicsClock` resource and advances it once per render frame.
|
|
24
|
+
* Solver plugins extend this and run `physicsClock.steps` fixed steps; the
|
|
25
|
+
* interpolation system reads `physicsClock.alpha`. The advance runs first in the
|
|
26
|
+
* `physics` phase so solvers (scheduled `after: ["advancePhysicsClock"]`) see it.
|
|
27
|
+
*/
|
|
28
|
+
export declare const physicsClock: {
|
|
29
|
+
readonly components: {};
|
|
30
|
+
readonly resources: {
|
|
31
|
+
readonly frameTime: {
|
|
32
|
+
readonly default: import("../core/frame-time/public.js");
|
|
33
|
+
readonly transient: true;
|
|
34
|
+
};
|
|
35
|
+
} & {
|
|
36
|
+
readonly schedulerState: {
|
|
37
|
+
readonly default: import("@adobe/data/ecs").SchedulerState;
|
|
38
|
+
};
|
|
39
|
+
} & {
|
|
40
|
+
readonly device: {
|
|
41
|
+
readonly default: GPUDevice | null;
|
|
42
|
+
readonly transient: true;
|
|
43
|
+
};
|
|
44
|
+
readonly commandEncoder: {
|
|
45
|
+
readonly default: GPUCommandEncoder | null;
|
|
46
|
+
readonly transient: true;
|
|
47
|
+
};
|
|
48
|
+
} & {
|
|
49
|
+
readonly physicsClock: {
|
|
50
|
+
readonly default: PhysicsClock;
|
|
51
|
+
readonly transient: true;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
readonly archetypes: {};
|
|
55
|
+
readonly transactions: {} & {} & {
|
|
56
|
+
readonly setFixedTimestep: (t: import("@adobe/data/ecs").TransactionContext<import("@adobe/data/schema").FromSchemas<{}>, import("@adobe/data/schema").FromSchemas<{
|
|
57
|
+
readonly physicsClock: {
|
|
58
|
+
readonly default: PhysicsClock;
|
|
59
|
+
readonly transient: true;
|
|
60
|
+
};
|
|
61
|
+
} & {
|
|
62
|
+
readonly frameTime: {
|
|
63
|
+
readonly default: import("../core/frame-time/public.js");
|
|
64
|
+
readonly transient: true;
|
|
65
|
+
};
|
|
66
|
+
} & {
|
|
67
|
+
readonly schedulerState: {
|
|
68
|
+
readonly default: import("@adobe/data/ecs").SchedulerState;
|
|
69
|
+
};
|
|
70
|
+
} & {
|
|
71
|
+
readonly device: {
|
|
72
|
+
readonly default: GPUDevice | null;
|
|
73
|
+
readonly transient: true;
|
|
74
|
+
};
|
|
75
|
+
readonly commandEncoder: {
|
|
76
|
+
readonly default: GPUCommandEncoder | null;
|
|
77
|
+
readonly transient: true;
|
|
78
|
+
};
|
|
79
|
+
}>, {}, {}>, hz: number) => void;
|
|
80
|
+
};
|
|
81
|
+
readonly systems: import("@adobe/data/ecs").SystemDeclarations<"update" | "_frameTime" | "schedulerSystem" | "input" | "preUpdate" | "postUpdate" | "physics" | "preRender" | "render" | "postRender" | "advancePhysicsClock">;
|
|
82
|
+
readonly actions: {};
|
|
83
|
+
readonly services: {};
|
|
84
|
+
readonly computed: {};
|
|
85
|
+
readonly indexes: {};
|
|
86
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { Database } from "@adobe/data/ecs";
|
|
3
|
+
import { core } from "../core/core-plugin.js";
|
|
4
|
+
const DEFAULT = { fixedDt: 1 / 60, accumulator: 0, alpha: 0, steps: 0, maxSubSteps: 8 };
|
|
5
|
+
/**
|
|
6
|
+
* Provides the `physicsClock` resource and advances it once per render frame.
|
|
7
|
+
* Solver plugins extend this and run `physicsClock.steps` fixed steps; the
|
|
8
|
+
* interpolation system reads `physicsClock.alpha`. The advance runs first in the
|
|
9
|
+
* `physics` phase so solvers (scheduled `after: ["advancePhysicsClock"]`) see it.
|
|
10
|
+
*/
|
|
11
|
+
export const physicsClock = Database.Plugin.create({
|
|
12
|
+
extends: core,
|
|
13
|
+
resources: {
|
|
14
|
+
physicsClock: { default: DEFAULT, transient: true },
|
|
15
|
+
},
|
|
16
|
+
transactions: {
|
|
17
|
+
/** Set the simulation rate (Hz). Call once at init; default is 60. */
|
|
18
|
+
setFixedTimestep(t, hz) {
|
|
19
|
+
t.resources.physicsClock = { ...t.resources.physicsClock, fixedDt: 1 / hz };
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
systems: {
|
|
23
|
+
advancePhysicsClock: {
|
|
24
|
+
schedule: { during: ["physics"] },
|
|
25
|
+
create: db => () => {
|
|
26
|
+
const c = db.store.resources.physicsClock;
|
|
27
|
+
const h = c.fixedDt;
|
|
28
|
+
// clamp the absorbed time to the step budget so a long stall (tab
|
|
29
|
+
// backgrounded, GC) can't queue hundreds of steps (spiral of death)
|
|
30
|
+
const acc = c.accumulator + Math.min(db.store.resources.frameTime.dt, h * c.maxSubSteps);
|
|
31
|
+
const steps = Math.min(Math.floor(acc / h), c.maxSubSteps);
|
|
32
|
+
db.store.resources.physicsClock = { ...c, accumulator: acc - steps * h, alpha: (acc - steps * h) / h, steps };
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=physics-clock-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-clock-plugin.js","sourceRoot":"","sources":["../../src/physics/physics-clock-plugin.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAwB9C,MAAM,OAAO,GAAiB,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;AAEtG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,IAAI;IACb,SAAS,EAAE;QACP,YAAY,EAAE,EAAE,OAAO,EAAE,OAAuB,EAAE,SAAS,EAAE,IAAI,EAAE;KACtE;IACD,YAAY,EAAE;QACV,sEAAsE;QACtE,gBAAgB,CAAC,CAAC,EAAE,EAAU;YAC1B,CAAC,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;QAChF,CAAC;KACJ;IACD,OAAO,EAAE;QACL,mBAAmB,EAAE;YACjB,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE;YACjC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBACf,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;gBAC1C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;gBACpB,kEAAkE;gBAClE,oEAAoE;gBACpE,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;gBACzF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC3D,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC;YAClH,CAAC;SACJ;KACJ;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { Database } from "@adobe/data/ecs";
|
|
4
|
+
import { physicsClock } from "./physics-clock-plugin.js";
|
|
5
|
+
/** The accumulator turns a variable render dt into a whole number of fixed steps
|
|
6
|
+
* plus a leftover interpolation `alpha`, capped against the spiral of death. */
|
|
7
|
+
describe("physicsClock", () => {
|
|
8
|
+
const make = () => {
|
|
9
|
+
const db = Database.create(physicsClock); // 60 Hz default
|
|
10
|
+
const store = db.store;
|
|
11
|
+
const advance = (dt) => {
|
|
12
|
+
store.resources.frameTime = { now: 0, dt, elapsed: 0 };
|
|
13
|
+
db.system.functions.advancePhysicsClock?.();
|
|
14
|
+
return store.resources.physicsClock;
|
|
15
|
+
};
|
|
16
|
+
return { db, advance };
|
|
17
|
+
};
|
|
18
|
+
it("matched render rate → exactly one step per frame, alpha ≈ 0", () => {
|
|
19
|
+
const c = make().advance(1 / 60);
|
|
20
|
+
expect(c.steps).toBe(1);
|
|
21
|
+
expect(c.alpha).toBeCloseTo(0);
|
|
22
|
+
});
|
|
23
|
+
it("render slower than sim → multiple steps per frame", () => {
|
|
24
|
+
expect(make().advance(1 / 30).steps).toBe(2); // two 1/60 steps fit one 1/30 frame
|
|
25
|
+
});
|
|
26
|
+
it("render faster than sim → 0-step frames that accumulate, alpha rising then resetting", () => {
|
|
27
|
+
const { advance } = make();
|
|
28
|
+
const a = advance(1 / 120); // half a step accrued
|
|
29
|
+
expect(a.steps).toBe(0);
|
|
30
|
+
expect(a.alpha).toBeCloseTo(0.5);
|
|
31
|
+
const b = advance(1 / 120); // now a full step is due
|
|
32
|
+
expect(b.steps).toBe(1);
|
|
33
|
+
expect(b.alpha).toBeCloseTo(0);
|
|
34
|
+
});
|
|
35
|
+
it("a long stall is capped at maxSubSteps (no spiral of death)", () => {
|
|
36
|
+
const c = make().advance(10); // 600 steps' worth of time
|
|
37
|
+
expect(c.steps).toBe(c.maxSubSteps);
|
|
38
|
+
});
|
|
39
|
+
it("setFixedTimestep changes the rate", () => {
|
|
40
|
+
const { db, advance } = make();
|
|
41
|
+
db.transactions.setFixedTimestep(30);
|
|
42
|
+
expect(advance(1 / 30).steps).toBe(1); // one 1/30 step per 1/30 frame
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=physics-clock.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-clock.test.js","sourceRoot":"","sources":["../../src/physics/physics-clock.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAqB,MAAM,2BAA2B,CAAC;AAE5E;iFACiF;AACjF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAK1B,MAAM,IAAI,GAAG,GAAG,EAAE;QACd,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;QAC1D,MAAM,KAAK,GAAI,EAAuC,CAAC,KAAK,CAAC;QAC7D,MAAM,OAAO,GAAG,CAAC,EAAU,EAAgB,EAAE;YACzC,KAAK,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACvD,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC;QACxC,CAAC,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,oCAAoC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC3F,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAClD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,yBAAyB;QACrD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B;QACzD,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACzC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;QAC/B,EAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import type { ColliderMesh } from "./body/collider-mesh.js";
|
|
2
|
+
/**
|
|
3
|
+
* The shared, solver-agnostic rigid-body data model — the seam every physics
|
|
4
|
+
* solver plugs into. It declares *only* authored/canonical state (no systems):
|
|
5
|
+
*
|
|
6
|
+
* bodyType, colliderShape, halfExtents, material — authored shape + role
|
|
7
|
+
* position, rotation, linearVelocity, angularVelocity — canonical live state
|
|
8
|
+
*
|
|
9
|
+
* A **solver plugin** `extends` this, may keep its own private `_`-prefixed
|
|
10
|
+
* internal state (broadphase, caches, GPU buffers), and each frame reads the
|
|
11
|
+
* authored state and writes back `position`/`rotation`/velocity for dynamic
|
|
12
|
+
* bodies. A renderer reads the canonical transforms, decoupled from which
|
|
13
|
+
* solver produced them — so solvers (`joltSolver`, `rapierSolver`; the GPU XPBD
|
|
14
|
+
* solver is shelved) are interchangeable over identical authored scenes.
|
|
15
|
+
*
|
|
16
|
+
* Two archetypes share these components:
|
|
17
|
+
* - **RigidBody** — `dynamic` or `kinematic` bodies that move; carries
|
|
18
|
+
* velocities and a `bodyType` discriminator.
|
|
19
|
+
* - **StaticCollider** — immovable colliders (floor, wall, ramp, scenery).
|
|
20
|
+
* No velocities (never integrated) and no `bodyType` (the archetype *is*
|
|
21
|
+
* the static classification) — a lean row for the bulk-static workload.
|
|
22
|
+
*
|
|
23
|
+
* `_prevPosition`/`_prevRotation` are derived (`_`-prefixed): the solver snapshots
|
|
24
|
+
* the pose *before* its final fixed step into them, so a render-rate interpolation
|
|
25
|
+
* pass can smoothly blend the previous → current simulated pose (see
|
|
26
|
+
* `physics-clock-plugin` + `interpolation-plugin`). Like `_worldMatrix`, they are
|
|
27
|
+
* *not* in the authored archetype — the solver migrates them onto each dynamic
|
|
28
|
+
* body the first time it mirrors it, so authors never supply derived state.
|
|
29
|
+
*
|
|
30
|
+
* Mass + inertia are derived per solver from shape + material (not stored here).
|
|
31
|
+
*/
|
|
32
|
+
export declare const physicsData: {
|
|
33
|
+
readonly components: {
|
|
34
|
+
readonly material: {
|
|
35
|
+
readonly type: "integer";
|
|
36
|
+
readonly minimum: -2147483648;
|
|
37
|
+
readonly maximum: 2147483647;
|
|
38
|
+
readonly default: number;
|
|
39
|
+
};
|
|
40
|
+
readonly name: {
|
|
41
|
+
readonly type: "string";
|
|
42
|
+
};
|
|
43
|
+
readonly density: {
|
|
44
|
+
readonly type: "number";
|
|
45
|
+
readonly precision: 1;
|
|
46
|
+
readonly default: number;
|
|
47
|
+
};
|
|
48
|
+
readonly restitution: {
|
|
49
|
+
readonly type: "number";
|
|
50
|
+
readonly precision: 1;
|
|
51
|
+
readonly default: number;
|
|
52
|
+
};
|
|
53
|
+
readonly friction: {
|
|
54
|
+
readonly type: "number";
|
|
55
|
+
readonly precision: 1;
|
|
56
|
+
readonly default: number;
|
|
57
|
+
};
|
|
58
|
+
readonly compliance: {
|
|
59
|
+
readonly type: "number";
|
|
60
|
+
readonly precision: 1;
|
|
61
|
+
readonly default: number;
|
|
62
|
+
};
|
|
63
|
+
readonly heatCapacity: {
|
|
64
|
+
readonly type: "number";
|
|
65
|
+
readonly precision: 1;
|
|
66
|
+
readonly default: number;
|
|
67
|
+
};
|
|
68
|
+
readonly baseColorFactor: {
|
|
69
|
+
readonly type: "array";
|
|
70
|
+
readonly items: {
|
|
71
|
+
readonly type: "number";
|
|
72
|
+
readonly precision: 1;
|
|
73
|
+
readonly default: number;
|
|
74
|
+
};
|
|
75
|
+
readonly minItems: 4;
|
|
76
|
+
readonly maxItems: 4;
|
|
77
|
+
readonly default: readonly [0, 0, 0, 0];
|
|
78
|
+
};
|
|
79
|
+
readonly emissiveFactor: {
|
|
80
|
+
readonly type: "array";
|
|
81
|
+
readonly items: {
|
|
82
|
+
readonly type: "number";
|
|
83
|
+
readonly precision: 1;
|
|
84
|
+
readonly default: number;
|
|
85
|
+
};
|
|
86
|
+
readonly minItems: 3;
|
|
87
|
+
readonly maxItems: 3;
|
|
88
|
+
readonly default: readonly [0, 0, 0];
|
|
89
|
+
};
|
|
90
|
+
readonly metallicFactor: {
|
|
91
|
+
readonly type: "number";
|
|
92
|
+
readonly precision: 1;
|
|
93
|
+
readonly default: number;
|
|
94
|
+
};
|
|
95
|
+
readonly roughnessFactor: {
|
|
96
|
+
readonly type: "number";
|
|
97
|
+
readonly precision: 1;
|
|
98
|
+
readonly default: number;
|
|
99
|
+
};
|
|
100
|
+
readonly normalScale: {
|
|
101
|
+
readonly type: "number";
|
|
102
|
+
readonly precision: 1;
|
|
103
|
+
readonly default: number;
|
|
104
|
+
};
|
|
105
|
+
readonly occlusionStrength: {
|
|
106
|
+
readonly type: "number";
|
|
107
|
+
readonly precision: 1;
|
|
108
|
+
readonly default: number;
|
|
109
|
+
};
|
|
110
|
+
readonly baseColorUrl: {
|
|
111
|
+
readonly type: "string";
|
|
112
|
+
};
|
|
113
|
+
readonly metallicRoughnessUrl: {
|
|
114
|
+
readonly type: "string";
|
|
115
|
+
};
|
|
116
|
+
readonly normalUrl: {
|
|
117
|
+
readonly type: "string";
|
|
118
|
+
};
|
|
119
|
+
readonly occlusionUrl: {
|
|
120
|
+
readonly type: "string";
|
|
121
|
+
};
|
|
122
|
+
readonly emissiveUrl: {
|
|
123
|
+
readonly type: "string";
|
|
124
|
+
};
|
|
125
|
+
} & {
|
|
126
|
+
readonly bodyType: {
|
|
127
|
+
readonly type: "string";
|
|
128
|
+
readonly enum: readonly ["static", "dynamic", "kinematic"];
|
|
129
|
+
};
|
|
130
|
+
readonly colliderShape: {
|
|
131
|
+
readonly type: "string";
|
|
132
|
+
readonly enum: readonly ["sphere", "box", "capsule", "hull", "mesh"];
|
|
133
|
+
};
|
|
134
|
+
readonly halfExtents: {
|
|
135
|
+
readonly type: "array";
|
|
136
|
+
readonly items: {
|
|
137
|
+
readonly type: "number";
|
|
138
|
+
readonly precision: 1;
|
|
139
|
+
readonly default: number;
|
|
140
|
+
};
|
|
141
|
+
readonly minItems: 3;
|
|
142
|
+
readonly maxItems: 3;
|
|
143
|
+
readonly default: readonly [0, 0, 0];
|
|
144
|
+
};
|
|
145
|
+
readonly position: {
|
|
146
|
+
readonly type: "array";
|
|
147
|
+
readonly items: {
|
|
148
|
+
readonly type: "number";
|
|
149
|
+
readonly precision: 1;
|
|
150
|
+
readonly default: number;
|
|
151
|
+
};
|
|
152
|
+
readonly minItems: 3;
|
|
153
|
+
readonly maxItems: 3;
|
|
154
|
+
readonly default: readonly [0, 0, 0];
|
|
155
|
+
};
|
|
156
|
+
readonly rotation: {
|
|
157
|
+
readonly type: "array";
|
|
158
|
+
readonly items: {
|
|
159
|
+
readonly type: "number";
|
|
160
|
+
readonly precision: 1;
|
|
161
|
+
readonly default: number;
|
|
162
|
+
};
|
|
163
|
+
readonly minItems: 4;
|
|
164
|
+
readonly maxItems: 4;
|
|
165
|
+
readonly default: readonly [0, 0, 0, 1];
|
|
166
|
+
readonly interpolators: {
|
|
167
|
+
readonly linear: (q1: any, q2: any, t: number) => any;
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
readonly linearVelocity: {
|
|
171
|
+
readonly type: "array";
|
|
172
|
+
readonly items: {
|
|
173
|
+
readonly type: "number";
|
|
174
|
+
readonly precision: 1;
|
|
175
|
+
readonly default: number;
|
|
176
|
+
};
|
|
177
|
+
readonly minItems: 3;
|
|
178
|
+
readonly maxItems: 3;
|
|
179
|
+
readonly default: readonly [0, 0, 0];
|
|
180
|
+
};
|
|
181
|
+
readonly angularVelocity: {
|
|
182
|
+
readonly type: "array";
|
|
183
|
+
readonly items: {
|
|
184
|
+
readonly type: "number";
|
|
185
|
+
readonly precision: 1;
|
|
186
|
+
readonly default: number;
|
|
187
|
+
};
|
|
188
|
+
readonly minItems: 3;
|
|
189
|
+
readonly maxItems: 3;
|
|
190
|
+
readonly default: readonly [0, 0, 0];
|
|
191
|
+
};
|
|
192
|
+
readonly _prevPosition: {
|
|
193
|
+
readonly type: "array";
|
|
194
|
+
readonly items: {
|
|
195
|
+
readonly type: "number";
|
|
196
|
+
readonly precision: 1;
|
|
197
|
+
readonly default: number;
|
|
198
|
+
};
|
|
199
|
+
readonly minItems: 3;
|
|
200
|
+
readonly maxItems: 3;
|
|
201
|
+
readonly default: readonly [0, 0, 0];
|
|
202
|
+
};
|
|
203
|
+
readonly _prevRotation: {
|
|
204
|
+
readonly type: "array";
|
|
205
|
+
readonly items: {
|
|
206
|
+
readonly type: "number";
|
|
207
|
+
readonly precision: 1;
|
|
208
|
+
readonly default: number;
|
|
209
|
+
};
|
|
210
|
+
readonly minItems: 4;
|
|
211
|
+
readonly maxItems: 4;
|
|
212
|
+
readonly default: readonly [0, 0, 0, 1];
|
|
213
|
+
readonly interpolators: {
|
|
214
|
+
readonly linear: (q1: any, q2: any, t: number) => any;
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
readonly collisionGroup: {
|
|
218
|
+
readonly type: "number";
|
|
219
|
+
readonly precision: 1;
|
|
220
|
+
readonly default: number;
|
|
221
|
+
};
|
|
222
|
+
readonly convexPoints: {
|
|
223
|
+
readonly default: Float32Array | null;
|
|
224
|
+
};
|
|
225
|
+
readonly colliderMesh: {
|
|
226
|
+
readonly default: ColliderMesh | null;
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
readonly resources: {
|
|
230
|
+
readonly materials: {
|
|
231
|
+
readonly default: Record<string, number>;
|
|
232
|
+
};
|
|
233
|
+
} & {};
|
|
234
|
+
readonly archetypes: {
|
|
235
|
+
readonly Material: readonly ["name", "density", "restitution", "friction", "compliance", "heatCapacity", "baseColorFactor", "emissiveFactor", "metallicFactor", "roughnessFactor", "normalScale", "occlusionStrength", "baseColorUrl", "metallicRoughnessUrl", "normalUrl", "occlusionUrl", "emissiveUrl"];
|
|
236
|
+
} & {
|
|
237
|
+
readonly RigidBody: readonly ["bodyType", "colliderShape", "halfExtents", "material", "position", "rotation", "linearVelocity", "angularVelocity"];
|
|
238
|
+
readonly StaticCollider: readonly ["colliderShape", "halfExtents", "material", "position", "rotation"];
|
|
239
|
+
readonly ConvexBody: readonly ["bodyType", "colliderShape", "halfExtents", "material", "position", "rotation", "linearVelocity", "angularVelocity", "convexPoints"];
|
|
240
|
+
readonly MeshCollider: readonly ["colliderShape", "halfExtents", "material", "position", "rotation", "colliderMesh"];
|
|
241
|
+
};
|
|
242
|
+
readonly transactions: {
|
|
243
|
+
readonly seedStandardMaterials: (t: import("@adobe/data/ecs").TransactionContext<import("@adobe/data/schema").FromSchemas<{
|
|
244
|
+
readonly material: {
|
|
245
|
+
readonly type: "integer";
|
|
246
|
+
readonly minimum: -2147483648;
|
|
247
|
+
readonly maximum: 2147483647;
|
|
248
|
+
readonly default: number;
|
|
249
|
+
};
|
|
250
|
+
readonly name: {
|
|
251
|
+
readonly type: "string";
|
|
252
|
+
};
|
|
253
|
+
readonly density: {
|
|
254
|
+
readonly type: "number";
|
|
255
|
+
readonly precision: 1;
|
|
256
|
+
readonly default: number;
|
|
257
|
+
};
|
|
258
|
+
readonly restitution: {
|
|
259
|
+
readonly type: "number";
|
|
260
|
+
readonly precision: 1;
|
|
261
|
+
readonly default: number;
|
|
262
|
+
};
|
|
263
|
+
readonly friction: {
|
|
264
|
+
readonly type: "number";
|
|
265
|
+
readonly precision: 1;
|
|
266
|
+
readonly default: number;
|
|
267
|
+
};
|
|
268
|
+
readonly compliance: {
|
|
269
|
+
readonly type: "number";
|
|
270
|
+
readonly precision: 1;
|
|
271
|
+
readonly default: number;
|
|
272
|
+
};
|
|
273
|
+
readonly heatCapacity: {
|
|
274
|
+
readonly type: "number";
|
|
275
|
+
readonly precision: 1;
|
|
276
|
+
readonly default: number;
|
|
277
|
+
};
|
|
278
|
+
readonly baseColorFactor: {
|
|
279
|
+
readonly type: "array";
|
|
280
|
+
readonly items: {
|
|
281
|
+
readonly type: "number";
|
|
282
|
+
readonly precision: 1;
|
|
283
|
+
readonly default: number;
|
|
284
|
+
};
|
|
285
|
+
readonly minItems: 4;
|
|
286
|
+
readonly maxItems: 4;
|
|
287
|
+
readonly default: readonly [0, 0, 0, 0];
|
|
288
|
+
};
|
|
289
|
+
readonly emissiveFactor: {
|
|
290
|
+
readonly type: "array";
|
|
291
|
+
readonly items: {
|
|
292
|
+
readonly type: "number";
|
|
293
|
+
readonly precision: 1;
|
|
294
|
+
readonly default: number;
|
|
295
|
+
};
|
|
296
|
+
readonly minItems: 3;
|
|
297
|
+
readonly maxItems: 3;
|
|
298
|
+
readonly default: readonly [0, 0, 0];
|
|
299
|
+
};
|
|
300
|
+
readonly metallicFactor: {
|
|
301
|
+
readonly type: "number";
|
|
302
|
+
readonly precision: 1;
|
|
303
|
+
readonly default: number;
|
|
304
|
+
};
|
|
305
|
+
readonly roughnessFactor: {
|
|
306
|
+
readonly type: "number";
|
|
307
|
+
readonly precision: 1;
|
|
308
|
+
readonly default: number;
|
|
309
|
+
};
|
|
310
|
+
readonly normalScale: {
|
|
311
|
+
readonly type: "number";
|
|
312
|
+
readonly precision: 1;
|
|
313
|
+
readonly default: number;
|
|
314
|
+
};
|
|
315
|
+
readonly occlusionStrength: {
|
|
316
|
+
readonly type: "number";
|
|
317
|
+
readonly precision: 1;
|
|
318
|
+
readonly default: number;
|
|
319
|
+
};
|
|
320
|
+
readonly baseColorUrl: {
|
|
321
|
+
readonly type: "string";
|
|
322
|
+
};
|
|
323
|
+
readonly metallicRoughnessUrl: {
|
|
324
|
+
readonly type: "string";
|
|
325
|
+
};
|
|
326
|
+
readonly normalUrl: {
|
|
327
|
+
readonly type: "string";
|
|
328
|
+
};
|
|
329
|
+
readonly occlusionUrl: {
|
|
330
|
+
readonly type: "string";
|
|
331
|
+
};
|
|
332
|
+
readonly emissiveUrl: {
|
|
333
|
+
readonly type: "string";
|
|
334
|
+
};
|
|
335
|
+
}>, import("@adobe/data/schema").FromSchemas<{
|
|
336
|
+
readonly materials: {
|
|
337
|
+
readonly default: Record<string, number>;
|
|
338
|
+
};
|
|
339
|
+
}>, {
|
|
340
|
+
readonly Material: readonly ["name", "density", "restitution", "friction", "compliance", "heatCapacity", "baseColorFactor", "emissiveFactor", "metallicFactor", "roughnessFactor", "normalScale", "occlusionStrength", "baseColorUrl", "metallicRoughnessUrl", "normalUrl", "occlusionUrl", "emissiveUrl"];
|
|
341
|
+
}, {}>) => void;
|
|
342
|
+
} & {};
|
|
343
|
+
readonly systems: import("@adobe/data/ecs").SystemDeclarations<never>;
|
|
344
|
+
readonly actions: {};
|
|
345
|
+
readonly services: {};
|
|
346
|
+
readonly computed: {};
|
|
347
|
+
readonly indexes: {} & {};
|
|
348
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { Database } from "@adobe/data/ecs";
|
|
3
|
+
import { F32 } from "@adobe/data/schema";
|
|
4
|
+
import { Vec3, Quat } from "@adobe/data/math";
|
|
5
|
+
import { BodyType } from "./body/body-type/body-type.js";
|
|
6
|
+
import { ColliderShape } from "./body/collider-shape/collider-shape.js";
|
|
7
|
+
import { Material } from "../material/material.js";
|
|
8
|
+
/**
|
|
9
|
+
* The shared, solver-agnostic rigid-body data model — the seam every physics
|
|
10
|
+
* solver plugs into. It declares *only* authored/canonical state (no systems):
|
|
11
|
+
*
|
|
12
|
+
* bodyType, colliderShape, halfExtents, material — authored shape + role
|
|
13
|
+
* position, rotation, linearVelocity, angularVelocity — canonical live state
|
|
14
|
+
*
|
|
15
|
+
* A **solver plugin** `extends` this, may keep its own private `_`-prefixed
|
|
16
|
+
* internal state (broadphase, caches, GPU buffers), and each frame reads the
|
|
17
|
+
* authored state and writes back `position`/`rotation`/velocity for dynamic
|
|
18
|
+
* bodies. A renderer reads the canonical transforms, decoupled from which
|
|
19
|
+
* solver produced them — so solvers (`joltSolver`, `rapierSolver`; the GPU XPBD
|
|
20
|
+
* solver is shelved) are interchangeable over identical authored scenes.
|
|
21
|
+
*
|
|
22
|
+
* Two archetypes share these components:
|
|
23
|
+
* - **RigidBody** — `dynamic` or `kinematic` bodies that move; carries
|
|
24
|
+
* velocities and a `bodyType` discriminator.
|
|
25
|
+
* - **StaticCollider** — immovable colliders (floor, wall, ramp, scenery).
|
|
26
|
+
* No velocities (never integrated) and no `bodyType` (the archetype *is*
|
|
27
|
+
* the static classification) — a lean row for the bulk-static workload.
|
|
28
|
+
*
|
|
29
|
+
* `_prevPosition`/`_prevRotation` are derived (`_`-prefixed): the solver snapshots
|
|
30
|
+
* the pose *before* its final fixed step into them, so a render-rate interpolation
|
|
31
|
+
* pass can smoothly blend the previous → current simulated pose (see
|
|
32
|
+
* `physics-clock-plugin` + `interpolation-plugin`). Like `_worldMatrix`, they are
|
|
33
|
+
* *not* in the authored archetype — the solver migrates them onto each dynamic
|
|
34
|
+
* body the first time it mirrors it, so authors never supply derived state.
|
|
35
|
+
*
|
|
36
|
+
* Mass + inertia are derived per solver from shape + material (not stored here).
|
|
37
|
+
*/
|
|
38
|
+
export const physicsData = Database.Plugin.create({
|
|
39
|
+
extends: Material.plugin, // brings the `material` reference component
|
|
40
|
+
components: {
|
|
41
|
+
bodyType: BodyType.schema,
|
|
42
|
+
colliderShape: ColliderShape.schema,
|
|
43
|
+
halfExtents: Vec3.schema, // box extents; sphere radius in .x
|
|
44
|
+
position: Vec3.schema,
|
|
45
|
+
rotation: Quat.schema, // unified with Node.rotation so a body renders directly
|
|
46
|
+
linearVelocity: Vec3.schema,
|
|
47
|
+
angularVelocity: Vec3.schema,
|
|
48
|
+
_prevPosition: Vec3.schema, // derived: pose before the last fixed step (render interpolation)
|
|
49
|
+
_prevRotation: Quat.schema,
|
|
50
|
+
// Bodies sharing the same non-zero collisionGroup do not collide with each
|
|
51
|
+
// other (they still collide with group 0 / the world) — e.g. a ragdoll's
|
|
52
|
+
// bones. 0 = default (collide with everything). Honored by both solvers
|
|
53
|
+
// (Rapier per-collider groups; Jolt a no-self-collide object layer). Note:
|
|
54
|
+
// it's currently binary (group 0 vs "some non-zero group"), not per-id masks.
|
|
55
|
+
collisionGroup: F32.schema,
|
|
56
|
+
// Authored collision geometry for shapes `halfExtents` can't describe.
|
|
57
|
+
// Runtime objects (variable length, no schema): the solver reads them once
|
|
58
|
+
// when it mirrors the body, the bridge once to build the render mesh.
|
|
59
|
+
convexPoints: { default: null }, // colliderShape "hull": point cloud → convex hull
|
|
60
|
+
colliderMesh: { default: null }, // colliderShape "mesh": static triangle soup
|
|
61
|
+
},
|
|
62
|
+
archetypes: {
|
|
63
|
+
RigidBody: ["bodyType", "colliderShape", "halfExtents", "material", "position", "rotation", "linearVelocity", "angularVelocity"],
|
|
64
|
+
StaticCollider: ["colliderShape", "halfExtents", "material", "position", "rotation"],
|
|
65
|
+
// A convex-hull body (dynamic / kinematic): authored as a point cloud.
|
|
66
|
+
ConvexBody: ["bodyType", "colliderShape", "halfExtents", "material", "position", "rotation", "linearVelocity", "angularVelocity", "convexPoints"],
|
|
67
|
+
// A static triangle-mesh collider (terrain / level geometry).
|
|
68
|
+
MeshCollider: ["colliderShape", "halfExtents", "material", "position", "rotation", "colliderMesh"],
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=physics-data-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-data-plugin.js","sourceRoot":"","sources":["../../src/physics/physics-data-plugin.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAI,4CAA4C;IACxE,UAAU,EAAE;QACR,QAAQ,EAAS,QAAQ,CAAC,MAAM;QAChC,aAAa,EAAI,aAAa,CAAC,MAAM;QACrC,WAAW,EAAM,IAAI,CAAC,MAAM,EAAI,mCAAmC;QACnE,QAAQ,EAAS,IAAI,CAAC,MAAM;QAC5B,QAAQ,EAAS,IAAI,CAAC,MAAM,EAAE,wDAAwD;QACtF,cAAc,EAAG,IAAI,CAAC,MAAM;QAC5B,eAAe,EAAE,IAAI,CAAC,MAAM;QAC5B,aAAa,EAAI,IAAI,CAAC,MAAM,EAAE,kEAAkE;QAChG,aAAa,EAAI,IAAI,CAAC,MAAM;QAC5B,2EAA2E;QAC3E,yEAAyE;QACzE,wEAAwE;QACxE,2EAA2E;QAC3E,8EAA8E;QAC9E,cAAc,EAAG,GAAG,CAAC,MAAM;QAC3B,uEAAuE;QACvE,2EAA2E;QAC3E,sEAAsE;QACtE,YAAY,EAAK,EAAE,OAAO,EAAE,IAA2B,EAAE,EAAE,kDAAkD;QAC7G,YAAY,EAAK,EAAE,OAAO,EAAE,IAA2B,EAAE,EAAE,6CAA6C;KAC3G;IACD,UAAU,EAAE;QACR,SAAS,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;QAChI,cAAc,EAAE,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;QACpF,uEAAuE;QACvE,UAAU,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,CAAC;QACjJ,8DAA8D;QAC9D,YAAY,EAAE,CAAC,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;KACrG;CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Vec3, Quat } from "@adobe/data/math";
|
|
2
|
+
/**
|
|
3
|
+
* Fits one capsule collider to each significant bone of a skinned mesh — the
|
|
4
|
+
* per-bone colliders a ragdoll needs (you can't trimesh a deforming skin). Each
|
|
5
|
+
* vertex is assigned to the bone it's *most* weighted to; that bone's vertices
|
|
6
|
+
* are pushed into the bone's bind-local frame (via the joint's inverse-bind
|
|
7
|
+
* matrix) and a capsule is fitted to them: the longest local axis becomes the
|
|
8
|
+
* capsule axis, the perpendicular spread its radius.
|
|
9
|
+
*
|
|
10
|
+
* The result is expressed as a bone-local offset (`offsetPosition` /
|
|
11
|
+
* `offsetRotation`, which orients the Y-aligned capsule onto the fitted axis)
|
|
12
|
+
* plus dimensions — so the capsule's world pose each frame is just
|
|
13
|
+
* `jointWorldMatrix · offset`, tracking the animated skeleton.
|
|
14
|
+
*/
|
|
15
|
+
/** Skinned vertices in mesh (bind) space: `positions` (xyz triples), `joints`
|
|
16
|
+
* (4 joint indices/vertex), `weights` (4 weights/vertex). */
|
|
17
|
+
export interface SkinVertices {
|
|
18
|
+
positions: Float32Array;
|
|
19
|
+
joints: Uint32Array;
|
|
20
|
+
weights: Float32Array;
|
|
21
|
+
}
|
|
22
|
+
export interface FitBoneCapsulesInput {
|
|
23
|
+
jointCount: number;
|
|
24
|
+
/** glTF inverse-bind matrices, column-major, `jointCount × 16`. */
|
|
25
|
+
inverseBindMatrices: Float32Array;
|
|
26
|
+
skin: SkinVertices;
|
|
27
|
+
/** A vertex joins a bone only if its dominant weight ≥ this (default 0.5). */
|
|
28
|
+
minWeight?: number;
|
|
29
|
+
/** Bones with fewer assigned vertices than this get no capsule (default 6). */
|
|
30
|
+
minVertices?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface BoneCapsule {
|
|
33
|
+
jointIndex: number;
|
|
34
|
+
offsetPosition: Vec3;
|
|
35
|
+
offsetRotation: Quat;
|
|
36
|
+
radius: number;
|
|
37
|
+
halfHeight: number;
|
|
38
|
+
}
|
|
39
|
+
export declare function fitBoneCapsules(input: FitBoneCapsulesInput): BoneCapsule[];
|