@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,44 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { Database } from "@adobe/data/ecs";
4
+ import type { FrameTime } from "./frame-time.js";
5
+
6
+ /**
7
+ * Largest per-frame delta (seconds) the clock reports. A backgrounded tab or
8
+ * the very first frame would otherwise produce a multi-second `dt` that throws
9
+ * every time-stepped system off; clamping here means no consumer has to.
10
+ */
11
+ const MAX_DELTA = 0.1;
12
+
13
+ /**
14
+ * Publishes per-frame wall-clock timing as the `frameTime` resource. Declares
15
+ * its system but does not extend the scheduler — so pure-data consumers (and
16
+ * their tests) can pull in the `frameTime` resource without dragging in
17
+ * `requestAnimationFrame`. Composed with a scheduler (via `core`), the system
18
+ * runs in the first tier (no dependencies), so every later phase — update,
19
+ * physics, render — reads a `dt`/`elapsed` already advanced for this frame.
20
+ */
21
+ export const plugin = Database.Plugin.create({
22
+ resources: {
23
+ frameTime: {
24
+ default: { now: 0, dt: 0, elapsed: 0 } satisfies FrameTime as FrameTime,
25
+ transient: true,
26
+ },
27
+ },
28
+ systems: {
29
+ _frameTime: {
30
+ create: db => {
31
+ let last = 0;
32
+ return () => {
33
+ const now = performance.now();
34
+ // first frame (last === 0) reports dt 0 — no work has elapsed yet
35
+ const raw = last === 0 ? 0 : (now - last) / 1000;
36
+ last = now;
37
+ const dt = raw < MAX_DELTA ? raw : MAX_DELTA;
38
+ const elapsed = db.store.resources.frameTime.elapsed + dt;
39
+ db.store.resources.frameTime = { now, dt, elapsed };
40
+ };
41
+ },
42
+ },
43
+ },
44
+ });
@@ -0,0 +1,21 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export * as FrameTime from "./public.js";
4
+
5
+ /**
6
+ * Wall-clock timing for the current frame, published once per frame by
7
+ * `FrameTime.plugin`. Any system that advances state over time reads this
8
+ * instead of calling `performance.now()` and tracking its own `lastTime`.
9
+ */
10
+ export interface FrameTime {
11
+ /** `performance.now()` (ms) sampled at the start of this frame. */
12
+ readonly now: number;
13
+ /**
14
+ * Seconds since the previous frame, clamped to a sane maximum so a
15
+ * stalled tab or the first frame can't inject a huge time jump. A solver
16
+ * that needs a tighter stability bound clamps `dt` further at its own seam.
17
+ */
18
+ readonly dt: number;
19
+ /** Seconds since the plugin started — the running sum of clamped `dt`. */
20
+ readonly elapsed: number;
21
+ }
@@ -0,0 +1,3 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export { plugin } from "./frame-time-plugin.js";
@@ -0,0 +1,119 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { Database, Entity } from "@adobe/data/ecs";
4
+ import { Boolean, F32, Time, True, type Schema } from "@adobe/data/schema";
5
+ import { AnimationTrack } from "../animation/animation-track/animation-track.js";
6
+
7
+ const animationBase = Database.Plugin.create({
8
+ components: {
9
+ animationClipTracks: { default: [] as AnimationTrack[] },
10
+ animationClipDuration: Time.schema,
11
+ animationClipRef: Entity.schema,
12
+ animationTargets: { default: [] as Entity[] },
13
+ animationTime: Time.schema,
14
+ animationSpeed: { ...F32.schema, default: 1 },
15
+ animationLoop: Boolean.schema,
16
+ animationPlaying: Boolean.schema,
17
+ animationObservable: True.schema,
18
+ },
19
+ archetypes: {
20
+ AnimationClip: ["animationClipTracks", "animationClipDuration"],
21
+ Animation: [
22
+ "animationClipRef",
23
+ "animationTargets",
24
+ "animationTime",
25
+ "animationSpeed",
26
+ "animationLoop",
27
+ "animationPlaying",
28
+ ],
29
+ AnimationObservable: [
30
+ "animationClipRef",
31
+ "animationTargets",
32
+ "animationTime",
33
+ "animationSpeed",
34
+ "animationLoop",
35
+ "animationPlaying",
36
+ "animationObservable",
37
+ ],
38
+ },
39
+ });
40
+
41
+ type AnimationStore = Database.Plugin.ToStore<typeof animationBase>;
42
+
43
+ export const animationData = Database.Plugin.create({
44
+ extends: animationBase,
45
+ transactions: {
46
+ insertAnimationClip(t, args: { tracks: AnimationTrack[]; duration: number }): number {
47
+ return t.archetypes.AnimationClip.insert({
48
+ animationClipTracks: args.tracks,
49
+ animationClipDuration: args.duration,
50
+ });
51
+ },
52
+ insertAnimation(
53
+ t,
54
+ args: {
55
+ animationClipRef: number;
56
+ animationTargets: number[];
57
+ animationTime?: number;
58
+ animationSpeed?: number;
59
+ animationLoop?: boolean;
60
+ animationPlaying?: boolean;
61
+ observable?: boolean;
62
+ },
63
+ ): number {
64
+ const values = {
65
+ animationClipRef: args.animationClipRef,
66
+ animationTargets: args.animationTargets,
67
+ animationTime: args.animationTime ?? 0,
68
+ animationSpeed: args.animationSpeed ?? 1,
69
+ animationLoop: args.animationLoop ?? false,
70
+ animationPlaying: args.animationPlaying ?? true,
71
+ };
72
+ return args.observable
73
+ ? t.archetypes.AnimationObservable.insert({ ...values, animationObservable: true })
74
+ : t.archetypes.Animation.insert(values);
75
+ },
76
+ advanceAnimations(t: AnimationStore, args: { dt: number; observable: boolean }) {
77
+ const componentSchemas = t.componentSchemas as Record<string, Schema>;
78
+ const arch = args.observable ? t.archetypes.AnimationObservable : t.archetypes.Animation;
79
+ const ids = arch.columns.id;
80
+ const clipRefs = arch.columns.animationClipRef;
81
+ const targetsCol = arch.columns.animationTargets;
82
+ const times = arch.columns.animationTime;
83
+ const speeds = arch.columns.animationSpeed;
84
+ const loops = arch.columns.animationLoop;
85
+ const playings = arch.columns.animationPlaying;
86
+ const { dt } = args;
87
+ const rowCount = arch.rowCount;
88
+ for (let i = 0; i < rowCount; i++) {
89
+ if (!playings.get(i)) continue;
90
+ const playerId = ids.get(i);
91
+ const clipId = clipRefs.get(i);
92
+ const clip = t.read(clipId);
93
+ if (!clip?.animationClipTracks || !clip.animationClipDuration || clip.animationClipDuration <= 0) continue;
94
+ const speed = speeds.get(i);
95
+ const loop = loops.get(i);
96
+ const duration = clip.animationClipDuration;
97
+ let newTime = times.get(i) + dt * speed;
98
+ if (loop) {
99
+ newTime = ((newTime % duration) + duration) % duration;
100
+ } else if (newTime >= duration) {
101
+ newTime = duration;
102
+ t.update(playerId, { animationPlaying: false });
103
+ } else if (newTime < 0) {
104
+ newTime = 0;
105
+ }
106
+ t.update(playerId, { animationTime: newTime });
107
+ const targets = targetsCol.get(i);
108
+ for (const track of clip.animationClipTracks) {
109
+ const target = targets[track.targetIndex];
110
+ if (target === undefined || target === 0) continue;
111
+ const schema = componentSchemas[track.component];
112
+ if (!schema) continue;
113
+ const value = AnimationTrack.sample(track, schema, newTime);
114
+ t.update(target, { [track.component]: value });
115
+ }
116
+ }
117
+ },
118
+ },
119
+ });
@@ -0,0 +1,161 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { describe, it, expect } from "vitest";
4
+ import { Database, type Store } from "@adobe/data/ecs";
5
+ import { F32 } from "@adobe/data/math";
6
+ import { animation } from "./animation-plugin.js";
7
+ import type { AnimationTrack } from "./animation-track/animation-track.js";
8
+
9
+ function scalarTrack(component: string, points: readonly [time: number, value: number][]): AnimationTrack {
10
+ const times = new Float32Array(points.length);
11
+ const values = new Float32Array(points.length);
12
+ for (let i = 0; i < points.length; i++) {
13
+ times[i] = points[i][0];
14
+ values[i] = points[i][1];
15
+ }
16
+ return { targetIndex: 0, component, times, values, interpolation: "linear" };
17
+ }
18
+
19
+ function createTestDb() {
20
+ // The `placeholder` resource exists only to consume entity id 0, which the
21
+ // animation code treats as a sentinel "no target". In real scenes the
22
+ // first non-resource entity is never 0 either.
23
+ return Database.create(Database.Plugin.create({
24
+ extends: animation,
25
+ components: {
26
+ value: F32.schema,
27
+ },
28
+ resources: {
29
+ placeholder: { default: 0 as number },
30
+ },
31
+ archetypes: {
32
+ Target: ["value"],
33
+ },
34
+ transactions: {
35
+ insertTarget(t): number {
36
+ return t.archetypes.Target.insert({ value: 0 });
37
+ },
38
+ },
39
+ }));
40
+ }
41
+
42
+ const linearClip = (db: ReturnType<typeof createTestDb>) =>
43
+ db.transactions.insertAnimationClip({
44
+ tracks: [scalarTrack("value", [[0, 0], [1, 10]])],
45
+ duration: 1,
46
+ });
47
+
48
+ describe("animation.advanceAnimations", () => {
49
+ it("advances time and writes the sampled value to the target", () => {
50
+ const db = createTestDb();
51
+ const targetId = db.transactions.insertTarget() as number;
52
+ const clipId = linearClip(db);
53
+ db.transactions.insertAnimation({
54
+ animationClipRef: clipId,
55
+ animationTargets: [targetId],
56
+ });
57
+
58
+ db.transactions.advanceAnimations({ dt: 0.25, observable: false });
59
+
60
+ // 0.25s into a 1s clip linearly interpolating 0→10 → value = 2.5.
61
+ expect(db.read(targetId)?.value).toBeCloseTo(2.5, 5);
62
+ });
63
+
64
+ it("loops time within the clip duration", () => {
65
+ const db = createTestDb();
66
+ const targetId = db.transactions.insertTarget() as number;
67
+ const clipId = linearClip(db);
68
+ db.transactions.insertAnimation({
69
+ animationClipRef: clipId,
70
+ animationTargets: [targetId],
71
+ animationLoop: true,
72
+ });
73
+
74
+ db.transactions.advanceAnimations({ dt: 2.25, observable: false });
75
+
76
+ // 2.25 % 1 = 0.25 → same sampled value as the first test.
77
+ expect(db.read(targetId)?.value).toBeCloseTo(2.5, 5);
78
+ });
79
+
80
+ it("stops a non-looping player when it reaches duration", () => {
81
+ const db = createTestDb();
82
+ const targetId = db.transactions.insertTarget() as number;
83
+ const clipId = linearClip(db);
84
+ const playerId = db.transactions.insertAnimation({
85
+ animationClipRef: clipId,
86
+ animationTargets: [targetId],
87
+ animationLoop: false,
88
+ }) as number;
89
+
90
+ db.transactions.advanceAnimations({ dt: 2, observable: false });
91
+
92
+ const player = db.read(playerId);
93
+ expect(player?.animationTime).toBe(1);
94
+ expect(player?.animationPlaying).toBe(false);
95
+ });
96
+
97
+ it("only touches players whose animationObservable flag matches the args", () => {
98
+ const db = createTestDb();
99
+ const observableTarget = db.transactions.insertTarget() as number;
100
+ const directTarget = db.transactions.insertTarget() as number;
101
+ const clipId = linearClip(db);
102
+ db.transactions.insertAnimation({
103
+ animationClipRef: clipId,
104
+ animationTargets: [observableTarget],
105
+ observable: true,
106
+ });
107
+ db.transactions.insertAnimation({
108
+ animationClipRef: clipId,
109
+ animationTargets: [directTarget],
110
+ });
111
+
112
+ // observable: true touches only the flagged player.
113
+ db.transactions.advanceAnimations({ dt: 0.5, observable: true });
114
+ expect(db.read(observableTarget)?.value).toBeCloseTo(5, 5);
115
+ expect(db.read(directTarget)?.value).toBe(0);
116
+
117
+ // observable: false touches only the non-flagged player.
118
+ db.transactions.advanceAnimations({ dt: 0.5, observable: false });
119
+ expect(db.read(directTarget)?.value).toBeCloseTo(5, 5);
120
+ });
121
+
122
+ it("fires entity observers for the observable path and skips them for the direct path", () => {
123
+ const db = createTestDb();
124
+ const observableTarget = db.transactions.insertTarget() as number;
125
+ const directTarget = db.transactions.insertTarget() as number;
126
+ const clipId = linearClip(db);
127
+ db.transactions.insertAnimation({
128
+ animationClipRef: clipId,
129
+ animationTargets: [observableTarget],
130
+ observable: true,
131
+ });
132
+ db.transactions.insertAnimation({
133
+ animationClipRef: clipId,
134
+ animationTargets: [directTarget],
135
+ });
136
+
137
+ const observableNotifications: number[] = [];
138
+ const directNotifications: number[] = [];
139
+ db.observe.entity(observableTarget)(v => { if (v) observableNotifications.push(v.value as number); });
140
+ db.observe.entity(directTarget)(v => { if (v) directNotifications.push(v.value as number); });
141
+ // Drop the initial-value notifications.
142
+ observableNotifications.length = 0;
143
+ directNotifications.length = 0;
144
+
145
+ // Observable path: writes flow through the transaction → observers fire.
146
+ db.transactions.advanceAnimations({ dt: 0.5, observable: true });
147
+ expect(observableNotifications.length).toBeGreaterThan(0);
148
+ expect(directNotifications.length).toBe(0);
149
+
150
+ // Direct path: same `advanceAnimations` body, but with the raw store
151
+ // as `t`. Underlying value changes; observers must stay silent.
152
+ // (`db.store` is exposed at runtime but not on the public Database
153
+ // type — systems get a `Database & { store }` view; tests reach in.)
154
+ const directStore = (db as unknown as { store: Store<any, any, any> }).store;
155
+ const before = db.read(directTarget)?.value;
156
+ animation.transactions.advanceAnimations(directStore, { dt: 0.5, observable: false });
157
+ const after = db.read(directTarget)?.value;
158
+ expect(after).not.toBe(before);
159
+ expect(directNotifications.length).toBe(0);
160
+ });
161
+ });
@@ -0,0 +1,26 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { Database } from "@adobe/data/ecs";
4
+ import { FrameTime } from "../../core/frame-time/frame-time.js";
5
+ import { animationData } from "./animation-data-plugin.js";
6
+
7
+ /**
8
+ * Full animation plugin — declarative data (from `scene/animation-plugin.ts`)
9
+ * plus the per-frame `animationSampleSystem` that advances all playing entities.
10
+ *
11
+ * Exported as `animation` from index.ts. The data-only part lives in
12
+ * `scene/animation-plugin.ts` and is included in the `scene` aggregator.
13
+ */
14
+ export const animation = Database.Plugin.create({
15
+ extends: Database.Plugin.combine(animationData, FrameTime.plugin),
16
+ systems: {
17
+ animationSampleSystem: {
18
+ create: db => () => {
19
+ const dt = db.store.resources.frameTime.dt;
20
+ if (dt <= 0) return;
21
+ db.transactions.advanceAnimations({ dt, observable: true });
22
+ animationData.transactions.advanceAnimations(db.store, { dt, observable: false });
23
+ },
24
+ },
25
+ },
26
+ });
@@ -0,0 +1,17 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import type { InterpolationMode } from "../interpolation-mode/interpolation-mode.js";
4
+
5
+ export interface AnimationTrack {
6
+ /** Index into the AnimationPlayer's animationTargets array. */
7
+ readonly targetIndex: number;
8
+ /** Component name to write on the resolved target entity. */
9
+ readonly component: string;
10
+ /** Sorted keyframe timestamps. */
11
+ readonly times: Float32Array;
12
+ /** Packed keyframe values (componentsPerKey * times.length entries). */
13
+ readonly values: Float32Array;
14
+ readonly interpolation: InterpolationMode;
15
+ }
16
+
17
+ export * as AnimationTrack from "./public.js";
@@ -0,0 +1,24 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import type { Schema } from "@adobe/data/schema";
4
+
5
+ /**
6
+ * Default linear interpolation when a schema does not declare its own
7
+ * `interpolators.linear`. Walks the schema once and lerps numeric leaves.
8
+ * Supports `type: "number"` scalars and `type: "array"` of numbers.
9
+ */
10
+ export function componentwiseLerp(schema: Schema, prev: any, next: any, t: number): any {
11
+ if (schema.type === "number") {
12
+ return prev + (next - prev) * t;
13
+ }
14
+ if (schema.type === "array") {
15
+ const n = prev.length;
16
+ const out = new Array(n);
17
+ const itemSchema = schema.items ?? { type: "number" };
18
+ for (let i = 0; i < n; i++) {
19
+ out[i] = componentwiseLerp(itemSchema, prev[i], next[i], t);
20
+ }
21
+ return out;
22
+ }
23
+ throw new Error(`componentwiseLerp: no default interpolator for schema type "${schema.type}"`);
24
+ }
@@ -0,0 +1,24 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import type { Schema } from "@adobe/data/schema";
4
+ import type { InterpolationMode } from "../interpolation-mode/interpolation-mode.js";
5
+ import { componentwiseLerp } from "./componentwise-lerp.js";
6
+
7
+ /**
8
+ * Dispatches to a schema-declared interpolator if present, otherwise falls
9
+ * back to a sensible default: `step` returns `next`, `linear` walks the schema
10
+ * and lerps numeric leaves. `cubicSpline` requires a schema override.
11
+ */
12
+ export function interpolate(
13
+ schema: Schema,
14
+ mode: InterpolationMode,
15
+ prev: any,
16
+ next: any,
17
+ t: number,
18
+ ): any {
19
+ const custom = schema.interpolators?.[mode];
20
+ if (custom) return custom(prev, next, t);
21
+ if (mode === "step") return prev;
22
+ if (mode === "linear") return componentwiseLerp(schema, prev, next, t);
23
+ throw new Error(`interpolate: schema type "${schema.type}" has no "${mode}" interpolator`);
24
+ }
@@ -0,0 +1,3 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export { sample } from "./sample.js";
@@ -0,0 +1,48 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import type { Schema } from "@adobe/data/schema";
4
+ import type { AnimationTrack } from "./animation-track.js";
5
+ import { interpolate } from "./interpolate.js";
6
+
7
+ /**
8
+ * Samples a track at `time` and returns the interpolated component value.
9
+ * `time` must already be wrapped into the clip's [0, duration] range by the caller.
10
+ */
11
+ export function sample(track: AnimationTrack, schema: Schema, time: number): number | number[] {
12
+ const { times, values } = track;
13
+ const keyCount = times.length;
14
+ const stride = values.length / keyCount;
15
+
16
+ if (keyCount === 1 || time <= times[0]) {
17
+ return readKey(values, 0, stride);
18
+ }
19
+ const last = keyCount - 1;
20
+ if (time >= times[last]) {
21
+ return readKey(values, last, stride);
22
+ }
23
+
24
+ let lo = 0;
25
+ let hi = last;
26
+ while (hi - lo > 1) {
27
+ const mid = (lo + hi) >> 1;
28
+ if (times[mid] <= time) lo = mid;
29
+ else hi = mid;
30
+ }
31
+
32
+ const tPrev = times[lo];
33
+ const tNext = times[hi];
34
+ const span = tNext - tPrev;
35
+ const t = span > 0 ? (time - tPrev) / span : 0;
36
+
37
+ const prev = readKey(values, lo, stride);
38
+ const next = readKey(values, hi, stride);
39
+ return interpolate(schema, track.interpolation, prev, next, t);
40
+ }
41
+
42
+ function readKey(values: Float32Array, index: number, stride: number): number | number[] {
43
+ if (stride === 1) return values[index];
44
+ const out = new Array<number>(stride);
45
+ const base = index * stride;
46
+ for (let i = 0; i < stride; i++) out[i] = values[base + i];
47
+ return out;
48
+ }
@@ -0,0 +1,8 @@
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
+ export type InterpolationMode = Schema.ToType<typeof schema>;
7
+
8
+ export * as InterpolationMode from "./public.js";
@@ -0,0 +1,3 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ export { schema } from "./schema.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: ["linear", "step", "cubicSpline"] } as const satisfies Schema;
@@ -0,0 +1,37 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ import { Database } from "@adobe/data/ecs";
4
+ import { graphics } from "../graphics-plugin.js";
5
+ import { Camera } from "./camera.js";
6
+
7
+ export const plugin = Database.Plugin.create({
8
+ extends: graphics,
9
+ resources: {
10
+ camera: {
11
+ default: {
12
+ aspect: 16 / 9,
13
+ fieldOfView: Math.PI / 4,
14
+ nearPlane: 0.1,
15
+ farPlane: 100.0,
16
+ position: [0, 0, 10],
17
+ target: [0, 0, 0],
18
+ up: [0, 1, 0],
19
+ orthographic: 0,
20
+ } satisfies Camera as Camera,
21
+ },
22
+ },
23
+ systems: {
24
+ updateCameraAspect: {
25
+ create: db => () => {
26
+ const { canvas } = db.store.resources;
27
+ let { camera: cam } = db.store.resources;
28
+ if (!canvas || !cam) return;
29
+ const aspect = canvas.width / canvas.height;
30
+ if (cam.aspect !== aspect) {
31
+ db.store.resources.camera = { ...cam, aspect };
32
+ }
33
+ },
34
+ schedule: { during: ["preRender"] }
35
+ },
36
+ },
37
+ });
@@ -0,0 +1,8 @@
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
+ export type Camera = Schema.ToType<typeof schema>;
7
+
8
+ export * as Camera from "./public.js";
@@ -0,0 +1,62 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+
3
+ /**
4
+ * Minimal service interface required by attachOrbitDrag — just the two
5
+ * orbit transactions it calls. Any service that combines Orbit.plugin
6
+ * satisfies this.
7
+ */
8
+ export interface OrbitDragService {
9
+ transactions: {
10
+ addOrbitAngle(delta: number): void;
11
+ resumeAutoSpin(): void;
12
+ };
13
+ }
14
+
15
+ /**
16
+ * Attaches pointer-drag listeners to `element` that drive orbit rotation.
17
+ * Returns a dispose function to remove the listeners.
18
+ *
19
+ * Framework-agnostic — pass the returned dispose to whatever cleanup
20
+ * mechanism your framework provides (useEffect return, onUnmount, etc.).
21
+ *
22
+ * @example
23
+ * // Vanilla JS
24
+ * const dispose = attachOrbitDrag(canvas, service);
25
+ * // later:
26
+ * dispose();
27
+ *
28
+ * @example
29
+ * // Lit (inside render())
30
+ * useEffect(() => attachOrbitDrag(canvas, service), [canvas, service]);
31
+ */
32
+ export function attachOrbitDrag(
33
+ element: HTMLElement,
34
+ service: OrbitDragService,
35
+ options?: { sensitivity?: number },
36
+ ): () => void {
37
+ const sensitivity = options?.sensitivity ?? 0.01;
38
+ let lastX = 0;
39
+
40
+ const onDown = (e: PointerEvent) => {
41
+ lastX = e.clientX;
42
+ element.setPointerCapture(e.pointerId);
43
+ };
44
+ const onMove = (e: PointerEvent) => {
45
+ if (!e.buttons) return;
46
+ service.transactions.addOrbitAngle((lastX - e.clientX) * sensitivity);
47
+ lastX = e.clientX;
48
+ };
49
+ const onUp = () => service.transactions.resumeAutoSpin();
50
+
51
+ element.addEventListener("pointerdown", onDown);
52
+ element.addEventListener("pointermove", onMove);
53
+ element.addEventListener("pointerup", onUp);
54
+ element.addEventListener("pointercancel", onUp);
55
+
56
+ return () => {
57
+ element.removeEventListener("pointerdown", onDown);
58
+ element.removeEventListener("pointermove", onMove);
59
+ element.removeEventListener("pointerup", onUp);
60
+ element.removeEventListener("pointercancel", onUp);
61
+ };
62
+ }