@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,64 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Database } from "@adobe/data/ecs";
|
|
4
|
+
import { createStructBuffer, copyToGPUBuffer, getStructLayout, type TypedBuffer } from "@adobe/data/typed-buffer";
|
|
5
|
+
import { Light } from "../light/light.js";
|
|
6
|
+
import { Camera } from "../../camera/camera.js";
|
|
7
|
+
import { SceneUniforms } from "./scene-uniforms.js";
|
|
8
|
+
// Import the schema from its own module, not via the SceneUniforms namespace:
|
|
9
|
+
// this runs at module load and the namespace barrel cycles back here, leaving
|
|
10
|
+
// `SceneUniforms.schema` undefined under Node's load order (browsers tolerate it
|
|
11
|
+
// via live bindings). The direct import has no cycle.
|
|
12
|
+
import { schema as sceneUniformsSchema } from "./schema.js";
|
|
13
|
+
|
|
14
|
+
const sceneUniformsStructLayout = getStructLayout(sceneUniformsSchema);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* sceneUniforms
|
|
18
|
+
* query: —
|
|
19
|
+
* read:
|
|
20
|
+
* camera
|
|
21
|
+
* light
|
|
22
|
+
* write:
|
|
23
|
+
* _sceneUniformsBuffer: GPUBuffer
|
|
24
|
+
*/
|
|
25
|
+
export const plugin = Database.Plugin.create({
|
|
26
|
+
extends: Database.Plugin.combine(Camera.plugin, Light.plugin),
|
|
27
|
+
resources: {
|
|
28
|
+
_sceneUniformsBuffer: { default: null as GPUBuffer | null, transient: true },
|
|
29
|
+
},
|
|
30
|
+
systems: {
|
|
31
|
+
sceneUniformsSystem: {
|
|
32
|
+
create: db => {
|
|
33
|
+
let structBuffer: TypedBuffer<SceneUniforms> | null = null;
|
|
34
|
+
return () => {
|
|
35
|
+
const { device, light } = db.store.resources;
|
|
36
|
+
const cam = db.store.resources.camera;
|
|
37
|
+
if (!device || !cam) return;
|
|
38
|
+
|
|
39
|
+
structBuffer ??= createStructBuffer(SceneUniforms.schema, sceneUniformsStructLayout.size);
|
|
40
|
+
|
|
41
|
+
let gpuBuffer = db.store.resources._sceneUniformsBuffer;
|
|
42
|
+
if (!gpuBuffer) {
|
|
43
|
+
gpuBuffer = device.createBuffer({
|
|
44
|
+
size: sceneUniformsStructLayout.size,
|
|
45
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
46
|
+
});
|
|
47
|
+
db.store.resources._sceneUniformsBuffer = gpuBuffer;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
structBuffer.set(0, {
|
|
51
|
+
viewProjectionMatrix: Camera.toViewProjection(cam),
|
|
52
|
+
lightDirection: light.direction,
|
|
53
|
+
ambientStrength: light.ambientStrength,
|
|
54
|
+
lightColor: light.color,
|
|
55
|
+
cameraPosition: cam.position,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
db.store.resources._sceneUniformsBuffer = copyToGPUBuffer(structBuffer, device, gpuBuffer);
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
schedule: { during: ["preRender"] },
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Schema } from "@adobe/data/schema";
|
|
4
|
+
import { schema } from "./schema.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Default scene uniform struct for a single-viewport, single-directional-light setup.
|
|
8
|
+
* Use `_sceneUniforms` plugin to have this written to a GPU buffer each frame.
|
|
9
|
+
*
|
|
10
|
+
* This is a starting point, not a required contract. Consumers that need different
|
|
11
|
+
* fields (multiple lights, fog, time, etc.) should define their own schema + plugin.
|
|
12
|
+
*/
|
|
13
|
+
export type SceneUniforms = Schema.ToType<typeof schema>;
|
|
14
|
+
|
|
15
|
+
export * as SceneUniforms from "./public.js";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { F32, Mat4x4, Vec3 } from "@adobe/data/math";
|
|
4
|
+
import { Schema } from "@adobe/data/schema";
|
|
5
|
+
|
|
6
|
+
export const schema = {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
viewProjectionMatrix: Mat4x4.schema,
|
|
10
|
+
lightDirection: Vec3.schema,
|
|
11
|
+
ambientStrength: F32.schema,
|
|
12
|
+
lightColor: Vec3.schema,
|
|
13
|
+
cameraPosition: Vec3.schema,
|
|
14
|
+
},
|
|
15
|
+
required: ["viewProjectionMatrix", "lightDirection", "ambientStrength", "lightColor", "cameraPosition"],
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
} as const satisfies Schema;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
// --- Scene model (declarative authored data, no camera, no systems) ----------
|
|
4
|
+
export { scene } from "./graphics/scene/scene-plugin.js";
|
|
5
|
+
|
|
6
|
+
// --- Authoring abstractions --------------------------------------------------
|
|
7
|
+
export { animation } from "./graphics/animation/animation-plugin.js";
|
|
8
|
+
export { AnimationTrack } from "./graphics/animation/animation-track/animation-track.js";
|
|
9
|
+
export { InterpolationMode } from "./graphics/animation/interpolation-mode/interpolation-mode.js";
|
|
10
|
+
|
|
11
|
+
// --- Infrastructure ----------------------------------------------------------
|
|
12
|
+
export { core } from "./core/core-plugin.js";
|
|
13
|
+
export { FrameTime } from "./core/frame-time/frame-time.js";
|
|
14
|
+
export { graphics } from "./graphics/graphics-plugin.js";
|
|
15
|
+
|
|
16
|
+
// --- Physics: shared rigid-body data model + pluggable solver seam -----------
|
|
17
|
+
export { physicsData } from "./physics/physics-data-plugin.js";
|
|
18
|
+
export { physicsClock } from "./physics/physics-clock-plugin.js";
|
|
19
|
+
export type { PhysicsClock } from "./physics/physics-clock-plugin.js";
|
|
20
|
+
export { jointData } from "./physics/joint/joint-plugin.js";
|
|
21
|
+
export type { Joint } from "./physics/joint/joint.js";
|
|
22
|
+
export { JointType } from "./physics/joint/joint-type/joint-type.js";
|
|
23
|
+
export type { RigidBody } from "./physics/body/rigid-body.js";
|
|
24
|
+
export type { StaticCollider } from "./physics/body/static-collider.js";
|
|
25
|
+
export { BodyType } from "./physics/body/body-type/body-type.js";
|
|
26
|
+
export { ColliderShape } from "./physics/body/collider-shape/collider-shape.js";
|
|
27
|
+
export { rapierSolver } from "./physics/solvers/rapier-solver-plugin.js";
|
|
28
|
+
export { joltSolver } from "./physics/solvers/jolt-solver-plugin.js";
|
|
29
|
+
export { runSolverBenchmark } from "./physics/solvers/solver-benchmark.js";
|
|
30
|
+
export type { SolverBenchmarkOptions, SolverBenchmarkResult } from "./physics/solvers/solver-benchmark.js";
|
|
31
|
+
|
|
32
|
+
// --- Material registry (authored entities: physical + visible PBR props) ------
|
|
33
|
+
export { Material } from "./material/material.js";
|
|
34
|
+
|
|
35
|
+
// --- System plugins (consumed via aggregators) -------------------------------
|
|
36
|
+
export { transform } from "./graphics/scene/node/transform-plugin.js";
|
|
37
|
+
export { pbrCore } from "./graphics/rendering/pbr-core-plugin.js";
|
|
38
|
+
export { modelLoader } from "./graphics/scene/model/model-loader-plugin.js";
|
|
39
|
+
export { pbrSkinning } from "./graphics/rendering/skinning/skinning-plugin.js";
|
|
40
|
+
export { picking } from "./graphics/picking/picking-plugin.js";
|
|
41
|
+
export type { PickHit } from "./graphics/picking/pick-hit.js";
|
|
42
|
+
|
|
43
|
+
// --- Rendering ---------------------------------------------------------------
|
|
44
|
+
export { rendering } from "./graphics/rendering/rendering-plugin.js";
|
|
45
|
+
export { pbrIblRender } from "./graphics/rendering/ibl-render/ibl-render-plugin.js";
|
|
46
|
+
export { materialGpu } from "./graphics/rendering/material-gpu/material-gpu-plugin.js";
|
|
47
|
+
export { pbrRender } from "./graphics/rendering/pbr-render/pbr-render-plugin.js";
|
|
48
|
+
export { physicsRenderBridge } from "./graphics/rendering/pbr-render/physics-bridge-plugin.js";
|
|
49
|
+
export { displayTransform } from "./graphics/rendering/display-transform-plugin.js";
|
|
50
|
+
export { interpolation } from "./graphics/rendering/interpolation-plugin.js";
|
|
51
|
+
export { modelCollider } from "./graphics/rendering/model-collider-plugin.js";
|
|
52
|
+
export { boneColliders } from "./graphics/rendering/bone-collider-plugin.js";
|
|
53
|
+
export { ragdollTrigger } from "./graphics/rendering/ragdoll-trigger-plugin.js";
|
|
54
|
+
export { joltRagdoll } from "./graphics/rendering/jolt-ragdoll-plugin.js";
|
|
55
|
+
export { fitBoneCapsules } from "./physics/ragdoll/fit-bone-capsules.js";
|
|
56
|
+
export type { BoneCapsule } from "./physics/ragdoll/fit-bone-capsules.js";
|
|
57
|
+
export { shapeGeometry } from "./graphics/scene/model/shape/shape-geometry-plugin.js";
|
|
58
|
+
|
|
59
|
+
// --- Types (type + namespace, access .plugin for the ECS plugin) -------------
|
|
60
|
+
export { Camera } from "./graphics/camera/camera.js";
|
|
61
|
+
export { Light } from "./graphics/scene/light/light.js";
|
|
62
|
+
export { Orbit } from "./graphics/camera/orbit/orbit.js";
|
|
63
|
+
export { Node } from "./graphics/scene/node/node.js";
|
|
64
|
+
export { Model } from "./graphics/scene/model/model.js";
|
|
65
|
+
export { Geometry } from "./graphics/scene/model/geometry/geometry.js";
|
|
66
|
+
export { SceneUniforms } from "./graphics/scene/scene-uniforms/scene-uniforms.js";
|
|
67
|
+
export { StandardVertex } from "./graphics/rendering/standard-vertex/standard-vertex.js";
|
|
68
|
+
export { VisibleMaterial } from "./graphics/rendering/visible-material/visible-material.js";
|
|
69
|
+
|
|
70
|
+
// --- Utilities ---------------------------------------------------------------
|
|
71
|
+
export { attachOrbitDrag } from "./graphics/camera/orbit/attach-orbit-drag.js";
|
|
72
|
+
export type { OrbitDragService } from "./graphics/camera/orbit/attach-orbit-drag.js";
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Database, Entity } from "@adobe/data/ecs";
|
|
4
|
+
import { F32, Vec3, Vec4 } from "@adobe/data/math";
|
|
5
|
+
import { standardMaterials } from "./standard-materials.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The material registry — authored materials as ECS entities (an open set;
|
|
9
|
+
* added rarely, edited never). Each `Material` row carries physical props (read
|
|
10
|
+
* by any solver) and visible PBR factors + texture-source URLs (read by the
|
|
11
|
+
* renderer). A body / model references a material by `Entity` id; the
|
|
12
|
+
* render-side `materialGpu` plugin derives GPU textures + a palette from these
|
|
13
|
+
* rows and caches them, rebuilding only when a new material appears.
|
|
14
|
+
*
|
|
15
|
+
* `seedStandardMaterials` inserts the standard library and records a
|
|
16
|
+
* `name → Entity` lookup in the `materials` resource.
|
|
17
|
+
*/
|
|
18
|
+
export const plugin = Database.Plugin.create({
|
|
19
|
+
components: {
|
|
20
|
+
/** Reference (on a body, prop, or model) to a Material registry entity. */
|
|
21
|
+
material: Entity.schema,
|
|
22
|
+
name: { type: "string" },
|
|
23
|
+
density: F32.schema,
|
|
24
|
+
restitution: F32.schema,
|
|
25
|
+
friction: F32.schema,
|
|
26
|
+
compliance: F32.schema,
|
|
27
|
+
heatCapacity: F32.schema,
|
|
28
|
+
baseColorFactor: Vec4.schema,
|
|
29
|
+
emissiveFactor: Vec3.schema,
|
|
30
|
+
metallicFactor: F32.schema,
|
|
31
|
+
roughnessFactor: F32.schema,
|
|
32
|
+
normalScale: F32.schema,
|
|
33
|
+
occlusionStrength: F32.schema,
|
|
34
|
+
baseColorUrl: { type: "string" },
|
|
35
|
+
metallicRoughnessUrl: { type: "string" },
|
|
36
|
+
normalUrl: { type: "string" },
|
|
37
|
+
occlusionUrl: { type: "string" },
|
|
38
|
+
emissiveUrl: { type: "string" },
|
|
39
|
+
},
|
|
40
|
+
resources: {
|
|
41
|
+
/** name → Material entity, populated by `seedStandardMaterials`. */
|
|
42
|
+
materials: { default: {} as Record<string, Entity> },
|
|
43
|
+
},
|
|
44
|
+
archetypes: {
|
|
45
|
+
Material: [
|
|
46
|
+
"name",
|
|
47
|
+
"density", "restitution", "friction", "compliance", "heatCapacity",
|
|
48
|
+
"baseColorFactor", "emissiveFactor", "metallicFactor", "roughnessFactor", "normalScale", "occlusionStrength",
|
|
49
|
+
"baseColorUrl", "metallicRoughnessUrl", "normalUrl", "occlusionUrl", "emissiveUrl",
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
transactions: {
|
|
53
|
+
seedStandardMaterials(t) {
|
|
54
|
+
const map: Record<string, Entity> = {};
|
|
55
|
+
for (const m of standardMaterials) {
|
|
56
|
+
map[m.name] = t.archetypes.Material.insert(m);
|
|
57
|
+
}
|
|
58
|
+
t.resources.materials = map;
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { Vec3, Vec4 } from "@adobe/data/math";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* One row of the `Material` archetype — an authored material carrying both its
|
|
7
|
+
* physical properties (read by any physics solver) and its visible PBR
|
|
8
|
+
* properties (read by the renderer / material-array builder). Materials are an
|
|
9
|
+
* open, data-driven registry, not a closed enum: add a row, never edit code.
|
|
10
|
+
*
|
|
11
|
+
* Texture maps are *sources* (URLs) fetched at runtime; `""` means "use the
|
|
12
|
+
* neutral fallback layer". `metallicRoughnessUrl` and `occlusionUrl` may point
|
|
13
|
+
* at the same ARM image (AO = R, Roughness = G, Metalness = B).
|
|
14
|
+
*/
|
|
15
|
+
export interface Material {
|
|
16
|
+
name: string;
|
|
17
|
+
// physical (read by any solver)
|
|
18
|
+
density: number;
|
|
19
|
+
restitution: number;
|
|
20
|
+
friction: number;
|
|
21
|
+
compliance: number;
|
|
22
|
+
heatCapacity: number;
|
|
23
|
+
// visible PBR factors (multipliers over the sampled maps)
|
|
24
|
+
baseColorFactor: Vec4;
|
|
25
|
+
emissiveFactor: Vec3;
|
|
26
|
+
metallicFactor: number;
|
|
27
|
+
roughnessFactor: number;
|
|
28
|
+
normalScale: number;
|
|
29
|
+
occlusionStrength: number;
|
|
30
|
+
// texture sources, fetched at runtime ("" = neutral fallback layer)
|
|
31
|
+
baseColorUrl: string;
|
|
32
|
+
metallicRoughnessUrl: string;
|
|
33
|
+
normalUrl: string;
|
|
34
|
+
occlusionUrl: string;
|
|
35
|
+
emissiveUrl: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export * as Material from "./public.js";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
//
|
|
3
|
+
// PBR texture maps © Poly Haven, CC0 (https://polyhaven.com). Fetched at
|
|
4
|
+
// runtime by URL — never committed (see data-gpu-samples/CLAUDE.md). Poly
|
|
5
|
+
// Haven's `arm` map packs AO(R) / Roughness(G) / Metalness(B), matching glTF's
|
|
6
|
+
// occlusion + metallicRoughness channel conventions.
|
|
7
|
+
|
|
8
|
+
import type { Material } from "./material.js";
|
|
9
|
+
|
|
10
|
+
const tex = (slug: string, map: string): string =>
|
|
11
|
+
`https://dl.polyhaven.org/file/ph-assets/Textures/jpg/1k/${slug}/${slug}_${map}_1k.jpg`;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A standard material: physical constants (the old material table) plus neutral
|
|
15
|
+
* visible factors — the textures supply colour / roughness / metalness, so the
|
|
16
|
+
* factors are left at 1 and baseColor white.
|
|
17
|
+
*/
|
|
18
|
+
function standard(
|
|
19
|
+
name: string, slug: string,
|
|
20
|
+
density: number, restitution: number, friction: number, compliance: number, heatCapacity: number,
|
|
21
|
+
): Material {
|
|
22
|
+
return {
|
|
23
|
+
name,
|
|
24
|
+
density, restitution, friction, compliance, heatCapacity,
|
|
25
|
+
baseColorFactor: [1, 1, 1, 1],
|
|
26
|
+
emissiveFactor: [0, 0, 0],
|
|
27
|
+
metallicFactor: 1, roughnessFactor: 1, normalScale: 1, occlusionStrength: 1,
|
|
28
|
+
baseColorUrl: tex(slug, "diff"),
|
|
29
|
+
metallicRoughnessUrl: tex(slug, "arm"),
|
|
30
|
+
normalUrl: tex(slug, "nor_gl"),
|
|
31
|
+
occlusionUrl: tex(slug, "arm"),
|
|
32
|
+
emissiveUrl: "",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** The standard material library, seeded by `seedStandardMaterials`. */
|
|
37
|
+
export const standardMaterials: readonly Material[] = [
|
|
38
|
+
standard("rubber", "rubber_tiles", 1.1, 0.80, 0.90, 1e-5, 2.0),
|
|
39
|
+
standard("wood", "wood_table_001", 0.6, 0.35, 0.70, 5e-7, 1.7),
|
|
40
|
+
standard("stone", "cobblestone_floor_08", 2.6, 0.20, 0.85, 1e-8, 0.8),
|
|
41
|
+
standard("steel", "metal_plate", 7.8, 0.45, 0.50, 1e-9, 0.5),
|
|
42
|
+
standard("ice", "snow_02", 0.92, 0.25, 0.05, 5e-9, 2.1),
|
|
43
|
+
];
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Physics — feature roadmap
|
|
2
|
+
|
|
3
|
+
A general-purpose, solver-agnostic physics layer for `@adobe/data-gpu`, suitable
|
|
4
|
+
for games, visualisation, and film/animation. Bodies are authored as ECS data
|
|
5
|
+
against a shared seam (`physicsData`); a pluggable **solver** (Jolt or Rapier)
|
|
6
|
+
advances them each frame. See `solvers/README.md` for choosing a solver.
|
|
7
|
+
|
|
8
|
+
This file is the running plan — check the box when a feature lands so we don't
|
|
9
|
+
lose track. Keep it honest about approximations and limitations.
|
|
10
|
+
|
|
11
|
+
## Done
|
|
12
|
+
|
|
13
|
+
- [x] **Pluggable solver seam** — `physicsData` + interchangeable `joltSolver` /
|
|
14
|
+
`rapierSolver`; the same authored scene runs on either.
|
|
15
|
+
- [x] **Body types** — `static`, `dynamic`, `kinematic` (kinematic driven to its
|
|
16
|
+
authored pose each step, pushing dynamics).
|
|
17
|
+
- [x] **Collider shapes** — `sphere`, `box`, `capsule`, convex `hull` (authored
|
|
18
|
+
point cloud), static `mesh` (authored triangle soup).
|
|
19
|
+
- [x] **Fixed-timestep clock** (`physicsClock`, default 60 Hz, configurable) —
|
|
20
|
+
sim rate decoupled from render rate, spiral-of-death capped.
|
|
21
|
+
- [x] **Render-rate interpolation** — a pre-render pass blends prev→current into
|
|
22
|
+
the display pose (flat instances *and* the model `_worldMatrix` path).
|
|
23
|
+
- [x] **Auto-generated colliders from render geometry** — `ModelBody` /
|
|
24
|
+
`StaticModelCollider` with `colliderShape: hull | mesh` and no collision data;
|
|
25
|
+
generated from `collisionGeometry ?? geometry` (scale baked, cached). Manual
|
|
26
|
+
colliders (authored `convexPoints` / `colliderMesh`) still work.
|
|
27
|
+
- [x] **Efficient mirroring** — tag+exclude sync (O(new)), `getTypedArray`
|
|
28
|
+
write-back, reverse iteration on migrating loops.
|
|
29
|
+
|
|
30
|
+
- [x] **Joints / constraints** — `fixed`, `point` (ball), `hinge` (revolute +
|
|
31
|
+
angle limits), `cone` (swing-twist: swing cone + twist range — anatomical
|
|
32
|
+
ragdoll limits). Demo: a hanging chain + a cone-limited arm. *`cone` limits are
|
|
33
|
+
full on Jolt; the Rapier compat binding has no cone constraint, so it
|
|
34
|
+
approximates `cone` as a free `point` — use `joltSolver` for ragdoll limits.*
|
|
35
|
+
|
|
36
|
+
## Next
|
|
37
|
+
|
|
38
|
+
- [ ] **Convex decomposition** (e.g. V-HACD) for concave *dynamic* colliders.
|
|
39
|
+
*Today a single auto-`hull` is a **convex approximation** — it fills
|
|
40
|
+
concavities (a chair's legs merge). Static concave geometry should use
|
|
41
|
+
`mesh`; concave dynamic bodies need decomposition into multiple hulls.*
|
|
42
|
+
- [x] **Per-bone colliders for skinned meshes** — `fitBoneCapsules` fits one
|
|
43
|
+
capsule per bone from the skin (skinned meshes are excluded from the rigid
|
|
44
|
+
auto-collider on purpose; they deform); `boneColliders` spawns a kinematic
|
|
45
|
+
capsule per bone and tracks the animated skeleton (`jointWorldMatrix · offset`).
|
|
46
|
+
Demo: the `ragdoll` sample (CesiumMan walk). Flipping to dynamic is next.
|
|
47
|
+
- [x] **Ragdoll controller + humanoid sample** — two backends behind the shared
|
|
48
|
+
`ragdollTrigger`, shown side by side in the `ragdoll` sample (CesiumMan walks,
|
|
49
|
+
then collapses onto the floor):
|
|
50
|
+
- **`joltRagdoll`** (Jolt-native) — Jolt's `Skeleton`/`RagdollSettings`/`Ragdoll`
|
|
51
|
+
with swing-twist limits + `DisableParentChildCollisions`; `DriveToPoseUsing-
|
|
52
|
+
Kinematics` while alive, falls + `GetPose` readback when limp. Built into the
|
|
53
|
+
solver's world via `_joltContext`. *Active ragdoll (`DriveToPoseUsingMotors`)
|
|
54
|
+
+ velocity-seeding from the last animated motion are easy follow-ups.*
|
|
55
|
+
- **`boneColliders`** (generic) — our per-bone capsules + cone (Jolt) / free-ball
|
|
56
|
+
(Rapier) joints; `kinematic→dynamic` flip + `reconcileRagdoll` (world↔local)
|
|
57
|
+
so the skin flops. Runs on any solver. *Per-joint limit tuning is a follow-up.*
|
|
58
|
+
- [ ] **Collision events + groups/masks + sensors** — contact callbacks drained
|
|
59
|
+
to ECS; per-body layer masks; overlap-only sensor colliders.
|
|
60
|
+
- [ ] **Spatial queries** — raycast / shape-cast / overlap against the broadphase
|
|
61
|
+
(picking, line-of-sight, ground checks).
|
|
62
|
+
- [ ] **`uint32`-indexed primitives** — flat-shaded collider/render meshes
|
|
63
|
+
currently emit `uint16` indices (fine for authored ramps/props, not dense
|
|
64
|
+
terrain).
|
|
65
|
+
- [ ] **Deterministic headless joint tests** — the manual frame-stepping harness
|
|
66
|
+
(used by the solver benchmark) mis-times joint formation against async WASM
|
|
67
|
+
init, so joints are currently verified in-browser only. A proper harness
|
|
68
|
+
(await solver-ready before inserting bodies/joints) would let us assert e.g.
|
|
69
|
+
the cone clamp numerically.
|
|
70
|
+
- [ ] **Active ragdoll** — motorised joints driving toward the animation pose
|
|
71
|
+
while dynamic (struck-but-recovers).
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Schema } from "@adobe/data/schema";
|
|
4
|
+
import { schema } from "./schema.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* How the solver treats a body:
|
|
8
|
+
* static — never integrated; an immovable collider (the bulk of a scene).
|
|
9
|
+
* dynamic — fully simulated.
|
|
10
|
+
* kinematic — moved by external code; pushes dynamics but isn't pushed back.
|
|
11
|
+
*/
|
|
12
|
+
export type BodyType = Schema.ToType<typeof schema>;
|
|
13
|
+
|
|
14
|
+
export * as BodyType from "./public.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { BodyType } from "./body-type.js";
|
|
4
|
+
|
|
5
|
+
/** True for bodies the solver integrates and writes back (vs static / kinematic). */
|
|
6
|
+
export function isDynamic(t: BodyType): boolean {
|
|
7
|
+
return t === "dynamic";
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Authored triangle mesh for a **static** `mesh` collider (terrain, level
|
|
5
|
+
* geometry): flat vertex positions (xyz triples) + triangle indices. Static only
|
|
6
|
+
* — a triangle soup has no interior, so it can't be a moving body. Held as a
|
|
7
|
+
* runtime object component (`colliderMesh`); the solver reads it once to build
|
|
8
|
+
* the engine trimesh, the bridge once to build the render mesh.
|
|
9
|
+
*/
|
|
10
|
+
export interface ColliderMesh {
|
|
11
|
+
positions: Float32Array; // xyz triples
|
|
12
|
+
indices: Uint32Array; // triangle list (3 indices per face)
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Schema } from "@adobe/data/schema";
|
|
4
|
+
import { schema } from "./schema.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Collider geometry. `halfExtents` carries the dimensions:
|
|
8
|
+
* box — all three axes (half-extents).
|
|
9
|
+
* sphere — `.x` is the radius.
|
|
10
|
+
* capsule — `.x` is the radius, `.y` the cylinder's half-height; Y-aligned
|
|
11
|
+
* (total height 2·(y + x)). `.z` unused.
|
|
12
|
+
* hull — convex hull of an authored `convexPoints` cloud; `halfExtents`
|
|
13
|
+
* is unused (the geometry comes from the points).
|
|
14
|
+
* mesh — authored `colliderMesh` triangle soup; **static only** (no
|
|
15
|
+
* interior). `halfExtents` unused. Terrain / level geometry.
|
|
16
|
+
*/
|
|
17
|
+
export type ColliderShape = Schema.ToType<typeof schema>;
|
|
18
|
+
|
|
19
|
+
export * as ColliderShape from "./public.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { ColliderShape } from "./collider-shape.js";
|
|
4
|
+
import { schema } from "./schema.js";
|
|
5
|
+
|
|
6
|
+
/** Stable shape order — the index is the solver's numeric shape id. */
|
|
7
|
+
export const list: readonly ColliderShape[] = schema.enum;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { ColliderShape } from "./collider-shape.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Mass + diagonal inverse inertia for a shape of the given half-extents and
|
|
7
|
+
* density. The per-shape formulas live here (with the type) rather than leaking
|
|
8
|
+
* the shape members into the solver. Allocation-free: the diagonal inverse
|
|
9
|
+
* inertia is written into `outInvInertia[o..o+2]` and the inverse mass returned
|
|
10
|
+
* (this runs per dynamic body per frame in the solver gather). Density comes
|
|
11
|
+
* from the body's material.
|
|
12
|
+
*/
|
|
13
|
+
export function massProperties(
|
|
14
|
+
shape: ColliderShape, hx: number, hy: number, hz: number, density: number,
|
|
15
|
+
outInvInertia: Float32Array, o: number,
|
|
16
|
+
): number {
|
|
17
|
+
if (shape === "box") {
|
|
18
|
+
const mass = density * 8 * hx * hy * hz;
|
|
19
|
+
const ix = (mass / 3) * (hy * hy + hz * hz);
|
|
20
|
+
const iy = (mass / 3) * (hx * hx + hz * hz);
|
|
21
|
+
const iz = (mass / 3) * (hx * hx + hy * hy);
|
|
22
|
+
outInvInertia[o] = 1 / ix; outInvInertia[o + 1] = 1 / iy; outInvInertia[o + 2] = 1 / iz;
|
|
23
|
+
return 1 / mass;
|
|
24
|
+
}
|
|
25
|
+
if (shape === "capsule") {
|
|
26
|
+
// Y-aligned: radius r = hx, cylinder half-height = hy (length L = 2·hy).
|
|
27
|
+
// A cylinder plus two hemispheres (together one sphere of radius r).
|
|
28
|
+
const r = hx, L = 2 * hy;
|
|
29
|
+
const mc = density * Math.PI * r * r * L; // cylinder
|
|
30
|
+
const ms = density * (4 / 3) * Math.PI * r * r * r; // two hemispheres = a sphere
|
|
31
|
+
const mass = mc + ms;
|
|
32
|
+
// axial (Y): cylinder ½mc r² + sphere ⅖ms r²
|
|
33
|
+
const iy = 0.5 * mc * r * r + 0.4 * ms * r * r;
|
|
34
|
+
// transverse (X = Z): cylinder about centre, plus each hemisphere's own
|
|
35
|
+
// inertia (83/320·mh r²) shifted by parallel axis to the capsule centre
|
|
36
|
+
// (COM offset L/2 + 3r/8). See standard capsule-inertia derivation.
|
|
37
|
+
const d = L / 2 + 3 * r / 8;
|
|
38
|
+
const ix = mc * (L * L / 12 + r * r / 4) + ms * ((83 / 320) * r * r + d * d);
|
|
39
|
+
outInvInertia[o] = 1 / ix; outInvInertia[o + 1] = 1 / iy; outInvInertia[o + 2] = 1 / ix;
|
|
40
|
+
return 1 / mass;
|
|
41
|
+
}
|
|
42
|
+
// sphere — radius in hx
|
|
43
|
+
const mass = density * (4 / 3) * Math.PI * hx * hx * hx;
|
|
44
|
+
const inv = 1 / (0.4 * mass * hx * hx);
|
|
45
|
+
outInvInertia[o] = inv; outInvInertia[o + 1] = inv; outInvInertia[o + 2] = inv;
|
|
46
|
+
return 1 / mass;
|
|
47
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { ColliderShape } from "./collider-shape.js";
|
|
4
|
+
|
|
5
|
+
/** The solver's numeric shape id (sphere 0, box 1, capsule 2, hull 3, mesh 4). */
|
|
6
|
+
export function toIndex(shape: ColliderShape): number {
|
|
7
|
+
return shape === "box" ? 1 : shape === "capsule" ? 2 : shape === "hull" ? 3 : shape === "mesh" ? 4 : 0;
|
|
8
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { Entity } from "@adobe/data/ecs";
|
|
4
|
+
import type { Vec3, Quat } from "@adobe/data/math";
|
|
5
|
+
import type { BodyType } from "./body-type/body-type.js";
|
|
6
|
+
import type { ColliderShape } from "./collider-shape/collider-shape.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* One row of the `RigidBody` archetype — the authored surface every physics
|
|
10
|
+
* solver reads, and whose `position`/`rotation`/velocity it writes back each
|
|
11
|
+
* frame. Mass and inertia are *derived* from `colliderShape` + `halfExtents` +
|
|
12
|
+
* `material` (see ColliderShape.massProperties), so they aren't stored here.
|
|
13
|
+
*/
|
|
14
|
+
export interface RigidBody {
|
|
15
|
+
bodyType: BodyType;
|
|
16
|
+
colliderShape: ColliderShape;
|
|
17
|
+
/** Box extents on all axes; sphere radius in `.x`. */
|
|
18
|
+
halfExtents: Vec3;
|
|
19
|
+
/** Reference to a Material registry entity (physical + visible props). */
|
|
20
|
+
material: Entity;
|
|
21
|
+
position: Vec3;
|
|
22
|
+
/** Unified with Node.rotation so a body is directly renderable. */
|
|
23
|
+
rotation: Quat;
|
|
24
|
+
linearVelocity: Vec3;
|
|
25
|
+
angularVelocity: Vec3;
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import type { Entity } from "@adobe/data/ecs";
|
|
4
|
+
import type { Vec3, Quat } from "@adobe/data/math";
|
|
5
|
+
import type { ColliderShape } from "./collider-shape/collider-shape.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* One row of the `StaticCollider` archetype — an immovable collider (floor,
|
|
9
|
+
* wall, ramp, arbitrary scenery). Dynamic bodies collide with it, but the
|
|
10
|
+
* solver never integrates it, so it carries no velocity columns: a lean
|
|
11
|
+
* representation for the bulk-static workload (many static, few dynamic).
|
|
12
|
+
*
|
|
13
|
+
* It is the same authored surface as a `RigidBody` minus `bodyType` (the
|
|
14
|
+
* archetype *is* the "static" classification) and the velocity components.
|
|
15
|
+
* Friction / restitution / compliance come from its `material`, exactly as for
|
|
16
|
+
* a dynamic body. Like a RigidBody, its `position`/`rotation` double as the
|
|
17
|
+
* renderable transform (the render bridge gives it geometry).
|
|
18
|
+
*/
|
|
19
|
+
export interface StaticCollider {
|
|
20
|
+
colliderShape: ColliderShape;
|
|
21
|
+
/** Box extents on all axes; sphere radius in `.x`. */
|
|
22
|
+
halfExtents: Vec3;
|
|
23
|
+
/** Reference to a Material registry entity (physical + visible props). */
|
|
24
|
+
material: Entity;
|
|
25
|
+
position: Vec3;
|
|
26
|
+
/** Unified with Node.rotation so the collider is directly renderable. */
|
|
27
|
+
rotation: Quat;
|
|
28
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Database, Entity } from "@adobe/data/ecs";
|
|
4
|
+
import { F32 } from "@adobe/data/schema";
|
|
5
|
+
import { Vec3 } from "@adobe/data/math";
|
|
6
|
+
import { JointType } from "./joint-type/joint-type.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* jointData — the solver-agnostic constraint data model. A `Joint` connects two
|
|
10
|
+
* bodies (`jointBodyA`/`jointBodyB`, any solver's bodies) with anchors in each
|
|
11
|
+
* body's local frame; the active solver mirrors each joint into its engine once
|
|
12
|
+
* both bodies exist (tag + exclude, like body sync). Authored only — no systems.
|
|
13
|
+
*
|
|
14
|
+
* Independent of `physicsData` (it only references bodies by `Entity`), so a
|
|
15
|
+
* solver `combine`s both. See `joint.ts` for the row type and `README.md` for
|
|
16
|
+
* the roadmap (joints are the ragdoll prerequisite).
|
|
17
|
+
*/
|
|
18
|
+
export const jointData = Database.Plugin.create({
|
|
19
|
+
components: {
|
|
20
|
+
jointType: JointType.schema,
|
|
21
|
+
jointBodyA: Entity.schema,
|
|
22
|
+
jointBodyB: Entity.schema,
|
|
23
|
+
jointAnchorA: Vec3.schema, // anchor on body A, A-local
|
|
24
|
+
jointAnchorB: Vec3.schema, // anchor on body B, B-local
|
|
25
|
+
jointAxis: Vec3.schema, // hinge/cone reference axis (A-local); unused for fixed/point
|
|
26
|
+
jointMinLimit: F32.schema, // hinge angle / cone twist lower bound (rad); min >= max ⇒ no limit
|
|
27
|
+
jointMaxLimit: F32.schema, // hinge angle / cone twist upper bound (rad)
|
|
28
|
+
jointSwingLimit: F32.schema, // cone swing half-angle (rad); cone only
|
|
29
|
+
},
|
|
30
|
+
archetypes: {
|
|
31
|
+
Joint: ["jointType", "jointBodyA", "jointBodyB", "jointAnchorA", "jointAnchorB", "jointAxis", "jointMinLimit", "jointMaxLimit", "jointSwingLimit"],
|
|
32
|
+
},
|
|
33
|
+
});
|