@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.
Files changed (383) hide show
  1. package/CLAUDE.md +9 -0
  2. package/README.md +36 -0
  3. package/dist/core/core-plugin.d.ts +1 -1
  4. package/dist/core/public.d.ts +2 -0
  5. package/dist/core/public.js +4 -0
  6. package/dist/core/public.js.map +1 -0
  7. package/dist/graphics/animation/animation-data-plugin.d.ts +8 -0
  8. package/dist/graphics/animation/animation-plugin.d.ts +10 -2
  9. package/dist/graphics/camera/camera-plugin.d.ts +3 -3
  10. package/dist/graphics/camera/orbit/attach-orbit-drag.d.ts +1 -21
  11. package/dist/graphics/camera/orbit/attach-orbit-drag.js +0 -10
  12. package/dist/graphics/camera/orbit/attach-orbit-drag.js.map +1 -1
  13. package/dist/graphics/camera/orbit/orbit-data-plugin.d.ts +6 -6
  14. package/dist/graphics/camera/orbit/orbit-data-plugin.js +1 -1
  15. package/dist/graphics/camera/orbit/orbit-data-plugin.js.map +1 -1
  16. package/dist/graphics/camera/orbit/orbit-drag-service.d.ts +11 -0
  17. package/dist/graphics/camera/orbit/orbit-drag-service.js +3 -0
  18. package/dist/graphics/camera/orbit/orbit-drag-service.js.map +1 -0
  19. package/dist/graphics/camera/orbit/orbit-plugin.d.ts +6 -6
  20. package/dist/graphics/camera/orbit/orbit-system-plugin.d.ts +8 -8
  21. package/dist/graphics/camera/orbit/orbit-system-plugin.js +6 -9
  22. package/dist/graphics/camera/orbit/orbit-system-plugin.js.map +1 -1
  23. package/dist/graphics/camera/orbit/orbit.d.ts +5 -5
  24. package/dist/graphics/camera/orbit/public.d.ts +2 -2
  25. package/dist/graphics/camera/orbit/public.js +2 -1
  26. package/dist/graphics/camera/orbit/public.js.map +1 -1
  27. package/dist/graphics/graphics-plugin.d.ts +1 -1
  28. package/dist/graphics/index.d.ts +1 -0
  29. package/dist/graphics/index.js +3 -0
  30. package/dist/graphics/index.js.map +1 -0
  31. package/dist/graphics/picking/picking-plugin.d.ts +9871 -1912
  32. package/dist/graphics/picking/picking-plugin.js +3 -3
  33. package/dist/graphics/picking/picking-plugin.js.map +1 -1
  34. package/dist/graphics/public.d.ts +38 -0
  35. package/dist/graphics/public.js +40 -0
  36. package/dist/graphics/public.js.map +1 -0
  37. package/dist/graphics/rendering/bone-collider-plugin.d.ts +2967 -486
  38. package/dist/graphics/rendering/bone-collider-plugin.js +13 -12
  39. package/dist/graphics/rendering/bone-collider-plugin.js.map +1 -1
  40. package/dist/graphics/rendering/display-transform-plugin.d.ts +2 -0
  41. package/dist/graphics/rendering/display-transform-plugin.js +2 -2
  42. package/dist/graphics/rendering/display-transform-plugin.js.map +1 -1
  43. package/dist/graphics/rendering/ibl-render/ibl-render-plugin.d.ts +2857 -403
  44. package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js +9 -9
  45. package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js.map +1 -1
  46. package/dist/graphics/rendering/interpolation-plugin.d.ts +1040 -156
  47. package/dist/graphics/rendering/jolt-ragdoll-plugin.d.ts +3017 -538
  48. package/dist/graphics/rendering/jolt-ragdoll-plugin.js +6 -6
  49. package/dist/graphics/rendering/jolt-ragdoll-plugin.js.map +1 -1
  50. package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.d.ts +1123 -0
  51. package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.js +79 -0
  52. package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.js.map +1 -0
  53. package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu.test.d.ts +1 -0
  54. package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu.test.js +18 -0
  55. package/dist/graphics/rendering/material-palette-gpu/material-palette-gpu.test.js.map +1 -0
  56. package/dist/graphics/rendering/material-palette-gpu/material-palette.d.ts +25 -0
  57. package/dist/graphics/rendering/material-palette-gpu/material-palette.js +27 -0
  58. package/dist/graphics/rendering/material-palette-gpu/material-palette.js.map +1 -0
  59. package/dist/graphics/rendering/material-palette-gpu/palette-bind-group.d.ts +3 -0
  60. package/dist/graphics/rendering/material-palette-gpu/palette-bind-group.js +22 -0
  61. package/dist/graphics/rendering/material-palette-gpu/palette-bind-group.js.map +1 -0
  62. package/dist/graphics/rendering/model-collider-plugin.d.ts +2903 -663
  63. package/dist/graphics/rendering/model-collider-plugin.js +11 -34
  64. package/dist/graphics/rendering/model-collider-plugin.js.map +1 -1
  65. package/dist/graphics/rendering/pbr-core-plugin.d.ts +16 -8
  66. package/dist/graphics/rendering/pbr-core-plugin.js +16 -19
  67. package/dist/graphics/rendering/pbr-core-plugin.js.map +1 -1
  68. package/dist/graphics/rendering/pbr-render/pbr-factor-render-plugin.d.ts +3514 -0
  69. package/dist/graphics/rendering/pbr-render/pbr-factor-render-plugin.js +189 -0
  70. package/dist/graphics/rendering/pbr-render/pbr-factor-render-plugin.js.map +1 -0
  71. package/dist/graphics/rendering/pbr-render/pbr-factor-shader.wgsl.d.ts +7 -0
  72. package/dist/graphics/rendering/pbr-render/pbr-factor-shader.wgsl.js +124 -0
  73. package/dist/graphics/rendering/pbr-render/pbr-factor-shader.wgsl.js.map +1 -0
  74. package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.d.ts +769 -571
  75. package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js +98 -79
  76. package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js.map +1 -1
  77. package/dist/graphics/rendering/pbr-render/primitive-render-shared.d.ts +43 -0
  78. package/dist/graphics/rendering/pbr-render/primitive-render-shared.js +59 -0
  79. package/dist/graphics/rendering/pbr-render/primitive-render-shared.js.map +1 -0
  80. package/dist/graphics/rendering/skinning/skinning-plugin.d.ts +2930 -270
  81. package/dist/graphics/rendering/skinning/skinning-plugin.js +19 -40
  82. package/dist/graphics/rendering/skinning/skinning-plugin.js.map +1 -1
  83. package/dist/graphics/scene/model/geometry/public.d.ts +1 -0
  84. package/dist/graphics/scene/model/mesh/mesh.d.ts +13 -0
  85. package/dist/graphics/scene/model/mesh/mesh.js +3 -0
  86. package/dist/graphics/scene/model/mesh/mesh.js.map +1 -0
  87. package/dist/graphics/scene/model/mesh/public.d.ts +1 -0
  88. package/dist/graphics/scene/model/mesh/public.js +3 -0
  89. package/dist/graphics/scene/model/mesh/public.js.map +1 -0
  90. package/dist/graphics/scene/model/mesh-plugin.d.ts +5177 -0
  91. package/dist/graphics/scene/model/mesh-plugin.js +87 -0
  92. package/dist/graphics/scene/model/mesh-plugin.js.map +1 -0
  93. package/dist/graphics/scene/model/model-loader-plugin.d.ts +2728 -295
  94. package/dist/graphics/scene/model/model-loader-plugin.js +24 -42
  95. package/dist/graphics/scene/model/model-loader-plugin.js.map +1 -1
  96. package/dist/graphics/scene/model/model-plugin.d.ts +1 -352
  97. package/dist/graphics/scene/model/model-plugin.js +1 -37
  98. package/dist/graphics/scene/model/model-plugin.js.map +1 -1
  99. package/dist/graphics/scene/model/model.d.ts +2 -6
  100. package/dist/graphics/scene/model/model.js.map +1 -1
  101. package/dist/graphics/scene/model/public.d.ts +1 -1
  102. package/dist/graphics/scene/model/public.js +2 -1
  103. package/dist/graphics/scene/model/public.js.map +1 -1
  104. package/dist/graphics/scene/model/shape/bounds-from-shape-mesh.d.ts +4 -0
  105. package/dist/graphics/scene/model/shape/bounds-from-shape-mesh.js +25 -0
  106. package/dist/graphics/scene/model/shape/bounds-from-shape-mesh.js.map +1 -0
  107. package/dist/graphics/scene/model/shape/shape-geometry-plugin.d.ts +233 -386
  108. package/dist/graphics/scene/model/shape/shape-geometry-plugin.js +87 -18
  109. package/dist/graphics/scene/model/shape/shape-geometry-plugin.js.map +1 -1
  110. package/dist/graphics/scene/model/shape/shape-spec.d.ts +17 -0
  111. package/dist/graphics/scene/model/shape/shape-spec.js +3 -0
  112. package/dist/graphics/scene/model/shape/shape-spec.js.map +1 -0
  113. package/dist/graphics/scene/model/world-bounds-plugin.d.ts +2670 -245
  114. package/dist/graphics/scene/model/world-bounds-plugin.js +6 -25
  115. package/dist/graphics/scene/model/world-bounds-plugin.js.map +1 -1
  116. package/dist/graphics/scene/node/node-data-plugin.d.ts +15 -4
  117. package/dist/graphics/scene/node/node-data-plugin.js +12 -5
  118. package/dist/graphics/scene/node/node-data-plugin.js.map +1 -1
  119. package/dist/graphics/scene/node/node-data-plugin.test.d.ts +1 -0
  120. package/dist/graphics/scene/node/node-data-plugin.test.js +40 -0
  121. package/dist/graphics/scene/node/node-data-plugin.test.js.map +1 -0
  122. package/dist/graphics/scene/node/node-plugin.d.ts +8 -1
  123. package/dist/graphics/scene/node/transform-plugin.d.ts +8 -1
  124. package/dist/graphics/scene/scene-plugin.d.ts +2353 -100
  125. package/dist/graphics/scene/scene-plugin.js +3 -3
  126. package/dist/graphics/scene/scene-plugin.js.map +1 -1
  127. package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.d.ts +3 -3
  128. package/dist/index.d.ts +1 -53
  129. package/dist/index.js +1 -54
  130. package/dist/index.js.map +1 -1
  131. package/dist/material/assemble-material-row.d.ts +4 -0
  132. package/dist/material/assemble-material-row.js +22 -0
  133. package/dist/material/assemble-material-row.js.map +1 -0
  134. package/dist/material/definitions.d.ts +833 -0
  135. package/dist/material/definitions.js +423 -0
  136. package/dist/material/definitions.js.map +1 -0
  137. package/dist/material/emission-mode.d.ts +8 -0
  138. package/dist/material/emission-mode.js +9 -0
  139. package/dist/material/emission-mode.js.map +1 -0
  140. package/dist/material/index.d.ts +1 -0
  141. package/dist/material/index.js +3 -0
  142. package/dist/material/index.js.map +1 -0
  143. package/dist/material/json/from-json-string.d.ts +2 -0
  144. package/dist/material/json/from-json-string.js +12 -0
  145. package/dist/material/json/from-json-string.js.map +1 -0
  146. package/dist/material/json/from-json.d.ts +10 -0
  147. package/dist/material/json/from-json.js +16 -0
  148. package/dist/material/json/from-json.js.map +1 -0
  149. package/dist/material/json/from-json.test.d.ts +1 -0
  150. package/dist/material/json/from-json.test.js +46 -0
  151. package/dist/material/json/from-json.test.js.map +1 -0
  152. package/dist/material/json/is-properties-json.d.ts +2 -0
  153. package/dist/material/json/is-properties-json.js +65 -0
  154. package/dist/material/json/is-properties-json.js.map +1 -0
  155. package/dist/material/json/library-json.d.ts +3 -0
  156. package/dist/material/json/library-json.js +2 -0
  157. package/dist/material/json/library-json.js.map +1 -0
  158. package/dist/material/json/load-json.d.ts +7 -0
  159. package/dist/material/json/load-json.js +10 -0
  160. package/dist/material/json/load-json.js.map +1 -0
  161. package/dist/material/json/properties-json.d.ts +25 -0
  162. package/dist/material/json/properties-json.js +2 -0
  163. package/dist/material/json/properties-json.js.map +1 -0
  164. package/dist/material/json/public.d.ts +9 -0
  165. package/dist/material/json/public.js +6 -0
  166. package/dist/material/json/public.js.map +1 -0
  167. package/dist/material/json/to-definition.d.ts +5 -0
  168. package/dist/material/json/to-definition.js +65 -0
  169. package/dist/material/json/to-definition.js.map +1 -0
  170. package/dist/material/material-by-name-lookup.d.ts +11 -0
  171. package/dist/material/material-by-name-lookup.js +3 -0
  172. package/dist/material/material-by-name-lookup.js.map +1 -0
  173. package/dist/material/material-defaults.d.ts +23 -0
  174. package/dist/material/material-defaults.js +25 -0
  175. package/dist/material/material-defaults.js.map +1 -0
  176. package/dist/material/material-definition.d.ts +3 -0
  177. package/dist/material/material-definition.js +2 -0
  178. package/dist/material/material-definition.js.map +1 -0
  179. package/dist/material/material-name.d.ts +2 -0
  180. package/dist/material/material-name.js +2 -0
  181. package/dist/material/material-name.js.map +1 -0
  182. package/dist/material/material-plugin.d.ts +891 -22
  183. package/dist/material/material-plugin.js +46 -21
  184. package/dist/material/material-plugin.js.map +1 -1
  185. package/dist/material/material-plugin.test.d.ts +1 -0
  186. package/dist/material/material-plugin.test.js +87 -0
  187. package/dist/material/material-plugin.test.js.map +1 -0
  188. package/dist/material/material.d.ts +27 -29
  189. package/dist/material/material.js +0 -1
  190. package/dist/material/material.js.map +1 -1
  191. package/dist/material/public.d.ts +12 -2
  192. package/dist/material/public.js +12 -2
  193. package/dist/material/public.js.map +1 -1
  194. package/dist/material/require-material.d.ts +4 -0
  195. package/dist/material/require-material.js +10 -0
  196. package/dist/material/require-material.js.map +1 -0
  197. package/dist/material/standard-material-names.d.ts +2 -0
  198. package/dist/material/standard-material-names.js +4 -0
  199. package/dist/material/standard-material-names.js.map +1 -0
  200. package/dist/material/standard-materials.d.ts +1 -1
  201. package/dist/material/standard-materials.js +17 -24
  202. package/dist/material/standard-materials.js.map +1 -1
  203. package/dist/material/stress-strain-curve/create.d.ts +8 -0
  204. package/dist/material/stress-strain-curve/create.js +2 -0
  205. package/dist/material/stress-strain-curve/create.js.map +1 -0
  206. package/dist/material/stress-strain-curve/public.d.ts +2 -0
  207. package/dist/material/stress-strain-curve/public.js +3 -0
  208. package/dist/material/stress-strain-curve/public.js.map +1 -0
  209. package/dist/material/stress-strain-curve/schema.d.ts +52 -0
  210. package/dist/material/stress-strain-curve/schema.js +19 -0
  211. package/dist/material/stress-strain-curve/schema.js.map +1 -0
  212. package/dist/material/stress-strain-curve/schema.test.d.ts +1 -0
  213. package/dist/material/stress-strain-curve/schema.test.js +18 -0
  214. package/dist/material/stress-strain-curve/schema.test.js.map +1 -0
  215. package/dist/material/stress-strain-curve/stress-strain-curve.d.ts +4 -0
  216. package/dist/material/stress-strain-curve/stress-strain-curve.js +2 -0
  217. package/dist/material/stress-strain-curve/stress-strain-curve.js.map +1 -0
  218. package/dist/physics/body/collider-shape/mass-from-volume.d.ts +2 -0
  219. package/dist/physics/body/collider-shape/mass-from-volume.js +4 -0
  220. package/dist/physics/body/collider-shape/mass-from-volume.js.map +1 -0
  221. package/dist/physics/body/collider-shape/mass-from-volume.test.d.ts +1 -0
  222. package/dist/physics/body/collider-shape/mass-from-volume.test.js +8 -0
  223. package/dist/physics/body/collider-shape/mass-from-volume.test.js.map +1 -0
  224. package/dist/physics/collider-primitive-render-archetype.d.ts +2 -0
  225. package/dist/physics/collider-primitive-render-archetype.js +3 -0
  226. package/dist/physics/collider-primitive-render-archetype.js.map +1 -0
  227. package/dist/physics/collider-primitive-render-archetypes.d.ts +2 -0
  228. package/dist/physics/collider-primitive-render-archetypes.js +9 -0
  229. package/dist/physics/collider-primitive-render-archetypes.js.map +1 -0
  230. package/dist/physics/index.d.ts +1 -0
  231. package/dist/physics/index.js +3 -0
  232. package/dist/physics/index.js.map +1 -0
  233. package/dist/physics/is-voxel-shape-physics-pending.d.ts +3 -0
  234. package/dist/physics/is-voxel-shape-physics-pending.js +7 -0
  235. package/dist/physics/is-voxel-shape-physics-pending.js.map +1 -0
  236. package/dist/physics/physics-clock/physics-clock.d.ts +15 -0
  237. package/dist/physics/physics-clock/physics-clock.js +3 -0
  238. package/dist/physics/physics-clock/physics-clock.js.map +1 -0
  239. package/dist/physics/physics-clock-plugin.d.ts +2 -22
  240. package/dist/physics/physics-clock-plugin.js +0 -2
  241. package/dist/physics/physics-clock-plugin.js.map +1 -1
  242. package/dist/physics/physics-clock.test.js.map +1 -1
  243. package/dist/physics/physics-data-plugin.d.ts +889 -13
  244. package/dist/physics/physics-data-plugin.js +8 -6
  245. package/dist/physics/physics-data-plugin.js.map +1 -1
  246. package/dist/physics/public.d.ts +21 -0
  247. package/dist/physics/public.js +23 -0
  248. package/dist/physics/public.js.map +1 -0
  249. package/dist/physics/ragdoll/bone-capsule.d.ts +8 -0
  250. package/dist/physics/ragdoll/bone-capsule.js +3 -0
  251. package/dist/physics/ragdoll/bone-capsule.js.map +1 -0
  252. package/dist/physics/ragdoll/fit-bone-capsules-input.d.ts +11 -0
  253. package/dist/physics/ragdoll/fit-bone-capsules-input.js +3 -0
  254. package/dist/physics/ragdoll/fit-bone-capsules-input.js.map +1 -0
  255. package/dist/physics/ragdoll/fit-bone-capsules.d.ts +2 -38
  256. package/dist/physics/ragdoll/fit-bone-capsules.js +13 -0
  257. package/dist/physics/ragdoll/fit-bone-capsules.js.map +1 -1
  258. package/dist/physics/ragdoll/fit-bone-capsules.test.js.map +1 -1
  259. package/dist/physics/ragdoll/skin-vertices.d.ts +6 -0
  260. package/dist/physics/ragdoll/skin-vertices.js +3 -0
  261. package/dist/physics/ragdoll/skin-vertices.js.map +1 -0
  262. package/dist/physics/rigid-body-components.d.ts +2 -0
  263. package/dist/physics/rigid-body-components.js +13 -0
  264. package/dist/physics/rigid-body-components.js.map +1 -0
  265. package/dist/physics/solvers/jolt-solver-plugin.d.ts +918 -41
  266. package/dist/physics/solvers/jolt-solver-plugin.js +19 -3
  267. package/dist/physics/solvers/jolt-solver-plugin.js.map +1 -1
  268. package/dist/physics/solvers/rapier-solver-plugin.d.ts +918 -41
  269. package/dist/physics/solvers/rapier-solver-plugin.js +7 -2
  270. package/dist/physics/solvers/rapier-solver-plugin.js.map +1 -1
  271. package/dist/physics/solvers/solver-benchmark-options.d.ts +14 -0
  272. package/dist/physics/solvers/solver-benchmark-options.js +3 -0
  273. package/dist/physics/solvers/solver-benchmark-options.js.map +1 -0
  274. package/dist/physics/solvers/solver-benchmark-result.d.ts +15 -0
  275. package/dist/physics/solvers/solver-benchmark-result.js +3 -0
  276. package/dist/physics/solvers/solver-benchmark-result.js.map +1 -0
  277. package/dist/physics/solvers/solver-benchmark.d.ts +2 -43
  278. package/dist/physics/solvers/solver-benchmark.js.map +1 -1
  279. package/dist/physics/static-collider-components.d.ts +2 -0
  280. package/dist/physics/static-collider-components.js +10 -0
  281. package/dist/physics/static-collider-components.js.map +1 -0
  282. package/package.json +14 -2
  283. package/src/core/public.ts +4 -0
  284. package/src/graphics/camera/orbit/attach-orbit-drag.ts +7 -27
  285. package/src/graphics/camera/orbit/orbit-data-plugin.ts +1 -1
  286. package/src/graphics/camera/orbit/orbit-drag-service.ts +13 -0
  287. package/src/graphics/camera/orbit/orbit-system-plugin.ts +6 -9
  288. package/src/graphics/camera/orbit/orbit.ts +5 -5
  289. package/src/graphics/camera/orbit/public.ts +2 -2
  290. package/src/graphics/index.ts +3 -0
  291. package/src/graphics/picking/picking-plugin.ts +4 -4
  292. package/src/graphics/public.ts +40 -0
  293. package/src/graphics/rendering/bone-collider-plugin.ts +16 -12
  294. package/src/graphics/rendering/display-transform-plugin.ts +2 -2
  295. package/src/graphics/rendering/ibl-render/ibl-render-plugin.ts +9 -9
  296. package/src/graphics/rendering/interpolation.test.ts +1 -1
  297. package/src/graphics/rendering/jolt-ragdoll-plugin.ts +11 -7
  298. package/src/graphics/rendering/material-palette-gpu/material-palette-gpu-plugin.ts +86 -0
  299. package/src/graphics/rendering/material-palette-gpu/material-palette-gpu.test.ts +20 -0
  300. package/src/graphics/rendering/material-palette-gpu/material-palette.ts +41 -0
  301. package/src/graphics/rendering/material-palette-gpu/palette-bind-group.ts +24 -0
  302. package/src/graphics/rendering/model-collider-plugin.ts +19 -35
  303. package/src/graphics/rendering/pbr-core-plugin.ts +16 -19
  304. package/src/graphics/rendering/pbr-render/{pbr-render-plugin.ts → pbr-factor-render-plugin.ts} +60 -111
  305. package/src/graphics/rendering/pbr-render/{pbr-array-shader.wgsl.ts → pbr-factor-shader.wgsl.ts} +19 -40
  306. package/src/graphics/rendering/pbr-render/physics-bridge-plugin.ts +95 -69
  307. package/src/graphics/rendering/pbr-render/primitive-render-shared.ts +76 -0
  308. package/src/graphics/rendering/skinning/skinning-plugin.ts +23 -41
  309. package/src/graphics/scene/model/geometry/public.ts +1 -1
  310. package/src/graphics/scene/model/mesh/mesh.ts +18 -0
  311. package/src/graphics/scene/model/mesh/public.ts +3 -0
  312. package/src/graphics/scene/model/mesh-plugin.ts +102 -0
  313. package/src/graphics/scene/model/model-loader-plugin.ts +25 -43
  314. package/src/graphics/scene/model/model-plugin.ts +1 -44
  315. package/src/graphics/scene/model/model.ts +2 -6
  316. package/src/graphics/scene/model/public.ts +3 -1
  317. package/src/graphics/scene/model/shape/bounds-from-shape-mesh.ts +20 -0
  318. package/src/graphics/scene/model/shape/shape-geometry-plugin.ts +97 -18
  319. package/src/graphics/scene/model/shape/shape-spec.ts +9 -0
  320. package/src/graphics/scene/model/world-bounds-plugin.ts +6 -25
  321. package/src/graphics/scene/node/node-data-plugin.test.ts +47 -0
  322. package/src/graphics/scene/node/node-data-plugin.ts +12 -5
  323. package/src/graphics/scene/scene-plugin.ts +3 -3
  324. package/src/index.ts +1 -70
  325. package/src/material/assemble-material-row.ts +26 -0
  326. package/src/material/definitions.ts +427 -0
  327. package/src/material/emission-mode.ts +11 -0
  328. package/src/material/index.ts +3 -0
  329. package/src/material/json/from-json-string.ts +11 -0
  330. package/src/material/json/from-json.test.ts +50 -0
  331. package/src/material/json/from-json.ts +23 -0
  332. package/src/material/json/is-properties-json.ts +77 -0
  333. package/src/material/json/library-json.ts +4 -0
  334. package/src/material/json/load-json.ts +15 -0
  335. package/src/material/json/properties-json.ts +25 -0
  336. package/src/material/json/public.ts +9 -0
  337. package/src/material/json/to-definition.ts +70 -0
  338. package/src/material/material-by-name-lookup.ts +10 -0
  339. package/src/material/material-defaults.ts +26 -0
  340. package/src/material/material-definition.ts +4 -0
  341. package/src/material/material-name.ts +3 -0
  342. package/src/material/material-plugin.test.ts +97 -0
  343. package/src/material/material-plugin.ts +67 -39
  344. package/src/material/material.ts +35 -34
  345. package/src/material/public.ts +12 -2
  346. package/src/material/require-material.ts +15 -0
  347. package/src/material/standard-material-names.ts +4 -0
  348. package/src/material/standard-materials.ts +21 -27
  349. package/src/material/stress-strain-curve/create.ts +9 -0
  350. package/src/material/stress-strain-curve/public.ts +2 -0
  351. package/src/material/stress-strain-curve/schema.test.ts +20 -0
  352. package/src/material/stress-strain-curve/schema.ts +20 -0
  353. package/src/material/stress-strain-curve/stress-strain-curve.ts +11 -0
  354. package/src/physics/README.md +9 -1
  355. package/src/physics/body/collider-shape/mass-from-volume.test.ts +8 -0
  356. package/src/physics/body/collider-shape/mass-from-volume.ts +4 -0
  357. package/src/physics/collider-primitive-render-archetype.ts +5 -0
  358. package/src/physics/collider-primitive-render-archetypes.ts +9 -0
  359. package/src/physics/index.ts +3 -0
  360. package/src/physics/is-voxel-shape-physics-pending.ts +9 -0
  361. package/src/physics/physics-clock/physics-clock.ts +17 -0
  362. package/src/physics/physics-clock-plugin.ts +1 -24
  363. package/src/physics/physics-clock.test.ts +2 -1
  364. package/src/physics/physics-data-plugin.ts +8 -6
  365. package/src/physics/public.ts +23 -0
  366. package/src/physics/ragdoll/bone-capsule.ts +11 -0
  367. package/src/physics/ragdoll/fit-bone-capsules-input.ts +14 -0
  368. package/src/physics/ragdoll/fit-bone-capsules.test.ts +2 -1
  369. package/src/physics/ragdoll/fit-bone-capsules.ts +2 -27
  370. package/src/physics/ragdoll/skin-vertices.ts +8 -0
  371. package/src/physics/rigid-body-components.ts +13 -0
  372. package/src/physics/solvers/README.md +4 -0
  373. package/src/physics/solvers/jolt-solver-plugin.ts +19 -5
  374. package/src/physics/solvers/rapier-solver-plugin.ts +5 -2
  375. package/src/physics/solvers/solver-benchmark-options.ts +16 -0
  376. package/src/physics/solvers/solver-benchmark-result.ts +17 -0
  377. package/src/physics/solvers/solver-benchmark.ts +2 -35
  378. package/src/physics/static-collider-components.ts +10 -0
  379. package/tsconfig.tsbuildinfo +1 -1
  380. package/src/graphics/rendering/material-gpu/material-arrays.ts +0 -113
  381. package/src/graphics/rendering/material-gpu/material-bind-group.ts +0 -61
  382. package/src/graphics/rendering/material-gpu/material-gpu-plugin.ts +0 -95
  383. 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(["geometry", "visible", "_worldMatrix"])) {
267
+ for (const arch of db.store.queryArchetypes(["mesh", "visible", "_worldMatrix"])) {
268
268
  const ids = arch.columns.id;
269
- const geoRefs = arch.columns.geometry;
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 geoId = geoRefs.get(i);
277
- let arr = modelsByGeo.get(geoId);
278
- if (!arr) { arr = []; modelsByGeo.set(geoId, arr); }
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
- "_geometry",
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 geoRefs = archetype.columns._geometry;
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 geoId = geoRefs.get(i);
332
- const models = modelsByGeo.get(geoId);
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-plugin.js";
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 { _cpuSkin?: { positions: Float32Array; joints: Uint32Array; weights: Float32Array } | null; _skinInverseBindMatrices?: Float32Array | null; _skinJointTemplate?: JointTemplate[] }
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._skinJointTemplate!;
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._skinInverseBindMatrices!, skin: g._cpuSkin! }))
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", "_skeletonGeometry"])) {
127
- const jc = arch.columns._skeletonJoints, gc = arch.columns._skeletonGeometry;
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(gc.get(i)) as SkinGeo | null;
130
- if (!g?._cpuSkin || !g._skinInverseBindMatrices || !g._skinJointTemplate?.length) continue;
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 — lets a rendered model double as a physics body whose collider is
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
- collisionGeometry: Entity.schema, // optional override: generate the collider from this Geometry instead of `geometry`
15
+ collisionMesh: Entity.schema,
34
16
  },
