@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Animation that contains multiple tracks
3
+ * @public
4
+ */ class AnimationClip {
5
+ /** @internal */ _name;
6
+ /** @internal */ _animationSet;
7
+ /** @internal */ _embedded;
8
+ /** @internal */ _duration;
9
+ /** @internal */ _autoPlay;
10
+ /** @internal */ _tracks;
11
+ _weight;
12
+ /** @internal */ _skeletons;
13
+ /**
14
+ * Creates an animation instance
15
+ * @param name - Name of the animation
16
+ * @param model - Parent node if this is a skeleton animation
17
+ */ constructor(name, animationSet, embedded = false){
18
+ this._name = name;
19
+ this._animationSet = animationSet;
20
+ this._embedded = embedded;
21
+ this._tracks = new Map();
22
+ this._duration = 0;
23
+ this._weight = 1;
24
+ this._autoPlay = false;
25
+ this._skeletons = new Set();
26
+ }
27
+ /** Whether this is an embedded animation */ get embedded() {
28
+ return this._embedded;
29
+ }
30
+ /** AnimationSet this animation belongs to */ get animationSet() {
31
+ return this._animationSet;
32
+ }
33
+ /** Animatoin weight */ get weight() {
34
+ return this._weight;
35
+ }
36
+ set weight(val) {
37
+ this._weight = val;
38
+ }
39
+ /** Whether animation should play automatically when loaded */ get autoPlay() {
40
+ return this._autoPlay;
41
+ }
42
+ set autoPlay(val) {
43
+ this._autoPlay = val;
44
+ }
45
+ /** Disposes self */ dispose() {
46
+ this._tracks = null;
47
+ this._skeletons?.forEach((val, key)=>key.dispose());
48
+ this._skeletons = null;
49
+ }
50
+ /** Gets the name of the animation */ get name() {
51
+ return this._name;
52
+ }
53
+ /** Gets all the tracks of this animation */ get tracks() {
54
+ return this._tracks;
55
+ }
56
+ /** Gets all skeletons */ get skeletons() {
57
+ return this._skeletons;
58
+ }
59
+ /** The duration of the animation */ get timeDuration() {
60
+ return this._duration;
61
+ }
62
+ set timeDuration(val) {
63
+ this._duration = val;
64
+ }
65
+ /**
66
+ * Adds a skeleton to the animation
67
+ * @param skeleton - The skeleton to be added
68
+ * @param meshList - The meshes controlled by the skeleton
69
+ * @param boundingBoxInfo - Bounding box information for the skeleton
70
+ */ addSkeleton(skeleton) {
71
+ this._skeletons.add(skeleton);
72
+ }
73
+ /**
74
+ * Deletes an animation track from this animation
75
+ * @param track - The track to delete
76
+ * @returns self
77
+ */ deleteTrack(track) {
78
+ if (track?.animation !== this) {
79
+ console.error('Cannot delete animation track which is not belongs to THIS animation');
80
+ }
81
+ for (const k of this._tracks.keys()){
82
+ const tracks = this._tracks.get(k);
83
+ const index = tracks.indexOf(track);
84
+ if (index >= 0) {
85
+ tracks.splice(index, 1);
86
+ }
87
+ }
88
+ return this;
89
+ }
90
+ /**
91
+ * Adds an animation track to this animation
92
+ * @param target - The node that will be controlled by the track
93
+ * @param track - The track to be added
94
+ * @returns self
95
+ */ addTrack(target, track) {
96
+ if (!track) {
97
+ return;
98
+ }
99
+ if (track.animation) {
100
+ if (track.animation === this) {
101
+ return;
102
+ } else {
103
+ console.error('Track is already in another animation');
104
+ return;
105
+ }
106
+ }
107
+ const blendId = track.getBlendId();
108
+ const tracks = this._tracks.get(target);
109
+ if (tracks && tracks.findIndex((track)=>track.getBlendId() === blendId) >= 0) {
110
+ console.error('Tracks with same BlendId could not be added to same animation');
111
+ return;
112
+ }
113
+ track.animation = this;
114
+ let trackInfo = this._tracks.get(target);
115
+ if (!trackInfo) {
116
+ trackInfo = [];
117
+ this._tracks.set(target, trackInfo);
118
+ }
119
+ trackInfo.push(track);
120
+ this._duration = Math.max(this._duration, track.getDuration() ?? 0);
121
+ track.reset(target);
122
+ return this;
123
+ }
124
+ }
125
+
126
+ export { AnimationClip };
127
+ //# sourceMappingURL=animation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.js","sources":["../../../src/animation/animation.ts"],"sourcesContent":["import type { AnimationSet } from './animationset';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport type { Skeleton } from './skeleton';\r\n\r\n/**\r\n * Animation that contains multiple tracks\r\n * @public\r\n */\r\nexport class AnimationClip {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _animationSet: AnimationSet;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _duration: number;\r\n /** @internal */\r\n protected _autoPlay: boolean;\r\n /** @internal */\r\n protected _tracks: Map<object, AnimationTrack[]>;\r\n protected _weight: number;\r\n /** @internal */\r\n protected _skeletons: Set<Skeleton>;\r\n /**\r\n * Creates an animation instance\r\n * @param name - Name of the animation\r\n * @param model - Parent node if this is a skeleton animation\r\n */\r\n constructor(name: string, animationSet: AnimationSet, embedded = false) {\r\n this._name = name;\r\n this._animationSet = animationSet;\r\n this._embedded = embedded;\r\n this._tracks = new Map();\r\n this._duration = 0;\r\n this._weight = 1;\r\n this._autoPlay = false;\r\n this._skeletons = new Set();\r\n }\r\n /** Whether this is an embedded animation */\r\n get embedded(): boolean {\r\n return this._embedded;\r\n }\r\n /** AnimationSet this animation belongs to */\r\n get animationSet() {\r\n return this._animationSet;\r\n }\r\n /** Animatoin weight */\r\n get weight() {\r\n return this._weight;\r\n }\r\n set weight(val: number) {\r\n this._weight = val;\r\n }\r\n /** Whether animation should play automatically when loaded */\r\n get autoPlay() {\r\n return this._autoPlay;\r\n }\r\n set autoPlay(val: boolean) {\r\n this._autoPlay = val;\r\n }\r\n /** Disposes self */\r\n dispose() {\r\n this._tracks = null;\r\n this._skeletons?.forEach((val, key) => key.dispose());\r\n this._skeletons = null;\r\n }\r\n /** Gets the name of the animation */\r\n get name(): string {\r\n return this._name;\r\n }\r\n /** Gets all the tracks of this animation */\r\n get tracks() {\r\n return this._tracks;\r\n }\r\n /** Gets all skeletons */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** The duration of the animation */\r\n get timeDuration(): number {\r\n return this._duration;\r\n }\r\n set timeDuration(val: number) {\r\n this._duration = val;\r\n }\r\n /**\r\n * Adds a skeleton to the animation\r\n * @param skeleton - The skeleton to be added\r\n * @param meshList - The meshes controlled by the skeleton\r\n * @param boundingBoxInfo - Bounding box information for the skeleton\r\n */\r\n addSkeleton(skeleton: Skeleton) {\r\n this._skeletons.add(skeleton);\r\n }\r\n /**\r\n * Deletes an animation track from this animation\r\n * @param track - The track to delete\r\n * @returns self\r\n */\r\n deleteTrack(track: AnimationTrack): this {\r\n if (track?.animation !== this) {\r\n console.error('Cannot delete animation track which is not belongs to THIS animation');\r\n }\r\n for (const k of this._tracks.keys()) {\r\n const tracks = this._tracks.get(k);\r\n const index = tracks.indexOf(track);\r\n if (index >= 0) {\r\n tracks.splice(index, 1);\r\n }\r\n }\r\n return this;\r\n }\r\n /**\r\n * Adds an animation track to this animation\r\n * @param target - The node that will be controlled by the track\r\n * @param track - The track to be added\r\n * @returns self\r\n */\r\n addTrack(target: object, track: AnimationTrack): this {\r\n if (!track) {\r\n return;\r\n }\r\n if (track.animation) {\r\n if (track.animation === this) {\r\n return;\r\n } else {\r\n console.error('Track is already in another animation');\r\n return;\r\n }\r\n }\r\n const blendId = track.getBlendId();\r\n const tracks = this._tracks.get(target);\r\n if (tracks && tracks.findIndex((track) => track.getBlendId() === blendId) >= 0) {\r\n console.error('Tracks with same BlendId could not be added to same animation');\r\n return;\r\n }\r\n track.animation = this;\r\n let trackInfo = this._tracks.get(target);\r\n if (!trackInfo) {\r\n trackInfo = [];\r\n this._tracks.set(target, trackInfo);\r\n }\r\n trackInfo.push(track);\r\n this._duration = Math.max(this._duration, track.getDuration() ?? 0);\r\n track.reset(target);\r\n return this;\r\n }\r\n}\r\n"],"names":["AnimationClip","_weight","name","animationSet","embedded","_name","_animationSet","_embedded","_tracks","Map","_duration","_autoPlay","_skeletons","Set","weight","val","autoPlay","dispose","forEach","key","tracks","skeletons","timeDuration","addSkeleton","skeleton","add","deleteTrack","track","animation","console","error","k","keys","get","index","indexOf","splice","addTrack","target","blendId","getBlendId","findIndex","trackInfo","set","push","Math","max","getDuration","reset"],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ import { Disposable, DWeakRef, weightedAverage } from '@zephyr3d/base';
2
+ import { AnimationClip } from './animation.js';
3
+
4
+ /**
5
+ * Animation set
6
+ * @public
7
+ */ class AnimationSet extends Disposable {
8
+ /** @internal */ _model;
9
+ /** @internal */ _animations;
10
+ /** @internal */ _activeTracks;
11
+ /** @internal */ _activeSkeletons;
12
+ /** @internal */ _activeAnimations;
13
+ /**
14
+ * Creates an instance of AnimationSet
15
+ * @param scene - The scene to which the animation set belongs
16
+ * @param model - The model which is controlled by the animation set
17
+ */ constructor(model){
18
+ super();
19
+ this._model = new DWeakRef(model);
20
+ this._animations = {};
21
+ this._activeTracks = new Map();
22
+ this._activeSkeletons = new Map();
23
+ this._activeAnimations = new Map();
24
+ }
25
+ /**
26
+ * The model which is controlled by the animation set
27
+ */ get model() {
28
+ return this._model.get();
29
+ }
30
+ /**
31
+ * How many animations in this set
32
+ */ get numAnimations() {
33
+ return Object.getOwnPropertyNames(this._animations).length;
34
+ }
35
+ /**
36
+ * Gets an animation clip by name
37
+ * @param name - name of the animation to get
38
+ */ get(name) {
39
+ return this._animations[name] ?? null;
40
+ }
41
+ /**
42
+ * Creates an animation
43
+ */ createAnimation(name, embedded = false) {
44
+ if (!name || this._animations[name]) {
45
+ console.error('Animation must have unique name');
46
+ return null;
47
+ } else {
48
+ const animation = new AnimationClip(name, this, embedded);
49
+ this._animations[name] = animation;
50
+ return animation;
51
+ }
52
+ }
53
+ /**
54
+ * Deletes an animation
55
+ */ deleteAnimation(name) {
56
+ const animation = this._animations[name];
57
+ if (animation) {
58
+ this.stopAnimation(name);
59
+ delete this._animations[name];
60
+ animation.dispose();
61
+ }
62
+ }
63
+ /**
64
+ * Gets names of all the animations of the model
65
+ * @returns An array of string that contains the animation names
66
+ */ getAnimationNames() {
67
+ return Object.keys(this._animations);
68
+ }
69
+ /**
70
+ * Updates all animations of the model
71
+ */ update(deltaInSeconds) {
72
+ this._activeAnimations.forEach((v, k)=>{
73
+ if (v.fadeOut > 0 && v.fadeOutStart < 0) {
74
+ v.fadeOutStart = v.animateTime;
75
+ }
76
+ // Update animation time
77
+ if (v.firstFrame) {
78
+ v.firstFrame = false;
79
+ } else {
80
+ const timeAdvance = deltaInSeconds * v.speedRatio;
81
+ v.currentTime += timeAdvance;
82
+ v.animateTime += timeAdvance;
83
+ if (v.currentTime > k.timeDuration) {
84
+ v.repeatCounter++;
85
+ v.currentTime = 0;
86
+ } else if (v.currentTime < 0) {
87
+ v.repeatCounter++;
88
+ v.currentTime = k.timeDuration;
89
+ }
90
+ if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {
91
+ this.stopAnimation(k.name);
92
+ } else if (v.fadeOut > 0) {
93
+ if (v.animateTime - v.fadeOutStart >= v.fadeOut) {
94
+ this.stopAnimation(k.name);
95
+ }
96
+ }
97
+ }
98
+ });
99
+ // Update tracks
100
+ this._activeTracks.forEach((v, k)=>{
101
+ v.forEach((alltracks)=>{
102
+ // Only deal with tracks which have not been removed
103
+ const tracks = alltracks.filter((track)=>track.animation && this.isPlayingAnimation(track.animation.name));
104
+ if (tracks.length > 0) {
105
+ const weights = tracks.map((track)=>{
106
+ const info = this._activeAnimations.get(track.animation);
107
+ const weight = info.weight;
108
+ const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);
109
+ let fadeOut = 1;
110
+ if (info.fadeOut !== 0) {
111
+ fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;
112
+ }
113
+ return weight * fadeIn * fadeOut;
114
+ });
115
+ const states = tracks.map((track)=>track.calculateState(k, this._activeAnimations.get(track.animation).currentTime / track.animation.timeDuration * track.getDuration()));
116
+ const state = weightedAverage(weights, states, (a, b, t)=>{
117
+ return tracks[0].mixState(a, b, t);
118
+ });
119
+ tracks[0].applyState(k, state);
120
+ }
121
+ });
122
+ });
123
+ // Update skeletons
124
+ this._activeSkeletons.forEach((v, k)=>{
125
+ k.apply();
126
+ });
127
+ }
128
+ /**
129
+ * Checks whether an animation is playing
130
+ * @param name - Name of the animation to be checked, if not given, checks if any animation is playing
131
+ * @returns true if the animation is playing, otherwise false
132
+ */ isPlayingAnimation(name) {
133
+ return name ? this._activeAnimations.has(this._animations[name]) : this._activeAnimations.size > 0;
134
+ }
135
+ /**
136
+ * Gets the animation clip by name
137
+ * @param name - Name of the animation to get
138
+ * @returns The animation clip if exists, otherwise null
139
+ */ getAnimationClip(name) {
140
+ return this._animations[name] ?? null;
141
+ }
142
+ /**
143
+ * Sets the weight of specific animation which is currently playing
144
+ * @param name - Name of the animation
145
+ * @param weight - New weight value
146
+ */ setAnimationWeight(name, weight) {
147
+ const ani = this._animations[name];
148
+ const info = this._activeAnimations.get(ani);
149
+ if (info) {
150
+ info.weight = weight;
151
+ }
152
+ }
153
+ /**
154
+ * Starts playing an animation of the model
155
+ * @param name - Name of the animation to play
156
+ * @param options - Playing options
157
+ */ playAnimation(name, options) {
158
+ const ani = this._animations[name];
159
+ if (!ani) {
160
+ console.error(`Animation ${name} not exists`);
161
+ return;
162
+ }
163
+ const fadeIn = Math.max(options?.fadeIn ?? 0, 0);
164
+ const info = this._activeAnimations.get(ani);
165
+ if (info) {
166
+ info.fadeOut = 0;
167
+ info.fadeIn = fadeIn;
168
+ } else {
169
+ const repeat = options?.repeat ?? 0;
170
+ const speedRatio = options?.speedRatio ?? 1;
171
+ const weight = ani.weight;
172
+ this._activeAnimations.set(ani, {
173
+ repeat,
174
+ weight,
175
+ speedRatio,
176
+ fadeIn,
177
+ fadeOut: 0,
178
+ repeatCounter: 0,
179
+ currentTime: speedRatio < 0 ? ani.timeDuration : 0,
180
+ animateTime: 0,
181
+ fadeOutStart: 0,
182
+ firstFrame: true
183
+ });
184
+ ani.tracks?.forEach((v, k)=>{
185
+ let nodeTracks = this._activeTracks.get(k);
186
+ if (!nodeTracks) {
187
+ nodeTracks = new Map();
188
+ this._activeTracks.set(k, nodeTracks);
189
+ }
190
+ for (const track of v){
191
+ const blendId = track.getBlendId();
192
+ let blendedTracks = nodeTracks.get(blendId);
193
+ if (!blendedTracks) {
194
+ blendedTracks = [];
195
+ nodeTracks.set(blendId, blendedTracks);
196
+ }
197
+ blendedTracks.push(track);
198
+ }
199
+ });
200
+ ani.skeletons?.forEach((v, k)=>{
201
+ const refcount = this._activeSkeletons.get(k);
202
+ if (refcount) {
203
+ this._activeSkeletons.set(k, refcount + 1);
204
+ } else {
205
+ this._activeSkeletons.set(k, 1);
206
+ }
207
+ });
208
+ }
209
+ }
210
+ /**
211
+ * Stops playing an animation of the model
212
+ * @param name - Name of the animation to stop playing
213
+ */ stopAnimation(name, options) {
214
+ const ani = this._animations[name];
215
+ const info = this._activeAnimations.get(ani);
216
+ if (info) {
217
+ const fadeOut = Math.max(options?.fadeOut ?? 0, 0);
218
+ if (fadeOut !== 0) {
219
+ info.fadeOut = fadeOut;
220
+ info.fadeOutStart = -1;
221
+ } else {
222
+ this._activeAnimations.delete(ani);
223
+ this._activeTracks.forEach((v)=>{
224
+ v.forEach((tracks, id)=>{
225
+ v.set(id, tracks.filter((track)=>track.animation !== ani));
226
+ });
227
+ });
228
+ ani.skeletons?.forEach((v, k)=>{
229
+ const refcount = this._activeSkeletons.get(k);
230
+ if (refcount === 1) {
231
+ k.reset();
232
+ this._activeSkeletons.delete(k);
233
+ } else {
234
+ this._activeSkeletons.set(k, refcount - 1);
235
+ }
236
+ });
237
+ }
238
+ }
239
+ }
240
+ onDispose() {
241
+ super.onDispose();
242
+ this._model?.dispose();
243
+ this._model = null;
244
+ for(const k in this._animations){
245
+ this._animations[k].dispose();
246
+ }
247
+ this._animations = {};
248
+ this._activeAnimations.clear();
249
+ this._activeSkeletons.clear();
250
+ this._activeTracks.clear();
251
+ }
252
+ }
253
+
254
+ export { AnimationSet };
255
+ //# sourceMappingURL=animationset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animationset.js","sources":["../../../src/animation/animationset.ts"],"sourcesContent":["import { weightedAverage, DWeakRef, Disposable } from '@zephyr3d/base';\r\nimport type { IDisposable } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene';\r\nimport { AnimationClip } from './animation';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport type { Skeleton } from './skeleton';\r\n\r\n/**\r\n * Options for playing animation\r\n * @public\r\n **/\r\nexport type PlayAnimationOptions = {\r\n /**\r\n * Repeat times\r\n *\r\n * @remarks\r\n * Number of loops, 0 for infinite loops. Default value is 0\r\n **/\r\n repeat?: number;\r\n /**\r\n * Speed factor\r\n *\r\n * @remarks\r\n * The larger the absolute value, the faster the speed.\r\n * If it is a negative value, it plays in reverse.\r\n * Default value is 1\r\n */\r\n speedRatio?: number;\r\n /**\r\n * Fade-in time\r\n *\r\n * @remarks\r\n * How long it takes for the animation weight to increase from 0 to weight,\r\n * default is 0, indicating no fade-in effect. Usually used in conjunction\r\n * with the fadeOut parameter of stopAnimation() for seamless transition\r\n * between two animations\r\n **/\r\n fadeIn?: number;\r\n};\r\n\r\n/**\r\n * Options for stop playing animation\r\n * @public\r\n **/\r\nexport type StopAnimationOptions = {\r\n /**\r\n * Fade-out time\r\n *\r\n * @remarks\r\n * How long it takes for the animation weight to decrease from current weight\r\n * to 0, default is 0, indicating no fade-out effect. Usually used in conjunction\r\n * with the fadeIn parameter of startAnimation() for seamless transition between\r\n * two animations\r\n */\r\n fadeOut?: number;\r\n};\r\n\r\n/**\r\n * Animation set\r\n * @public\r\n */\r\nexport class AnimationSet extends Disposable implements IDisposable {\r\n /** @internal */\r\n private _model: DWeakRef<SceneNode>;\r\n /** @internal */\r\n private _animations: Record<string, AnimationClip>;\r\n /** @internal */\r\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\r\n /** @internal */\r\n private readonly _activeSkeletons: Map<Skeleton, number>;\r\n /** @internal */\r\n private readonly _activeAnimations: Map<\r\n AnimationClip,\r\n {\r\n currentTime: number;\r\n repeat: number;\r\n repeatCounter: number;\r\n weight: number;\r\n speedRatio: number;\r\n firstFrame: boolean;\r\n fadeIn: number;\r\n fadeOut: number;\r\n fadeOutStart: number;\r\n animateTime: number;\r\n }\r\n >;\r\n /**\r\n * Creates an instance of AnimationSet\r\n * @param scene - The scene to which the animation set belongs\r\n * @param model - The model which is controlled by the animation set\r\n */\r\n constructor(model: SceneNode) {\r\n super();\r\n this._model = new DWeakRef<SceneNode>(model);\r\n this._animations = {};\r\n this._activeTracks = new Map();\r\n this._activeSkeletons = new Map();\r\n this._activeAnimations = new Map();\r\n }\r\n /**\r\n * The model which is controlled by the animation set\r\n */\r\n get model(): SceneNode {\r\n return this._model.get();\r\n }\r\n /**\r\n * How many animations in this set\r\n */\r\n get numAnimations(): number {\r\n return Object.getOwnPropertyNames(this._animations).length;\r\n }\r\n /**\r\n * Gets an animation clip by name\r\n * @param name - name of the animation to get\r\n */\r\n get(name: string): AnimationClip {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Creates an animation\r\n */\r\n createAnimation(name: string, embedded = false): AnimationClip {\r\n if (!name || this._animations[name]) {\r\n console.error('Animation must have unique name');\r\n return null;\r\n } else {\r\n const animation = new AnimationClip(name, this, embedded);\r\n this._animations[name] = animation;\r\n return animation;\r\n }\r\n }\r\n /**\r\n * Deletes an animation\r\n */\r\n deleteAnimation(name: string) {\r\n const animation = this._animations[name];\r\n if (animation) {\r\n this.stopAnimation(name);\r\n delete this._animations[name];\r\n animation.dispose();\r\n }\r\n }\r\n /**\r\n * Gets names of all the animations of the model\r\n * @returns An array of string that contains the animation names\r\n */\r\n getAnimationNames(): string[] {\r\n return Object.keys(this._animations);\r\n }\r\n /**\r\n * Updates all animations of the model\r\n */\r\n update(deltaInSeconds: number): void {\r\n this._activeAnimations.forEach((v, k) => {\r\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\r\n v.fadeOutStart = v.animateTime;\r\n }\r\n // Update animation time\r\n if (v.firstFrame) {\r\n v.firstFrame = false;\r\n } else {\r\n const timeAdvance = deltaInSeconds * v.speedRatio;\r\n v.currentTime += timeAdvance;\r\n v.animateTime += timeAdvance;\r\n if (v.currentTime > k.timeDuration) {\r\n v.repeatCounter++;\r\n v.currentTime = 0;\r\n } else if (v.currentTime < 0) {\r\n v.repeatCounter++;\r\n v.currentTime = k.timeDuration;\r\n }\r\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\r\n this.stopAnimation(k.name);\r\n } else if (v.fadeOut > 0) {\r\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name);\r\n }\r\n }\r\n }\r\n });\r\n // Update tracks\r\n this._activeTracks.forEach((v, k) => {\r\n v.forEach((alltracks) => {\r\n // Only deal with tracks which have not been removed\r\n const tracks = alltracks.filter(\r\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\r\n );\r\n if (tracks.length > 0) {\r\n const weights = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation);\r\n const weight = info.weight;\r\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\r\n let fadeOut = 1;\r\n if (info.fadeOut !== 0) {\r\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\r\n }\r\n return weight * fadeIn * fadeOut;\r\n });\r\n const states = tracks.map((track) =>\r\n track.calculateState(\r\n k,\r\n (this._activeAnimations.get(track.animation).currentTime / track.animation.timeDuration) *\r\n track.getDuration()\r\n )\r\n );\r\n const state = weightedAverage(weights, states, (a, b, t) => {\r\n return tracks[0].mixState(a, b, t);\r\n });\r\n tracks[0].applyState(k, state);\r\n }\r\n });\r\n });\r\n // Update skeletons\r\n this._activeSkeletons.forEach((v, k) => {\r\n k.apply();\r\n });\r\n }\r\n /**\r\n * Checks whether an animation is playing\r\n * @param name - Name of the animation to be checked, if not given, checks if any animation is playing\r\n * @returns true if the animation is playing, otherwise false\r\n */\r\n isPlayingAnimation(name?: string): boolean {\r\n return name ? this._activeAnimations.has(this._animations[name]) : this._activeAnimations.size > 0;\r\n }\r\n /**\r\n * Gets the animation clip by name\r\n * @param name - Name of the animation to get\r\n * @returns The animation clip if exists, otherwise null\r\n */\r\n getAnimationClip(name: string): AnimationClip | null {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Sets the weight of specific animation which is currently playing\r\n * @param name - Name of the animation\r\n * @param weight - New weight value\r\n */\r\n setAnimationWeight(name: string, weight: number): void {\r\n const ani = this._animations[name];\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.weight = weight;\r\n }\r\n }\r\n /**\r\n * Starts playing an animation of the model\r\n * @param name - Name of the animation to play\r\n * @param options - Playing options\r\n */\r\n playAnimation(name: string, options?: PlayAnimationOptions): void {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.fadeOut = 0;\r\n info.fadeIn = fadeIn;\r\n } else {\r\n const repeat = options?.repeat ?? 0;\r\n const speedRatio = options?.speedRatio ?? 1;\r\n const weight = ani.weight;\r\n this._activeAnimations.set(ani, {\r\n repeat,\r\n weight,\r\n speedRatio,\r\n fadeIn,\r\n fadeOut: 0,\r\n repeatCounter: 0,\r\n currentTime: speedRatio < 0 ? ani.timeDuration : 0,\r\n animateTime: 0,\r\n fadeOutStart: 0,\r\n firstFrame: true\r\n });\r\n ani.tracks?.forEach((v, k) => {\r\n let nodeTracks = this._activeTracks.get(k);\r\n if (!nodeTracks) {\r\n nodeTracks = new Map();\r\n this._activeTracks.set(k, nodeTracks);\r\n }\r\n for (const track of v) {\r\n const blendId = track.getBlendId();\r\n let blendedTracks = nodeTracks.get(blendId);\r\n if (!blendedTracks) {\r\n blendedTracks = [];\r\n nodeTracks.set(blendId, blendedTracks);\r\n }\r\n blendedTracks.push(track);\r\n }\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const refcount = this._activeSkeletons.get(k);\r\n if (refcount) {\r\n this._activeSkeletons.set(k, refcount + 1);\r\n } else {\r\n this._activeSkeletons.set(k, 1);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Stops playing an animation of the model\r\n * @param name - Name of the animation to stop playing\r\n */\r\n stopAnimation(name: string, options?: StopAnimationOptions): void {\r\n const ani = this._animations[name];\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\r\n if (fadeOut !== 0) {\r\n info.fadeOut = fadeOut;\r\n info.fadeOutStart = -1;\r\n } else {\r\n this._activeAnimations.delete(ani);\r\n this._activeTracks.forEach((v) => {\r\n v.forEach((tracks, id) => {\r\n v.set(\r\n id,\r\n tracks.filter((track) => track.animation !== ani)\r\n );\r\n });\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const refcount = this._activeSkeletons.get(k);\r\n if (refcount === 1) {\r\n k.reset();\r\n this._activeSkeletons.delete(k);\r\n } else {\r\n this._activeSkeletons.set(k, refcount - 1);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._model?.dispose();\r\n this._model = null;\r\n for (const k in this._animations) {\r\n this._animations[k].dispose();\r\n }\r\n this._animations = {};\r\n this._activeAnimations.clear();\r\n this._activeSkeletons.clear();\r\n this._activeTracks.clear();\r\n }\r\n}\r\n"],"names":["AnimationSet","Disposable","model","_model","DWeakRef","_animations","_activeTracks","Map","_activeSkeletons","_activeAnimations","get","numAnimations","Object","getOwnPropertyNames","length","name","createAnimation","embedded","console","error","animation","AnimationClip","deleteAnimation","stopAnimation","dispose","getAnimationNames","keys","update","deltaInSeconds","forEach","v","k","fadeOut","fadeOutStart","animateTime","firstFrame","timeAdvance","speedRatio","currentTime","timeDuration","repeatCounter","repeat","alltracks","tracks","filter","track","isPlayingAnimation","weights","map","info","weight","fadeIn","Math","min","states","calculateState","getDuration","state","weightedAverage","a","b","t","mixState","applyState","apply","has","size","getAnimationClip","setAnimationWeight","ani","playAnimation","options","max","set","nodeTracks","blendId","getBlendId","blendedTracks","push","skeletons","refcount","delete","id","reset","onDispose","clear"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Base class for any kind of animation track
3
+ * @public
4
+ */ class AnimationTrack {
5
+ /** @internal */ _name;
6
+ /** @internal */ _embedded;
7
+ /** @internal */ _animation;
8
+ /**
9
+ * Creates a new animation track
10
+ * @param embedded - Whether this track is an embedded track
11
+ */ constructor(embedded){
12
+ this._name = 'noname';
13
+ this._embedded = !!embedded;
14
+ }
15
+ /** Name of the track */ get name() {
16
+ return this._name;
17
+ }
18
+ set name(val) {
19
+ this._name = val;
20
+ }
21
+ /** Wether this is an embedded track */ get embedded() {
22
+ return this._embedded;
23
+ }
24
+ /** Animation this track belongs to */ get animation() {
25
+ return this._animation;
26
+ }
27
+ set animation(ani) {
28
+ this._animation = ani;
29
+ }
30
+ /** Stops playing the track and rewind to the first frame */ reset(_target) {}
31
+ }
32
+
33
+ export { AnimationTrack };
34
+ //# sourceMappingURL=animationtrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animationtrack.js","sources":["../../../src/animation/animationtrack.ts"],"sourcesContent":["import type { AnimationClip } from './animation';\r\n\r\n/**\r\n * Base class for any kind of animation track\r\n * @public\r\n */\r\nexport abstract class AnimationTrack<StateType = unknown> {\r\n /** @internal */\r\n protected _name: string;\r\n /** @internal */\r\n protected _embedded: boolean;\r\n /** @internal */\r\n protected _animation: AnimationClip;\r\n /**\r\n * Creates a new animation track\r\n * @param embedded - Whether this track is an embedded track\r\n */\r\n constructor(embedded?: boolean) {\r\n this._name = 'noname';\r\n this._embedded = !!embedded;\r\n }\r\n /** Name of the track */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val;\r\n }\r\n /** Wether this is an embedded track */\r\n get embedded(): boolean {\r\n return this._embedded;\r\n }\r\n /** Animation this track belongs to */\r\n get animation(): AnimationClip {\r\n return this._animation;\r\n }\r\n set animation(ani: AnimationClip) {\r\n this._animation = ani;\r\n }\r\n /** Stops playing the track and rewind to the first frame */\r\n reset(_target: object) {}\r\n /**\r\n * Calculates current animation state\r\n * @param target - The animated object\r\n * @param currentTime - At which time the animation state should be calculated.\r\n * @returns State object\r\n */\r\n abstract calculateState(target: object, currentTime: number): StateType;\r\n /**\r\n * Applys animation state to node\r\n * @param target - The animated object to which the state will be applied\r\n * @param state - The animation state\r\n */\r\n abstract applyState(target: object, state: StateType);\r\n /**\r\n * Mixes two animation state according to specific weight value\r\n * @param a - The first state object\r\n * @param b - The second state object\r\n * @param t - The weight value\r\n * @returns The mixed state object\r\n */\r\n abstract mixState(a: StateType, b: StateType, t: number): StateType;\r\n /**\r\n * Get the blend ID\r\n * @returns Blend ID\r\n *\r\n * @remarks\r\n * Two tracks which have same blend ID can be blended together\r\n */\r\n abstract getBlendId(): unknown;\r\n /**\r\n * Get the duration of the track\r\n * @returns Duration of the track\r\n */\r\n abstract getDuration(): number;\r\n}\r\n"],"names":["AnimationTrack","embedded","_name","_embedded","name","val","animation","_animation","ani","reset","_target"],"mappings":"AAEA;;;AAGC,IACM,MAAeA,cAAAA,CAAAA;qBAEpB,KAAwB;qBAExB,SAA6B;qBAE7B,UAAoC;AACpC;;;MAIA,WAAA,CAAYC,QAAkB,CAAE;QAC9B,IAAI,CAACC,KAAK,GAAG,QAAA;AACb,QAAA,IAAI,CAACC,SAAS,GAAG,CAAC,CAACF,QAAAA;AACrB;6BAEA,IAAIG,IAAO,GAAA;QACT,OAAO,IAAI,CAACF,KAAK;AACnB;IACA,IAAIE,IAAAA,CAAKC,GAAW,EAAE;QACpB,IAAI,CAACH,KAAK,GAAGG,GAAAA;AACf;4CAEA,IAAIJ,QAAoB,GAAA;QACtB,OAAO,IAAI,CAACE,SAAS;AACvB;2CAEA,IAAIG,SAA2B,GAAA;QAC7B,OAAO,IAAI,CAACC,UAAU;AACxB;IACA,IAAID,SAAAA,CAAUE,GAAkB,EAAE;QAChC,IAAI,CAACD,UAAU,GAAGC,GAAAA;AACpB;AACA,iEACAC,KAAAA,CAAMC,OAAe,EAAE;AAmCzB;;;;"}
@@ -0,0 +1,52 @@
1
+ import { Vector3, Interpolator, Quaternion } from '@zephyr3d/base';
2
+ import { AnimationTrack } from './animationtrack.js';
3
+
4
+ const tmpVec3 = new Vector3();
5
+ /**
6
+ * Euler angle rotation animation track
7
+ * @public
8
+ */ class NodeEulerRotationTrack extends AnimationTrack {
9
+ _state;
10
+ _interpolator;
11
+ constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
12
+ if (modeOrInterpolator instanceof Interpolator) {
13
+ if (modeOrInterpolator.target !== 'vec3') {
14
+ throw new Error(`TranslationTrack(): interpolator target must be 'vec3'`);
15
+ }
16
+ super(keyFramesOrEmbedded ?? false);
17
+ this._interpolator = modeOrInterpolator;
18
+ } else {
19
+ const keyFrames = keyFramesOrEmbedded;
20
+ const inputs = new Float32Array(keyFrames.map((val)=>val.time));
21
+ const outputs = new Float32Array(keyFrames.length * 3);
22
+ for(let i = 0; i < keyFrames.length; i++){
23
+ outputs[i * 3 + 0] = keyFrames[i].value.x;
24
+ outputs[i * 3 + 1] = keyFrames[i].value.y;
25
+ outputs[i * 3 + 2] = keyFrames[i].value.z;
26
+ }
27
+ super(embedded ?? false);
28
+ this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);
29
+ }
30
+ this._state = new Quaternion();
31
+ }
32
+ calculateState(target, currentTime) {
33
+ this._interpolator.interpolate(currentTime, tmpVec3);
34
+ this._state.fromEulerAngle(tmpVec3.x, tmpVec3.y, tmpVec3.z);
35
+ return this._state;
36
+ }
37
+ applyState(node, state) {
38
+ node.rotation.set(state);
39
+ }
40
+ mixState(a, b, t) {
41
+ return Quaternion.slerp(a, b, t);
42
+ }
43
+ getBlendId() {
44
+ return 'node-rotation';
45
+ }
46
+ getDuration() {
47
+ return this._interpolator.maxTime;
48
+ }
49
+ }
50
+
51
+ export { NodeEulerRotationTrack };
52
+ //# sourceMappingURL=eulerrotationtrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eulerrotationtrack.js","sources":["../../../src/animation/eulerrotationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\nconst tmpVec3 = new Vector3();\r\n\r\n/**\r\n * Euler angle rotation animation track\r\n * @public\r\n */\r\nexport class NodeEulerRotationTrack extends AnimationTrack<Quaternion> {\r\n private readonly _state: Quaternion;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of EulerRotationTrack 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 EulerRotationTrack 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 Quaternion();\r\n }\r\n calculateState(target: object, currentTime: number): Quaternion {\r\n this._interpolator.interpolate(currentTime, tmpVec3);\r\n this._state.fromEulerAngle(tmpVec3.x, tmpVec3.y, tmpVec3.z);\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":["tmpVec3","Vector3","NodeEulerRotationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Quaternion","calculateState","currentTime","interpolate","fromEulerAngle","applyState","node","state","rotation","set","mixState","a","b","t","slerp","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA,MAAMA,UAAU,IAAIC,OAAAA,EAAAA;AAEpB;;;IAIO,MAAMC,sBAA+BC,SAAAA,cAAAA,CAAAA;IACzBC,MAAmB;IACnBC,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,UAAAA,EAAAA;AACpB;IACAC,cAAehB,CAAAA,MAAc,EAAEiB,WAAmB,EAAc;AAC9D,QAAA,IAAI,CAACtB,aAAa,CAACuB,WAAW,CAACD,WAAa3B,EAAAA,OAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACI,MAAM,CAACyB,cAAc,CAAC7B,OAAAA,CAAQsB,CAAC,EAAEtB,OAAQuB,CAAAA,CAAC,EAAEvB,OAAAA,CAAQwB,CAAC,CAAA;QAC1D,OAAO,IAAI,CAACpB,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,OAAOb,UAAWc,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,93 @@
1
+ import { PBStructTypeInfo, PBArrayTypeInfo, PBPrimitiveTypeInfo, PBPrimitiveType } from '@zephyr3d/device';
2
+ import { Application } from '../app/app.js';
3
+ import { MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS, MORPH_WEIGHTS_VECTOR_COUNT, MORPH_ATTRIBUTE_VECTOR_COUNT } from '../values.js';
4
+ import { ShaderHelper } from '../material/shader/helper.js';
5
+ import { BoundingBox } from '../utility/bounding_volume.js';
6
+
7
+ function processMorphData(subMesh, morphWeights) {
8
+ const device = Application.instance.device;
9
+ const numTargets = subMesh.numTargets;
10
+ if (numTargets === 0) {
11
+ return;
12
+ }
13
+ const attributes = Object.getOwnPropertyNames(subMesh.targets);
14
+ const numVertices = subMesh.primitive.get().getNumVertices();
15
+ const weightsAndOffsets = new Float32Array(4 + MAX_MORPH_TARGETS + MAX_MORPH_ATTRIBUTES);
16
+ for(let i = 0; i < numTargets; i++){
17
+ weightsAndOffsets[4 + i] = morphWeights?.[i] ?? 0;
18
+ }
19
+ const textureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * numTargets));
20
+ if (textureSize > device.getDeviceCaps().textureCaps.maxTextureSize) {
21
+ // TODO: reduce morph attributes
22
+ throw new Error(`Morph target data too large`);
23
+ }
24
+ weightsAndOffsets[0] = textureSize;
25
+ weightsAndOffsets[1] = textureSize;
26
+ weightsAndOffsets[2] = numVertices;
27
+ weightsAndOffsets[3] = numTargets;
28
+ let offset = 0;
29
+ const textureData = new Float32Array(textureSize * textureSize * 4);
30
+ for(let attrib = 0; attrib < MAX_MORPH_ATTRIBUTES; attrib++){
31
+ const index = attributes.indexOf(String(attrib));
32
+ if (index < 0) {
33
+ weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = -1;
34
+ continue;
35
+ }
36
+ weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = offset >> 2;
37
+ const info = subMesh.targets[attrib];
38
+ if (info.data.length !== numTargets) {
39
+ console.error(`Invalid morph target data`);
40
+ return;
41
+ }
42
+ for(let t = 0; t < numTargets; t++){
43
+ const data = info.data[t];
44
+ for(let i = 0; i < numVertices; i++){
45
+ for(let j = 0; j < 4; j++){
46
+ textureData[offset++] = j < info.numComponents ? data[i * info.numComponents + j] : 1;
47
+ }
48
+ }
49
+ }
50
+ }
51
+ const morphTexture = device.createTexture2D('rgba32f', textureSize, textureSize, {
52
+ samplerOptions: {
53
+ minFilter: 'nearest',
54
+ magFilter: 'nearest',
55
+ mipFilter: 'none'
56
+ }
57
+ });
58
+ morphTexture.update(textureData, 0, 0, textureSize, textureSize);
59
+ const bufferType = new PBStructTypeInfo('dummy', 'std140', [
60
+ {
61
+ name: ShaderHelper.getMorphInfoUniformName(),
62
+ type: new PBArrayTypeInfo(new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4), 1 + MORPH_WEIGHTS_VECTOR_COUNT + MORPH_ATTRIBUTE_VECTOR_COUNT)
63
+ }
64
+ ]);
65
+ const morphUniformBuffer = device.createStructuredBuffer(bufferType, {
66
+ usage: 'uniform'
67
+ }, weightsAndOffsets);
68
+ const morphBoundingBox = new BoundingBox();
69
+ calculateMorphBoundingBox(morphBoundingBox, subMesh.targetBox, weightsAndOffsets.subarray(4, 4 + MAX_MORPH_TARGETS), numTargets);
70
+ const meshAABB = subMesh.mesh.getBoundingVolume().toAABB();
71
+ morphBoundingBox.minPoint.addBy(meshAABB.minPoint);
72
+ morphBoundingBox.maxPoint.addBy(meshAABB.maxPoint);
73
+ subMesh.mesh.setMorphData(morphTexture);
74
+ subMesh.mesh.setMorphInfo(morphUniformBuffer);
75
+ subMesh.mesh.setAnimatedBoundingBox(morphBoundingBox);
76
+ }
77
+ /** @internal */ function calculateMorphBoundingBox(morphBoundingBox, keyframeBoundingBox, weights, numTargets) {
78
+ morphBoundingBox.minPoint.setXYZ(0, 0, 0);
79
+ morphBoundingBox.maxPoint.setXYZ(0, 0, 0);
80
+ for(let i = 0; i < numTargets; i++){
81
+ const weight = weights[i];
82
+ const keyframeBox = keyframeBoundingBox[i];
83
+ morphBoundingBox.minPoint.x += keyframeBox.minPoint.x * weight;
84
+ morphBoundingBox.minPoint.y += keyframeBox.minPoint.y * weight;
85
+ morphBoundingBox.minPoint.y += keyframeBox.minPoint.z * weight;
86
+ morphBoundingBox.maxPoint.x += keyframeBox.maxPoint.x * weight;
87
+ morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.y * weight;
88
+ morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.z * weight;
89
+ }
90
+ }
91
+
92
+ export { calculateMorphBoundingBox, processMorphData };
93
+ //# sourceMappingURL=morphtarget.js.map