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