@zephyr3d/scene 0.9.2 → 0.9.4

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 (513) hide show
  1. package/dist/animation/animationset.js +135 -135
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/ik/ik_chain_builder.js +68 -0
  4. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  5. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  6. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  7. package/dist/animation/joint_dynamics/controller.js +146 -146
  8. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  9. package/dist/animation/joint_dynamics/math.js +16 -0
  10. package/dist/animation/joint_dynamics/math.js.map +1 -0
  11. package/dist/animation/spring/spring_system.js +75 -75
  12. package/dist/animation/spring/spring_system.js.map +1 -1
  13. package/dist/animation/spring2/constraints.js.map +1 -1
  14. package/dist/animation/spring2/controller.js +64 -64
  15. package/dist/animation/spring2/controller.js.map +1 -1
  16. package/dist/animation/spring2/math.js.map +1 -1
  17. package/dist/animation/spring2/spring_system.js +8 -8
  18. package/dist/animation/spring2/spring_system.js.map +1 -1
  19. package/dist/app/engine.js +119 -71
  20. package/dist/app/engine.js.map +1 -1
  21. package/dist/asset/assetmanager.js +296 -244
  22. package/dist/asset/assetmanager.js.map +1 -1
  23. package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
  24. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  25. package/dist/camera/camera.js +184 -184
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/index.d.ts +685 -38
  28. package/dist/index.js +11 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/material/material.js +290 -290
  31. package/dist/material/material.js.map +1 -1
  32. package/dist/material/msdf_text.js +180 -0
  33. package/dist/material/msdf_text.js.map +1 -0
  34. package/dist/material/msdf_text_sprite.js +64 -0
  35. package/dist/material/msdf_text_sprite.js.map +1 -0
  36. package/dist/material/pbrblueprint.js +123 -108
  37. package/dist/material/pbrblueprint.js.map +1 -1
  38. package/dist/material/shader/helper.js +6 -3
  39. package/dist/material/shader/helper.js.map +1 -1
  40. package/dist/material/sprite_sdf.js +106 -0
  41. package/dist/material/sprite_sdf.js.map +1 -0
  42. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  43. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  44. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  45. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  46. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  47. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  48. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  49. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  50. package/dist/posteffect/ssr.js +1 -0
  51. package/dist/posteffect/ssr.js.map +1 -1
  52. package/dist/render/abuffer_oit.js +1 -0
  53. package/dist/render/abuffer_oit.js.map +1 -1
  54. package/dist/render/cluster_light.js +3 -4
  55. package/dist/render/cluster_light.js.map +1 -1
  56. package/dist/render/cull_visitor.js +28 -0
  57. package/dist/render/cull_visitor.js.map +1 -1
  58. package/dist/render/drawable.js.map +1 -1
  59. package/dist/render/drawable_mixin.js +1 -0
  60. package/dist/render/drawable_mixin.js.map +1 -1
  61. package/dist/render/fbm_wavegenerator.js +1 -0
  62. package/dist/render/fbm_wavegenerator.js.map +1 -1
  63. package/dist/render/gerstner_wavegenerator.js +1 -0
  64. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  65. package/dist/render/globalbindgroup_allocator.js +1 -0
  66. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  67. package/dist/render/render_queue.js +1 -0
  68. package/dist/render/render_queue.js.map +1 -1
  69. package/dist/render/rendergraph/history_resource_manager.js +93 -93
  70. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  71. package/dist/render/rendergraph/history_resources.js +3 -3
  72. package/dist/render/rendergraph/history_resources.js.map +1 -1
  73. package/dist/render/rendergraph/types.js +22 -22
  74. package/dist/render/rendergraph/types.js.map +1 -1
  75. package/dist/scene/basesprite.js +1 -5
  76. package/dist/scene/basesprite.js.map +1 -1
  77. package/dist/scene/batchgroup.js +29 -17
  78. package/dist/scene/batchgroup.js.map +1 -1
  79. package/dist/scene/environment.js +1 -0
  80. package/dist/scene/environment.js.map +1 -1
  81. package/dist/scene/mesh.js +8 -9
  82. package/dist/scene/mesh.js.map +1 -1
  83. package/dist/scene/meshdrawable.js +96 -0
  84. package/dist/scene/meshdrawable.js.map +1 -0
  85. package/dist/scene/msdftext.js +341 -0
  86. package/dist/scene/msdftext.js.map +1 -0
  87. package/dist/scene/msdftextsprite.js +349 -0
  88. package/dist/scene/msdftextsprite.js.map +1 -0
  89. package/dist/scene/particlesys.js +1 -0
  90. package/dist/scene/particlesys.js.map +1 -1
  91. package/dist/scene/scene.js +1 -0
  92. package/dist/scene/scene.js.map +1 -1
  93. package/dist/scene/scene_node.js +6 -0
  94. package/dist/scene/scene_node.js.map +1 -1
  95. package/dist/scene/sdftextsprite.js +322 -0
  96. package/dist/scene/sdftextsprite.js.map +1 -0
  97. package/dist/scene/terrain-cm/grass.js +1 -0
  98. package/dist/scene/terrain-cm/grass.js.map +1 -1
  99. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  100. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  101. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  102. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  103. package/dist/scene/textsprite.js +120 -0
  104. package/dist/scene/textsprite.js.map +1 -0
  105. package/dist/scene/water.js +1 -0
  106. package/dist/scene/water.js.map +1 -1
  107. package/dist/shadow/shader.js +1 -0
  108. package/dist/shadow/shader.js.map +1 -1
  109. package/dist/shapes/torus.js +90 -59
  110. package/dist/shapes/torus.js.map +1 -1
  111. package/dist/src/animation/animation.js +127 -0
  112. package/dist/src/animation/animation.js.map +1 -0
  113. package/dist/src/animation/animationset.js +255 -0
  114. package/dist/src/animation/animationset.js.map +1 -0
  115. package/dist/src/animation/animationtrack.js +34 -0
  116. package/dist/src/animation/animationtrack.js.map +1 -0
  117. package/dist/src/animation/eulerrotationtrack.js +52 -0
  118. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  119. package/dist/src/animation/morphtarget.js +93 -0
  120. package/dist/src/animation/morphtarget.js.map +1 -0
  121. package/dist/src/animation/morphtrack.js +70 -0
  122. package/dist/src/animation/morphtrack.js.map +1 -0
  123. package/dist/src/animation/proptrack.js +161 -0
  124. package/dist/src/animation/proptrack.js.map +1 -0
  125. package/dist/src/animation/rotationtrack.js +51 -0
  126. package/dist/src/animation/rotationtrack.js.map +1 -0
  127. package/dist/src/animation/scaletrack.js +50 -0
  128. package/dist/src/animation/scaletrack.js.map +1 -0
  129. package/dist/src/animation/skeleton.js +204 -0
  130. package/dist/src/animation/skeleton.js.map +1 -0
  131. package/dist/src/animation/translationtrack.js +50 -0
  132. package/dist/src/animation/translationtrack.js.map +1 -0
  133. package/dist/src/app/app.js +129 -0
  134. package/dist/src/app/app.js.map +1 -0
  135. package/dist/src/app/inputmgr.js +267 -0
  136. package/dist/src/app/inputmgr.js.map +1 -0
  137. package/dist/src/asset/assetmanager.js +404 -0
  138. package/dist/src/asset/assetmanager.js.map +1 -0
  139. package/dist/src/asset/builtin.js +337 -0
  140. package/dist/src/asset/builtin.js.map +1 -0
  141. package/dist/src/asset/loaders/dds/dds.js +470 -0
  142. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  143. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  144. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  145. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  146. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  147. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  148. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  149. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  150. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  151. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  152. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  153. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  154. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  155. package/dist/src/asset/loaders/loader.js +45 -0
  156. package/dist/src/asset/loaders/loader.js.map +1 -0
  157. package/dist/src/asset/model.js +414 -0
  158. package/dist/src/asset/model.js.map +1 -0
  159. package/dist/src/blitter/bilateralblur.js +221 -0
  160. package/dist/src/blitter/bilateralblur.js.map +1 -0
  161. package/dist/src/blitter/blitter.js +390 -0
  162. package/dist/src/blitter/blitter.js.map +1 -0
  163. package/dist/src/blitter/box.js +118 -0
  164. package/dist/src/blitter/box.js.map +1 -0
  165. package/dist/src/blitter/copy.js +22 -0
  166. package/dist/src/blitter/copy.js.map +1 -0
  167. package/dist/src/blitter/gaussianblur.js +228 -0
  168. package/dist/src/blitter/gaussianblur.js.map +1 -0
  169. package/dist/src/camera/base.js +92 -0
  170. package/dist/src/camera/base.js.map +1 -0
  171. package/dist/src/camera/camera.js +1005 -0
  172. package/dist/src/camera/camera.js.map +1 -0
  173. package/dist/src/camera/fps.js +238 -0
  174. package/dist/src/camera/fps.js.map +1 -0
  175. package/dist/src/camera/orbit.js +245 -0
  176. package/dist/src/camera/orbit.js.map +1 -0
  177. package/dist/src/camera/orthocamera.js +167 -0
  178. package/dist/src/camera/orthocamera.js.map +1 -0
  179. package/dist/src/camera/perspectivecamera.js +141 -0
  180. package/dist/src/camera/perspectivecamera.js.map +1 -0
  181. package/dist/src/index.js +120 -0
  182. package/dist/src/index.js.map +1 -0
  183. package/dist/src/material/blinn.js +81 -0
  184. package/dist/src/material/blinn.js.map +1 -0
  185. package/dist/src/material/grassmaterial.js +113 -0
  186. package/dist/src/material/grassmaterial.js.map +1 -0
  187. package/dist/src/material/lambert.js +92 -0
  188. package/dist/src/material/lambert.js.map +1 -0
  189. package/dist/src/material/material.js +301 -0
  190. package/dist/src/material/material.js.map +1 -0
  191. package/dist/src/material/meshmaterial.js +704 -0
  192. package/dist/src/material/meshmaterial.js.map +1 -0
  193. package/dist/src/material/mixins/albedocolor.js +76 -0
  194. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  195. package/dist/src/material/mixins/foliage.js +47 -0
  196. package/dist/src/material/mixins/foliage.js.map +1 -0
  197. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  198. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  199. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  200. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  201. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  202. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  203. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  204. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  205. package/dist/src/material/mixins/lit.js +476 -0
  206. package/dist/src/material/mixins/lit.js.map +1 -0
  207. package/dist/src/material/mixins/pbr/common.js +918 -0
  208. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  209. package/dist/src/material/mixins/texture.js +172 -0
  210. package/dist/src/material/mixins/texture.js.map +1 -0
  211. package/dist/src/material/mixins/vertexcolor.js +56 -0
  212. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  213. package/dist/src/material/particle.js +178 -0
  214. package/dist/src/material/particle.js.map +1 -0
  215. package/dist/src/material/pbrmr.js +97 -0
  216. package/dist/src/material/pbrmr.js.map +1 -0
  217. package/dist/src/material/pbrsg.js +97 -0
  218. package/dist/src/material/pbrsg.js.map +1 -0
  219. package/dist/src/material/shader/helper.js +1209 -0
  220. package/dist/src/material/shader/helper.js.map +1 -0
  221. package/dist/src/material/terrain-cm.js +606 -0
  222. package/dist/src/material/terrain-cm.js.map +1 -0
  223. package/dist/src/material/terrainmaterial.js +375 -0
  224. package/dist/src/material/terrainmaterial.js.map +1 -0
  225. package/dist/src/material/unlit.js +41 -0
  226. package/dist/src/material/unlit.js.map +1 -0
  227. package/dist/src/material/water.js +417 -0
  228. package/dist/src/material/water.js.map +1 -0
  229. package/dist/src/posteffect/bloom.js +361 -0
  230. package/dist/src/posteffect/bloom.js.map +1 -0
  231. package/dist/src/posteffect/compositor.js +226 -0
  232. package/dist/src/posteffect/compositor.js.map +1 -0
  233. package/dist/src/posteffect/fxaa.js +273 -0
  234. package/dist/src/posteffect/fxaa.js.map +1 -0
  235. package/dist/src/posteffect/grayscale.js +69 -0
  236. package/dist/src/posteffect/grayscale.js.map +1 -0
  237. package/dist/src/posteffect/motionblur.js +96 -0
  238. package/dist/src/posteffect/motionblur.js.map +1 -0
  239. package/dist/src/posteffect/posteffect.js +126 -0
  240. package/dist/src/posteffect/posteffect.js.map +1 -0
  241. package/dist/src/posteffect/sao.js +324 -0
  242. package/dist/src/posteffect/sao.js.map +1 -0
  243. package/dist/src/posteffect/ssr.js +489 -0
  244. package/dist/src/posteffect/ssr.js.map +1 -0
  245. package/dist/src/posteffect/taa.js +172 -0
  246. package/dist/src/posteffect/taa.js.map +1 -0
  247. package/dist/src/posteffect/tonemap.js +94 -0
  248. package/dist/src/posteffect/tonemap.js.map +1 -0
  249. package/dist/src/render/abuffer_oit.js +361 -0
  250. package/dist/src/render/abuffer_oit.js.map +1 -0
  251. package/dist/src/render/clipmap.js +851 -0
  252. package/dist/src/render/clipmap.js.map +1 -0
  253. package/dist/src/render/cluster_light.js +333 -0
  254. package/dist/src/render/cluster_light.js.map +1 -0
  255. package/dist/src/render/cull_visitor.js +187 -0
  256. package/dist/src/render/cull_visitor.js.map +1 -0
  257. package/dist/src/render/depthpass.js +68 -0
  258. package/dist/src/render/depthpass.js.map +1 -0
  259. package/dist/src/render/drawable_mixin.js +227 -0
  260. package/dist/src/render/drawable_mixin.js.map +1 -0
  261. package/dist/src/render/envlight.js +463 -0
  262. package/dist/src/render/envlight.js.map +1 -0
  263. package/dist/src/render/fbm_wavegenerator.js +251 -0
  264. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  265. package/dist/src/render/fft_wavegenerator.js +1006 -0
  266. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  267. package/dist/src/render/fullscreenquad.js +38 -0
  268. package/dist/src/render/fullscreenquad.js.map +1 -0
  269. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  270. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  271. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  272. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  273. package/dist/src/render/hzb.js +273 -0
  274. package/dist/src/render/hzb.js.map +1 -0
  275. package/dist/src/render/lightpass.js +172 -0
  276. package/dist/src/render/lightpass.js.map +1 -0
  277. package/dist/src/render/objectcolorpass.js +51 -0
  278. package/dist/src/render/objectcolorpass.js.map +1 -0
  279. package/dist/src/render/primitive.js +364 -0
  280. package/dist/src/render/primitive.js.map +1 -0
  281. package/dist/src/render/render_queue.js +467 -0
  282. package/dist/src/render/render_queue.js.map +1 -0
  283. package/dist/src/render/renderbundle_wrapper.js +152 -0
  284. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  285. package/dist/src/render/renderer.js +455 -0
  286. package/dist/src/render/renderer.js.map +1 -0
  287. package/dist/src/render/renderpass.js +200 -0
  288. package/dist/src/render/renderpass.js.map +1 -0
  289. package/dist/src/render/shadowmap_pass.js +56 -0
  290. package/dist/src/render/shadowmap_pass.js.map +1 -0
  291. package/dist/src/render/sky.js +1103 -0
  292. package/dist/src/render/sky.js.map +1 -0
  293. package/dist/src/render/weightedblended_oit.js +168 -0
  294. package/dist/src/render/weightedblended_oit.js.map +1 -0
  295. package/dist/src/scene/batchgroup.js +162 -0
  296. package/dist/src/scene/batchgroup.js.map +1 -0
  297. package/dist/src/scene/environment.js +209 -0
  298. package/dist/src/scene/environment.js.map +1 -0
  299. package/dist/src/scene/graph_node.js +72 -0
  300. package/dist/src/scene/graph_node.js.map +1 -0
  301. package/dist/src/scene/light.js +416 -0
  302. package/dist/src/scene/light.js.map +1 -0
  303. package/dist/src/scene/mesh.js +341 -0
  304. package/dist/src/scene/mesh.js.map +1 -0
  305. package/dist/src/scene/octree.js +649 -0
  306. package/dist/src/scene/octree.js.map +1 -0
  307. package/dist/src/scene/particlesys.js +738 -0
  308. package/dist/src/scene/particlesys.js.map +1 -0
  309. package/dist/src/scene/raycast_visitor.js +103 -0
  310. package/dist/src/scene/raycast_visitor.js.map +1 -0
  311. package/dist/src/scene/scene.js +284 -0
  312. package/dist/src/scene/scene.js.map +1 -0
  313. package/dist/src/scene/scene_node.js +732 -0
  314. package/dist/src/scene/scene_node.js.map +1 -0
  315. package/dist/src/scene/terrain/grass.js +278 -0
  316. package/dist/src/scene/terrain/grass.js.map +1 -0
  317. package/dist/src/scene/terrain/heightfield.js +475 -0
  318. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  319. package/dist/src/scene/terrain/patch.js +530 -0
  320. package/dist/src/scene/terrain/patch.js.map +1 -0
  321. package/dist/src/scene/terrain/quadtree.js +461 -0
  322. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  323. package/dist/src/scene/terrain/terrain.js +246 -0
  324. package/dist/src/scene/terrain/terrain.js.map +1 -0
  325. package/dist/src/scene/terrain-cm/grass.js +594 -0
  326. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  327. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  328. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  329. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  330. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  331. package/dist/src/scene/water.js +374 -0
  332. package/dist/src/scene/water.js.map +1 -0
  333. package/dist/src/shaders/atmosphere.js +957 -0
  334. package/dist/src/shaders/atmosphere.js.map +1 -0
  335. package/dist/src/shaders/fog.js +112 -0
  336. package/dist/src/shaders/fog.js.map +1 -0
  337. package/dist/src/shaders/misc.js +266 -0
  338. package/dist/src/shaders/misc.js.map +1 -0
  339. package/dist/src/shaders/noise.js +222 -0
  340. package/dist/src/shaders/noise.js.map +1 -0
  341. package/dist/src/shaders/pbr.js +51 -0
  342. package/dist/src/shaders/pbr.js.map +1 -0
  343. package/dist/src/shaders/shadow.js +636 -0
  344. package/dist/src/shaders/shadow.js.map +1 -0
  345. package/dist/src/shaders/ssr.js +490 -0
  346. package/dist/src/shaders/ssr.js.map +1 -0
  347. package/dist/src/shaders/temporal.js +215 -0
  348. package/dist/src/shaders/temporal.js.map +1 -0
  349. package/dist/src/shaders/water.js +756 -0
  350. package/dist/src/shaders/water.js.map +1 -0
  351. package/dist/src/shadow/esm.js +237 -0
  352. package/dist/src/shadow/esm.js.map +1 -0
  353. package/dist/src/shadow/pcf_opt.js +181 -0
  354. package/dist/src/shadow/pcf_opt.js.map +1 -0
  355. package/dist/src/shadow/pcf_pd.js +189 -0
  356. package/dist/src/shadow/pcf_pd.js.map +1 -0
  357. package/dist/src/shadow/shader.js +37 -0
  358. package/dist/src/shadow/shader.js.map +1 -0
  359. package/dist/src/shadow/shadow_impl.js +15 -0
  360. package/dist/src/shadow/shadow_impl.js.map +1 -0
  361. package/dist/src/shadow/shadowmapper.js +790 -0
  362. package/dist/src/shadow/shadowmapper.js.map +1 -0
  363. package/dist/src/shadow/ssm.js +159 -0
  364. package/dist/src/shadow/ssm.js.map +1 -0
  365. package/dist/src/shadow/vsm.js +297 -0
  366. package/dist/src/shadow/vsm.js.map +1 -0
  367. package/dist/src/shapes/box.js +386 -0
  368. package/dist/src/shapes/box.js.map +1 -0
  369. package/dist/src/shapes/cylinder.js +125 -0
  370. package/dist/src/shapes/cylinder.js.map +1 -0
  371. package/dist/src/shapes/plane.js +88 -0
  372. package/dist/src/shapes/plane.js.map +1 -0
  373. package/dist/src/shapes/shape.js +87 -0
  374. package/dist/src/shapes/shape.js.map +1 -0
  375. package/dist/src/shapes/sphere.js +114 -0
  376. package/dist/src/shapes/sphere.js.map +1 -0
  377. package/dist/src/shapes/tetrahedron.js +188 -0
  378. package/dist/src/shapes/tetrahedron.js.map +1 -0
  379. package/dist/src/shapes/torus.js +111 -0
  380. package/dist/src/shapes/torus.js.map +1 -0
  381. package/dist/src/utility/aabbtree.js +400 -0
  382. package/dist/src/utility/aabbtree.js.map +1 -0
  383. package/dist/src/utility/bounding_volume.js +29 -0
  384. package/dist/src/utility/bounding_volume.js.map +1 -0
  385. package/dist/src/utility/debug.js +28 -0
  386. package/dist/src/utility/debug.js.map +1 -0
  387. package/dist/src/utility/draco/decoder.js +116 -0
  388. package/dist/src/utility/draco/decoder.js.map +1 -0
  389. package/dist/src/utility/misc.js +105 -0
  390. package/dist/src/utility/misc.js.map +1 -0
  391. package/dist/src/utility/panorama.js +163 -0
  392. package/dist/src/utility/panorama.js.map +1 -0
  393. package/dist/src/utility/pmrem.js +354 -0
  394. package/dist/src/utility/pmrem.js.map +1 -0
  395. package/dist/src/utility/rendermipmap.js +115 -0
  396. package/dist/src/utility/rendermipmap.js.map +1 -0
  397. package/dist/src/utility/serialization/json.js +402 -0
  398. package/dist/src/utility/serialization/json.js.map +1 -0
  399. package/dist/src/utility/serialization/manager.js +623 -0
  400. package/dist/src/utility/serialization/manager.js.map +1 -0
  401. package/dist/src/utility/serialization/scene/animation.js +248 -0
  402. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  403. package/dist/src/utility/serialization/scene/batch.js +59 -0
  404. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  405. package/dist/src/utility/serialization/scene/camera.js +790 -0
  406. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  407. package/dist/src/utility/serialization/scene/common.js +222 -0
  408. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  409. package/dist/src/utility/serialization/scene/light.js +575 -0
  410. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  411. package/dist/src/utility/serialization/scene/material.js +1111 -0
  412. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  413. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  414. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  415. package/dist/src/utility/serialization/scene/misc.js +39 -0
  416. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  417. package/dist/src/utility/serialization/scene/node.js +451 -0
  418. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  419. package/dist/src/utility/serialization/scene/particle.js +425 -0
  420. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  421. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  422. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  423. package/dist/src/utility/serialization/scene/scene.js +704 -0
  424. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  425. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  426. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  427. package/dist/src/utility/serialization/scene/water.js +465 -0
  428. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  429. package/dist/src/utility/shprojector.js +297 -0
  430. package/dist/src/utility/shprojector.js.map +1 -0
  431. package/dist/src/utility/textures/ggxlut.js +213 -0
  432. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  433. package/dist/src/utility/textures/gradientnoise.js +62 -0
  434. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  435. package/dist/src/utility/textures/randomnoise.js +41 -0
  436. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  437. package/dist/src/values.js +162 -0
  438. package/dist/src/values.js.map +1 -0
  439. package/dist/text/font/font_asset.js +884 -0
  440. package/dist/text/font/font_asset.js.map +1 -0
  441. package/dist/text/font/sfnt_reader.js +43 -0
  442. package/dist/text/font/sfnt_reader.js.map +1 -0
  443. package/dist/text/msdf/generator.js +417 -0
  444. package/dist/text/msdf/generator.js.map +1 -0
  445. package/dist/text/msdf/shape.js +143 -0
  446. package/dist/text/msdf/shape.js.map +1 -0
  447. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  448. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  449. package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
  450. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  451. package/dist/text/runtime/text_layout.js +96 -0
  452. package/dist/text/runtime/text_layout.js.map +1 -0
  453. package/dist/utility/blueprint/material/common.js +7 -0
  454. package/dist/utility/blueprint/material/common.js.map +1 -0
  455. package/dist/utility/blueprint/material/inputs.js +1275 -1091
  456. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  457. package/dist/utility/blueprint/material/ir.js +505 -490
  458. package/dist/utility/blueprint/material/ir.js.map +1 -1
  459. package/dist/utility/blueprint/material/pbr.js +32 -0
  460. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  461. package/dist/utility/serialization/blueprint/constants.js +255 -0
  462. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  463. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  464. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  465. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  466. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  467. package/dist/utility/serialization/manager.js +55 -11
  468. package/dist/utility/serialization/manager.js.map +1 -1
  469. package/dist/utility/serialization/scene/animation.js +2 -0
  470. package/dist/utility/serialization/scene/animation.js.map +1 -1
  471. package/dist/utility/serialization/scene/batch.js +2 -0
  472. package/dist/utility/serialization/scene/batch.js.map +1 -1
  473. package/dist/utility/serialization/scene/camera.js +2 -0
  474. package/dist/utility/serialization/scene/camera.js.map +1 -1
  475. package/dist/utility/serialization/scene/common.js.map +1 -1
  476. package/dist/utility/serialization/scene/light.js +2 -0
  477. package/dist/utility/serialization/scene/light.js.map +1 -1
  478. package/dist/utility/serialization/scene/material.js +1 -0
  479. package/dist/utility/serialization/scene/material.js.map +1 -1
  480. package/dist/utility/serialization/scene/mesh.js +2 -0
  481. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  482. package/dist/utility/serialization/scene/node.js +2 -0
  483. package/dist/utility/serialization/scene/node.js.map +1 -1
  484. package/dist/utility/serialization/scene/particle.js +2 -0
  485. package/dist/utility/serialization/scene/particle.js.map +1 -1
  486. package/dist/utility/serialization/scene/primitive.js +1 -0
  487. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  488. package/dist/utility/serialization/scene/scene.js.map +1 -1
  489. package/dist/utility/serialization/scene/sprite.js +2 -0
  490. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  491. package/dist/utility/serialization/scene/terrain.js +2 -0
  492. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  493. package/dist/utility/serialization/scene/text.js +516 -0
  494. package/dist/utility/serialization/scene/text.js.map +1 -0
  495. package/dist/utility/serialization/scene/water.js +2 -0
  496. package/dist/utility/serialization/scene/water.js.map +1 -1
  497. package/dist/utility/serialization/types.js +4 -4
  498. package/dist/utility/serialization/types.js.map +1 -1
  499. package/dist/values.js +1 -5
  500. package/dist/values.js.map +1 -1
  501. package/package.json +3 -3
  502. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  503. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  504. package/dist/animation/spring/spring_bone.js +0 -240
  505. package/dist/animation/spring/spring_bone.js.map +0 -1
  506. package/dist/animation/spring/spring_bone_collider.js +0 -198
  507. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  508. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  509. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  510. package/dist/animation/spring/spring_bone_system.js +0 -328
  511. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  512. package/dist/render/sky_motion_vector.js +0 -85
  513. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -0,0 +1,161 @@
