@adobe/data-gpu 0.9.75 → 0.9.76
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 +9 -0
- package/README.md +36 -0
- package/dist/core/core-plugin.d.ts +1 -1
- package/dist/core/public.d.ts +2 -0
- package/dist/core/public.js +4 -0
- package/dist/core/public.js.map +1 -0
- package/dist/graphics/animation/animation-data-plugin.d.ts +8 -0
- package/dist/graphics/animation/animation-plugin.d.ts +10 -2
- package/dist/graphics/camera/camera-plugin.d.ts +3 -3
- package/dist/graphics/camera/orbit/attach-orbit-drag.d.ts +1 -21
- package/dist/graphics/camera/orbit/attach-orbit-drag.js +0 -10
- package/dist/graphics/camera/orbit/attach-orbit-drag.js.map +1 -1
- package/dist/graphics/camera/orbit/orbit-data-plugin.d.ts +6 -6
- package/dist/graphics/camera/orbit/orbit-data-plugin.js +1 -1
- package/dist/graphics/camera/orbit/orbit-data-plugin.js.map +1 -1
- package/dist/graphics/camera/orbit/orbit-drag-service.d.ts +11 -0
- package/dist/graphics/camera/orbit/orbit-drag-service.js +3 -0
- package/dist/graphics/camera/orbit/orbit-drag-service.js.map +1 -0
- package/dist/graphics/camera/orbit/orbit-plugin.d.ts +6 -6
- package/dist/graphics/camera/orbit/orbit-system-plugin.d.ts +8 -8
- package/dist/graphics/camera/orbit/orbit-system-plugin.js +6 -9
- package/dist/graphics/camera/orbit/orbit-system-plugin.js.map +1 -1
- package/dist/graphics/camera/orbit/orbit.d.ts +5 -5
- package/dist/graphics/camera/orbit/public.d.ts +2 -2
- package/dist/graphics/camera/orbit/public.js +2 -1
- package/dist/graphics/camera/orbit/public.js.map +1 -1
- package/dist/graphics/graphics-plugin.d.ts +1 -1
- package/dist/graphics/index.d.ts +1 -0
- package/dist/graphics/index.js +3 -0
- package/dist/graphics/index.js.map +1 -0
- package/dist/graphics/picking/picking-plugin.d.ts +9871 -1912
- package/dist/graphics/picking/picking-plugin.js +3 -3
- package/dist/graphics/picking/picking-plugin.js.map +1 -1
- package/dist/graphics/public.d.ts +38 -0
- package/dist/graphics/public.js +40 -0
- package/dist/graphics/public.js.map +1 -0
- package/dist/graphics/rendering/bone-collider-plugin.d.ts +2967 -486
- package/dist/graphics/rendering/bone-collider-plugin.js +13 -12
- package/dist/graphics/rendering/bone-collider-plugin.js.map +1 -1
- package/dist/graphics/rendering/display-transform-plugin.d.ts +2 -0
- package/dist/graphics/rendering/display-transform-plugin.js +2 -2
- package/dist/graphics/rendering/display-transform-plugin.js.map +1 -1
- package/dist/graphics/rendering/ibl-render/ibl-render-plugin.d.ts +2857 -403
- package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js +9 -9
- package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js.map +1 -1
- package/dist/graphics/rendering/interpolation-plugin.d.ts +1040 -156
- package/dist/graphics/rendering/jolt-ragdoll-plugin.d.ts +3017 -538
- package/dist/graphics/rendering/jolt-ragdoll-plugin.js +6 -6
- package/dist/graphics/rendering/jolt-ragdoll-plugin.js.map +1 -1
- package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.d.ts +1123 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.js +79 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.js.map +1 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu.test.d.ts +1 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu.test.js +18 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu.test.js.map +1 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette.d.ts +25 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette.js +27 -0
- package/dist/graphics/rendering/material-palette-gpu/material-palette.js.map +1 -0
- package/dist/graphics/rendering/material-palette-gpu/palette-bind-group.d.ts +3 -0
- package/dist/graphics/rendering/material-palette-gpu/palette-bind-group.js +22 -0
- package/dist/graphics/rendering/material-palette-gpu/palette-bind-group.js.map +1 -0
- package/dist/graphics/rendering/model-collider-plugin.d.ts +2903 -663
- package/dist/graphics/rendering/model-collider-plugin.js +11 -34
- package/dist/graphics/rendering/model-collider-plugin.js.map +1 -1
- package/dist/graphics/rendering/pbr-core-plugin.d.ts +16 -8
- package/dist/graphics/rendering/pbr-core-plugin.js +16 -19
- package/dist/graphics/rendering/pbr-core-plugin.js.map +1 -1
- package/dist/graphics/rendering/pbr-render/pbr-factor-render-plugin.d.ts +3514 -0
- package/dist/graphics/rendering/pbr-render/pbr-factor-render-plugin.js +189 -0
- package/dist/graphics/rendering/pbr-render/pbr-factor-render-plugin.js.map +1 -0
- package/dist/graphics/rendering/pbr-render/pbr-factor-shader.wgsl.d.ts +7 -0
- package/dist/graphics/rendering/pbr-render/pbr-factor-shader.wgsl.js +124 -0
- package/dist/graphics/rendering/pbr-render/pbr-factor-shader.wgsl.js.map +1 -0
- package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.d.ts +769 -571
- package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js +98 -79
- package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js.map +1 -1
- package/dist/graphics/rendering/pbr-render/primitive-render-shared.d.ts +43 -0
- package/dist/graphics/rendering/pbr-render/primitive-render-shared.js +59 -0
- package/dist/graphics/rendering/pbr-render/primitive-render-shared.js.map +1 -0
- package/dist/graphics/rendering/skinning/skinning-plugin.d.ts +2930 -270
- package/dist/graphics/rendering/skinning/skinning-plugin.js +19 -40
- package/dist/graphics/rendering/skinning/skinning-plugin.js.map +1 -1
- package/dist/graphics/scene/model/geometry/public.d.ts +1 -0
- package/dist/graphics/scene/model/mesh/mesh.d.ts +13 -0
- package/dist/graphics/scene/model/mesh/mesh.js +3 -0
- package/dist/graphics/scene/model/mesh/mesh.js.map +1 -0
- package/dist/graphics/scene/model/mesh/public.d.ts +1 -0
- package/dist/graphics/scene/model/mesh/public.js +3 -0
- package/dist/graphics/scene/model/mesh/public.js.map +1 -0
- package/dist/graphics/scene/model/mesh-plugin.d.ts +5177 -0
- package/dist/graphics/scene/model/mesh-plugin.js +87 -0
- package/dist/graphics/scene/model/mesh-plugin.js.map +1 -0
- package/dist/graphics/scene/model/model-loader-plugin.d.ts +2728 -295
- package/dist/graphics/scene/model/model-loader-plugin.js +24 -42
- package/dist/graphics/scene/model/model-loader-plugin.js.map +1 -1
- package/dist/graphics/scene/model/model-plugin.d.ts +1 -352
- package/dist/graphics/scene/model/model-plugin.js +1 -37
- package/dist/graphics/scene/model/model-plugin.js.map +1 -1
- package/dist/graphics/scene/model/model.d.ts +2 -6
- package/dist/graphics/scene/model/model.js.map +1 -1
- package/dist/graphics/scene/model/public.d.ts +1 -1
- package/dist/graphics/scene/model/public.js +2 -1
- package/dist/graphics/scene/model/public.js.map +1 -1
- package/dist/graphics/scene/model/shape/bounds-from-shape-mesh.d.ts +4 -0
- package/dist/graphics/scene/model/shape/bounds-from-shape-mesh.js +25 -0
- package/dist/graphics/scene/model/shape/bounds-from-shape-mesh.js.map +1 -0
- package/dist/graphics/scene/model/shape/shape-geometry-plugin.d.ts +233 -386
- package/dist/graphics/scene/model/shape/shape-geometry-plugin.js +87 -18
- package/dist/graphics/scene/model/shape/shape-geometry-plugin.js.map +1 -1
- package/dist/graphics/scene/model/shape/shape-spec.d.ts +17 -0
- package/dist/graphics/scene/model/shape/shape-spec.js +3 -0
- package/dist/graphics/scene/model/shape/shape-spec.js.map +1 -0
- package/dist/graphics/scene/model/world-bounds-plugin.d.ts +2670 -245
- package/dist/graphics/scene/model/world-bounds-plugin.js +6 -25
- package/dist/graphics/scene/model/world-bounds-plugin.js.map +1 -1
- package/dist/graphics/scene/node/node-data-plugin.d.ts +15 -4
- package/dist/graphics/scene/node/node-data-plugin.js +12 -5
- package/dist/graphics/scene/node/node-data-plugin.js.map +1 -1
- package/dist/graphics/scene/node/node-data-plugin.test.d.ts +1 -0
- package/dist/graphics/scene/node/node-data-plugin.test.js +40 -0
- package/dist/graphics/scene/node/node-data-plugin.test.js.map +1 -0
- package/dist/graphics/scene/node/node-plugin.d.ts +8 -1
- package/dist/graphics/scene/node/transform-plugin.d.ts +8 -1
- package/dist/graphics/scene/scene-plugin.d.ts +2353 -100
- package/dist/graphics/scene/scene-plugin.js +3 -3
- package/dist/graphics/scene/scene-plugin.js.map +1 -1
- package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.d.ts +3 -3
- package/dist/index.d.ts +1 -53
- package/dist/index.js +1 -54
- package/dist/index.js.map +1 -1
- package/dist/material/assemble-material-row.d.ts +4 -0
- package/dist/material/assemble-material-row.js +22 -0
- package/dist/material/assemble-material-row.js.map +1 -0
- package/dist/material/definitions.d.ts +833 -0
- package/dist/material/definitions.js +423 -0
- package/dist/material/definitions.js.map +1 -0
- package/dist/material/emission-mode.d.ts +8 -0
- package/dist/material/emission-mode.js +9 -0
- package/dist/material/emission-mode.js.map +1 -0
- package/dist/material/index.d.ts +1 -0
- package/dist/material/index.js +3 -0
- package/dist/material/index.js.map +1 -0
- package/dist/material/json/from-json-string.d.ts +2 -0
- package/dist/material/json/from-json-string.js +12 -0
- package/dist/material/json/from-json-string.js.map +1 -0
- package/dist/material/json/from-json.d.ts +10 -0
- package/dist/material/json/from-json.js +16 -0
- package/dist/material/json/from-json.js.map +1 -0
- package/dist/material/json/from-json.test.d.ts +1 -0
- package/dist/material/json/from-json.test.js +46 -0
- package/dist/material/json/from-json.test.js.map +1 -0
- package/dist/material/json/is-properties-json.d.ts +2 -0
- package/dist/material/json/is-properties-json.js +65 -0
- package/dist/material/json/is-properties-json.js.map +1 -0
- package/dist/material/json/library-json.d.ts +3 -0
- package/dist/material/json/library-json.js +2 -0
- package/dist/material/json/library-json.js.map +1 -0
- package/dist/material/json/load-json.d.ts +7 -0
- package/dist/material/json/load-json.js +10 -0
- package/dist/material/json/load-json.js.map +1 -0
- package/dist/material/json/properties-json.d.ts +25 -0
- package/dist/material/json/properties-json.js +2 -0
- package/dist/material/json/properties-json.js.map +1 -0
- package/dist/material/json/public.d.ts +9 -0
- package/dist/material/json/public.js +6 -0
- package/dist/material/json/public.js.map +1 -0
- package/dist/material/json/to-definition.d.ts +5 -0
- package/dist/material/json/to-definition.js +65 -0
- package/dist/material/json/to-definition.js.map +1 -0
- package/dist/material/material-by-name-lookup.d.ts +11 -0
- package/dist/material/material-by-name-lookup.js +3 -0
- package/dist/material/material-by-name-lookup.js.map +1 -0
- package/dist/material/material-defaults.d.ts +23 -0
- package/dist/material/material-defaults.js +25 -0
- package/dist/material/material-defaults.js.map +1 -0
- package/dist/material/material-definition.d.ts +3 -0
- package/dist/material/material-definition.js +2 -0
- package/dist/material/material-definition.js.map +1 -0
- package/dist/material/material-name.d.ts +2 -0
- package/dist/material/material-name.js +2 -0
- package/dist/material/material-name.js.map +1 -0
- package/dist/material/material-plugin.d.ts +891 -22
- package/dist/material/material-plugin.js +46 -21
- package/dist/material/material-plugin.js.map +1 -1
- package/dist/material/material-plugin.test.d.ts +1 -0
- package/dist/material/material-plugin.test.js +87 -0
- package/dist/material/material-plugin.test.js.map +1 -0
- package/dist/material/material.d.ts +27 -29
- package/dist/material/material.js +0 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/public.d.ts +12 -2
- package/dist/material/public.js +12 -2
- package/dist/material/public.js.map +1 -1
- package/dist/material/require-material.d.ts +4 -0
- package/dist/material/require-material.js +10 -0
- package/dist/material/require-material.js.map +1 -0
- package/dist/material/standard-material-names.d.ts +2 -0
- package/dist/material/standard-material-names.js +4 -0
- package/dist/material/standard-material-names.js.map +1 -0
- package/dist/material/standard-materials.d.ts +1 -1
- package/dist/material/standard-materials.js +17 -24
- package/dist/material/standard-materials.js.map +1 -1
- package/dist/material/stress-strain-curve/create.d.ts +8 -0
- package/dist/material/stress-strain-curve/create.js +2 -0
- package/dist/material/stress-strain-curve/create.js.map +1 -0
- package/dist/material/stress-strain-curve/public.d.ts +2 -0
- package/dist/material/stress-strain-curve/public.js +3 -0
- package/dist/material/stress-strain-curve/public.js.map +1 -0
- package/dist/material/stress-strain-curve/schema.d.ts +52 -0
- package/dist/material/stress-strain-curve/schema.js +19 -0
- package/dist/material/stress-strain-curve/schema.js.map +1 -0
- package/dist/material/stress-strain-curve/schema.test.d.ts +1 -0
- package/dist/material/stress-strain-curve/schema.test.js +18 -0
- package/dist/material/stress-strain-curve/schema.test.js.map +1 -0
- package/dist/material/stress-strain-curve/stress-strain-curve.d.ts +4 -0
- package/dist/material/stress-strain-curve/stress-strain-curve.js +2 -0
- package/dist/material/stress-strain-curve/stress-strain-curve.js.map +1 -0
- package/dist/physics/body/collider-shape/mass-from-volume.d.ts +2 -0
- package/dist/physics/body/collider-shape/mass-from-volume.js +4 -0
- package/dist/physics/body/collider-shape/mass-from-volume.js.map +1 -0
- package/dist/physics/body/collider-shape/mass-from-volume.test.d.ts +1 -0
- package/dist/physics/body/collider-shape/mass-from-volume.test.js +8 -0
- package/dist/physics/body/collider-shape/mass-from-volume.test.js.map +1 -0
- package/dist/physics/collider-primitive-render-archetype.d.ts +2 -0
- package/dist/physics/collider-primitive-render-archetype.js +3 -0
- package/dist/physics/collider-primitive-render-archetype.js.map +1 -0
- package/dist/physics/collider-primitive-render-archetypes.d.ts +2 -0
- package/dist/physics/collider-primitive-render-archetypes.js +9 -0
- package/dist/physics/collider-primitive-render-archetypes.js.map +1 -0
- package/dist/physics/index.d.ts +1 -0
- package/dist/physics/index.js +3 -0
- package/dist/physics/index.js.map +1 -0
- package/dist/physics/is-voxel-shape-physics-pending.d.ts +3 -0
- package/dist/physics/is-voxel-shape-physics-pending.js +7 -0
- package/dist/physics/is-voxel-shape-physics-pending.js.map +1 -0
- package/dist/physics/physics-clock/physics-clock.d.ts +15 -0
- package/dist/physics/physics-clock/physics-clock.js +3 -0
- package/dist/physics/physics-clock/physics-clock.js.map +1 -0
- package/dist/physics/physics-clock-plugin.d.ts +2 -22
- package/dist/physics/physics-clock-plugin.js +0 -2
- package/dist/physics/physics-clock-plugin.js.map +1 -1
- package/dist/physics/physics-clock.test.js.map +1 -1
- package/dist/physics/physics-data-plugin.d.ts +889 -13
- package/dist/physics/physics-data-plugin.js +8 -6
- package/dist/physics/physics-data-plugin.js.map +1 -1
- package/dist/physics/public.d.ts +21 -0
- package/dist/physics/public.js +23 -0
- package/dist/physics/public.js.map +1 -0
- package/dist/physics/ragdoll/bone-capsule.d.ts +8 -0
- package/dist/physics/ragdoll/bone-capsule.js +3 -0
- package/dist/physics/ragdoll/bone-capsule.js.map +1 -0
- package/dist/physics/ragdoll/fit-bone-capsules-input.d.ts +11 -0
- package/dist/physics/ragdoll/fit-bone-capsules-input.js +3 -0
- package/dist/physics/ragdoll/fit-bone-capsules-input.js.map +1 -0
- package/dist/physics/ragdoll/fit-bone-capsules.d.ts +2 -38
- package/dist/physics/ragdoll/fit-bone-capsules.js +13 -0
- package/dist/physics/ragdoll/fit-bone-capsules.js.map +1 -1
- package/dist/physics/ragdoll/fit-bone-capsules.test.js.map +1 -1
- package/dist/physics/ragdoll/skin-vertices.d.ts +6 -0
- package/dist/physics/ragdoll/skin-vertices.js +3 -0
- package/dist/physics/ragdoll/skin-vertices.js.map +1 -0
- package/dist/physics/rigid-body-components.d.ts +2 -0
- package/dist/physics/rigid-body-components.js +13 -0
- package/dist/physics/rigid-body-components.js.map +1 -0
- package/dist/physics/solvers/jolt-solver-plugin.d.ts +918 -41
- package/dist/physics/solvers/jolt-solver-plugin.js +19 -3
- package/dist/physics/solvers/jolt-solver-plugin.js.map +1 -1
- package/dist/physics/solvers/rapier-solver-plugin.d.ts +918 -41
- package/dist/physics/solvers/rapier-solver-plugin.js +7 -2
- package/dist/physics/solvers/rapier-solver-plugin.js.map +1 -1
- package/dist/physics/solvers/solver-benchmark-options.d.ts +14 -0
- package/dist/physics/solvers/solver-benchmark-options.js +3 -0
- package/dist/physics/solvers/solver-benchmark-options.js.map +1 -0
- package/dist/physics/solvers/solver-benchmark-result.d.ts +15 -0
- package/dist/physics/solvers/solver-benchmark-result.js +3 -0
- package/dist/physics/solvers/solver-benchmark-result.js.map +1 -0
- package/dist/physics/solvers/solver-benchmark.d.ts +2 -43
- package/dist/physics/solvers/solver-benchmark.js.map +1 -1
- package/dist/physics/static-collider-components.d.ts +2 -0
- package/dist/physics/static-collider-components.js +10 -0
- package/dist/physics/static-collider-components.js.map +1 -0
- package/package.json +14 -2
- package/src/core/public.ts +4 -0
- package/src/graphics/camera/orbit/attach-orbit-drag.ts +7 -27
- package/src/graphics/camera/orbit/orbit-data-plugin.ts +1 -1
- package/src/graphics/camera/orbit/orbit-drag-service.ts +13 -0
- package/src/graphics/camera/orbit/orbit-system-plugin.ts +6 -9
- package/src/graphics/camera/orbit/orbit.ts +5 -5
- package/src/graphics/camera/orbit/public.ts +2 -2
- package/src/graphics/index.ts +3 -0
- package/src/graphics/picking/picking-plugin.ts +4 -4
- package/src/graphics/public.ts +40 -0
- package/src/graphics/rendering/bone-collider-plugin.ts +16 -12
- package/src/graphics/rendering/display-transform-plugin.ts +2 -2
- package/src/graphics/rendering/ibl-render/ibl-render-plugin.ts +9 -9
- package/src/graphics/rendering/interpolation.test.ts +1 -1
- package/src/graphics/rendering/jolt-ragdoll-plugin.ts +11 -7
- package/src/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.ts +86 -0
- package/src/graphics/rendering/material-palette-gpu/material-palette-gpu.test.ts +20 -0
- package/src/graphics/rendering/material-palette-gpu/material-palette.ts +41 -0
- package/src/graphics/rendering/material-palette-gpu/palette-bind-group.ts +24 -0
- package/src/graphics/rendering/model-collider-plugin.ts +19 -35
- package/src/graphics/rendering/pbr-core-plugin.ts +16 -19
- package/src/graphics/rendering/pbr-render/{pbr-render-plugin.ts → pbr-factor-render-plugin.ts} +60 -111
- package/src/graphics/rendering/pbr-render/{pbr-array-shader.wgsl.ts → pbr-factor-shader.wgsl.ts} +19 -40
- package/src/graphics/rendering/pbr-render/physics-bridge-plugin.ts +95 -69
- package/src/graphics/rendering/pbr-render/primitive-render-shared.ts +76 -0
- package/src/graphics/rendering/skinning/skinning-plugin.ts +23 -41
- package/src/graphics/scene/model/geometry/public.ts +1 -1
- package/src/graphics/scene/model/mesh/mesh.ts +18 -0
- package/src/graphics/scene/model/mesh/public.ts +3 -0
- package/src/graphics/scene/model/mesh-plugin.ts +102 -0
- package/src/graphics/scene/model/model-loader-plugin.ts +25 -43
- package/src/graphics/scene/model/model-plugin.ts +1 -44
- package/src/graphics/scene/model/model.ts +2 -6
- package/src/graphics/scene/model/public.ts +3 -1
- package/src/graphics/scene/model/shape/bounds-from-shape-mesh.ts +20 -0
- package/src/graphics/scene/model/shape/shape-geometry-plugin.ts +97 -18
- package/src/graphics/scene/model/shape/shape-spec.ts +9 -0
- package/src/graphics/scene/model/world-bounds-plugin.ts +6 -25
- package/src/graphics/scene/node/node-data-plugin.test.ts +47 -0
- package/src/graphics/scene/node/node-data-plugin.ts +12 -5
- package/src/graphics/scene/scene-plugin.ts +3 -3
- package/src/index.ts +1 -70
- package/src/material/assemble-material-row.ts +26 -0
- package/src/material/definitions.ts +427 -0
- package/src/material/emission-mode.ts +11 -0
- package/src/material/index.ts +3 -0
- package/src/material/json/from-json-string.ts +11 -0
- package/src/material/json/from-json.test.ts +50 -0
- package/src/material/json/from-json.ts +23 -0
- package/src/material/json/is-properties-json.ts +77 -0
- package/src/material/json/library-json.ts +4 -0
- package/src/material/json/load-json.ts +15 -0
- package/src/material/json/properties-json.ts +25 -0
- package/src/material/json/public.ts +9 -0
- package/src/material/json/to-definition.ts +70 -0
- package/src/material/material-by-name-lookup.ts +10 -0
- package/src/material/material-defaults.ts +26 -0
- package/src/material/material-definition.ts +4 -0
- package/src/material/material-name.ts +3 -0
- package/src/material/material-plugin.test.ts +97 -0
- package/src/material/material-plugin.ts +67 -39
- package/src/material/material.ts +35 -34
- package/src/material/public.ts +12 -2
- package/src/material/require-material.ts +15 -0
- package/src/material/standard-material-names.ts +4 -0
- package/src/material/standard-materials.ts +21 -27
- package/src/material/stress-strain-curve/create.ts +9 -0
- package/src/material/stress-strain-curve/public.ts +2 -0
- package/src/material/stress-strain-curve/schema.test.ts +20 -0
- package/src/material/stress-strain-curve/schema.ts +20 -0
- package/src/material/stress-strain-curve/stress-strain-curve.ts +11 -0
- package/src/physics/README.md +9 -1
- package/src/physics/body/collider-shape/mass-from-volume.test.ts +8 -0
- package/src/physics/body/collider-shape/mass-from-volume.ts +4 -0
- package/src/physics/collider-primitive-render-archetype.ts +5 -0
- package/src/physics/collider-primitive-render-archetypes.ts +9 -0
- package/src/physics/index.ts +3 -0
- package/src/physics/is-voxel-shape-physics-pending.ts +9 -0
- package/src/physics/physics-clock/physics-clock.ts +17 -0
- package/src/physics/physics-clock-plugin.ts +1 -24
- package/src/physics/physics-clock.test.ts +2 -1
- package/src/physics/physics-data-plugin.ts +8 -6
- package/src/physics/public.ts +23 -0
- package/src/physics/ragdoll/bone-capsule.ts +11 -0
- package/src/physics/ragdoll/fit-bone-capsules-input.ts +14 -0
- package/src/physics/ragdoll/fit-bone-capsules.test.ts +2 -1
- package/src/physics/ragdoll/fit-bone-capsules.ts +2 -27
- package/src/physics/ragdoll/skin-vertices.ts +8 -0
- package/src/physics/rigid-body-components.ts +13 -0
- package/src/physics/solvers/README.md +4 -0
- package/src/physics/solvers/jolt-solver-plugin.ts +19 -5
- package/src/physics/solvers/rapier-solver-plugin.ts +5 -2
- package/src/physics/solvers/solver-benchmark-options.ts +16 -0
- package/src/physics/solvers/solver-benchmark-result.ts +17 -0
- package/src/physics/solvers/solver-benchmark.ts +2 -35
- package/src/physics/static-collider-components.ts +10 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/src/graphics/rendering/material-gpu/material-arrays.ts +0 -113
- package/src/graphics/rendering/material-gpu/material-bind-group.ts +0 -61
- package/src/graphics/rendering/material-gpu/material-gpu-plugin.ts +0 -95
- package/src/graphics/scene/model/geometry/geometry.ts +0 -12
|
@@ -264,18 +264,18 @@ export const pbrIblRender = Database.Plugin.create({
|
|
|
264
264
|
// from each Model's `_worldMatrix` component (written by _transform).
|
|
265
265
|
interface ModelEntry { id: number; matrix: Mat4x4 }
|
|
266
266
|
const modelsByGeo = new Map<number, ModelEntry[]>();
|
|
267
|
-
for (const arch of db.store.queryArchetypes(["
|
|
267
|
+
for (const arch of db.store.queryArchetypes(["mesh", "visible", "_worldMatrix"])) {
|
|
268
268
|
const ids = arch.columns.id;
|
|
269
|
-
const
|
|
269
|
+
const meshRefs = arch.columns.mesh;
|
|
270
270
|
const vis = arch.columns.visible;
|
|
271
271
|
const worldMats = arch.columns._worldMatrix;
|
|
272
272
|
for (let i = 0; i < arch.rowCount; i++) {
|
|
273
273
|
if (!vis.get(i)) continue;
|
|
274
274
|
const id = ids.get(i);
|
|
275
275
|
const m = worldMats.get(i);
|
|
276
|
-
const
|
|
277
|
-
let arr = modelsByGeo.get(
|
|
278
|
-
if (!arr) { arr = []; modelsByGeo.set(
|
|
276
|
+
const meshId = meshRefs.get(i);
|
|
277
|
+
let arr = modelsByGeo.get(meshId);
|
|
278
|
+
if (!arr) { arr = []; modelsByGeo.set(meshId, arr); }
|
|
279
279
|
arr.push({ id, matrix: m });
|
|
280
280
|
}
|
|
281
281
|
}
|
|
@@ -315,7 +315,7 @@ export const pbrIblRender = Database.Plugin.create({
|
|
|
315
315
|
"_indexCount",
|
|
316
316
|
"_indexFormat",
|
|
317
317
|
"_material",
|
|
318
|
-
"
|
|
318
|
+
"_mesh",
|
|
319
319
|
"_nodeLocalMatrix",
|
|
320
320
|
])) {
|
|
321
321
|
const vbs = archetype.columns._vertexBuffer;
|
|
@@ -324,12 +324,12 @@ export const pbrIblRender = Database.Plugin.create({
|
|
|
324
324
|
const counts = archetype.columns._indexCount;
|
|
325
325
|
const formats = archetype.columns._indexFormat;
|
|
326
326
|
const matRefs = archetype.columns._material;
|
|
327
|
-
const
|
|
327
|
+
const meshRefs = archetype.columns._mesh;
|
|
328
328
|
const nodeMats = archetype.columns._nodeLocalMatrix;
|
|
329
329
|
const primIds = archetype.columns.id;
|
|
330
330
|
for (let i = 0; i < archetype.rowCount; i++) {
|
|
331
|
-
const
|
|
332
|
-
const models = modelsByGeo.get(
|
|
331
|
+
const meshId = meshRefs.get(i);
|
|
332
|
+
const models = modelsByGeo.get(meshId);
|
|
333
333
|
if (!models) continue;
|
|
334
334
|
|
|
335
335
|
const skinBuf = skinVbs.get(i);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { describe, it, expect } from "vitest";
|
|
4
4
|
import { Database } from "@adobe/data/ecs";
|
|
5
5
|
import { interpolation } from "./interpolation-plugin.js";
|
|
6
|
-
import type { PhysicsClock } from "../../physics/physics-clock-
|
|
6
|
+
import type { PhysicsClock } from "../../physics/physics-clock/physics-clock.js";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* The interpolation pass turns the fixed-step sim state into a smooth render pose.
|
|
@@ -26,7 +26,11 @@ import type { JointTemplate } from "../scene/model/gltf/parse-skin.js";
|
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
28
|
type Jolt = JoltContext["jolt"];
|
|
29
|
-
interface SkinGeo {
|
|
29
|
+
interface SkinGeo {
|
|
30
|
+
cpuSkin?: { positions: Float32Array; joints: Uint32Array; weights: Float32Array } | null;
|
|
31
|
+
skinInverseBindMatrices?: Float32Array | null;
|
|
32
|
+
skinJointTemplate?: JointTemplate[];
|
|
33
|
+
}
|
|
30
34
|
|
|
31
35
|
/** Column-major rigid transform from a position + unit quaternion. */
|
|
32
36
|
const compose = (px: number, py: number, pz: number, q: ArrayLike<number>): Mat4x4 =>
|
|
@@ -63,9 +67,9 @@ export const joltRagdoll = Database.Plugin.create({
|
|
|
63
67
|
const jointWorld = (j: Entity): Mat4x4 => (db.store.get(j, "_worldMatrix") as Mat4x4 | undefined) ?? Mat4x4.identity;
|
|
64
68
|
|
|
65
69
|
const build = (ctx: JoltContext, jointIds: readonly Entity[], g: SkinGeo): void => {
|
|
66
|
-
const jolt = ctx.jolt, template = g.
|
|
70
|
+
const jolt = ctx.jolt, template = g.skinJointTemplate!;
|
|
67
71
|
const caps = new Map<number, { radius: number; halfHeight: number; offPos: readonly number[]; offRot: readonly number[] }>();
|
|
68
|
-
for (const c of fitBoneCapsules({ jointCount: jointIds.length, inverseBindMatrices: g.
|
|
72
|
+
for (const c of fitBoneCapsules({ jointCount: jointIds.length, inverseBindMatrices: g.skinInverseBindMatrices!, skin: g.cpuSkin! }))
|
|
69
73
|
caps.set(c.jointIndex, { radius: c.radius, halfHeight: c.halfHeight, offPos: c.offsetPosition, offRot: c.offsetRotation });
|
|
70
74
|
|
|
71
75
|
const skel = new jolt.Skeleton();
|
|
@@ -123,11 +127,11 @@ export const joltRagdoll = Database.Plugin.create({
|
|
|
123
127
|
const ctx = db.store.resources._joltContext;
|
|
124
128
|
if (!ctx) return;
|
|
125
129
|
if (!built) {
|
|
126
|
-
for (const arch of db.store.queryArchetypes(["_skeletonJoints", "
|
|
127
|
-
const jc = arch.columns._skeletonJoints,
|
|
130
|
+
for (const arch of db.store.queryArchetypes(["_skeletonJoints", "_skeletonMesh"])) {
|
|
131
|
+
const jc = arch.columns._skeletonJoints, mc = arch.columns._skeletonMesh;
|
|
128
132
|
for (let i = 0; i < arch.rowCount; i++) {
|
|
129
|
-
const g = db.store.read(
|
|
130
|
-
if (!g?.
|
|
133
|
+
const g = db.store.read(mc.get(i)) as SkinGeo | null;
|
|
134
|
+
if (!g?.cpuSkin || !g.skinInverseBindMatrices || !g.skinJointTemplate?.length) continue;
|
|
131
135
|
build(ctx, jc.get(i), g); built = true; break;
|
|
132
136
|
}
|
|
133
137
|
if (built) break;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
import { Database } from "@adobe/data/ecs";
|
|
4
|
+
import { U32 } from "@adobe/data/math";
|
|
5
|
+
import { core } from "../../../core/core-plugin.js";
|
|
6
|
+
import { Material } from "../../../material/material.js";
|
|
7
|
+
import {
|
|
8
|
+
MAX_FACTOR_PALETTE_ENTRIES,
|
|
9
|
+
PALETTE_STRIDE,
|
|
10
|
+
materialHasMaps,
|
|
11
|
+
writePaletteLayer,
|
|
12
|
+
} from "./material-palette.js";
|
|
13
|
+
import { createFactorPaletteBindGroup } from "./palette-bind-group.js";
|
|
14
|
+
|
|
15
|
+
/** Material rows the factor builder reads (PBR factors only — no map URLs). */
|
|
16
|
+
const FACTOR_MATERIAL_COMPONENTS = [
|
|
17
|
+
"baseColorFactor", "emissiveFactor", "metallicFactor", "roughnessFactor", "normalScale", "occlusionStrength",
|
|
18
|
+
"irEmission", "emissionMode",
|
|
19
|
+
"baseColorUrl", "metallicRoughnessUrl", "normalUrl", "occlusionUrl", "emissiveUrl",
|
|
20
|
+
] as const;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* materialPaletteGpu — uploads factor-only materials into a shared palette buffer.
|
|
24
|
+
* Materials with any map URL are skipped (no map upload path — use factor rows or glTF).
|
|
25
|
+
* Each factor material gets `_paletteIndex`; no texture arrays are allocated.
|
|
26
|
+
*/
|
|
27
|
+
export const materialPaletteGpu = Database.Plugin.create({
|
|
28
|
+
extends: Database.Plugin.combine(Material.plugin, core),
|
|
29
|
+
components: {
|
|
30
|
+
_paletteIndex: { ...U32.schema, nonPersistent: true },
|
|
31
|
+
},
|
|
32
|
+
resources: {
|
|
33
|
+
_factorPalette: { default: null as GPUBuffer | null, nonPersistent: true },
|
|
34
|
+
_factorPaletteBindGroup: { default: null as GPUBindGroup | null, nonPersistent: true },
|
|
35
|
+
},
|
|
36
|
+
systems: {
|
|
37
|
+
materialPaletteGpuBuilder: {
|
|
38
|
+
schedule: { during: ["preRender"] },
|
|
39
|
+
create: db => {
|
|
40
|
+
let palette: GPUBuffer | null = null;
|
|
41
|
+
let nextIndex = 0;
|
|
42
|
+
return () => {
|
|
43
|
+
const { device } = db.store.resources;
|
|
44
|
+
if (!device) return;
|
|
45
|
+
|
|
46
|
+
for (const arch of db.store.queryArchetypes(["name", ...FACTOR_MATERIAL_COMPONENTS], { exclude: ["_paletteIndex"] })) {
|
|
47
|
+
const c = arch.columns;
|
|
48
|
+
for (let i = arch.rowCount - 1; i >= 0; i--) {
|
|
49
|
+
const urls = {
|
|
50
|
+
baseColorUrl: c.baseColorUrl.get(i),
|
|
51
|
+
metallicRoughnessUrl: c.metallicRoughnessUrl.get(i),
|
|
52
|
+
normalUrl: c.normalUrl.get(i),
|
|
53
|
+
occlusionUrl: c.occlusionUrl.get(i),
|
|
54
|
+
emissiveUrl: c.emissiveUrl.get(i),
|
|
55
|
+
};
|
|
56
|
+
if (materialHasMaps(urls)) continue;
|
|
57
|
+
if (nextIndex >= MAX_FACTOR_PALETTE_ENTRIES) break;
|
|
58
|
+
|
|
59
|
+
if (!palette) {
|
|
60
|
+
palette = device.createBuffer({
|
|
61
|
+
size: MAX_FACTOR_PALETTE_ENTRIES * PALETTE_STRIDE,
|
|
62
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
63
|
+
});
|
|
64
|
+
db.store.resources._factorPalette = palette;
|
|
65
|
+
db.store.resources._factorPaletteBindGroup = createFactorPaletteBindGroup(device, palette);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const index = nextIndex++;
|
|
69
|
+
writePaletteLayer(device, palette, index, {
|
|
70
|
+
baseColorFactor: c.baseColorFactor.get(i),
|
|
71
|
+
emissiveFactor: c.emissiveFactor.get(i),
|
|
72
|
+
metallicFactor: c.metallicFactor.get(i),
|
|
73
|
+
roughnessFactor: c.roughnessFactor.get(i),
|
|
74
|
+
normalScale: c.normalScale.get(i),
|
|
75
|
+
occlusionStrength: c.occlusionStrength.get(i),
|
|
76
|
+
irEmission: c.irEmission.get(i),
|
|
77
|
+
emissionMode: c.emissionMode.get(i),
|
|
78
|
+
});
|
|
79
|
+
db.store.update(c.id.get(i), { _paletteIndex: index });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { materialHasMaps } from "./material-palette.js";
|
|
3
|
+
|
|
4
|
+
const emptyUrls = {
|
|
5
|
+
baseColorUrl: "",
|
|
6
|
+
metallicRoughnessUrl: "",
|
|
7
|
+
normalUrl: "",
|
|
8
|
+
occlusionUrl: "",
|
|
9
|
+
emissiveUrl: "",
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
describe("materialHasMaps", () => {
|
|
13
|
+
it("is false when all URLs are empty", () => {
|
|
14
|
+
expect(materialHasMaps(emptyUrls)).toBe(false);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("is true when any URL is set", () => {
|
|
18
|
+
expect(materialHasMaps({ ...emptyUrls, baseColorUrl: "https://example.com/a.jpg" })).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
/** Bytes per palette entry: 4 × vec4 (base, emissive/metal, rough/normal/occlusion/ir, emission meta). */
|
|
4
|
+
export const PALETTE_STRIDE = 64;
|
|
5
|
+
|
|
6
|
+
/** Factor-only materials — palette rows only, no map memory. */
|
|
7
|
+
export const MAX_FACTOR_PALETTE_ENTRIES = 256;
|
|
8
|
+
|
|
9
|
+
/** Per-material visible factors written into one palette row. */
|
|
10
|
+
export interface MaterialFactors {
|
|
11
|
+
baseColorFactor: readonly number[];
|
|
12
|
+
emissiveFactor: readonly number[];
|
|
13
|
+
metallicFactor: number;
|
|
14
|
+
roughnessFactor: number;
|
|
15
|
+
normalScale: number;
|
|
16
|
+
occlusionStrength: number;
|
|
17
|
+
irEmission: number;
|
|
18
|
+
emissionMode: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const _palette = new Float32Array(PALETTE_STRIDE / 4);
|
|
22
|
+
|
|
23
|
+
export function writePaletteLayer(device: GPUDevice, palette: GPUBuffer, index: number, f: MaterialFactors): void {
|
|
24
|
+
_palette[0] = f.baseColorFactor[0]; _palette[1] = f.baseColorFactor[1]; _palette[2] = f.baseColorFactor[2]; _palette[3] = f.baseColorFactor[3];
|
|
25
|
+
_palette[4] = f.emissiveFactor[0]; _palette[5] = f.emissiveFactor[1]; _palette[6] = f.emissiveFactor[2]; _palette[7] = f.metallicFactor;
|
|
26
|
+
_palette[8] = f.roughnessFactor; _palette[9] = f.normalScale; _palette[10] = f.occlusionStrength; _palette[11] = f.irEmission;
|
|
27
|
+
_palette[12] = f.emissionMode; _palette[13] = 0; _palette[14] = 0; _palette[15] = 0;
|
|
28
|
+
device.queue.writeBuffer(palette, index * PALETTE_STRIDE, _palette);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** The five map source URLs for one material ("" = factor-only). */
|
|
32
|
+
export interface MaterialMapUrls {
|
|
33
|
+
baseColorUrl: string;
|
|
34
|
+
metallicRoughnessUrl: string;
|
|
35
|
+
normalUrl: string;
|
|
36
|
+
occlusionUrl: string;
|
|
37
|
+
emissiveUrl: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const materialHasMaps = (urls: MaterialMapUrls): boolean =>
|
|
41
|
+
!!(urls.baseColorUrl || urls.metallicRoughnessUrl || urls.normalUrl || urls.occlusionUrl || urls.emissiveUrl);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
|
|
3
|
+
const layoutByDevice = new WeakMap<GPUDevice, GPUBindGroupLayout>();
|
|
4
|
+
|
|
5
|
+
/** Bind-group layout for factor PBR: palette storage buffer only (group 1). */
|
|
6
|
+
export function createFactorPaletteBindGroupLayout(device: GPUDevice): GPUBindGroupLayout {
|
|
7
|
+
let layout = layoutByDevice.get(device);
|
|
8
|
+
if (!layout) {
|
|
9
|
+
layout = device.createBindGroupLayout({
|
|
10
|
+
entries: [
|
|
11
|
+
{ binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { type: "read-only-storage" } },
|
|
12
|
+
],
|
|
13
|
+
});
|
|
14
|
+
layoutByDevice.set(device, layout);
|
|
15
|
+
}
|
|
16
|
+
return layout;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function createFactorPaletteBindGroup(device: GPUDevice, palette: GPUBuffer): GPUBindGroup {
|
|
20
|
+
return device.createBindGroup({
|
|
21
|
+
layout: createFactorPaletteBindGroupLayout(device),
|
|
22
|
+
entries: [{ binding: 0, resource: { buffer: palette } }],
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -7,64 +7,48 @@ import { modelLoader } from "../scene/model/model-loader-plugin.js";
|
|
|
7
7
|
import { hullVertices } from "../scene/model/shape/convex-hull.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* modelCollider —
|
|
11
|
-
* **auto-generated from its mesh**. A `ModelBody` (or `StaticModelCollider`) carries
|
|
12
|
-
* a `geometry` + a `colliderShape` of `"hull"` or `"mesh"` but *no* collision data;
|
|
13
|
-
* this fills it once the mesh has loaded:
|
|
14
|
-
*
|
|
15
|
-
* hull → `convexPoints` = the simplified hull vertices of the mesh (the engine
|
|
16
|
-
* rebuilds the hull) — a coarse, convex stand-in for a detailed model.
|
|
17
|
-
* mesh → `colliderMesh` = the mesh triangles verbatim (static trimesh).
|
|
18
|
-
*
|
|
19
|
-
* The source defaults to the body's own `geometry` but can be overridden with
|
|
20
|
-
* `collisionGeometry` (point it at a low-poly mesh for a cheaper collider). The
|
|
21
|
-
* model's `scale` is baked into the collision geometry so it matches the render.
|
|
22
|
-
* Generated data is cached per (source geometry, shape, scale), so many instances
|
|
23
|
-
* of one model share it. Authoring the collider by hand (supplying `convexPoints`
|
|
24
|
-
* / `colliderMesh` directly, as `ConvexBody` / `MeshCollider` do) still works and
|
|
25
|
-
* simply skips generation.
|
|
26
|
-
*
|
|
27
|
-
* Because the body already has a `geometry`, the physics render bridge leaves it
|
|
28
|
-
* alone — it renders as the detailed model and collides as the generated shape.
|
|
10
|
+
* modelCollider — auto-generates physics colliders from loaded mesh CPU data.
|
|
29
11
|
*/
|
|
30
12
|
export const modelCollider = Database.Plugin.create({
|
|
31
13
|
extends: Database.Plugin.combine(physicsData, modelLoader),
|
|
32
14
|
components: {
|
|
33
|
-
|
|
15
|
+
collisionMesh: Entity.schema,
|
|
34
16
|
},
|
|
35
17
|
archetypes: {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// A static model collider (immovable level geometry that renders as a model).
|
|
39
|
-
StaticModelCollider: ["geometry", "scale", "visible", "parent", "colliderShape", "halfExtents", "material", "position", "rotation"],
|
|
18
|
+
ModelBody: ["mesh", "scale", "visible", "parent", "bodyType", "colliderShape", "halfExtents", "material", "position", "rotation", "linearVelocity", "angularVelocity"],
|
|
19
|
+
StaticModelCollider: ["mesh", "scale", "visible", "parent", "colliderShape", "halfExtents", "material", "position", "rotation"],
|
|
40
20
|
},
|
|
41
21
|
systems: {
|
|
42
22
|
generateModelColliders: {
|
|
43
23
|
schedule: { during: ["postUpdate"] },
|
|
44
24
|
create: db => {
|
|
45
|
-
// generated collider data, shared across instances of the same (source mesh, shape, scale)
|
|
46
25
|
const cache = new Map<string, { convexPoints: Float32Array } | { colliderMesh: ColliderMesh }>();
|
|
47
26
|
return () => {
|
|
48
|
-
|
|
49
|
-
for (const arch of db.store.queryArchetypes(["colliderShape", "geometry", "scale"], { exclude: ["convexPoints", "colliderMesh"] })) {
|
|
27
|
+
for (const arch of db.store.queryArchetypes(["colliderShape", "mesh", "scale"], { exclude: ["convexPoints", "colliderMesh"] })) {
|
|
50
28
|
const ids = arch.columns.id, css = arch.columns.colliderShape, scl = arch.columns.scale;
|
|
51
|
-
// tail→head: filling the data migrates the row out of this archetype
|
|
52
29
|
for (let i = arch.rowCount - 1; i >= 0; i--) {
|
|
53
30
|
const shape = css.get(i);
|
|
54
|
-
if (shape !== "hull" && shape !== "mesh") continue;
|
|
31
|
+
if (shape !== "hull" && shape !== "mesh") continue;
|
|
55
32
|
const id = ids.get(i);
|
|
56
|
-
const src = (db.store.read(id) as {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
33
|
+
const src = (db.store.read(id) as { collisionMesh?: Entity }).collisionMesh ?? arch.columns.mesh.get(i);
|
|
34
|
+
const asset = db.store.read(src) as {
|
|
35
|
+
cpuCollisionPositions?: Float32Array | null;
|
|
36
|
+
cpuCollisionIndices?: Uint32Array | null;
|
|
37
|
+
} | null;
|
|
38
|
+
const positions = asset?.cpuCollisionPositions;
|
|
39
|
+
if (!positions) continue;
|
|
60
40
|
const s = scl.get(i), key = `${src}:${shape}:${s[0]}:${s[1]}:${s[2]}`;
|
|
61
41
|
let data = cache.get(key);
|
|
62
42
|
if (!data) {
|
|
63
43
|
const scaled = new Float32Array(positions.length);
|
|
64
|
-
for (let k = 0; k < positions.length; k += 3) {
|
|
44
|
+
for (let k = 0; k < positions.length; k += 3) {
|
|
45
|
+
scaled[k] = positions[k] * s[0];
|
|
46
|
+
scaled[k + 1] = positions[k + 1] * s[1];
|
|
47
|
+
scaled[k + 2] = positions[k + 2] * s[2];
|
|
48
|
+
}
|
|
65
49
|
data = shape === "hull"
|
|
66
50
|
? { convexPoints: hullVertices(scaled) }
|
|
67
|
-
: { colliderMesh: { positions: scaled, indices:
|
|
51
|
+
: { colliderMesh: { positions: scaled, indices: asset!.cpuCollisionIndices ?? new Uint32Array(0) } };
|
|
68
52
|
cache.set(key, data);
|
|
69
53
|
}
|
|
70
54
|
db.store.update(id, data);
|
|
@@ -5,36 +5,33 @@ import { Mat4x4 } from "@adobe/data/math";
|
|
|
5
5
|
import { U32 } from "@adobe/data/math";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* ephemeral — not part of the user's data model. Pair with an asset
|
|
11
|
-
* producer plus a renderer aggregator (`pbrIblRender`)
|
|
12
|
-
* to get drawable scenes.
|
|
8
|
+
* Ephemeral GPU mesh payloads shared between asset producers (glTF loader,
|
|
9
|
+
* shape baker) and renderers. Not part of the authored asset model.
|
|
13
10
|
*/
|
|
14
11
|
export const pbrCore = Database.Plugin.create({
|
|
15
12
|
components: {
|
|
16
|
-
_vertexBuffer: { default: null as GPUBuffer | null },
|
|
13
|
+
_vertexBuffer: { default: null as GPUBuffer | null, nonPersistent: true },
|
|
17
14
|
/** Secondary VBO with skinning attributes (joints u32×4, weights f32×4),
|
|
18
15
|
* null for static primitives. Drives skinned-pipeline dispatch. */
|
|
19
|
-
_skinVertexBuffer: { default: null as GPUBuffer | null },
|
|
20
|
-
_indexBuffer: { default: null as GPUBuffer | null },
|
|
21
|
-
_indexCount: U32.schema,
|
|
22
|
-
_indexFormat: { default: "uint16" as GPUIndexFormat },
|
|
23
|
-
_materialBindGroup: { default: null as GPUBindGroup | null },
|
|
16
|
+
_skinVertexBuffer: { default: null as GPUBuffer | null, nonPersistent: true },
|
|
17
|
+
_indexBuffer: { default: null as GPUBuffer | null, nonPersistent: true },
|
|
18
|
+
_indexCount: { ...U32.schema, nonPersistent: true },
|
|
19
|
+
_indexFormat: { default: "uint16" as GPUIndexFormat, nonPersistent: true },
|
|
20
|
+
_materialBindGroup: { default: null as GPUBindGroup | null, nonPersistent: true },
|
|
24
21
|
/** Back-reference from a _PbrPrimitive / _VisibleMaterial to the
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
_material: Entity.schema,
|
|
22
|
+
* baked mesh asset that owns it. */
|
|
23
|
+
_mesh: { ...Entity.schema, nonPersistent: true },
|
|
24
|
+
_material: { ...Entity.schema, nonPersistent: true },
|
|
28
25
|
/** Node-local-to-model-root matrix baked at load time. The renderer
|
|
29
26
|
* pre-multiplies it with the per-instance model-root world matrix. */
|
|
30
|
-
_nodeLocalMatrix: Mat4x4.schema,
|
|
27
|
+
_nodeLocalMatrix: { ...Mat4x4.schema, nonPersistent: true },
|
|
31
28
|
/** Skeleton-side back-references the renderer reads when dispatching
|
|
32
29
|
* the skinned pipeline. Populated by `pbrSkinning`. */
|
|
33
|
-
_skeletonModelRef: Entity.schema,
|
|
34
|
-
_skeletonJointMatrixBindGroup: { default: null as GPUBindGroup | null },
|
|
30
|
+
_skeletonModelRef: { ...Entity.schema, nonPersistent: true },
|
|
31
|
+
_skeletonJointMatrixBindGroup: { default: null as GPUBindGroup | null, nonPersistent: true },
|
|
35
32
|
},
|
|
36
33
|
archetypes: {
|
|
37
|
-
_VisibleMaterial: ["
|
|
38
|
-
_PbrPrimitive: ["
|
|
34
|
+
_VisibleMaterial: ["nonPersistent", "_materialBindGroup", "_mesh"],
|
|
35
|
+
_PbrPrimitive: ["nonPersistent", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_mesh", "_nodeLocalMatrix"],
|
|
39
36
|
},
|
|
40
37
|
});
|