35
17
  archetypes: {
36
- // A model that is also a dynamic/kinematic body; collider auto-generated.
37
- ModelBody: ["geometry", "scale", "visible", "parent", "bodyType", "colliderShape", "halfExtents", "material", "position", "rotation", "linearVelocity", "angularVelocity"],
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
- // model-bodies (geometry + scale) whose collider data isn't generated yet
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; // primitive-shaped model-bodies need no generation
31
+ if (shape !== "hull" && shape !== "mesh") continue;
55
32
  const id = ids.get(i);
56
- const src = (db.store.read(id) as { collisionGeometry?: Entity }).collisionGeometry || arch.columns.geometry.get(i);
57
- const mesh = db.store.read(src) as { _cpuPositions?: Float32Array | null; _cpuIndices?: Uint32Array | null } | null;
58
- const positions = mesh?._cpuPositions;
59
- if (!positions) continue; // source mesh not loaded yet — retry next frame
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) { scaled[k] = positions[k] * s[0]; scaled[k + 1] = positions[k + 1] * s[1]; scaled[k + 2] = positions[k + 2] * s[2]; }
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: mesh!._cpuIndices ?? new Uint32Array(0) } };
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
- * Shape declarations shared between asset producers (model loader, shape
9
- * generators) and consumers (renderers). Every component and archetype is
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
- * authored Geometry that owns it. */
26
- _geometry: Entity.schema,
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: ["ephemeral", "_materialBindGroup", "_geometry"],
38
- _PbrPrimitive: ["ephemeral", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_geometry", "_nodeLocalMatrix"],
34
+ _VisibleMaterial: ["nonPersistent", "_materialBindGroup", "_mesh"],
35
+ _PbrPrimitive: ["nonPersistent", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_mesh", "_nodeLocalMatrix"],
39
36
  },
40
37
  });