1
+ import { AnimationTrack } from './animationtrack.js';
2
+ import { Interpolator } from '@zephyr3d/base';
3
+
4
+ /**
5
+ * Translate animation track
6
+ * @public
7
+ */ class PropertyTrack extends AnimationTrack {
8
+ _state;
9
+ _stateAlpha;
10
+ _target;
11
+ _prop;
12
+ _count;
13
+ _interpolator;
14
+ _interpolatorAlpha;
15
+ /**
16
+ * Create an instance of TranslationTrack from keyframe values
17
+ * @param prop - Property to be animated
18
+ */ constructor(prop, value, embedded){
19
+ super(embedded);
20
+ this._prop = prop;
21
+ this._target = '';
22
+ this._state = {
23
+ num: [
24
+ 0,
25
+ 0,
26
+ 0,
27
+ 0
28
+ ]
29
+ };
30
+ this._stateAlpha = null;
31
+ this._interpolator = null;
32
+ this._interpolatorAlpha = null;
33
+ if (value) {
34
+ this._state.num = value.slice();
35
+ }
36
+ switch(this._prop.type){
37
+ case 'float':
38
+ this._count = 1;
39
+ this._interpolator = new Interpolator('cubicspline-natural', 'number', new Float32Array([
40
+ 0,
41
+ 1
42
+ ]), new Float32Array([
43
+ this._state.num[0],
44
+ this._state.num[0]
45
+ ]));
46
+ break;
47
+ case 'vec2':
48
+ this._count = 2;
49
+ this._interpolator = new Interpolator('cubicspline-natural', 'vec2', new Float32Array([
50
+ 0,
51
+ 1
52
+ ]), new Float32Array([
53
+ ...this._state.num.slice(0, 2),
54
+ ...this._state.num.slice(0, 2)
55
+ ]));
56
+ break;
57
+ case 'rgb':
58
+ case 'vec3':
59
+ this._count = 3;
60
+ this._interpolator = new Interpolator('cubicspline-natural', 'vec3', new Float32Array([
61
+ 0,
62
+ 1
63
+ ]), new Float32Array([
64
+ ...this._state.num.slice(0, 3),
65
+ ...this._state.num.slice(0, 3)
66
+ ]));
67
+ break;
68
+ case 'vec4':
69
+ this._count = 4;
70
+ this._interpolator = new Interpolator('cubicspline-natural', 'vec4', new Float32Array([
71
+ 0,
72
+ 1
73
+ ]), new Float32Array([
74
+ ...this._state.num.slice(0, 4),
75
+ ...this._state.num.slice(0, 4)
76
+ ]));
77
+ break;
78
+ case 'rgba':
79
+ this._count = 4;
80
+ this._interpolator = new Interpolator('linear', 'vec3', new Float32Array([
81
+ 0,
82
+ 1
83
+ ]), new Float32Array([
84
+ ...this._state.num.slice(0, 3),
85
+ ...this._state.num.slice(0, 3)
86
+ ]));
87
+ this._interpolatorAlpha = new Interpolator('linear', 'number', new Float32Array([
88
+ 0,
89
+ 1
90
+ ]), new Float32Array([
91
+ this._state.num[3],
92
+ this._state.num[3]
93
+ ]));
94
+ this._stateAlpha = {
95
+ num: [
96
+ this._state.num[3]
97
+ ]
98
+ };
99
+ break;
100
+ default:
101
+ throw new Error(`Property '${this._prop.name}' cannot be animated`);
102
+ }
103
+ }
104
+ get target() {
105
+ return this._target;
106
+ }
107
+ set target(val) {
108
+ this._target = val;
109
+ }
110
+ get interpolator() {
111
+ return this._interpolator;
112
+ }
113
+ set interpolator(interpolator) {
114
+ this._interpolator = interpolator;
115
+ }
116
+ get interpolatorAlpha() {
117
+ return this._interpolatorAlpha;
118
+ }
119
+ set interpolatorAlpha(interpolator) {
120
+ this._interpolatorAlpha = interpolator ?? null;
121
+ if (!this._stateAlpha && this._interpolatorAlpha) {
122
+ this._stateAlpha = {
123
+ num: [
124
+ 0
125
+ ]
126
+ };
127
+ }
128
+ }
129
+ calculateState(target, currentTime) {
130
+ this._interpolator.interpolate(currentTime, this._state.num);
131
+ if (this._interpolatorAlpha) {
132
+ this._interpolatorAlpha.interpolate(currentTime, this._stateAlpha.num);
133
+ this._state.num[3] = this._stateAlpha.num[0];
134
+ }
135
+ return this._state;
136
+ }
137
+ applyState(target, state) {
138
+ this._prop.set.call(target, state);
139
+ }
140
+ mixState(a, b, t) {
141
+ const v = [];
142
+ for(let i = 0; i < this._count; i++){
143
+ v[i] = a.num[i] + t * (b.num[i] - a.num[i]);
144
+ }
145
+ return {
146
+ num: v
147
+ };
148
+ }
149
+ getBlendId() {
150
+ return this._prop;
151
+ }
152
+ getDuration() {
153
+ return this._interpolator.maxTime;
154
+ }
155
+ getProp() {
156
+ return this._prop;
157
+ }
158
+ }
159
+
160
+ export { PropertyTrack };
161
+ //# sourceMappingURL=proptrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proptrack.js","sources":["../../../src/animation/proptrack.ts"],"sourcesContent":["import { AnimationTrack } from './animationtrack';\r\nimport type { PropertyAccessor, PropertyValue } from '../utility';\r\nimport { Interpolator } from '@zephyr3d/base';\r\n\r\n/**\r\n * Translate animation track\r\n * @public\r\n */\r\nexport class PropertyTrack extends AnimationTrack<PropertyValue> {\r\n private readonly _state: PropertyValue;\r\n private _stateAlpha: PropertyValue;\r\n private _target: string;\r\n private readonly _prop: PropertyAccessor;\r\n private readonly _count: number;\r\n private _interpolator: Interpolator;\r\n private _interpolatorAlpha: Interpolator;\r\n /**\r\n * Create an instance of TranslationTrack from keyframe values\r\n * @param prop - Property to be animated\r\n */\r\n constructor(prop: PropertyAccessor, value?: number[], embedded?: boolean) {\r\n super(embedded);\r\n this._prop = prop;\r\n this._target = '';\r\n this._state = { num: [0, 0, 0, 0] };\r\n this._stateAlpha = null;\r\n this._interpolator = null;\r\n this._interpolatorAlpha = null;\r\n if (value) {\r\n this._state.num = value.slice();\r\n }\r\n switch (this._prop.type) {\r\n case 'float':\r\n this._count = 1;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'number',\r\n new Float32Array([0, 1]),\r\n new Float32Array([this._state.num[0], this._state.num[0]])\r\n );\r\n break;\r\n case 'vec2':\r\n this._count = 2;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec2',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 2), ...this._state.num.slice(0, 2)])\r\n );\r\n break;\r\n case 'rgb':\r\n case 'vec3':\r\n this._count = 3;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec3',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 3), ...this._state.num.slice(0, 3)])\r\n );\r\n break;\r\n case 'vec4':\r\n this._count = 4;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec4',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 4), ...this._state.num.slice(0, 4)])\r\n );\r\n break;\r\n case 'rgba':\r\n this._count = 4;\r\n this._interpolator = new Interpolator(\r\n 'linear',\r\n 'vec3',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 3), ...this._state.num.slice(0, 3)])\r\n );\r\n this._interpolatorAlpha = new Interpolator(\r\n 'linear',\r\n 'number',\r\n new Float32Array([0, 1]),\r\n new Float32Array([this._state.num[3], this._state.num[3]])\r\n );\r\n this._stateAlpha = { num: [this._state.num[3]] };\r\n break;\r\n default:\r\n throw new Error(`Property '${this._prop.name}' cannot be animated`);\r\n }\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n set target(val: string) {\r\n this._target = val;\r\n }\r\n get interpolator() {\r\n return this._interpolator;\r\n }\r\n set interpolator(interpolator: Interpolator) {\r\n this._interpolator = interpolator;\r\n }\r\n get interpolatorAlpha() {\r\n return this._interpolatorAlpha;\r\n }\r\n set interpolatorAlpha(interpolator: Interpolator) {\r\n this._interpolatorAlpha = interpolator ?? null;\r\n if (!this._stateAlpha && this._interpolatorAlpha) {\r\n this._stateAlpha = { num: [0] };\r\n }\r\n }\r\n calculateState(target: unknown, currentTime: number): PropertyValue {\r\n this._interpolator.interpolate(currentTime, this._state.num);\r\n if (this._interpolatorAlpha) {\r\n this._interpolatorAlpha.interpolate(currentTime, this._stateAlpha.num);\r\n this._state.num[3] = this._stateAlpha.num[0];\r\n }\r\n return this._state;\r\n }\r\n applyState(target: object, state: PropertyValue) {\r\n this._prop.set.call(target, state);\r\n }\r\n mixState(a: PropertyValue, b: PropertyValue, t: number): PropertyValue {\r\n const v: number[] = [];\r\n for (let i = 0; i < this._count; i++) {\r\n v[i] = a.num[i] + t * (b.num[i] - a.num[i]);\r\n }\r\n return { num: v };\r\n }\r\n getBlendId(): unknown {\r\n return this._prop;\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n getProp(): PropertyAccessor {\r\n return this._prop;\r\n }\r\n}\r\n"],"names":["PropertyTrack","AnimationTrack","_state","_stateAlpha","_target","_prop","_count","_interpolator","_interpolatorAlpha","prop","value","embedded","num","slice","type","Interpolator","Float32Array","Error","name","target","val","interpolator","interpolatorAlpha","calculateState","currentTime","interpolate","applyState","state","set","call","mixState","a","b","t","v","i","getBlendId","getDuration","maxTime","getProp"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Interpolator, Quaternion } from '@zephyr3d/base';
2
+ import { AnimationTrack } from './animationtrack.js';
3
+
4
+ /**
5
+ * Rotation animation track
6
+ * @public
7
+ */ class NodeRotationTrack extends AnimationTrack {
8
+ _state;
9
+ _interpolator;
10
+ constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
11
+ if (modeOrInterpolator instanceof Interpolator) {
12
+ if (modeOrInterpolator.target !== 'quat') {
13
+ throw new Error(`RotationTrack(): interpolator target must be 'quat'`);
14
+ }
15
+ super(keyFramesOrEmbedded ?? false);
16
+ this._interpolator = modeOrInterpolator;
17
+ } else {
18
+ const keyFrames = keyFramesOrEmbedded;
19
+ const inputs = new Float32Array(keyFrames.map((val)=>val.time));
20
+ const outputs = new Float32Array(keyFrames.length * 4);
21
+ for(let i = 0; i < keyFrames.length; i++){
22
+ outputs[i * 4 + 0] = keyFrames[i].value.x;
23
+ outputs[i * 4 + 1] = keyFrames[i].value.y;
24
+ outputs[i * 4 + 2] = keyFrames[i].value.z;
25
+ outputs[i * 4 + 3] = keyFrames[i].value.w;
26
+ }
27
+ super(embedded ?? false);
28
+ this._interpolator = new Interpolator(modeOrInterpolator, 'quat', inputs, outputs);
29
+ }
30
+ this._state = new Quaternion();
31
+ }
32
+ calculateState(target, currentTime) {
33
+ this._interpolator.interpolate(currentTime, this._state);
34
+ return this._state;
35
+ }
36
+ applyState(node, state) {
37
+ node.rotation.set(state);
38
+ }
39
+ mixState(a, b, t) {
40
+ return Quaternion.slerp(a, b, t);
41
+ }
42
+ getBlendId() {
43
+ return 'node-rotation';
44
+ }
45
+ getDuration() {
46
+ return this._interpolator.maxTime;
47
+ }
48
+ }
49
+
50
+ export { NodeRotationTrack };
51
+ //# sourceMappingURL=rotationtrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotationtrack.js","sources":["../../../src/animation/rotationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Quaternion } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Rotation animation track\r\n * @public\r\n */\r\nexport class NodeRotationTrack extends AnimationTrack<Quaternion> {\r\n private readonly _state: Quaternion;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of RotationTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of RotationTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Quaternion }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Quaternion }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'quat') {\r\n throw new Error(`RotationTrack(): interpolator target must be 'quat'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Quaternion }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 4);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 4 + 0] = keyFrames[i].value.x;\r\n outputs[i * 4 + 1] = keyFrames[i].value.y;\r\n outputs[i * 4 + 2] = keyFrames[i].value.z;\r\n outputs[i * 4 + 3] = keyFrames[i].value.w;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'quat', inputs, outputs);\r\n }\r\n this._state = new Quaternion();\r\n }\r\n calculateState(target: object, currentTime: number): Quaternion {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Quaternion) {\r\n node.rotation.set(state);\r\n }\r\n mixState(a: Quaternion, b: Quaternion, t: number): Quaternion {\r\n return Quaternion.slerp(a, b, t);\r\n }\r\n getBlendId(): unknown {\r\n return 'node-rotation';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeRotationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","w","Quaternion","calculateState","currentTime","interpolate","applyState","node","state","rotation","set","mixState","a","b","t","slerp","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,iBAA0BC,SAAAA,cAAAA,CAAAA;IACpBC,MAAmB;IACnBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAoD,EACpDC,mBAAqE,EACrEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,mDAAmD,CAAC,CAAA;AACvE;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;gBACzCN,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACI,CAAC;AAC3C;AACA,YAAA,KAAK,CAACjB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIsB,UAAAA,EAAAA;AACpB;IACAC,cAAejB,CAAAA,MAAc,EAAEkB,WAAmB,EAAc;QAC9D,IAAI,CAACvB,aAAa,CAACwB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACxB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACA0B,UAAWC,CAAAA,IAAe,EAAEC,KAAiB,EAAE;QAC7CD,IAAKE,CAAAA,QAAQ,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACpB;AACAG,IAAAA,QAAAA,CAASC,CAAa,EAAEC,CAAa,EAAEC,CAAS,EAAc;AAC5D,QAAA,OAAOZ,UAAWa,CAAAA,KAAK,CAACH,CAAAA,EAAGC,CAAGC,EAAAA,CAAAA,CAAAA;AAChC;IACAE,UAAsB,GAAA;QACpB,OAAO,eAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACpC,aAAa,CAACqC,OAAO;AACnC;AACF;;;;"}
@@ -0,0 +1,50 @@
1
+ import { Interpolator, Vector3 } from '@zephyr3d/base';
2
+ import { AnimationTrack } from './animationtrack.js';
3
+
4
+ /**
5
+ * Scale animation track
6
+ * @public
7
+ */ class NodeScaleTrack extends AnimationTrack {
8
+ _state;
9
+ _interpolator;
10
+ constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
11
+ if (modeOrInterpolator instanceof Interpolator) {
12
+ if (modeOrInterpolator.target !== 'vec3') {
13
+ throw new Error(`ScaleTrack(): interpolator target must be 'vec3'`);
14
+ }
15
+ super(keyFramesOrEmbedded ?? false);
16
+ this._interpolator = modeOrInterpolator;
17
+ } else {
18
+ const keyFrames = keyFramesOrEmbedded;
19
+ const inputs = new Float32Array(keyFrames.map((val)=>val.time));
20
+ const outputs = new Float32Array(keyFrames.length * 3);
21
+ for(let i = 0; i < keyFrames.length; i++){
22
+ outputs[i * 3 + 0] = keyFrames[i].value.x;
23
+ outputs[i * 3 + 1] = keyFrames[i].value.y;
24
+ outputs[i * 3 + 2] = keyFrames[i].value.z;
25
+ }
26
+ super(embedded ?? false);
27
+ this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);
28
+ }
29
+ this._state = new Vector3();
30
+ }
31
+ calculateState(target, currentTime) {
32
+ this._interpolator.interpolate(currentTime, this._state);
33
+ return this._state;
34
+ }
35
+ applyState(node, state) {
36
+ node.scale.set(state);
37
+ }
38
+ mixState(a, b, t) {
39
+ return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));
40
+ }
41
+ getBlendId() {
42
+ return 'node-scale';
43
+ }
44
+ getDuration() {
45
+ return this._interpolator.maxTime;
46
+ }
47
+ }
48
+
49
+ export { NodeScaleTrack };
50
+ //# sourceMappingURL=scaletrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaletrack.js","sources":["../../../src/animation/scaletrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Scale animation track\r\n * @public\r\n */\r\nexport class NodeScaleTrack extends AnimationTrack<Vector3> {\r\n private readonly _state: Vector3;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of ScaleTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of ScaleTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Vector3 }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator?: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Vector3 }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'vec3') {\r\n throw new Error(`ScaleTrack(): interpolator target must be 'vec3'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Vector3 }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 3);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 3 + 0] = keyFrames[i].value.x;\r\n outputs[i * 3 + 1] = keyFrames[i].value.y;\r\n outputs[i * 3 + 2] = keyFrames[i].value.z;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);\r\n }\r\n this._state = new Vector3();\r\n }\r\n calculateState(target: object, currentTime: number): Vector3 {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Vector3) {\r\n node.scale.set(state);\r\n }\r\n mixState(a: Vector3, b: Vector3, t: number): Vector3 {\r\n return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));\r\n }\r\n getBlendId(): unknown {\r\n return 'node-scale';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeScaleTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Vector3","calculateState","currentTime","interpolate","applyState","node","state","scale","set","mixState","a","b","t","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,cAAuBC,SAAAA,cAAAA,CAAAA;IACjBC,MAAgB;IAChBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAqD,EACrDC,mBAAkE,EAClEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,gDAAgD,CAAC,CAAA;AACpE;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;AAC3C;AACA,YAAA,KAAK,CAAChB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIqB,OAAAA,EAAAA;AACpB;IACAC,cAAehB,CAAAA,MAAc,EAAEiB,WAAmB,EAAW;QAC3D,IAAI,CAACtB,aAAa,CAACuB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACvB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACAyB,UAAWC,CAAAA,IAAe,EAAEC,KAAc,EAAE;QAC1CD,IAAKE,CAAAA,KAAK,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACjB;AACAG,IAAAA,QAAAA,CAASC,CAAU,EAAEC,CAAU,EAAEC,CAAS,EAAW;AACnD,QAAA,OAAO,IAAIZ,OAAQU,CAAAA,CAAAA,CAAEb,CAAC,GAAGe,KAAKD,CAAAA,CAAEd,CAAC,GAAGa,EAAEb,CAAAA,CAAIa,EAAAA,CAAAA,CAAEZ,CAAC,GAAGc,CAAAA,IAAKD,CAAAA,CAAEb,CAAC,GAAGY,CAAAA,CAAEZ,CAAAA,GAAIY,CAAEX,CAAAA,CAAC,GAAGa,CAAAA,IAAKD,CAAEZ,CAAAA,CAAC,GAAGW,CAAAA,CAAEX,CAAC,CAADA,CAAAA;AACtF;IACAc,UAAsB,GAAA;QACpB,OAAO,YAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAClC,aAAa,CAACmC,OAAO;AACnC;AACF;;;;"}
@@ -0,0 +1,204 @@
1
+ import { Vector3, Matrix4x4, nextPowerOf2 } from '@zephyr3d/base';
2
+ import { BoundingBox } from '../utility/bounding_volume.js';
3
+ import { Application } from '../app/app.js';
4
+
5
+ const tmpV0 = new Vector3();
6
+ const tmpV1 = new Vector3();
7
+ const tmpV2 = new Vector3();
8
+ const tmpV3 = new Vector3();
9
+ /**
10
+ * Skeleton for skinned animation
11
+ * @public
12
+ */ class Skeleton {
13
+ /** @internal */ _meshes;
14
+ /** @internal */ _joints;
15
+ /** @internal */ _inverseBindMatrices;
16
+ /** @internal */ _bindPoseMatrices;
17
+ /** @internal */ _jointMatrices;
18
+ /** @internal */ _jointOffsets;
19
+ /** @internal */ _jointMatrixArray;
20
+ /** @internal */ _jointTexture;
21
+ /**
22
+ * Creates an instance of skeleton
23
+ * @param joints - The joint nodes
24
+ * @param inverseBindMatrices - The inverse binding matrices of the joints
25
+ * @param bindPoseMatrices - The binding pose matrices of the joints
26
+ */ constructor(joints, inverseBindMatrices, bindPoseMatrices, meshes, bounding){
27
+ this._joints = joints;
28
+ this._inverseBindMatrices = inverseBindMatrices;
29
+ this._bindPoseMatrices = bindPoseMatrices;
30
+ this._jointMatrixArray = null;
31
+ this._jointMatrices = null;
32
+ this._jointOffsets = null;
33
+ this._jointTexture = null;
34
+ this.updateJointMatrices();
35
+ this._meshes = meshes.map((mesh, index)=>{
36
+ return {
37
+ mesh,
38
+ bounding: this.getBoundingInfo(bounding[index]),
39
+ box: new BoundingBox()
40
+ };
41
+ });
42
+ }
43
+ /**
44
+ * Disposes self
45
+ */ dispose() {
46
+ this._jointTexture?.dispose();
47
+ this._jointTexture = null;
48
+ this._joints = null;
49
+ this._inverseBindMatrices = null;
50
+ this._bindPoseMatrices = null;
51
+ this._jointMatrices = null;
52
+ this._jointMatrixArray = null;
53
+ }
54
+ /**
55
+ * The texture that contains the transform matrices of all the joints
56
+ */ get jointTexture() {
57
+ return this._jointTexture;
58
+ }
59
+ /** @internal */ updateJointMatrices(jointTransforms, worldMatrix) {
60
+ if (!this._jointTexture) {
61
+ this._createJointTexture();
62
+ }
63
+ if (this._jointOffsets[0] === 0) {
64
+ this._jointOffsets[0] = 1;
65
+ this._jointOffsets[1] = 1;
66
+ } else {
67
+ this._jointOffsets[1] = this._jointOffsets[0];
68
+ this._jointOffsets[0] = this._joints.length - this._jointOffsets[0] + 2;
69
+ }
70
+ for(let i = 0; i < this._joints.length; i++){
71
+ const mat = this._jointMatrices[i + this._jointOffsets[0] - 1];
72
+ const jointTransform = jointTransforms ? jointTransforms[i] : this._joints[i].worldMatrix;
73
+ if (worldMatrix) {
74
+ Matrix4x4.multiplyAffine(worldMatrix, jointTransform, jointTransform);
75
+ }
76
+ Matrix4x4.multiply(jointTransform, this._inverseBindMatrices[i], mat);
77
+ }
78
+ }
79
+ /** @internal */ computeBindPose(model) {
80
+ this.updateJointMatrices(this._bindPoseMatrices, model.worldMatrix);
81
+ this._jointOffsets[1] = this._jointOffsets[0];
82
+ this._jointTexture.update(this._jointMatrixArray, 0, 0, this._jointTexture.width, this._jointTexture.height);
83
+ }
84
+ /** @internal */ computeJoints() {
85
+ this.updateJointMatrices();
86
+ this._jointTexture.update(this._jointMatrixArray, 0, 0, this._jointTexture.width, this._jointTexture.height);
87
+ }
88
+ /** @internal */ apply() {
89
+ this.computeJoints();
90
+ for (const mesh of this._meshes){
91
+ this.computeBoundingBox(mesh.bounding, mesh.mesh.invWorldMatrix);
92
+ mesh.mesh.setBoneMatrices(this.jointTexture);
93
+ mesh.mesh.setAnimatedBoundingBox(mesh.bounding.boundingBox);
94
+ }
95
+ }
96
+ /** @internal */ reset() {
97
+ for (const mesh of this._meshes){
98
+ mesh.mesh.setBoneMatrices(null);
99
+ mesh.mesh.setAnimatedBoundingBox(null);
100
+ }
101
+ }
102
+ /** @internal */ computeBoundingBox(info, invWorldMatrix) {
103
+ info.boundingBox.beginExtend();
104
+ for(let i = 0; i < info.boundingVertices.length; i++){
105
+ this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV0).scaleBy(info.boundingVertexJointWeights[i * 4 + 0]);
106
+ this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV1).scaleBy(info.boundingVertexJointWeights[i * 4 + 1]);
107
+ this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV2).scaleBy(info.boundingVertexJointWeights[i * 4 + 2]);
108
+ this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1].transformPointAffine(info.boundingVertices[i], tmpV3).scaleBy(info.boundingVertexJointWeights[i * 4 + 3]);
109
+ tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);
110
+ invWorldMatrix.transformPointAffine(tmpV0, tmpV0);
111
+ info.boundingBox.extend(tmpV0);
112
+ }
113
+ }
114
+ /** @internal */ _createJointTexture() {
115
+ const textureWidth = nextPowerOf2(Math.max(4, Math.ceil(Math.sqrt((this._joints.length * 2 + 1) * 4))));
116
+ const device = Application.instance.device;
117
+ this._jointTexture = device.createTexture2D('rgba32f', textureWidth, textureWidth, {
118
+ samplerOptions: {
119
+ magFilter: 'nearest',
120
+ minFilter: 'nearest',
121
+ mipFilter: 'none'
122
+ }
123
+ });
124
+ this._jointMatrixArray = new Float32Array(textureWidth * textureWidth * 4);
125
+ const buffer = this._jointMatrixArray.buffer;
126
+ this._jointOffsets = new Float32Array(buffer);
127
+ this._jointOffsets[0] = 0;
128
+ this._jointOffsets[1] = 0;
129
+ this._jointMatrices = Array.from({
130
+ length: this._joints.length * 2
131
+ }).map((val, index)=>new Matrix4x4(buffer, (index + 1) * 16 * Float32Array.BYTES_PER_ELEMENT));
132
+ }
133
+ /** @internal */ getBoundingInfo(meshData) {
134
+ const indices = [
135
+ 0,
136
+ 0,
137
+ 0,
138
+ 0,
139
+ 0,
140
+ 0
141
+ ];
142
+ let minx = Number.MAX_VALUE;
143
+ let maxx = -Number.MAX_VALUE;
144
+ let miny = Number.MAX_VALUE;
145
+ let maxy = -Number.MAX_VALUE;
146
+ let minz = Number.MAX_VALUE;
147
+ let maxz = -Number.MAX_VALUE;
148
+ const v = meshData.rawPositions;
149
+ const vert = new Vector3();
150
+ const tmpV0 = new Vector3();
151
+ const tmpV1 = new Vector3();
152
+ const tmpV2 = new Vector3();
153
+ const tmpV3 = new Vector3();
154
+ const numVertices = Math.floor(v.length / 3);
155
+ for(let i = 0; i < numVertices; i++){
156
+ vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);
157
+ this._jointMatrices[meshData.rawBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV0).scaleBy(meshData.rawJointWeights[i * 4 + 0]);
158
+ this._jointMatrices[meshData.rawBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV1).scaleBy(meshData.rawJointWeights[i * 4 + 1]);
159
+ this._jointMatrices[meshData.rawBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV2).scaleBy(meshData.rawJointWeights[i * 4 + 2]);
160
+ this._jointMatrices[meshData.rawBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1].transformPointAffine(vert, tmpV3).scaleBy(meshData.rawJointWeights[i * 4 + 3]);
161
+ tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);
162
+ if (tmpV0.x < minx) {
163
+ minx = tmpV0.x;
164
+ indices[0] = i;
165
+ }
166
+ if (tmpV0.x > maxx) {
167
+ maxx = tmpV0.x;
168
+ indices[1] = i;
169
+ }
170
+ if (tmpV0.y < miny) {
171
+ miny = tmpV0.y;
172
+ indices[2] = i;
173
+ }
174
+ if (tmpV0.y > maxy) {
175
+ maxy = tmpV0.y;
176
+ indices[3] = i;
177
+ }
178
+ if (tmpV0.z < minz) {
179
+ minz = tmpV0.z;
180
+ indices[4] = i;
181
+ }
182
+ if (tmpV0.z > maxz) {
183
+ maxz = tmpV0.z;
184
+ indices[5] = i;
185
+ }
186
+ }
187
+ const info = {
188
+ boundingVertexBlendIndices: new Float32Array(Array.from({
189
+ length: 6 * 4
190
+ }).map((val, index)=>meshData.rawBlendIndices[indices[index >> 2] * 4 + index % 4])),
191
+ boundingVertexJointWeights: new Float32Array(Array.from({
192
+ length: 6 * 4
193
+ }).map((val, index)=>meshData.rawJointWeights[indices[index >> 2] * 4 + index % 4])),
194
+ boundingVertices: Array.from({
195
+ length: 6
196
+ }).map((val, index)=>new Vector3(meshData.rawPositions[indices[index] * 3], meshData.rawPositions[indices[index] * 3 + 1], meshData.rawPositions[indices[index] * 3 + 2])),
197
+ boundingBox: new BoundingBox()
198
+ };
199
+ return info;
200
+ }
201
+ }
202
+
203
+ export { Skeleton };
204
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.js","sources":["../../../src/animation/skeleton.ts"],"sourcesContent":["import { Matrix4x4, Vector3, nextPowerOf2 } from '@zephyr3d/base';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport type { Mesh } from '../scene';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport type { AssetSubMeshData } from '../asset';\r\nimport { Application } from '../app/app';\r\n\r\ninterface SkinnedBoundingBox {\r\n boundingVertices: Vector3[];\r\n boundingVertexBlendIndices: Float32Array;\r\n boundingVertexJointWeights: Float32Array;\r\n boundingBox: BoundingBox;\r\n}\r\n\r\nconst tmpV0 = new Vector3();\r\nconst tmpV1 = new Vector3();\r\nconst tmpV2 = new Vector3();\r\nconst tmpV3 = new Vector3();\r\n\r\n/**\r\n * Skeleton for skinned animation\r\n * @public\r\n */\r\nexport class Skeleton {\r\n /** @internal */\r\n protected _meshes: { mesh: Mesh; bounding: SkinnedBoundingBox; box: BoundingBox }[];\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _bindPoseMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _jointMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _jointOffsets: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointMatrixArray: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointTexture: Texture2D;\r\n /**\r\n * Creates an instance of skeleton\r\n * @param joints - The joint nodes\r\n * @param inverseBindMatrices - The inverse binding matrices of the joints\r\n * @param bindPoseMatrices - The binding pose matrices of the joints\r\n */\r\n constructor(\r\n joints: SceneNode[],\r\n inverseBindMatrices: Matrix4x4[],\r\n bindPoseMatrices: Matrix4x4[],\r\n meshes: Mesh[],\r\n bounding: AssetSubMeshData[]\r\n ) {\r\n this._joints = joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._bindPoseMatrices = bindPoseMatrices;\r\n this._jointMatrixArray = null;\r\n this._jointMatrices = null;\r\n this._jointOffsets = null;\r\n this._jointTexture = null;\r\n this.updateJointMatrices();\r\n this._meshes = meshes.map((mesh, index) => {\r\n return {\r\n mesh,\r\n bounding: this.getBoundingInfo(bounding[index]),\r\n box: new BoundingBox()\r\n };\r\n });\r\n }\r\n /**\r\n * Disposes self\r\n */\r\n dispose() {\r\n this._jointTexture?.dispose();\r\n this._jointTexture = null;\r\n this._joints = null;\r\n this._inverseBindMatrices = null;\r\n this._bindPoseMatrices = null;\r\n this._jointMatrices = null;\r\n this._jointMatrixArray = null;\r\n }\r\n /**\r\n * The texture that contains the transform matrices of all the joints\r\n */\r\n get jointTexture(): Texture2D {\r\n return this._jointTexture;\r\n }\r\n /** @internal */\r\n updateJointMatrices(jointTransforms?: Matrix4x4[], worldMatrix?: Matrix4x4) {\r\n if (!this._jointTexture) {\r\n this._createJointTexture();\r\n }\r\n if (this._jointOffsets[0] === 0) {\r\n this._jointOffsets[0] = 1;\r\n this._jointOffsets[1] = 1;\r\n } else {\r\n this._jointOffsets[1] = this._jointOffsets[0];\r\n this._jointOffsets[0] = this._joints.length - this._jointOffsets[0] + 2;\r\n }\r\n for (let i = 0; i < this._joints.length; i++) {\r\n const mat = this._jointMatrices[i + this._jointOffsets[0] - 1];\r\n const jointTransform = jointTransforms ? jointTransforms[i] : this._joints[i].worldMatrix;\r\n if (worldMatrix) {\r\n Matrix4x4.multiplyAffine(worldMatrix, jointTransform, jointTransform);\r\n }\r\n Matrix4x4.multiply(jointTransform, this._inverseBindMatrices[i], mat);\r\n }\r\n }\r\n /** @internal */\r\n computeBindPose(model: SceneNode) {\r\n this.updateJointMatrices(this._bindPoseMatrices, model.worldMatrix);\r\n this._jointOffsets[1] = this._jointOffsets[0];\r\n this._jointTexture.update(\r\n this._jointMatrixArray,\r\n 0,\r\n 0,\r\n this._jointTexture.width,\r\n this._jointTexture.height\r\n );\r\n }\r\n /** @internal */\r\n computeJoints() {\r\n this.updateJointMatrices();\r\n this._jointTexture.update(\r\n this._jointMatrixArray,\r\n 0,\r\n 0,\r\n this._jointTexture.width,\r\n this._jointTexture.height\r\n );\r\n }\r\n /** @internal */\r\n apply() {\r\n this.computeJoints();\r\n for (const mesh of this._meshes) {\r\n this.computeBoundingBox(mesh.bounding, mesh.mesh.invWorldMatrix);\r\n mesh.mesh.setBoneMatrices(this.jointTexture);\r\n mesh.mesh.setAnimatedBoundingBox(mesh.bounding.boundingBox);\r\n }\r\n }\r\n /** @internal */\r\n reset() {\r\n for (const mesh of this._meshes) {\r\n mesh.mesh.setBoneMatrices(null);\r\n mesh.mesh.setAnimatedBoundingBox(null);\r\n }\r\n }\r\n /** @internal */\r\n computeBoundingBox(info: SkinnedBoundingBox, invWorldMatrix: Matrix4x4) {\r\n info.boundingBox.beginExtend();\r\n for (let i = 0; i < info.boundingVertices.length; i++) {\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV0)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 0]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV1)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 1]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV2)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 2]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV3)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 3]);\r\n tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);\r\n invWorldMatrix.transformPointAffine(tmpV0, tmpV0);\r\n info.boundingBox.extend(tmpV0);\r\n }\r\n }\r\n /** @internal */\r\n private _createJointTexture() {\r\n const textureWidth = nextPowerOf2(Math.max(4, Math.ceil(Math.sqrt((this._joints.length * 2 + 1) * 4))));\r\n const device = Application.instance.device;\r\n this._jointTexture = device.createTexture2D('rgba32f', textureWidth, textureWidth, {\r\n samplerOptions: {\r\n magFilter: 'nearest',\r\n minFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n });\r\n this._jointMatrixArray = new Float32Array(textureWidth * textureWidth * 4);\r\n const buffer = this._jointMatrixArray.buffer;\r\n this._jointOffsets = new Float32Array(buffer);\r\n this._jointOffsets[0] = 0;\r\n this._jointOffsets[1] = 0;\r\n this._jointMatrices = Array.from({ length: this._joints.length * 2 }).map(\r\n (val, index) => new Matrix4x4(buffer, (index + 1) * 16 * Float32Array.BYTES_PER_ELEMENT)\r\n );\r\n }\r\n /** @internal */\r\n private getBoundingInfo(meshData: AssetSubMeshData): SkinnedBoundingBox {\r\n const indices = [0, 0, 0, 0, 0, 0];\r\n let minx = Number.MAX_VALUE;\r\n let maxx = -Number.MAX_VALUE;\r\n let miny = Number.MAX_VALUE;\r\n let maxy = -Number.MAX_VALUE;\r\n let minz = Number.MAX_VALUE;\r\n let maxz = -Number.MAX_VALUE;\r\n const v = meshData.rawPositions;\r\n const vert = new Vector3();\r\n const tmpV0 = new Vector3();\r\n const tmpV1 = new Vector3();\r\n const tmpV2 = new Vector3();\r\n const tmpV3 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\r\n for (let i = 0; i < numVertices; i++) {\r\n vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);\r\n this._jointMatrices[meshData.rawBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV0)\r\n .scaleBy(meshData.rawJointWeights[i * 4 + 0]);\r\n this._jointMatrices[meshData.rawBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV1)\r\n .scaleBy(meshData.rawJointWeights[i * 4 + 1]);\r\n this._jointMatrices[meshData.rawBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV2)\r\n .scaleBy(meshData.rawJointWeights[i * 4 + 2]);\r\n this._jointMatrices[meshData.rawBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV3)\r\n .scaleBy(meshData.rawJointWeights[i * 4 + 3]);\r\n tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);\r\n if (tmpV0.x < minx) {\r\n minx = tmpV0.x;\r\n indices[0] = i;\r\n }\r\n if (tmpV0.x > maxx) {\r\n maxx = tmpV0.x;\r\n indices[1] = i;\r\n }\r\n if (tmpV0.y < miny) {\r\n miny = tmpV0.y;\r\n indices[2] = i;\r\n }\r\n if (tmpV0.y > maxy) {\r\n maxy = tmpV0.y;\r\n indices[3] = i;\r\n }\r\n if (tmpV0.z < minz) {\r\n minz = tmpV0.z;\r\n indices[4] = i;\r\n }\r\n if (tmpV0.z > maxz) {\r\n maxz = tmpV0.z;\r\n indices[5] = i;\r\n }\r\n }\r\n const info: SkinnedBoundingBox = {\r\n boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * 4 }).map(\r\n (val, index) => meshData.rawBlendIndices[indices[index >> 2] * 4 + (index % 4)]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * 4 }).map(\r\n (val, index) => meshData.rawJointWeights[indices[index >> 2] * 4 + (index % 4)]\r\n )\r\n ),\r\n boundingVertices: Array.from({ length: 6 }).map(\r\n (val, index) =>\r\n new Vector3(\r\n meshData.rawPositions[indices[index] * 3],\r\n meshData.rawPositions[indices[index] * 3 + 1],\r\n meshData.rawPositions[indices[index] * 3 + 2]\r\n )\r\n ),\r\n boundingBox: new BoundingBox()\r\n };\r\n return info;\r\n }\r\n}\r\n"],"names":["tmpV0","Vector3","tmpV1","tmpV2","tmpV3","Skeleton","joints","inverseBindMatrices","bindPoseMatrices","meshes","bounding","_joints","_inverseBindMatrices","_bindPoseMatrices","_jointMatrixArray","_jointMatrices","_jointOffsets","_jointTexture","updateJointMatrices","_meshes","map","mesh","index","getBoundingInfo","box","BoundingBox","dispose","jointTexture","jointTransforms","worldMatrix","_createJointTexture","length","i","mat","jointTransform","Matrix4x4","multiplyAffine","multiply","computeBindPose","model","update","width","height","computeJoints","apply","computeBoundingBox","invWorldMatrix","setBoneMatrices","setAnimatedBoundingBox","boundingBox","reset","info","beginExtend","boundingVertices","boundingVertexBlendIndices","transformPointAffine","scaleBy","boundingVertexJointWeights","addBy","extend","textureWidth","nextPowerOf2","Math","max","ceil","sqrt","device","Application","instance","createTexture2D","samplerOptions","magFilter","minFilter","mipFilter","Float32Array","buffer","Array","from","val","BYTES_PER_ELEMENT","meshData","indices","minx","Number","MAX_VALUE","maxx","miny","maxy","minz","maxz","v","rawPositions","vert","numVertices","floor","setXYZ","rawBlendIndices","rawJointWeights","x","y","z"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { Interpolator, Vector3 } from '@zephyr3d/base';
2
+ import { AnimationTrack } from './animationtrack.js';
3
+
4
+ /**
5
+ * Translate animation track
6
+ * @public
7
+ */ class NodeTranslationTrack extends AnimationTrack {
8
+ _state;
9
+ _interpolator;
10
+ constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
11
+ if (modeOrInterpolator instanceof Interpolator) {
12
+ if (modeOrInterpolator.target !== 'vec3') {
13
+ throw new Error(`TranslationTrack(): interpolator target must be 'vec3'`);
14
+ }
15
+ super(keyFramesOrEmbedded ?? false);
16
+ this._interpolator = modeOrInterpolator;
17
+ } else {
18
+ const keyFrames = keyFramesOrEmbedded;
19
+ const inputs = new Float32Array(keyFrames.map((val)=>val.time));
20
+ const outputs = new Float32Array(keyFrames.length * 3);
21
+ for(let i = 0; i < keyFrames.length; i++){
22
+ outputs[i * 3 + 0] = keyFrames[i].value.x;
23
+ outputs[i * 3 + 1] = keyFrames[i].value.y;
24
+ outputs[i * 3 + 2] = keyFrames[i].value.z;
25
+ }
26
+ super(embedded ?? false);
27
+ this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);
28
+ }
29
+ this._state = new Vector3();
30
+ }
31
+ calculateState(target, currentTime) {
32
+ this._interpolator.interpolate(currentTime, this._state);
33
+ return this._state;
34
+ }
35
+ applyState(node, state) {
36
+ node.position.set(state);
37
+ }
38
+ mixState(a, b, t) {
39
+ return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));
40
+ }
41
+ getBlendId() {
42
+ return 'node-translation';
43
+ }
44
+ getDuration() {
45
+ return this._interpolator.maxTime;
46
+ }
47
+ }
48
+
49
+ export { NodeTranslationTrack };
50
+ //# sourceMappingURL=translationtrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translationtrack.js","sources":["../../../src/animation/translationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Translate animation track\r\n * @public\r\n */\r\nexport class NodeTranslationTrack extends AnimationTrack<Vector3> {\r\n private readonly _state: Vector3;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of TranslationTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains the keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of TranslationTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Vector3 }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator?: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Vector3 }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'vec3') {\r\n throw new Error(`TranslationTrack(): interpolator target must be 'vec3'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Vector3 }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 3);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 3 + 0] = keyFrames[i].value.x;\r\n outputs[i * 3 + 1] = keyFrames[i].value.y;\r\n outputs[i * 3 + 2] = keyFrames[i].value.z;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);\r\n }\r\n this._state = new Vector3();\r\n }\r\n calculateState(target: object, currentTime: number): Vector3 {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Vector3) {\r\n node.position.set(state);\r\n }\r\n mixState(a: Vector3, b: Vector3, t: number): Vector3 {\r\n return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));\r\n }\r\n getBlendId(): unknown {\r\n return 'node-translation';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeTranslationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Vector3","calculateState","currentTime","interpolate","applyState","node","state","position","set","mixState","a","b","t","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,oBAA6BC,SAAAA,cAAAA,CAAAA;IACvBC,MAAgB;IAChBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAqD,EACrDC,mBAAkE,EAClEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,sDAAsD,CAAC,CAAA;AAC1E;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;AAC3C;AACA,YAAA,KAAK,CAAChB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIqB,OAAAA,EAAAA;AACpB;IACAC,cAAehB,CAAAA,MAAc,EAAEiB,WAAmB,EAAW;QAC3D,IAAI,CAACtB,aAAa,CAACuB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACvB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACAyB,UAAWC,CAAAA,IAAe,EAAEC,KAAc,EAAE;QAC1CD,IAAKE,CAAAA,QAAQ,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACpB;AACAG,IAAAA,QAAAA,CAASC,CAAU,EAAEC,CAAU,EAAEC,CAAS,EAAW;AACnD,QAAA,OAAO,IAAIZ,OAAQU,CAAAA,CAAAA,CAAEb,CAAC,GAAGe,KAAKD,CAAAA,CAAEd,CAAC,GAAGa,EAAEb,CAAAA,CAAIa,EAAAA,CAAAA,CAAEZ,CAAC,GAAGc,CAAAA,IAAKD,CAAAA,CAAEb,CAAC,GAAGY,CAAAA,CAAEZ,CAAAA,GAAIY,CAAEX,CAAAA,CAAC,GAAGa,CAAAA,IAAKD,CAAEZ,CAAAA,CAAC,GAAGW,CAAAA,CAAEX,CAAC,CAADA,CAAAA;AACtF;IACAc,UAAsB,GAAA;QACpB,OAAO,kBAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAClC,aAAa,CAACmC,OAAO;AACnC;AACF;;;;"}