@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.
Files changed (584) hide show
  1. package/CLAUDE.md +98 -0
  2. package/LICENSE +21 -0
  3. package/dist/core/core-plugin.d.ts +44 -0
  4. package/dist/core/core-plugin.js +90 -0
  5. package/dist/core/core-plugin.js.map +1 -0
  6. package/dist/core/frame-time/frame-time-plugin.d.ts +25 -0
  7. package/dist/core/frame-time/frame-time-plugin.js +41 -0
  8. package/dist/core/frame-time/frame-time-plugin.js.map +1 -0
  9. package/dist/core/frame-time/frame-time.d.ts +18 -0
  10. package/dist/core/frame-time/frame-time.js +3 -0
  11. package/dist/core/frame-time/frame-time.js.map +1 -0
  12. package/dist/core/frame-time/public.d.ts +1 -0
  13. package/dist/core/frame-time/public.js +3 -0
  14. package/dist/core/frame-time/public.js.map +1 -0
  15. package/dist/graphics/animation/animation-data-plugin.d.ts +216 -0
  16. package/dist/graphics/animation/animation-data-plugin.js +110 -0
  17. package/dist/graphics/animation/animation-data-plugin.js.map +1 -0
  18. package/dist/graphics/animation/animation-plugin.d.ts +214 -0
  19. package/dist/graphics/animation/animation-plugin.js +26 -0
  20. package/dist/graphics/animation/animation-plugin.js.map +1 -0
  21. package/dist/graphics/animation/animation-plugin.test.d.ts +1 -0
  22. package/dist/graphics/animation/animation-plugin.test.js +142 -0
  23. package/dist/graphics/animation/animation-plugin.test.js.map +1 -0
  24. package/dist/graphics/animation/animation-track/animation-track.d.ts +13 -0
  25. package/dist/graphics/animation/animation-track/animation-track.js +3 -0
  26. package/dist/graphics/animation/animation-track/animation-track.js.map +1 -0
  27. package/dist/graphics/animation/animation-track/componentwise-lerp.d.ts +7 -0
  28. package/dist/graphics/animation/animation-track/componentwise-lerp.js +22 -0
  29. package/dist/graphics/animation/animation-track/componentwise-lerp.js.map +1 -0
  30. package/dist/graphics/animation/animation-track/interpolate.d.ts +8 -0
  31. package/dist/graphics/animation/animation-track/interpolate.js +18 -0
  32. package/dist/graphics/animation/animation-track/interpolate.js.map +1 -0
  33. package/dist/graphics/animation/animation-track/public.d.ts +1 -0
  34. package/dist/graphics/animation/animation-track/public.js +3 -0
  35. package/dist/graphics/animation/animation-track/public.js.map +1 -0
  36. package/dist/graphics/animation/animation-track/sample.d.ts +7 -0
  37. package/dist/graphics/animation/animation-track/sample.js +44 -0
  38. package/dist/graphics/animation/animation-track/sample.js.map +1 -0
  39. package/dist/graphics/animation/interpolation-mode/interpolation-mode.d.ts +4 -0
  40. package/dist/graphics/animation/interpolation-mode/interpolation-mode.js +3 -0
  41. package/dist/graphics/animation/interpolation-mode/interpolation-mode.js.map +1 -0
  42. package/dist/graphics/animation/interpolation-mode/public.d.ts +1 -0
  43. package/dist/graphics/animation/interpolation-mode/public.js +3 -0
  44. package/dist/graphics/animation/interpolation-mode/public.js.map +1 -0
  45. package/dist/graphics/animation/interpolation-mode/schema.d.ts +4 -0
  46. package/dist/graphics/animation/interpolation-mode/schema.js +3 -0
  47. package/dist/graphics/animation/interpolation-mode/schema.js.map +1 -0
  48. package/dist/graphics/camera/camera-plugin.d.ts +112 -0
  49. package/dist/graphics/camera/camera-plugin.js +36 -0
  50. package/dist/graphics/camera/camera-plugin.js.map +1 -0
  51. package/dist/graphics/camera/camera.d.ts +4 -0
  52. package/dist/graphics/camera/camera.js +3 -0
  53. package/dist/graphics/camera/camera.js.map +1 -0
  54. package/dist/graphics/camera/orbit/attach-orbit-drag.d.ts +31 -0
  55. package/dist/graphics/camera/orbit/attach-orbit-drag.js +44 -0
  56. package/dist/graphics/camera/orbit/attach-orbit-drag.js.map +1 -0
  57. package/dist/graphics/camera/orbit/orbit-data-plugin.d.ts +290 -0
  58. package/dist/graphics/camera/orbit/orbit-data-plugin.js +42 -0
  59. package/dist/graphics/camera/orbit/orbit-data-plugin.js.map +1 -0
  60. package/dist/graphics/camera/orbit/orbit-plugin.d.ts +281 -0
  61. package/dist/graphics/camera/orbit/orbit-plugin.js +12 -0
  62. package/dist/graphics/camera/orbit/orbit-plugin.js.map +1 -0
  63. package/dist/graphics/camera/orbit/orbit-system-plugin.d.ts +292 -0
  64. package/dist/graphics/camera/orbit/orbit-system-plugin.js +71 -0
  65. package/dist/graphics/camera/orbit/orbit-system-plugin.js.map +1 -0
  66. package/dist/graphics/camera/orbit/orbit.d.ts +32 -0
  67. package/dist/graphics/camera/orbit/orbit.js +3 -0
  68. package/dist/graphics/camera/orbit/orbit.js.map +1 -0
  69. package/dist/graphics/camera/orbit/public.d.ts +5 -0
  70. package/dist/graphics/camera/orbit/public.js +6 -0
  71. package/dist/graphics/camera/orbit/public.js.map +1 -0
  72. package/dist/graphics/camera/public.d.ts +4 -0
  73. package/dist/graphics/camera/public.js +6 -0
  74. package/dist/graphics/camera/public.js.map +1 -0
  75. package/dist/graphics/camera/schema.d.ts +65 -0
  76. package/dist/graphics/camera/schema.js +19 -0
  77. package/dist/graphics/camera/schema.js.map +1 -0
  78. package/dist/graphics/camera/screen-to-world-ray.d.ts +10 -0
  79. package/dist/graphics/camera/screen-to-world-ray.js +31 -0
  80. package/dist/graphics/camera/screen-to-world-ray.js.map +1 -0
  81. package/dist/graphics/camera/to-view-projection.d.ts +3 -0
  82. package/dist/graphics/camera/to-view-projection.js +23 -0
  83. package/dist/graphics/camera/to-view-projection.js.map +1 -0
  84. package/dist/graphics/graphics-plugin.d.ts +121 -0
  85. package/dist/graphics/graphics-plugin.js +106 -0
  86. package/dist/graphics/graphics-plugin.js.map +1 -0
  87. package/dist/graphics/picking/pick-hit.d.ts +10 -0
  88. package/dist/graphics/picking/pick-hit.js +3 -0
  89. package/dist/graphics/picking/pick-hit.js.map +1 -0
  90. package/dist/graphics/picking/picking-plugin.d.ts +3819 -0
  91. package/dist/graphics/picking/picking-plugin.js +88 -0
  92. package/dist/graphics/picking/picking-plugin.js.map +1 -0
  93. package/dist/graphics/rendering/bone-collider-plugin.d.ts +1619 -0
  94. package/dist/graphics/rendering/bone-collider-plugin.js +207 -0
  95. package/dist/graphics/rendering/bone-collider-plugin.js.map +1 -0
  96. package/dist/graphics/rendering/display-transform-plugin.d.ts +52 -0
  97. package/dist/graphics/rendering/display-transform-plugin.js +25 -0
  98. package/dist/graphics/rendering/display-transform-plugin.js.map +1 -0
  99. package/dist/graphics/rendering/ibl-render/brdf.wgsl.d.ts +2 -0
  100. package/dist/graphics/rendering/ibl-render/brdf.wgsl.js +42 -0
  101. package/dist/graphics/rendering/ibl-render/brdf.wgsl.js.map +1 -0
  102. package/dist/graphics/rendering/ibl-render/ibl/brdf-lut.d.ts +1 -0
  103. package/dist/graphics/rendering/ibl-render/ibl/brdf-lut.js +91 -0
  104. package/dist/graphics/rendering/ibl-render/ibl/brdf-lut.js.map +1 -0
  105. package/dist/graphics/rendering/ibl-render/ibl/build-ibl-resources.d.ts +24 -0
  106. package/dist/graphics/rendering/ibl-render/ibl/build-ibl-resources.js +34 -0
  107. package/dist/graphics/rendering/ibl-render/ibl/build-ibl-resources.js.map +1 -0
  108. package/dist/graphics/rendering/ibl-render/ibl/create-cubemap.d.ts +1 -0
  109. package/dist/graphics/rendering/ibl-render/ibl/create-cubemap.js +12 -0
  110. package/dist/graphics/rendering/ibl-render/ibl/create-cubemap.js.map +1 -0
  111. package/dist/graphics/rendering/ibl-render/ibl/cube-face-view.d.ts +1 -0
  112. package/dist/graphics/rendering/ibl-render/ibl/cube-face-view.js +11 -0
  113. package/dist/graphics/rendering/ibl-render/ibl/cube-face-view.js.map +1 -0
  114. package/dist/graphics/rendering/ibl-render/ibl/cubemap-sample-view.d.ts +1 -0
  115. package/dist/graphics/rendering/ibl-render/ibl/cubemap-sample-view.js +9 -0
  116. package/dist/graphics/rendering/ibl-render/ibl/cubemap-sample-view.js.map +1 -0
  117. package/dist/graphics/rendering/ibl-render/ibl/environment.d.ts +8 -0
  118. package/dist/graphics/rendering/ibl-render/ibl/environment.js +170 -0
  119. package/dist/graphics/rendering/ibl-render/ibl/environment.js.map +1 -0
  120. package/dist/graphics/rendering/ibl-render/ibl/float-to-half.d.ts +2 -0
  121. package/dist/graphics/rendering/ibl-render/ibl/float-to-half.js +32 -0
  122. package/dist/graphics/rendering/ibl-render/ibl/float-to-half.js.map +1 -0
  123. package/dist/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.d.ts +2 -0
  124. package/dist/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.js +59 -0
  125. package/dist/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.js.map +1 -0
  126. package/dist/graphics/rendering/ibl-render/ibl/irradiance.d.ts +1 -0
  127. package/dist/graphics/rendering/ibl-render/ibl/irradiance.js +94 -0
  128. package/dist/graphics/rendering/ibl-render/ibl/irradiance.js.map +1 -0
  129. package/dist/graphics/rendering/ibl-render/ibl/parse-hdr.d.ts +6 -0
  130. package/dist/graphics/rendering/ibl-render/ibl/parse-hdr.js +106 -0
  131. package/dist/graphics/rendering/ibl-render/ibl/parse-hdr.js.map +1 -0
  132. package/dist/graphics/rendering/ibl-render/ibl/prefilter.d.ts +5 -0
  133. package/dist/graphics/rendering/ibl-render/ibl/prefilter.js +103 -0
  134. package/dist/graphics/rendering/ibl-render/ibl/prefilter.js.map +1 -0
  135. package/dist/graphics/rendering/ibl-render/ibl/render-helpers.d.ts +4 -0
  136. package/dist/graphics/rendering/ibl-render/ibl/render-helpers.js +16 -0
  137. package/dist/graphics/rendering/ibl-render/ibl/render-helpers.js.map +1 -0
  138. package/dist/graphics/rendering/ibl-render/ibl-render-plugin.d.ts +1028 -0
  139. package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js +409 -0
  140. package/dist/graphics/rendering/ibl-render/ibl-render-plugin.js.map +1 -0
  141. package/dist/graphics/rendering/ibl-render/ibl-shader.wgsl.d.ts +8 -0
  142. package/dist/graphics/rendering/ibl-render/ibl-shader.wgsl.js +173 -0
  143. package/dist/graphics/rendering/ibl-render/ibl-shader.wgsl.js.map +1 -0
  144. package/dist/graphics/rendering/ibl-render/skybox-shader.wgsl.d.ts +2 -0
  145. package/dist/graphics/rendering/ibl-render/skybox-shader.wgsl.js +50 -0
  146. package/dist/graphics/rendering/ibl-render/skybox-shader.wgsl.js.map +1 -0
  147. package/dist/graphics/rendering/interpolation-plugin.d.ts +485 -0
  148. package/dist/graphics/rendering/interpolation-plugin.js +98 -0
  149. package/dist/graphics/rendering/interpolation-plugin.js.map +1 -0
  150. package/dist/graphics/rendering/interpolation.test.d.ts +1 -0
  151. package/dist/graphics/rendering/interpolation.test.js +38 -0
  152. package/dist/graphics/rendering/interpolation.test.js.map +1 -0
  153. package/dist/graphics/rendering/jolt-ragdoll-plugin.d.ts +1628 -0
  154. package/dist/graphics/rendering/jolt-ragdoll-plugin.js +218 -0
  155. package/dist/graphics/rendering/jolt-ragdoll-plugin.js.map +1 -0
  156. package/dist/graphics/rendering/material-gpu/material-arrays.d.ts +47 -0
  157. package/dist/graphics/rendering/material-gpu/material-arrays.js +83 -0
  158. package/dist/graphics/rendering/material-gpu/material-arrays.js.map +1 -0
  159. package/dist/graphics/rendering/material-gpu/material-bind-group.d.ts +9 -0
  160. package/dist/graphics/rendering/material-gpu/material-bind-group.js +52 -0
  161. package/dist/graphics/rendering/material-gpu/material-bind-group.js.map +1 -0
  162. package/dist/graphics/rendering/material-gpu/material-gpu-plugin.d.ts +259 -0
  163. package/dist/graphics/rendering/material-gpu/material-gpu-plugin.js +90 -0
  164. package/dist/graphics/rendering/material-gpu/material-gpu-plugin.js.map +1 -0
  165. package/dist/graphics/rendering/model-collider-plugin.d.ts +1232 -0
  166. package/dist/graphics/rendering/model-collider-plugin.js +81 -0
  167. package/dist/graphics/rendering/model-collider-plugin.js.map +1 -0
  168. package/dist/graphics/rendering/pbr-core-plugin.d.ts +75 -0
  169. package/dist/graphics/rendering/pbr-core-plugin.js +39 -0
  170. package/dist/graphics/rendering/pbr-core-plugin.js.map +1 -0
  171. package/dist/graphics/rendering/pbr-render/pbr-array-shader.wgsl.d.ts +10 -0
  172. package/dist/graphics/rendering/pbr-render/pbr-array-shader.wgsl.js +145 -0
  173. package/dist/graphics/rendering/pbr-render/pbr-array-shader.wgsl.js.map +1 -0
  174. package/dist/graphics/rendering/pbr-render/pbr-render-plugin.d.ts +1266 -0
  175. package/dist/graphics/rendering/pbr-render/pbr-render-plugin.js +254 -0
  176. package/dist/graphics/rendering/pbr-render/pbr-render-plugin.js.map +1 -0
  177. package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.d.ts +1004 -0
  178. package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js +116 -0
  179. package/dist/graphics/rendering/pbr-render/physics-bridge-plugin.js.map +1 -0
  180. package/dist/graphics/rendering/ragdoll-trigger-plugin.d.ts +31 -0
  181. package/dist/graphics/rendering/ragdoll-trigger-plugin.js +20 -0
  182. package/dist/graphics/rendering/ragdoll-trigger-plugin.js.map +1 -0
  183. package/dist/graphics/rendering/rendering-plugin.d.ts +1 -0
  184. package/dist/graphics/rendering/rendering-plugin.js +3 -0
  185. package/dist/graphics/rendering/rendering-plugin.js.map +1 -0
  186. package/dist/graphics/rendering/skinning/skinning-attributes/layout.d.ts +2 -0
  187. package/dist/graphics/rendering/skinning/skinning-attributes/layout.js +18 -0
  188. package/dist/graphics/rendering/skinning/skinning-attributes/layout.js.map +1 -0
  189. package/dist/graphics/rendering/skinning/skinning-attributes/public.d.ts +1 -0
  190. package/dist/graphics/rendering/skinning/skinning-attributes/public.js +3 -0
  191. package/dist/graphics/rendering/skinning/skinning-attributes/public.js.map +1 -0
  192. package/dist/graphics/rendering/skinning/skinning-attributes/skinning-attributes.d.ts +1 -0
  193. package/dist/graphics/rendering/skinning/skinning-attributes/skinning-attributes.js +3 -0
  194. package/dist/graphics/rendering/skinning/skinning-attributes/skinning-attributes.js.map +1 -0
  195. package/dist/graphics/rendering/skinning/skinning-plugin.d.ts +1212 -0
  196. package/dist/graphics/rendering/skinning/skinning-plugin.js +207 -0
  197. package/dist/graphics/rendering/skinning/skinning-plugin.js.map +1 -0
  198. package/dist/graphics/rendering/standard-vertex/layout.d.ts +2 -0
  199. package/dist/graphics/rendering/standard-vertex/layout.js +16 -0
  200. package/dist/graphics/rendering/standard-vertex/layout.js.map +1 -0
  201. package/dist/graphics/rendering/standard-vertex/public.d.ts +2 -0
  202. package/dist/graphics/rendering/standard-vertex/public.js +4 -0
  203. package/dist/graphics/rendering/standard-vertex/public.js.map +1 -0
  204. package/dist/graphics/rendering/standard-vertex/schema.d.ts +52 -0
  205. package/dist/graphics/rendering/standard-vertex/schema.js +15 -0
  206. package/dist/graphics/rendering/standard-vertex/schema.js.map +1 -0
  207. package/dist/graphics/rendering/standard-vertex/standard-vertex.d.ts +4 -0
  208. package/dist/graphics/rendering/standard-vertex/standard-vertex.js +3 -0
  209. package/dist/graphics/rendering/standard-vertex/standard-vertex.js.map +1 -0
  210. package/dist/graphics/rendering/visible-material/color-material-options.d.ts +7 -0
  211. package/dist/graphics/rendering/visible-material/color-material-options.js +3 -0
  212. package/dist/graphics/rendering/visible-material/color-material-options.js.map +1 -0
  213. package/dist/graphics/rendering/visible-material/create-bind-group-layout.d.ts +8 -0
  214. package/dist/graphics/rendering/visible-material/create-bind-group-layout.js +35 -0
  215. package/dist/graphics/rendering/visible-material/create-bind-group-layout.js.map +1 -0
  216. package/dist/graphics/rendering/visible-material/create-color-bind-group.d.ts +10 -0
  217. package/dist/graphics/rendering/visible-material/create-color-bind-group.js +26 -0
  218. package/dist/graphics/rendering/visible-material/create-color-bind-group.js.map +1 -0
  219. package/dist/graphics/rendering/visible-material/public.d.ts +4 -0
  220. package/dist/graphics/rendering/visible-material/public.js +5 -0
  221. package/dist/graphics/rendering/visible-material/public.js.map +1 -0
  222. package/dist/graphics/rendering/visible-material/schema.d.ts +49 -0
  223. package/dist/graphics/rendering/visible-material/schema.js +23 -0
  224. package/dist/graphics/rendering/visible-material/schema.js.map +1 -0
  225. package/dist/graphics/rendering/visible-material/visible-material.d.ts +4 -0
  226. package/dist/graphics/rendering/visible-material/visible-material.js +3 -0
  227. package/dist/graphics/rendering/visible-material/visible-material.js.map +1 -0
  228. package/dist/graphics/scene/light/light-plugin.d.ts +30 -0
  229. package/dist/graphics/scene/light/light-plugin.js +35 -0
  230. package/dist/graphics/scene/light/light-plugin.js.map +1 -0
  231. package/dist/graphics/scene/light/light.d.ts +14 -0
  232. package/dist/graphics/scene/light/light.js +3 -0
  233. package/dist/graphics/scene/light/light.js.map +1 -0
  234. package/dist/graphics/scene/light/public.d.ts +1 -0
  235. package/dist/graphics/scene/light/public.js +2 -0
  236. package/dist/graphics/scene/light/public.js.map +1 -0
  237. package/dist/graphics/scene/model/geometry/geometry.d.ts +9 -0
  238. package/dist/graphics/scene/model/geometry/geometry.js +3 -0
  239. package/dist/graphics/scene/model/geometry/geometry.js.map +1 -0
  240. package/dist/graphics/scene/model/geometry/public.d.ts +1 -0
  241. package/dist/graphics/scene/model/geometry/public.js +3 -0
  242. package/dist/graphics/scene/model/geometry/public.js.map +1 -0
  243. package/dist/graphics/scene/model/gltf/accessor-view.d.ts +9 -0
  244. package/dist/graphics/scene/model/gltf/accessor-view.js +44 -0
  245. package/dist/graphics/scene/model/gltf/accessor-view.js.map +1 -0
  246. package/dist/graphics/scene/model/gltf/build-material-bind-group.d.ts +22 -0
  247. package/dist/graphics/scene/model/gltf/build-material-bind-group.js +75 -0
  248. package/dist/graphics/scene/model/gltf/build-material-bind-group.js.map +1 -0
  249. package/dist/graphics/scene/model/gltf/compute-world-matrices.d.ts +7 -0
  250. package/dist/graphics/scene/model/gltf/compute-world-matrices.js +38 -0
  251. package/dist/graphics/scene/model/gltf/compute-world-matrices.js.map +1 -0
  252. package/dist/graphics/scene/model/gltf/create-color-material.d.ts +3 -0
  253. package/dist/graphics/scene/model/gltf/create-color-material.js +34 -0
  254. package/dist/graphics/scene/model/gltf/create-color-material.js.map +1 -0
  255. package/dist/graphics/scene/model/gltf/decode-images.d.ts +12 -0
  256. package/dist/graphics/scene/model/gltf/decode-images.js +68 -0
  257. package/dist/graphics/scene/model/gltf/decode-images.js.map +1 -0
  258. package/dist/graphics/scene/model/gltf/gltf-schema.d.ts +152 -0
  259. package/dist/graphics/scene/model/gltf/gltf-schema.js +20 -0
  260. package/dist/graphics/scene/model/gltf/gltf-schema.js.map +1 -0
  261. package/dist/graphics/scene/model/gltf/load-gltf-model.d.ts +42 -0
  262. package/dist/graphics/scene/model/gltf/load-gltf-model.js +175 -0
  263. package/dist/graphics/scene/model/gltf/load-gltf-model.js.map +1 -0
  264. package/dist/graphics/scene/model/gltf/pack-vertex-buffer.d.ts +21 -0
  265. package/dist/graphics/scene/model/gltf/pack-vertex-buffer.js +106 -0
  266. package/dist/graphics/scene/model/gltf/pack-vertex-buffer.js.map +1 -0
  267. package/dist/graphics/scene/model/gltf/parse-animations.d.ts +18 -0
  268. package/dist/graphics/scene/model/gltf/parse-animations.js +51 -0
  269. package/dist/graphics/scene/model/gltf/parse-animations.js.map +1 -0
  270. package/dist/graphics/scene/model/gltf/parse-glb.d.ts +6 -0
  271. package/dist/graphics/scene/model/gltf/parse-glb.js +40 -0
  272. package/dist/graphics/scene/model/gltf/parse-glb.js.map +1 -0
  273. package/dist/graphics/scene/model/gltf/parse-skin.d.ts +19 -0
  274. package/dist/graphics/scene/model/gltf/parse-skin.js +43 -0
  275. package/dist/graphics/scene/model/gltf/parse-skin.js.map +1 -0
  276. package/dist/graphics/scene/model/model-loader-plugin.d.ts +922 -0
  277. package/dist/graphics/scene/model/model-loader-plugin.js +120 -0
  278. package/dist/graphics/scene/model/model-loader-plugin.js.map +1 -0
  279. package/dist/graphics/scene/model/model-plugin.d.ts +352 -0
  280. package/dist/graphics/scene/model/model-plugin.js +39 -0
  281. package/dist/graphics/scene/model/model-plugin.js.map +1 -0
  282. package/dist/graphics/scene/model/model.d.ts +11 -0
  283. package/dist/graphics/scene/model/model.js +3 -0
  284. package/dist/graphics/scene/model/model.js.map +1 -0
  285. package/dist/graphics/scene/model/public.d.ts +1 -0
  286. package/dist/graphics/scene/model/public.js +2 -0
  287. package/dist/graphics/scene/model/public.js.map +1 -0
  288. package/dist/graphics/scene/model/shape/convex-hull.d.ts +36 -0
  289. package/dist/graphics/scene/model/shape/convex-hull.js +152 -0
  290. package/dist/graphics/scene/model/shape/convex-hull.js.map +1 -0
  291. package/dist/graphics/scene/model/shape/convex-hull.test.d.ts +1 -0
  292. package/dist/graphics/scene/model/shape/convex-hull.test.js +78 -0
  293. package/dist/graphics/scene/model/shape/convex-hull.test.js.map +1 -0
  294. package/dist/graphics/scene/model/shape/shape-geometry-plugin.d.ts +631 -0
  295. package/dist/graphics/scene/model/shape/shape-geometry-plugin.js +61 -0
  296. package/dist/graphics/scene/model/shape/shape-geometry-plugin.js.map +1 -0
  297. package/dist/graphics/scene/model/shape/shape-mesh.d.ts +34 -0
  298. package/dist/graphics/scene/model/shape/shape-mesh.js +142 -0
  299. package/dist/graphics/scene/model/shape/shape-mesh.js.map +1 -0
  300. package/dist/graphics/scene/model/shape/upload-shape-mesh.d.ts +9 -0
  301. package/dist/graphics/scene/model/shape/upload-shape-mesh.js +12 -0
  302. package/dist/graphics/scene/model/shape/upload-shape-mesh.js.map +1 -0
  303. package/dist/graphics/scene/model/world-bounds-plugin.d.ts +909 -0
  304. package/dist/graphics/scene/model/world-bounds-plugin.js +93 -0
  305. package/dist/graphics/scene/model/world-bounds-plugin.js.map +1 -0
  306. package/dist/graphics/scene/node/node-data-plugin.d.ts +113 -0
  307. package/dist/graphics/scene/node/node-data-plugin.js +27 -0
  308. package/dist/graphics/scene/node/node-data-plugin.js.map +1 -0
  309. package/dist/graphics/scene/node/node-plugin.d.ts +102 -0
  310. package/dist/graphics/scene/node/node-plugin.js +12 -0
  311. package/dist/graphics/scene/node/node-plugin.js.map +1 -0
  312. package/dist/graphics/scene/node/node.d.ts +19 -0
  313. package/dist/graphics/scene/node/node.js +3 -0
  314. package/dist/graphics/scene/node/node.js.map +1 -0
  315. package/dist/graphics/scene/node/public.d.ts +1 -0
  316. package/dist/graphics/scene/node/public.js +2 -0
  317. package/dist/graphics/scene/node/public.js.map +1 -0
  318. package/dist/graphics/scene/node/transform-plugin.d.ts +123 -0
  319. package/dist/graphics/scene/node/transform-plugin.js +65 -0
  320. package/dist/graphics/scene/node/transform-plugin.js.map +1 -0
  321. package/dist/graphics/scene/scene-plugin.d.ts +461 -0
  322. package/dist/graphics/scene/scene-plugin.js +19 -0
  323. package/dist/graphics/scene/scene-plugin.js.map +1 -0
  324. package/dist/graphics/scene/scene-uniforms/create-bind-group-layout.d.ts +7 -0
  325. package/dist/graphics/scene/scene-uniforms/create-bind-group-layout.js +19 -0
  326. package/dist/graphics/scene/scene-uniforms/create-bind-group-layout.js.map +1 -0
  327. package/dist/graphics/scene/scene-uniforms/public.d.ts +3 -0
  328. package/dist/graphics/scene/scene-uniforms/public.js +5 -0
  329. package/dist/graphics/scene/scene-uniforms/public.js.map +1 -0
  330. package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.d.ts +137 -0
  331. package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.js +59 -0
  332. package/dist/graphics/scene/scene-uniforms/scene-uniforms-plugin.js.map +1 -0
  333. package/dist/graphics/scene/scene-uniforms/scene-uniforms.d.ts +11 -0
  334. package/dist/graphics/scene/scene-uniforms/scene-uniforms.js +3 -0
  335. package/dist/graphics/scene/scene-uniforms/scene-uniforms.js.map +1 -0
  336. package/dist/graphics/scene/scene-uniforms/schema.d.ts +56 -0
  337. package/dist/graphics/scene/scene-uniforms/schema.js +15 -0
  338. package/dist/graphics/scene/scene-uniforms/schema.js.map +1 -0
  339. package/dist/index.d.ts +53 -0
  340. package/dist/index.js +56 -0
  341. package/dist/index.js.map +1 -0
  342. package/dist/material/material-plugin.d.ts +221 -0
  343. package/dist/material/material-plugin.js +60 -0
  344. package/dist/material/material-plugin.js.map +1 -0
  345. package/dist/material/material.d.ts +31 -0
  346. package/dist/material/material.js +3 -0
  347. package/dist/material/material.js.map +1 -0
  348. package/dist/material/public.d.ts +2 -0
  349. package/dist/material/public.js +4 -0
  350. package/dist/material/public.js.map +1 -0
  351. package/dist/material/standard-materials.d.ts +3 -0
  352. package/dist/material/standard-materials.js +35 -0
  353. package/dist/material/standard-materials.js.map +1 -0
  354. package/dist/physics/body/body-type/body-type.d.ts +10 -0
  355. package/dist/physics/body/body-type/body-type.js +3 -0
  356. package/dist/physics/body/body-type/body-type.js.map +1 -0
  357. package/dist/physics/body/body-type/is-dynamic.d.ts +3 -0
  358. package/dist/physics/body/body-type/is-dynamic.js +6 -0
  359. package/dist/physics/body/body-type/is-dynamic.js.map +1 -0
  360. package/dist/physics/body/body-type/public.d.ts +2 -0
  361. package/dist/physics/body/body-type/public.js +4 -0
  362. package/dist/physics/body/body-type/public.js.map +1 -0
  363. package/dist/physics/body/body-type/schema.d.ts +4 -0
  364. package/dist/physics/body/body-type/schema.js +3 -0
  365. package/dist/physics/body/body-type/schema.js.map +1 -0
  366. package/dist/physics/body/collider-mesh.d.ts +11 -0
  367. package/dist/physics/body/collider-mesh.js +3 -0
  368. package/dist/physics/body/collider-mesh.js.map +1 -0
  369. package/dist/physics/body/collider-shape/collider-shape.d.ts +15 -0
  370. package/dist/physics/body/collider-shape/collider-shape.js +3 -0
  371. package/dist/physics/body/collider-shape/collider-shape.js.map +1 -0
  372. package/dist/physics/body/collider-shape/list.d.ts +3 -0
  373. package/dist/physics/body/collider-shape/list.js +5 -0
  374. package/dist/physics/body/collider-shape/list.js.map +1 -0
  375. package/dist/physics/body/collider-shape/mass-properties.d.ts +10 -0
  376. package/dist/physics/body/collider-shape/mass-properties.js +48 -0
  377. package/dist/physics/body/collider-shape/mass-properties.js.map +1 -0
  378. package/dist/physics/body/collider-shape/public.d.ts +4 -0
  379. package/dist/physics/body/collider-shape/public.js +6 -0
  380. package/dist/physics/body/collider-shape/public.js.map +1 -0
  381. package/dist/physics/body/collider-shape/schema.d.ts +4 -0
  382. package/dist/physics/body/collider-shape/schema.js +3 -0
  383. package/dist/physics/body/collider-shape/schema.js.map +1 -0
  384. package/dist/physics/body/collider-shape/to-index.d.ts +3 -0
  385. package/dist/physics/body/collider-shape/to-index.js +6 -0
  386. package/dist/physics/body/collider-shape/to-index.js.map +1 -0
  387. package/dist/physics/body/rigid-body.d.ts +23 -0
  388. package/dist/physics/body/rigid-body.js +3 -0
  389. package/dist/physics/body/rigid-body.js.map +1 -0
  390. package/dist/physics/body/static-collider.d.ts +25 -0
  391. package/dist/physics/body/static-collider.js +3 -0
  392. package/dist/physics/body/static-collider.js.map +1 -0
  393. package/dist/physics/joint/joint-plugin.d.ts +88 -0
  394. package/dist/physics/joint/joint-plugin.js +32 -0
  395. package/dist/physics/joint/joint-plugin.js.map +1 -0
  396. package/dist/physics/joint/joint-type/joint-type.d.ts +15 -0
  397. package/dist/physics/joint/joint-type/joint-type.js +3 -0
  398. package/dist/physics/joint/joint-type/joint-type.js.map +1 -0
  399. package/dist/physics/joint/joint-type/public.d.ts +1 -0
  400. package/dist/physics/joint/joint-type/public.js +3 -0
  401. package/dist/physics/joint/joint-type/public.js.map +1 -0
  402. package/dist/physics/joint/joint-type/schema.d.ts +4 -0
  403. package/dist/physics/joint/joint-type/schema.js +3 -0
  404. package/dist/physics/joint/joint-type/schema.js.map +1 -0
  405. package/dist/physics/joint/joint.d.ts +24 -0
  406. package/dist/physics/joint/joint.js +3 -0
  407. package/dist/physics/joint/joint.js.map +1 -0
  408. package/dist/physics/physics-clock-plugin.d.ts +86 -0
  409. package/dist/physics/physics-clock-plugin.js +37 -0
  410. package/dist/physics/physics-clock-plugin.js.map +1 -0
  411. package/dist/physics/physics-clock.test.d.ts +1 -0
  412. package/dist/physics/physics-clock.test.js +45 -0
  413. package/dist/physics/physics-clock.test.js.map +1 -0
  414. package/dist/physics/physics-data-plugin.d.ts +348 -0
  415. package/dist/physics/physics-data-plugin.js +71 -0
  416. package/dist/physics/physics-data-plugin.js.map +1 -0
  417. package/dist/physics/ragdoll/fit-bone-capsules.d.ts +39 -0
  418. package/dist/physics/ragdoll/fit-bone-capsules.js +87 -0
  419. package/dist/physics/ragdoll/fit-bone-capsules.js.map +1 -0
  420. package/dist/physics/ragdoll/fit-bone-capsules.test.d.ts +1 -0
  421. package/dist/physics/ragdoll/fit-bone-capsules.test.js +67 -0
  422. package/dist/physics/ragdoll/fit-bone-capsules.test.js.map +1 -0
  423. package/dist/physics/solvers/jolt-solver-plugin.d.ts +465 -0
  424. package/dist/physics/solvers/jolt-solver-plugin.js +440 -0
  425. package/dist/physics/solvers/jolt-solver-plugin.js.map +1 -0
  426. package/dist/physics/solvers/rapier-jolt.benchmark.test.d.ts +1 -0
  427. package/dist/physics/solvers/rapier-jolt.benchmark.test.js +35 -0
  428. package/dist/physics/solvers/rapier-jolt.benchmark.test.js.map +1 -0
  429. package/dist/physics/solvers/rapier-solver-plugin.d.ts +444 -0
  430. package/dist/physics/solvers/rapier-solver-plugin.js +284 -0
  431. package/dist/physics/solvers/rapier-solver-plugin.js.map +1 -0
  432. package/dist/physics/solvers/solver-benchmark.d.ts +45 -0
  433. package/dist/physics/solvers/solver-benchmark.js +115 -0
  434. package/dist/physics/solvers/solver-benchmark.js.map +1 -0
  435. package/package.json +34 -0
  436. package/src/core/core-plugin.ts +92 -0
  437. package/src/core/frame-time/frame-time-plugin.ts +44 -0
  438. package/src/core/frame-time/frame-time.ts +21 -0
  439. package/src/core/frame-time/public.ts +3 -0
  440. package/src/graphics/animation/animation-data-plugin.ts +119 -0
  441. package/src/graphics/animation/animation-plugin.test.ts +161 -0
  442. package/src/graphics/animation/animation-plugin.ts +26 -0
  443. package/src/graphics/animation/animation-track/animation-track.ts +17 -0
  444. package/src/graphics/animation/animation-track/componentwise-lerp.ts +24 -0
  445. package/src/graphics/animation/animation-track/interpolate.ts +24 -0
  446. package/src/graphics/animation/animation-track/public.ts +3 -0
  447. package/src/graphics/animation/animation-track/sample.ts +48 -0
  448. package/src/graphics/animation/interpolation-mode/interpolation-mode.ts +8 -0
  449. package/src/graphics/animation/interpolation-mode/public.ts +3 -0
  450. package/src/graphics/animation/interpolation-mode/schema.ts +5 -0
  451. package/src/graphics/camera/camera-plugin.ts +37 -0
  452. package/src/graphics/camera/camera.ts +8 -0
  453. package/src/graphics/camera/orbit/attach-orbit-drag.ts +62 -0
  454. package/src/graphics/camera/orbit/orbit-data-plugin.ts +44 -0
  455. package/src/graphics/camera/orbit/orbit-plugin.ts +13 -0
  456. package/src/graphics/camera/orbit/orbit-system-plugin.ts +74 -0
  457. package/src/graphics/camera/orbit/orbit.ts +36 -0
  458. package/src/graphics/camera/orbit/public.ts +7 -0
  459. package/src/graphics/camera/public.ts +6 -0
  460. package/src/graphics/camera/schema.ts +21 -0
  461. package/src/graphics/camera/screen-to-world-ray.ts +47 -0
  462. package/src/graphics/camera/to-view-projection.ts +29 -0
  463. package/src/graphics/graphics-plugin.ts +108 -0
  464. package/src/graphics/picking/pick-hit.ts +13 -0
  465. package/src/graphics/picking/picking-plugin.ts +101 -0
  466. package/src/graphics/plugins.md +120 -0
  467. package/src/graphics/rendering/bone-collider-plugin.ts +182 -0
  468. package/src/graphics/rendering/display-transform-plugin.ts +26 -0
  469. package/src/graphics/rendering/ibl-render/brdf.wgsl.ts +43 -0
  470. package/src/graphics/rendering/ibl-render/ibl/brdf-lut.ts +101 -0
  471. package/src/graphics/rendering/ibl-render/ibl/build-ibl-resources.ts +57 -0
  472. package/src/graphics/rendering/ibl-render/ibl/create-cubemap.ts +17 -0
  473. package/src/graphics/rendering/ibl-render/ibl/cube-face-view.ts +11 -0
  474. package/src/graphics/rendering/ibl-render/ibl/cubemap-sample-view.ts +9 -0
  475. package/src/graphics/rendering/ibl-render/ibl/environment.ts +190 -0
  476. package/src/graphics/rendering/ibl-render/ibl/float-to-half.ts +35 -0
  477. package/src/graphics/rendering/ibl-render/ibl/ibl-math.wgsl.ts +60 -0
  478. package/src/graphics/rendering/ibl-render/ibl/irradiance.ts +105 -0
  479. package/src/graphics/rendering/ibl-render/ibl/parse-hdr.ts +108 -0
  480. package/src/graphics/rendering/ibl-render/ibl/prefilter.ts +121 -0
  481. package/src/graphics/rendering/ibl-render/ibl/render-helpers.ts +17 -0
  482. package/src/graphics/rendering/ibl-render/ibl-render-plugin.ts +415 -0
  483. package/src/graphics/rendering/ibl-render/ibl-shader.wgsl.ts +185 -0
  484. package/src/graphics/rendering/ibl-render/skybox-shader.wgsl.ts +51 -0
  485. package/src/graphics/rendering/interpolation-plugin.ts +97 -0
  486. package/src/graphics/rendering/interpolation.test.ts +52 -0
  487. package/src/graphics/rendering/jolt-ragdoll-plugin.ts +174 -0
  488. package/src/graphics/rendering/material-gpu/material-arrays.ts +113 -0
  489. package/src/graphics/rendering/material-gpu/material-bind-group.ts +61 -0
  490. package/src/graphics/rendering/material-gpu/material-gpu-plugin.ts +95 -0
  491. package/src/graphics/rendering/model-collider-plugin.ts +77 -0
  492. package/src/graphics/rendering/pbr-core-plugin.ts +40 -0
  493. package/src/graphics/rendering/pbr-render/pbr-array-shader.wgsl.ts +146 -0
  494. package/src/graphics/rendering/pbr-render/pbr-render-plugin.ts +247 -0
  495. package/src/graphics/rendering/pbr-render/physics-bridge-plugin.ts +106 -0
  496. package/src/graphics/rendering/ragdoll-trigger-plugin.ts +21 -0
  497. package/src/graphics/rendering/rendering-plugin.ts +3 -0
  498. package/src/graphics/rendering/skinning/skinning-attributes/layout.ts +20 -0
  499. package/src/graphics/rendering/skinning/skinning-attributes/public.ts +3 -0
  500. package/src/graphics/rendering/skinning/skinning-attributes/skinning-attributes.ts +3 -0
  501. package/src/graphics/rendering/skinning/skinning-plugin.ts +213 -0
  502. package/src/graphics/rendering/standard-vertex/layout.ts +19 -0
  503. package/src/graphics/rendering/standard-vertex/public.ts +4 -0
  504. package/src/graphics/rendering/standard-vertex/schema.ts +17 -0
  505. package/src/graphics/rendering/standard-vertex/standard-vertex.ts +8 -0
  506. package/src/graphics/rendering/visible-material/color-material-options.ts +10 -0
  507. package/src/graphics/rendering/visible-material/create-bind-group-layout.ts +35 -0
  508. package/src/graphics/rendering/visible-material/create-color-bind-group.ts +40 -0
  509. package/src/graphics/rendering/visible-material/public.ts +6 -0
  510. package/src/graphics/rendering/visible-material/schema.ts +25 -0
  511. package/src/graphics/rendering/visible-material/visible-material.ts +8 -0
  512. package/src/graphics/scene/light/light-plugin.ts +37 -0
  513. package/src/graphics/scene/light/light.ts +18 -0
  514. package/src/graphics/scene/light/public.ts +1 -0
  515. package/src/graphics/scene/model/geometry/geometry.ts +12 -0
  516. package/src/graphics/scene/model/geometry/public.ts +4 -0
  517. package/src/graphics/scene/model/gltf/accessor-view.ts +53 -0
  518. package/src/graphics/scene/model/gltf/build-material-bind-group.ts +110 -0
  519. package/src/graphics/scene/model/gltf/compute-world-matrices.ts +43 -0
  520. package/src/graphics/scene/model/gltf/create-color-material.ts +47 -0
  521. package/src/graphics/scene/model/gltf/decode-images.ts +93 -0
  522. package/src/graphics/scene/model/gltf/gltf-schema.ts +161 -0
  523. package/src/graphics/scene/model/gltf/load-gltf-model.ts +220 -0
  524. package/src/graphics/scene/model/gltf/pack-vertex-buffer.ts +116 -0
  525. package/src/graphics/scene/model/gltf/parse-animations.ts +66 -0
  526. package/src/graphics/scene/model/gltf/parse-glb.ts +51 -0
  527. package/src/graphics/scene/model/gltf/parse-skin.ts +67 -0
  528. package/src/graphics/scene/model/model-loader-plugin.ts +131 -0
  529. package/src/graphics/scene/model/model-plugin.ts +46 -0
  530. package/src/graphics/scene/model/model.ts +15 -0
  531. package/src/graphics/scene/model/public.ts +1 -0
  532. package/src/graphics/scene/model/shape/convex-hull.test.ts +72 -0
  533. package/src/graphics/scene/model/shape/convex-hull.ts +141 -0
  534. package/src/graphics/scene/model/shape/shape-geometry-plugin.ts +61 -0
  535. package/src/graphics/scene/model/shape/shape-mesh.ts +150 -0
  536. package/src/graphics/scene/model/shape/upload-shape-mesh.ts +14 -0
  537. package/src/graphics/scene/model/world-bounds-plugin.ts +88 -0
  538. package/src/graphics/scene/node/node-data-plugin.ts +28 -0
  539. package/src/graphics/scene/node/node-plugin.ts +13 -0
  540. package/src/graphics/scene/node/node.ts +23 -0
  541. package/src/graphics/scene/node/public.ts +1 -0
  542. package/src/graphics/scene/node/transform-plugin.ts +72 -0
  543. package/src/graphics/scene/scene-plugin.ts +20 -0
  544. package/src/graphics/scene/scene-uniforms/create-bind-group-layout.ts +19 -0
  545. package/src/graphics/scene/scene-uniforms/public.ts +5 -0
  546. package/src/graphics/scene/scene-uniforms/scene-uniforms-plugin.ts +64 -0
  547. package/src/graphics/scene/scene-uniforms/scene-uniforms.ts +15 -0
  548. package/src/graphics/scene/scene-uniforms/schema.ts +17 -0
  549. package/src/index.ts +72 -0
  550. package/src/material/material-plugin.ts +61 -0
  551. package/src/material/material.ts +38 -0
  552. package/src/material/public.ts +4 -0
  553. package/src/material/standard-materials.ts +43 -0
  554. package/src/physics/README.md +71 -0
  555. package/src/physics/body/body-type/body-type.ts +14 -0
  556. package/src/physics/body/body-type/is-dynamic.ts +8 -0
  557. package/src/physics/body/body-type/public.ts +4 -0
  558. package/src/physics/body/body-type/schema.ts +5 -0
  559. package/src/physics/body/collider-mesh.ts +13 -0
  560. package/src/physics/body/collider-shape/collider-shape.ts +19 -0
  561. package/src/physics/body/collider-shape/list.ts +7 -0
  562. package/src/physics/body/collider-shape/mass-properties.ts +47 -0
  563. package/src/physics/body/collider-shape/public.ts +6 -0
  564. package/src/physics/body/collider-shape/schema.ts +5 -0
  565. package/src/physics/body/collider-shape/to-index.ts +8 -0
  566. package/src/physics/body/rigid-body.ts +26 -0
  567. package/src/physics/body/static-collider.ts +28 -0
  568. package/src/physics/joint/joint-plugin.ts +33 -0
  569. package/src/physics/joint/joint-type/joint-type.ts +19 -0
  570. package/src/physics/joint/joint-type/public.ts +3 -0
  571. package/src/physics/joint/joint-type/schema.ts +5 -0
  572. package/src/physics/joint/joint.ts +27 -0
  573. package/src/physics/physics-clock-plugin.ts +61 -0
  574. package/src/physics/physics-clock.test.ts +55 -0
  575. package/src/physics/physics-data-plugin.ts +73 -0
  576. package/src/physics/ragdoll/fit-bone-capsules.test.ts +66 -0
  577. package/src/physics/ragdoll/fit-bone-capsules.ts +106 -0
  578. package/src/physics/solvers/README.md +63 -0
  579. package/src/physics/solvers/jolt-solver-plugin.ts +382 -0
  580. package/src/physics/solvers/rapier-jolt.benchmark.test.ts +39 -0
  581. package/src/physics/solvers/rapier-solver-plugin.ts +251 -0
  582. package/src/physics/solvers/solver-benchmark.ts +172 -0
  583. package/tsconfig.json +25 -0
  584. 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,4 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export { plugin } from "./material-plugin.js";
4
+ export { standardMaterials } from "./standard-materials.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,4 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export { schema } from "./schema.js";
4
+ export { isDynamic } from "./is-dynamic.js";
@@ -0,0 +1,5 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { Schema } from "@adobe/data/schema";
4
+
5
+ export const schema = { type: "string", enum: ["static", "dynamic", "kinematic"] } as const satisfies Schema;
@@ -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,6 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export { schema } from "./schema.js";
4
+ export { list } from "./list.js";
5
+ export { toIndex } from "./to-index.js";
6
+ export { massProperties } from "./mass-properties.js";
@@ -0,0 +1,5 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { Schema } from "@adobe/data/schema";
4
+
5
+ export const schema = { type: "string", enum: ["sphere", "box", "capsule", "hull", "mesh"] } as const satisfies Schema;
@@ -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
+ });