@zephyr3d/scene 0.9.2 → 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 (420) 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_particle.js +4 -4
  12. package/dist/animation/spring/spring_particle.js.map +1 -1
  13. package/dist/animation/spring/spring_system.js +75 -75
  14. package/dist/animation/spring/spring_system.js.map +1 -1
  15. package/dist/animation/spring2/constraints.js.map +1 -1
  16. package/dist/animation/spring2/controller.js +64 -64
  17. package/dist/animation/spring2/controller.js.map +1 -1
  18. package/dist/animation/spring2/math.js.map +1 -1
  19. package/dist/animation/spring2/spring_system.js +8 -8
  20. package/dist/animation/spring2/spring_system.js.map +1 -1
  21. package/dist/asset/model.js +57 -57
  22. package/dist/asset/model.js.map +1 -1
  23. package/dist/camera/camera.js +184 -184
  24. package/dist/camera/camera.js.map +1 -1
  25. package/dist/index.d.ts +2 -6
  26. package/dist/index.js +1 -1
  27. package/dist/material/material.js +288 -288
  28. package/dist/material/material.js.map +1 -1
  29. package/dist/material/shader/helper.js +281 -278
  30. package/dist/material/shader/helper.js.map +1 -1
  31. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  32. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  33. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  34. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  35. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  36. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  37. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  38. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  39. package/dist/render/cluster_light.js +3 -4
  40. package/dist/render/cluster_light.js.map +1 -1
  41. package/dist/render/rendergraph/history_resource_manager.js +93 -93
  42. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  43. package/dist/render/rendergraph/history_resources.js +3 -3
  44. package/dist/render/rendergraph/history_resources.js.map +1 -1
  45. package/dist/render/rendergraph/types.js +22 -22
  46. package/dist/render/rendergraph/types.js.map +1 -1
  47. package/dist/scene/mesh.js +80 -80
  48. package/dist/scene/mesh.js.map +1 -1
  49. package/dist/scene/scene_node.js +228 -228
  50. package/dist/scene/scene_node.js.map +1 -1
  51. package/dist/shapes/torus.js +90 -59
  52. package/dist/shapes/torus.js.map +1 -1
  53. package/dist/src/animation/animation.js +127 -0
  54. package/dist/src/animation/animation.js.map +1 -0
  55. package/dist/src/animation/animationset.js +255 -0
  56. package/dist/src/animation/animationset.js.map +1 -0
  57. package/dist/src/animation/animationtrack.js +34 -0
  58. package/dist/src/animation/animationtrack.js.map +1 -0
  59. package/dist/src/animation/eulerrotationtrack.js +52 -0
  60. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  61. package/dist/src/animation/morphtarget.js +93 -0
  62. package/dist/src/animation/morphtarget.js.map +1 -0
  63. package/dist/src/animation/morphtrack.js +70 -0
  64. package/dist/src/animation/morphtrack.js.map +1 -0
  65. package/dist/src/animation/proptrack.js +161 -0
  66. package/dist/src/animation/proptrack.js.map +1 -0
  67. package/dist/src/animation/rotationtrack.js +51 -0
  68. package/dist/src/animation/rotationtrack.js.map +1 -0
  69. package/dist/src/animation/scaletrack.js +50 -0
  70. package/dist/src/animation/scaletrack.js.map +1 -0
  71. package/dist/src/animation/skeleton.js +204 -0
  72. package/dist/src/animation/skeleton.js.map +1 -0
  73. package/dist/src/animation/translationtrack.js +50 -0
  74. package/dist/src/animation/translationtrack.js.map +1 -0
  75. package/dist/src/app/app.js +129 -0
  76. package/dist/src/app/app.js.map +1 -0
  77. package/dist/src/app/inputmgr.js +267 -0
  78. package/dist/src/app/inputmgr.js.map +1 -0
  79. package/dist/src/asset/assetmanager.js +404 -0
  80. package/dist/src/asset/assetmanager.js.map +1 -0
  81. package/dist/src/asset/builtin.js +337 -0
  82. package/dist/src/asset/builtin.js.map +1 -0
  83. package/dist/src/asset/loaders/dds/dds.js +470 -0
  84. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  85. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  86. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  87. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  88. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  89. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  90. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  91. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  92. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  93. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  94. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  95. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  96. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  97. package/dist/src/asset/loaders/loader.js +45 -0
  98. package/dist/src/asset/loaders/loader.js.map +1 -0
  99. package/dist/src/asset/model.js +414 -0
  100. package/dist/src/asset/model.js.map +1 -0
  101. package/dist/src/blitter/bilateralblur.js +221 -0
  102. package/dist/src/blitter/bilateralblur.js.map +1 -0
  103. package/dist/src/blitter/blitter.js +390 -0
  104. package/dist/src/blitter/blitter.js.map +1 -0
  105. package/dist/src/blitter/box.js +118 -0
  106. package/dist/src/blitter/box.js.map +1 -0
  107. package/dist/src/blitter/copy.js +22 -0
  108. package/dist/src/blitter/copy.js.map +1 -0
  109. package/dist/src/blitter/gaussianblur.js +228 -0
  110. package/dist/src/blitter/gaussianblur.js.map +1 -0
  111. package/dist/src/camera/base.js +92 -0
  112. package/dist/src/camera/base.js.map +1 -0
  113. package/dist/src/camera/camera.js +1005 -0
  114. package/dist/src/camera/camera.js.map +1 -0
  115. package/dist/src/camera/fps.js +238 -0
  116. package/dist/src/camera/fps.js.map +1 -0
  117. package/dist/src/camera/orbit.js +245 -0
  118. package/dist/src/camera/orbit.js.map +1 -0
  119. package/dist/src/camera/orthocamera.js +167 -0
  120. package/dist/src/camera/orthocamera.js.map +1 -0
  121. package/dist/src/camera/perspectivecamera.js +141 -0
  122. package/dist/src/camera/perspectivecamera.js.map +1 -0
  123. package/dist/src/index.js +120 -0
  124. package/dist/src/index.js.map +1 -0
  125. package/dist/src/material/blinn.js +81 -0
  126. package/dist/src/material/blinn.js.map +1 -0
  127. package/dist/src/material/grassmaterial.js +113 -0
  128. package/dist/src/material/grassmaterial.js.map +1 -0
  129. package/dist/src/material/lambert.js +92 -0
  130. package/dist/src/material/lambert.js.map +1 -0
  131. package/dist/src/material/material.js +301 -0
  132. package/dist/src/material/material.js.map +1 -0
  133. package/dist/src/material/meshmaterial.js +704 -0
  134. package/dist/src/material/meshmaterial.js.map +1 -0
  135. package/dist/src/material/mixins/albedocolor.js +76 -0
  136. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  137. package/dist/src/material/mixins/foliage.js +47 -0
  138. package/dist/src/material/mixins/foliage.js.map +1 -0
  139. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  140. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  141. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  142. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  143. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  144. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  145. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  146. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  147. package/dist/src/material/mixins/lit.js +476 -0
  148. package/dist/src/material/mixins/lit.js.map +1 -0
  149. package/dist/src/material/mixins/pbr/common.js +918 -0
  150. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  151. package/dist/src/material/mixins/texture.js +172 -0
  152. package/dist/src/material/mixins/texture.js.map +1 -0
  153. package/dist/src/material/mixins/vertexcolor.js +56 -0
  154. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  155. package/dist/src/material/particle.js +178 -0
  156. package/dist/src/material/particle.js.map +1 -0
  157. package/dist/src/material/pbrmr.js +97 -0
  158. package/dist/src/material/pbrmr.js.map +1 -0
  159. package/dist/src/material/pbrsg.js +97 -0
  160. package/dist/src/material/pbrsg.js.map +1 -0
  161. package/dist/src/material/shader/helper.js +1209 -0
  162. package/dist/src/material/shader/helper.js.map +1 -0
  163. package/dist/src/material/terrain-cm.js +606 -0
  164. package/dist/src/material/terrain-cm.js.map +1 -0
  165. package/dist/src/material/terrainmaterial.js +375 -0
  166. package/dist/src/material/terrainmaterial.js.map +1 -0
  167. package/dist/src/material/unlit.js +41 -0
  168. package/dist/src/material/unlit.js.map +1 -0
  169. package/dist/src/material/water.js +417 -0
  170. package/dist/src/material/water.js.map +1 -0
  171. package/dist/src/posteffect/bloom.js +361 -0
  172. package/dist/src/posteffect/bloom.js.map +1 -0
  173. package/dist/src/posteffect/compositor.js +226 -0
  174. package/dist/src/posteffect/compositor.js.map +1 -0
  175. package/dist/src/posteffect/fxaa.js +273 -0
  176. package/dist/src/posteffect/fxaa.js.map +1 -0
  177. package/dist/src/posteffect/grayscale.js +69 -0
  178. package/dist/src/posteffect/grayscale.js.map +1 -0
  179. package/dist/src/posteffect/motionblur.js +96 -0
  180. package/dist/src/posteffect/motionblur.js.map +1 -0
  181. package/dist/src/posteffect/posteffect.js +126 -0
  182. package/dist/src/posteffect/posteffect.js.map +1 -0
  183. package/dist/src/posteffect/sao.js +324 -0
  184. package/dist/src/posteffect/sao.js.map +1 -0
  185. package/dist/src/posteffect/ssr.js +489 -0
  186. package/dist/src/posteffect/ssr.js.map +1 -0
  187. package/dist/src/posteffect/taa.js +172 -0
  188. package/dist/src/posteffect/taa.js.map +1 -0
  189. package/dist/src/posteffect/tonemap.js +94 -0
  190. package/dist/src/posteffect/tonemap.js.map +1 -0
  191. package/dist/src/render/abuffer_oit.js +361 -0
  192. package/dist/src/render/abuffer_oit.js.map +1 -0
  193. package/dist/src/render/clipmap.js +851 -0
  194. package/dist/src/render/clipmap.js.map +1 -0
  195. package/dist/src/render/cluster_light.js +333 -0
  196. package/dist/src/render/cluster_light.js.map +1 -0
  197. package/dist/src/render/cull_visitor.js +187 -0
  198. package/dist/src/render/cull_visitor.js.map +1 -0
  199. package/dist/src/render/depthpass.js +68 -0
  200. package/dist/src/render/depthpass.js.map +1 -0
  201. package/dist/src/render/drawable_mixin.js +227 -0
  202. package/dist/src/render/drawable_mixin.js.map +1 -0
  203. package/dist/src/render/envlight.js +463 -0
  204. package/dist/src/render/envlight.js.map +1 -0
  205. package/dist/src/render/fbm_wavegenerator.js +251 -0
  206. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  207. package/dist/src/render/fft_wavegenerator.js +1006 -0
  208. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  209. package/dist/src/render/fullscreenquad.js +38 -0
  210. package/dist/src/render/fullscreenquad.js.map +1 -0
  211. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  212. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  213. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  214. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  215. package/dist/src/render/hzb.js +273 -0
  216. package/dist/src/render/hzb.js.map +1 -0
  217. package/dist/src/render/lightpass.js +172 -0
  218. package/dist/src/render/lightpass.js.map +1 -0
  219. package/dist/src/render/objectcolorpass.js +51 -0
  220. package/dist/src/render/objectcolorpass.js.map +1 -0
  221. package/dist/src/render/primitive.js +364 -0
  222. package/dist/src/render/primitive.js.map +1 -0
  223. package/dist/src/render/render_queue.js +467 -0
  224. package/dist/src/render/render_queue.js.map +1 -0
  225. package/dist/src/render/renderbundle_wrapper.js +152 -0
  226. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  227. package/dist/src/render/renderer.js +455 -0
  228. package/dist/src/render/renderer.js.map +1 -0
  229. package/dist/src/render/renderpass.js +200 -0
  230. package/dist/src/render/renderpass.js.map +1 -0
  231. package/dist/src/render/shadowmap_pass.js +56 -0
  232. package/dist/src/render/shadowmap_pass.js.map +1 -0
  233. package/dist/src/render/sky.js +1103 -0
  234. package/dist/src/render/sky.js.map +1 -0
  235. package/dist/src/render/weightedblended_oit.js +168 -0
  236. package/dist/src/render/weightedblended_oit.js.map +1 -0
  237. package/dist/src/scene/batchgroup.js +162 -0
  238. package/dist/src/scene/batchgroup.js.map +1 -0
  239. package/dist/src/scene/environment.js +209 -0
  240. package/dist/src/scene/environment.js.map +1 -0
  241. package/dist/src/scene/graph_node.js +72 -0
  242. package/dist/src/scene/graph_node.js.map +1 -0
  243. package/dist/src/scene/light.js +416 -0
  244. package/dist/src/scene/light.js.map +1 -0
  245. package/dist/src/scene/mesh.js +341 -0
  246. package/dist/src/scene/mesh.js.map +1 -0
  247. package/dist/src/scene/octree.js +649 -0
  248. package/dist/src/scene/octree.js.map +1 -0
  249. package/dist/src/scene/particlesys.js +738 -0
  250. package/dist/src/scene/particlesys.js.map +1 -0
  251. package/dist/src/scene/raycast_visitor.js +103 -0
  252. package/dist/src/scene/raycast_visitor.js.map +1 -0
  253. package/dist/src/scene/scene.js +284 -0
  254. package/dist/src/scene/scene.js.map +1 -0
  255. package/dist/src/scene/scene_node.js +732 -0
  256. package/dist/src/scene/scene_node.js.map +1 -0
  257. package/dist/src/scene/terrain/grass.js +278 -0
  258. package/dist/src/scene/terrain/grass.js.map +1 -0
  259. package/dist/src/scene/terrain/heightfield.js +475 -0
  260. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  261. package/dist/src/scene/terrain/patch.js +530 -0
  262. package/dist/src/scene/terrain/patch.js.map +1 -0
  263. package/dist/src/scene/terrain/quadtree.js +461 -0
  264. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  265. package/dist/src/scene/terrain/terrain.js +246 -0
  266. package/dist/src/scene/terrain/terrain.js.map +1 -0
  267. package/dist/src/scene/terrain-cm/grass.js +594 -0
  268. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  269. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  270. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  271. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  272. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  273. package/dist/src/scene/water.js +374 -0
  274. package/dist/src/scene/water.js.map +1 -0
  275. package/dist/src/shaders/atmosphere.js +957 -0
  276. package/dist/src/shaders/atmosphere.js.map +1 -0
  277. package/dist/src/shaders/fog.js +112 -0
  278. package/dist/src/shaders/fog.js.map +1 -0
  279. package/dist/src/shaders/misc.js +266 -0
  280. package/dist/src/shaders/misc.js.map +1 -0
  281. package/dist/src/shaders/noise.js +222 -0
  282. package/dist/src/shaders/noise.js.map +1 -0
  283. package/dist/src/shaders/pbr.js +51 -0
  284. package/dist/src/shaders/pbr.js.map +1 -0
  285. package/dist/src/shaders/shadow.js +636 -0
  286. package/dist/src/shaders/shadow.js.map +1 -0
  287. package/dist/src/shaders/ssr.js +490 -0
  288. package/dist/src/shaders/ssr.js.map +1 -0
  289. package/dist/src/shaders/temporal.js +215 -0
  290. package/dist/src/shaders/temporal.js.map +1 -0
  291. package/dist/src/shaders/water.js +756 -0
  292. package/dist/src/shaders/water.js.map +1 -0
  293. package/dist/src/shadow/esm.js +237 -0
  294. package/dist/src/shadow/esm.js.map +1 -0
  295. package/dist/src/shadow/pcf_opt.js +181 -0
  296. package/dist/src/shadow/pcf_opt.js.map +1 -0
  297. package/dist/src/shadow/pcf_pd.js +189 -0
  298. package/dist/src/shadow/pcf_pd.js.map +1 -0
  299. package/dist/src/shadow/shader.js +37 -0
  300. package/dist/src/shadow/shader.js.map +1 -0
  301. package/dist/src/shadow/shadow_impl.js +15 -0
  302. package/dist/src/shadow/shadow_impl.js.map +1 -0
  303. package/dist/src/shadow/shadowmapper.js +790 -0
  304. package/dist/src/shadow/shadowmapper.js.map +1 -0
  305. package/dist/src/shadow/ssm.js +159 -0
  306. package/dist/src/shadow/ssm.js.map +1 -0
  307. package/dist/src/shadow/vsm.js +297 -0
  308. package/dist/src/shadow/vsm.js.map +1 -0
  309. package/dist/src/shapes/box.js +386 -0
  310. package/dist/src/shapes/box.js.map +1 -0
  311. package/dist/src/shapes/cylinder.js +125 -0
  312. package/dist/src/shapes/cylinder.js.map +1 -0
  313. package/dist/src/shapes/plane.js +88 -0
  314. package/dist/src/shapes/plane.js.map +1 -0
  315. package/dist/src/shapes/shape.js +87 -0
  316. package/dist/src/shapes/shape.js.map +1 -0
  317. package/dist/src/shapes/sphere.js +114 -0
  318. package/dist/src/shapes/sphere.js.map +1 -0
  319. package/dist/src/shapes/tetrahedron.js +188 -0
  320. package/dist/src/shapes/tetrahedron.js.map +1 -0
  321. package/dist/src/shapes/torus.js +111 -0
  322. package/dist/src/shapes/torus.js.map +1 -0
  323. package/dist/src/utility/aabbtree.js +400 -0
  324. package/dist/src/utility/aabbtree.js.map +1 -0
  325. package/dist/src/utility/bounding_volume.js +29 -0
  326. package/dist/src/utility/bounding_volume.js.map +1 -0
  327. package/dist/src/utility/debug.js +28 -0
  328. package/dist/src/utility/debug.js.map +1 -0
  329. package/dist/src/utility/draco/decoder.js +116 -0
  330. package/dist/src/utility/draco/decoder.js.map +1 -0
  331. package/dist/src/utility/misc.js +105 -0
  332. package/dist/src/utility/misc.js.map +1 -0
  333. package/dist/src/utility/panorama.js +163 -0
  334. package/dist/src/utility/panorama.js.map +1 -0
  335. package/dist/src/utility/pmrem.js +354 -0
  336. package/dist/src/utility/pmrem.js.map +1 -0
  337. package/dist/src/utility/rendermipmap.js +115 -0
  338. package/dist/src/utility/rendermipmap.js.map +1 -0
  339. package/dist/src/utility/serialization/json.js +402 -0
  340. package/dist/src/utility/serialization/json.js.map +1 -0
  341. package/dist/src/utility/serialization/manager.js +623 -0
  342. package/dist/src/utility/serialization/manager.js.map +1 -0
  343. package/dist/src/utility/serialization/scene/animation.js +248 -0
  344. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  345. package/dist/src/utility/serialization/scene/batch.js +59 -0
  346. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  347. package/dist/src/utility/serialization/scene/camera.js +790 -0
  348. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  349. package/dist/src/utility/serialization/scene/common.js +222 -0
  350. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  351. package/dist/src/utility/serialization/scene/light.js +575 -0
  352. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  353. package/dist/src/utility/serialization/scene/material.js +1111 -0
  354. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  355. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  356. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  357. package/dist/src/utility/serialization/scene/misc.js +39 -0
  358. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  359. package/dist/src/utility/serialization/scene/node.js +451 -0
  360. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  361. package/dist/src/utility/serialization/scene/particle.js +425 -0
  362. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  363. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  364. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  365. package/dist/src/utility/serialization/scene/scene.js +704 -0
  366. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  367. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  368. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  369. package/dist/src/utility/serialization/scene/water.js +465 -0
  370. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  371. package/dist/src/utility/shprojector.js +297 -0
  372. package/dist/src/utility/shprojector.js.map +1 -0
  373. package/dist/src/utility/textures/ggxlut.js +213 -0
  374. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  375. package/dist/src/utility/textures/gradientnoise.js +62 -0
  376. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  377. package/dist/src/utility/textures/randomnoise.js +41 -0
  378. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  379. package/dist/src/values.js +162 -0
  380. package/dist/src/values.js.map +1 -0
  381. package/dist/utility/blueprint/material/common.js +7 -0
  382. package/dist/utility/blueprint/material/common.js.map +1 -0
  383. package/dist/utility/blueprint/material/ir.js +489 -489
  384. package/dist/utility/blueprint/material/ir.js.map +1 -1
  385. package/dist/utility/serialization/blueprint/constants.js +255 -0
  386. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  387. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  388. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  389. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  390. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  391. package/dist/utility/serialization/manager.js +271 -271
  392. package/dist/utility/serialization/manager.js.map +1 -1
  393. package/dist/utility/serialization/scene/animation.js.map +1 -1
  394. package/dist/utility/serialization/scene/camera.js.map +1 -1
  395. package/dist/utility/serialization/scene/common.js.map +1 -1
  396. package/dist/utility/serialization/scene/light.js.map +1 -1
  397. package/dist/utility/serialization/scene/material.js.map +1 -1
  398. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  399. package/dist/utility/serialization/scene/node.js.map +1 -1
  400. package/dist/utility/serialization/scene/particle.js.map +1 -1
  401. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  402. package/dist/utility/serialization/scene/scene.js.map +1 -1
  403. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  404. package/dist/utility/serialization/types.js +4 -4
  405. package/dist/utility/serialization/types.js.map +1 -1
  406. package/dist/values.js +49 -53
  407. package/dist/values.js.map +1 -1
  408. package/package.json +1 -1
  409. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  410. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  411. package/dist/animation/spring/spring_bone.js +0 -240
  412. package/dist/animation/spring/spring_bone.js.map +0 -1
  413. package/dist/animation/spring/spring_bone_collider.js +0 -198
  414. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  415. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  416. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  417. package/dist/animation/spring/spring_bone_system.js +0 -328
  418. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  419. package/dist/render/sky_motion_vector.js +0 -85
  420. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"torus.js","sources":["../../src/shapes/torus.ts"],"sourcesContent":["import type { AABB, Clonable, Ray } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for torus shape\r\n * @public\r\n */\r\nexport interface TorusCreationOptions extends ShapeCreationOptions {\r\n /** Slice count, default is 40 **/\r\n numSlices?: number;\r\n /** Segment count, default is 16 */\r\n numSegments?: number;\r\n /** Outer radius, default is 10 */\r\n outerRadius?: number;\r\n /** Inner radius, default is 3 */\r\n innerRadius?: number;\r\n /** Radial detail, default is 20*/\r\n radialDetail?: number;\r\n}\r\n\r\n/*\r\nN slices\r\nM sides\r\nOR outter radius\r\nIR inner radius\r\nUp (0, 1, 0)\r\n\r\nC(n) = (cos((n/N) * TwoPI) * OR, 0, sin((n/N) * twoPI * OR);\r\nTheta = m/M * TwoPI\r\nV(n, m) = C(n) * (1 + IR * cos(Theta) / OR) + Up * IR * sin(Theta)\r\nN(n, m) = normalize(V(n, m) - C(n))\r\nTC(n, m) = (m / M, n / N)\r\n\r\nVIndex(n, m) = n * (M + 1) + m\r\nTriangle(n, m) = (VIndex(n, m), VIndex(n+1, m), VIndex(n+1, m+1), VIndex(n, m), VIndex(n+1, m+1), VIndex(n, m+1))*/\r\n\r\n/**\r\n *\r\n * Torus shape\r\n *\r\n * @public\r\n */\r\nexport class TorusShape extends Shape<TorusCreationOptions> implements Clonable<TorusShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n numSlices: 40,\r\n numSegments: 16,\r\n outerRadius: 1,\r\n innerRadius: 0.3,\r\n radialDetail: 20\r\n };\r\n /**\r\n * Creates an instance of torus shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: TorusCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new TorusShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Torus' as const;\r\n }\r\n /**\r\n * Analytically intersects a ray with a torus lying in the XZ plane.\r\n * The torus has major radius R (outerRadius) and minor radius r (innerRadius).\r\n *\r\n * Equation of torus: (x²+y²+z²+R²-r²)² = 4R²(x²+z²)\r\n * Substituting ray P(t) = O + t*D leads to a quartic in t which is solved\r\n * with Ferrari's method.\r\n */\r\n raycast(ray: Ray) {\r\n const R = this._options.outerRadius ?? 1; // major radius\r\n const r = this._options.innerRadius ?? 0.3; // minor radius\r\n\r\n const ox = ray.origin.x,\r\n oy = ray.origin.y,\r\n oz = ray.origin.z;\r\n const dx = ray.direction.x,\r\n dy = ray.direction.y,\r\n dz = ray.direction.z;\r\n\r\n // Let f = |O|^2 + R^2 - r^2\r\n // g = dot(O, D)\r\n // h = |D|^2 (normally 1 for a normalized direction, kept general here)\r\n // Quartic: (h*t^2 + 2g*t + f)^2 = 4R^2*((dx*t+ox)^2 + (dz*t+oz)^2)\r\n // Expand into c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n\r\n const OO = ox * ox + oy * oy + oz * oz;\r\n const OD = ox * dx + oy * dy + oz * dz;\r\n const DD = dx * dx + dy * dy + dz * dz;\r\n\r\n const f = OO + R * R - r * r;\r\n const g = OD;\r\n const h = DD;\r\n\r\n // XZ components only (for the 4R²(x²+z²) term)\r\n const oxz2 = ox * ox + oz * oz; // ox² + oz²\r\n const odxz = ox * dx + oz * dz; // ox*dx + oz*dz\r\n const dxz2 = dx * dx + dz * dz; // dx² + dz²\r\n\r\n // Quartic coefficients (from expanding both sides)\r\n const R2 = 4 * R * R;\r\n const c4 = h * h;\r\n const c3 = 4 * h * g;\r\n const c2 = 2 * h * f + 4 * g * g - R2 * dxz2;\r\n const c1 = 4 * g * f - 2 * R2 * odxz;\r\n const c0 = f * f - R2 * oxz2;\r\n\r\n // Solve quartic c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n const roots = TorusShape._solveQuartic(c4, c3, c2, c1, c0);\r\n let tMin = Infinity;\r\n for (const t of roots) {\r\n if (t >= 0 && t < tMin) {\r\n tMin = t;\r\n }\r\n }\r\n return isFinite(tMin) ? tMin : null;\r\n }\r\n\r\n /** @internal Solve quartic a*t^4+b*t^3+c*t^2+d*t+e=0, returns real roots */\r\n private static _solveQuartic(a: number, b: number, c: number, d: number, e: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n return TorusShape._solveCubic(b, c, d, e);\r\n }\r\n // Depress quartic: divide by a and substitute t = u - b/(4a)\r\n const inv_a = 1 / a;\r\n const B = b * inv_a;\r\n const C = c * inv_a;\r\n const D = d * inv_a;\r\n const E = e * inv_a;\r\n const p = C - (3 / 8) * B * B;\r\n const q = (B * B * B) / 8 - (B * C) / 2 + D;\r\n const r2 = -(3 / 256) * B * B * B * B + (B * B * C) / 16 - (B * D) / 4 + E;\r\n\r\n let roots: number[];\r\n if (Math.abs(q) < eps) {\r\n // Biquadratic: u^4 + p*u^2 + r2 = 0\r\n const disc = p * p - 4 * r2;\r\n if (disc < 0) {\r\n return [];\r\n }\r\n const sqrtDisc = Math.sqrt(disc);\r\n roots = [];\r\n for (const sign of [-1, 1]) {\r\n const w2 = (-p + sign * sqrtDisc) / 2;\r\n if (w2 >= 0) {\r\n const w = Math.sqrt(w2);\r\n roots.push(w, -w);\r\n }\r\n }\r\n } else {\r\n // Ferrari: find a real root of the resolvent cubic\r\n // 8m^3 + 8p*m^2 + (2p^2-8r2)*m - q^2 = 0\r\n const cubicRoots = TorusShape._solveCubic(8, 8 * p, 2 * p * p - 8 * r2, -q * q);\r\n // Pick the largest real root\r\n let m = -Infinity;\r\n for (const cr of cubicRoots) {\r\n if (cr > m) {\r\n m = cr;\r\n }\r\n }\r\n if (!isFinite(m)) {\r\n return [];\r\n }\r\n\r\n const sqrtM = m >= 0 ? Math.sqrt(m) : 0;\r\n const disc1 = -(p + 2 * m) + q / (sqrtM + eps);\r\n const disc2 = -(p + 2 * m) - q / (sqrtM + eps);\r\n roots = [];\r\n if (disc1 >= 0) {\r\n const s = Math.sqrt(disc1);\r\n roots.push(sqrtM + s, sqrtM - s);\r\n }\r\n if (disc2 >= 0) {\r\n const s = Math.sqrt(disc2);\r\n roots.push(-sqrtM + s, -sqrtM - s);\r\n }\r\n }\r\n // Un-depress: t = u - B/4\r\n const shift = B / 4;\r\n return roots.map((u) => u - shift);\r\n }\r\n\r\n /** @internal Solve cubic a*t^3+b*t^2+c*t+d=0, returns real roots (Cardano) */\r\n private static _solveCubic(a: number, b: number, c: number, d: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n return TorusShape._solveQuadratic(b, c, d);\r\n }\r\n const inv_a = 1 / a;\r\n const B = b * inv_a;\r\n const C = c * inv_a;\r\n const D = d * inv_a;\r\n const p = C - (B * B) / 3;\r\n const q = (2 * B * B * B) / 27 - (B * C) / 3 + D;\r\n const disc = (q * q) / 4 + (p * p * p) / 27;\r\n const shift = -B / 3;\r\n if (disc > eps) {\r\n const sqrtDisc = Math.sqrt(disc);\r\n const u = Math.cbrt(-q / 2 + sqrtDisc);\r\n const v = Math.cbrt(-q / 2 - sqrtDisc);\r\n return [u + v + shift];\r\n } else if (disc < -eps) {\r\n const r = Math.sqrt((-p * p * p) / 27);\r\n const theta = Math.acos(Math.max(-1, Math.min(1, -q / (2 * r))));\r\n const rCbrt = Math.cbrt(r);\r\n return [\r\n 2 * rCbrt * Math.cos(theta / 3) + shift,\r\n 2 * rCbrt * Math.cos((theta + 2 * Math.PI) / 3) + shift,\r\n 2 * rCbrt * Math.cos((theta + 4 * Math.PI) / 3) + shift\r\n ];\r\n } else {\r\n const u = Math.cbrt(-q / 2);\r\n return [2 * u + shift, -u + shift];\r\n }\r\n }\r\n\r\n /** @internal Solve quadratic a*t^2+b*t+c=0 */\r\n private static _solveQuadratic(a: number, b: number, c: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n if (Math.abs(b) < eps) {\r\n return [];\r\n }\r\n return [-c / b];\r\n }\r\n const disc = b * b - 4 * a * c;\r\n if (disc < 0) {\r\n return [];\r\n }\r\n if (disc < eps) {\r\n return [-b / (2 * a)];\r\n }\r\n const s = Math.sqrt(disc);\r\n return [(-b - s) / (2 * a), (-b + s) / (2 * a)];\r\n }\r\n /**\r\n * Generates the data for the torus shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: TorusCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const N = options.numSlices;\r\n const M = options.numSegments;\r\n const OR = options.outerRadius;\r\n const IR = options.innerRadius;\r\n for (let n = 0; n <= N; n++) {\r\n const alpha = ((n % N) / N) * Math.PI * 2;\r\n const cosA = Math.cos(alpha);\r\n const sinA = Math.sin(alpha);\r\n const cx = OR * cosA;\r\n const cy = 0;\r\n const cz = OR * sinA;\r\n for (let m = 0; m <= M; m++) {\r\n const theta = ((m % M) / M) * Math.PI * 2;\r\n const cosT = Math.cos(theta);\r\n const sinT = Math.sin(theta);\r\n const t = 1 + (IR * cosT) / OR;\r\n const s = IR * sinT;\r\n const x = cx * t;\r\n const y = cy * t + s;\r\n const z = cz * t;\r\n vertices.push(x, y, z);\r\n if (normals) {\r\n const nx = x - cx;\r\n const ny = y - cy;\r\n const nz = z - cz;\r\n const mag = Math.hypot(nx, ny, nz);\r\n normals.push(nx / mag, ny / mag, nz / mag);\r\n }\r\n if (uvs) {\r\n uvs.push(m / M, n / N);\r\n }\r\n if (tangents) {\r\n const tx = -sinT * cosA;\r\n const ty = cosT;\r\n const tz = -sinT * sinA;\r\n tangents.push(tx, ty, tz, 1.0);\r\n }\r\n }\r\n }\r\n for (let n = 0; n < N; n++) {\r\n for (let m = 0; m < M; m++) {\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n }\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n}\r\n"],"names":["TorusShape","Shape","_defaultOptions","numSlices","numSegments","outerRadius","innerRadius","radialDetail","options","clone","_options","type","raycast","ray","R","r","ox","origin","x","oy","y","oz","z","dx","direction","dy","dz","OO","OD","DD","f","g","h","oxz2","odxz","dxz2","R2","c4","c3","c2","c1","c0","roots","_solveQuartic","tMin","Infinity","t","isFinite","a","b","c","d","e","eps","Math","abs","_solveCubic","inv_a","B","C","D","E","p","q","r2","disc","sqrtDisc","sqrt","sign","w2","w","push","cubicRoots","m","cr","sqrtM","disc1","disc2","s","shift","map","u","_solveQuadratic","cbrt","v","theta","acos","max","min","rCbrt","cos","PI","generateData","opt","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","length","N","M","OR","IR","n","alpha","cosA","sinA","sin","cx","cy","cz","cosT","sinT","nx","ny","nz","mag","hypot","tx","ty","tz","_transform","transform","i","minPoint","maxPoint"],"mappings":"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"}
1
+ {"version":3,"file":"torus.js","sources":["../../src/shapes/torus.ts"],"sourcesContent":["import type { AABB, Clonable, Ray } from '@zephyr3d/base';\r\nimport type { ShapeCreationOptions } from './shape';\r\nimport { Shape } from './shape';\r\n\r\n/**\r\n * Creation options for torus shape\r\n * @public\r\n */\r\nexport interface TorusCreationOptions extends ShapeCreationOptions {\r\n /** Slice count, default is 40 **/\r\n numSlices?: number;\r\n /** Segment count, default is 16 */\r\n numSegments?: number;\r\n /** Outer radius, default is 10 */\r\n outerRadius?: number;\r\n /** Inner radius, default is 3 */\r\n innerRadius?: number;\r\n /** Radial detail, default is 20*/\r\n radialDetail?: number;\r\n}\r\n\r\n/*\r\nN slices\r\nM sides\r\nOR outter radius\r\nIR inner radius\r\nUp (0, 1, 0)\r\n\r\nC(n) = (cos((n/N) * TwoPI) * OR, 0, sin((n/N) * twoPI * OR);\r\nTheta = m/M * TwoPI\r\nV(n, m) = C(n) * (1 + IR * cos(Theta) / OR) + Up * IR * sin(Theta)\r\nN(n, m) = normalize(V(n, m) - C(n))\r\nTC(n, m) = (m / M, n / N)\r\n\r\nVIndex(n, m) = n * (M + 1) + m\r\nTriangle(n, m) = (VIndex(n, m), VIndex(n+1, m), VIndex(n+1, m+1), VIndex(n, m), VIndex(n+1, m+1), VIndex(n, m+1))*/\r\n\r\n/**\r\n *\r\n * Torus shape\r\n *\r\n * @public\r\n */\r\nexport class TorusShape extends Shape<TorusCreationOptions> implements Clonable<TorusShape> {\r\n static _defaultOptions = {\r\n ...Shape._defaultOptions,\r\n numSlices: 40,\r\n numSegments: 16,\r\n outerRadius: 1,\r\n innerRadius: 0.3,\r\n radialDetail: 20\r\n };\r\n /**\r\n * Creates an instance of torus shape\r\n * @param options - The creation options\r\n */\r\n constructor(options?: TorusCreationOptions) {\r\n super(options);\r\n }\r\n clone() {\r\n return new TorusShape(this._options) as this;\r\n }\r\n /** type of the shape */\r\n get type() {\r\n return 'Torus' as const;\r\n }\r\n /**\r\n * Analytically intersects a ray with a torus lying in the XZ plane.\r\n * The torus has major radius R (outerRadius) and minor radius r (innerRadius).\r\n *\r\n * Equation of torus: (x²+y²+z²+R²-r²)² = 4R²(x²+z²)\r\n * Substituting ray P(t) = O + t*D leads to a quartic in t which is solved\r\n * with Ferrari's method.\r\n */\r\n raycast(ray: Ray) {\r\n const R = this._options.outerRadius ?? 1; // major radius\r\n const r = this._options.innerRadius ?? 0.3; // minor radius\r\n\r\n const ox = ray.origin.x,\r\n oy = ray.origin.y,\r\n oz = ray.origin.z;\r\n const dx = ray.direction.x,\r\n dy = ray.direction.y,\r\n dz = ray.direction.z;\r\n\r\n // Let f = |O|^2 + R^2 - r^2\r\n // g = dot(O, D)\r\n // h = |D|^2 (normally 1 for a normalized direction, kept general here)\r\n // Quartic: (h*t^2 + 2g*t + f)^2 = 4R^2*((dx*t+ox)^2 + (dz*t+oz)^2)\r\n // Expand into c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n\r\n const OO = ox * ox + oy * oy + oz * oz;\r\n const OD = ox * dx + oy * dy + oz * dz;\r\n const DD = dx * dx + dy * dy + dz * dz;\r\n\r\n const f = OO + R * R - r * r;\r\n const g = OD;\r\n const h = DD;\r\n\r\n // XZ components only (for the 4R²(x²+z²) term)\r\n const oxz2 = ox * ox + oz * oz; // ox² + oz²\r\n const odxz = ox * dx + oz * dz; // ox*dx + oz*dz\r\n const dxz2 = dx * dx + dz * dz; // dx² + dz²\r\n\r\n // Quartic coefficients (from expanding both sides)\r\n const R2 = 4 * R * R;\r\n const c4 = h * h;\r\n const c3 = 4 * h * g;\r\n const c2 = 2 * h * f + 4 * g * g - R2 * dxz2;\r\n const c1 = 4 * g * f - 2 * R2 * odxz;\r\n const c0 = f * f - R2 * oxz2;\r\n\r\n // Solve quartic c4*t^4 + c3*t^3 + c2*t^2 + c1*t + c0 = 0\r\n const roots = TorusShape._solveQuartic(c4, c3, c2, c1, c0);\r\n let tMin = Infinity;\r\n for (const t of roots) {\r\n if (t >= 0 && t < tMin) {\r\n tMin = t;\r\n }\r\n }\r\n return isFinite(tMin) ? tMin : null;\r\n }\r\n\r\n /** @internal Solve quartic a*t^4+b*t^3+c*t^2+d*t+e=0, returns real roots */\r\n private static _solveQuartic(a: number, b: number, c: number, d: number, e: number): number[] {\r\n return TorusShape._solvePolynomialReal([a, b, c, d, e]);\r\n }\r\n\r\n /** @internal Solve a low-degree polynomial and return all real roots */\r\n private static _solvePolynomialReal(coeffs: number[]): number[] {\r\n const eps = 1e-8;\r\n while (coeffs.length > 0 && Math.abs(coeffs[0]) < eps) {\r\n coeffs = coeffs.slice(1);\r\n }\r\n const degree = coeffs.length - 1;\r\n if (degree <= 0) {\r\n return [];\r\n }\r\n if (degree === 1) {\r\n return [-coeffs[1] / coeffs[0]];\r\n }\r\n if (degree === 2) {\r\n return TorusShape._solveQuadratic(coeffs[0], coeffs[1], coeffs[2]);\r\n }\r\n if (degree === 3) {\r\n return TorusShape._solveCubic(coeffs[0], coeffs[1], coeffs[2], coeffs[3]);\r\n }\r\n\r\n const leading = coeffs[0];\r\n let bound = 1;\r\n for (let i = 1; i < coeffs.length; i++) {\r\n bound = Math.max(bound, 1 + Math.abs(coeffs[i] / leading));\r\n }\r\n\r\n const derivative = coeffs.slice(0, -1).map((coef, index) => coef * (degree - index));\r\n const criticalPoints = TorusShape._solvePolynomialReal(derivative)\r\n .filter((value) => value > -bound - eps && value < bound + eps)\r\n .sort((a, b) => a - b);\r\n const roots: number[] = [];\r\n for (const value of criticalPoints) {\r\n if (Math.abs(TorusShape._evaluatePolynomial(coeffs, value)) < 1e-7) {\r\n TorusShape._pushUniqueRoot(roots, value);\r\n }\r\n }\r\n\r\n const points = [-bound, ...criticalPoints, bound];\r\n for (let i = 0; i < points.length - 1; i++) {\r\n const left = points[i];\r\n const right = points[i + 1];\r\n if (right - left < eps) {\r\n continue;\r\n }\r\n const fLeft = TorusShape._evaluatePolynomial(coeffs, left);\r\n const fRight = TorusShape._evaluatePolynomial(coeffs, right);\r\n if (Math.abs(fLeft) < 1e-7) {\r\n TorusShape._pushUniqueRoot(roots, left);\r\n }\r\n if (Math.abs(fRight) < 1e-7) {\r\n TorusShape._pushUniqueRoot(roots, right);\r\n }\r\n if (fLeft * fRight < 0) {\r\n TorusShape._pushUniqueRoot(roots, TorusShape._bisectPolynomialRoot(coeffs, left, right));\r\n }\r\n }\r\n return roots.sort((a, b) => a - b);\r\n }\r\n\r\n /** @internal Evaluate a polynomial with coefficients in descending order */\r\n private static _evaluatePolynomial(coeffs: number[], t: number) {\r\n let result = 0;\r\n for (let i = 0; i < coeffs.length; i++) {\r\n result = result * t + coeffs[i];\r\n }\r\n return result;\r\n }\r\n\r\n /** @internal Bisect a real root in an interval with opposite signs */\r\n private static _bisectPolynomialRoot(coeffs: number[], left: number, right: number) {\r\n let fLeft = TorusShape._evaluatePolynomial(coeffs, left);\r\n for (let i = 0; i < 64; i++) {\r\n const mid = (left + right) * 0.5;\r\n const fMid = TorusShape._evaluatePolynomial(coeffs, mid);\r\n if (Math.abs(fMid) < 1e-12) {\r\n return mid;\r\n }\r\n if (fLeft * fMid <= 0) {\r\n right = mid;\r\n } else {\r\n left = mid;\r\n fLeft = fMid;\r\n }\r\n }\r\n return (left + right) * 0.5;\r\n }\r\n\r\n /** @internal Add a root if it is not already represented in the list */\r\n private static _pushUniqueRoot(roots: number[], value: number) {\r\n if (!roots.some((root) => Math.abs(root - value) < 1e-7)) {\r\n roots.push(value);\r\n }\r\n }\r\n\r\n /** @internal Solve cubic a*t^3+b*t^2+c*t+d=0, returns real roots (Cardano) */\r\n private static _solveCubic(a: number, b: number, c: number, d: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n return TorusShape._solveQuadratic(b, c, d);\r\n }\r\n const inv_a = 1 / a;\r\n const B = b * inv_a;\r\n const C = c * inv_a;\r\n const D = d * inv_a;\r\n const p = C - (B * B) / 3;\r\n const q = (2 * B * B * B) / 27 - (B * C) / 3 + D;\r\n const disc = (q * q) / 4 + (p * p * p) / 27;\r\n const shift = -B / 3;\r\n if (disc > eps) {\r\n const sqrtDisc = Math.sqrt(disc);\r\n const u = Math.cbrt(-q / 2 + sqrtDisc);\r\n const v = Math.cbrt(-q / 2 - sqrtDisc);\r\n return [u + v + shift];\r\n } else if (disc < -eps) {\r\n const theta = Math.acos(Math.max(-1, Math.min(1, -q / 2 / Math.sqrt((-p * p * p) / 27))));\r\n const rho = 2 * Math.sqrt(-p / 3);\r\n return [\r\n rho * Math.cos(theta / 3) + shift,\r\n rho * Math.cos((theta + 2 * Math.PI) / 3) + shift,\r\n rho * Math.cos((theta + 4 * Math.PI) / 3) + shift\r\n ];\r\n } else {\r\n const u = Math.cbrt(-q / 2);\r\n return [2 * u + shift, -u + shift];\r\n }\r\n }\r\n\r\n /** @internal Solve quadratic a*t^2+b*t+c=0 */\r\n private static _solveQuadratic(a: number, b: number, c: number): number[] {\r\n const eps = 1e-8;\r\n if (Math.abs(a) < eps) {\r\n if (Math.abs(b) < eps) {\r\n return [];\r\n }\r\n return [-c / b];\r\n }\r\n const disc = b * b - 4 * a * c;\r\n if (disc < 0) {\r\n return [];\r\n }\r\n if (disc < eps) {\r\n return [-b / (2 * a)];\r\n }\r\n const s = Math.sqrt(disc);\r\n return [(-b - s) / (2 * a), (-b + s) / (2 * a)];\r\n }\r\n /**\r\n * Generates the data for the torus shape\r\n * @param vertices - vertex positions\r\n * @param normals - vertex normals\r\n * @param uvs - vertex uvs\r\n * @param indices - vertex indices\r\n */\r\n static generateData(\r\n opt: TorusCreationOptions,\r\n vertices: number[],\r\n normals: number[],\r\n tangents: number[],\r\n uvs: number[],\r\n indices: number[],\r\n bbox?: AABB,\r\n indexOffset?: number,\r\n vertexCallback?: (index: number, x: number, y: number, z: number) => void\r\n ) {\r\n const options = Object.assign({}, this._defaultOptions, opt ?? {});\r\n indexOffset = indexOffset ?? 0;\r\n const start = vertices.length;\r\n const N = options.numSlices;\r\n const M = options.numSegments;\r\n const OR = options.outerRadius;\r\n const IR = options.innerRadius;\r\n for (let n = 0; n <= N; n++) {\r\n const alpha = ((n % N) / N) * Math.PI * 2;\r\n const cosA = Math.cos(alpha);\r\n const sinA = Math.sin(alpha);\r\n const cx = OR * cosA;\r\n const cy = 0;\r\n const cz = OR * sinA;\r\n for (let m = 0; m <= M; m++) {\r\n const theta = ((m % M) / M) * Math.PI * 2;\r\n const cosT = Math.cos(theta);\r\n const sinT = Math.sin(theta);\r\n const t = 1 + (IR * cosT) / OR;\r\n const s = IR * sinT;\r\n const x = cx * t;\r\n const y = cy * t + s;\r\n const z = cz * t;\r\n vertices.push(x, y, z);\r\n if (normals) {\r\n const nx = x - cx;\r\n const ny = y - cy;\r\n const nz = z - cz;\r\n const mag = Math.hypot(nx, ny, nz);\r\n normals.push(nx / mag, ny / mag, nz / mag);\r\n }\r\n if (uvs) {\r\n uvs.push(m / M, n / N);\r\n }\r\n if (tangents) {\r\n const tx = -sinT * cosA;\r\n const ty = cosT;\r\n const tz = -sinT * sinA;\r\n tangents.push(tx, ty, tz, 1.0);\r\n }\r\n }\r\n }\r\n for (let n = 0; n < N; n++) {\r\n for (let m = 0; m < M; m++) {\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + indexOffset);\r\n indices.push(n * (M + 1) + m + 1 + indexOffset);\r\n indices.push((n + 1) * (M + 1) + m + 1 + indexOffset);\r\n }\r\n }\r\n Shape._transform(options.transform, vertices, normals, start);\r\n if (bbox || vertexCallback) {\r\n for (let i = start; i < vertices.length - 2; i += 3) {\r\n if (bbox) {\r\n bbox.minPoint.x = Math.min(bbox.minPoint.x, vertices[i]);\r\n bbox.minPoint.y = Math.min(bbox.minPoint.y, vertices[i + 1]);\r\n bbox.minPoint.z = Math.min(bbox.minPoint.z, vertices[i + 2]);\r\n bbox.maxPoint.x = Math.max(bbox.maxPoint.x, vertices[i]);\r\n bbox.maxPoint.y = Math.max(bbox.maxPoint.y, vertices[i + 1]);\r\n bbox.maxPoint.z = Math.max(bbox.maxPoint.z, vertices[i + 2]);\r\n }\r\n vertexCallback?.((i - start) / 3, vertices[i], vertices[i + 1], vertices[i + 2]);\r\n }\r\n }\r\n return 'triangle-list' as const;\r\n }\r\n}\r\n"],"names":["TorusShape","Shape","_defaultOptions","numSlices","numSegments","outerRadius","innerRadius","radialDetail","options","clone","_options","type","raycast","ray","R","r","ox","origin","x","oy","y","oz","z","dx","direction","dy","dz","OO","OD","DD","f","g","h","oxz2","odxz","dxz2","R2","c4","c3","c2","c1","c0","roots","_solveQuartic","tMin","Infinity","t","isFinite","a","b","c","d","e","_solvePolynomialReal","coeffs","eps","length","Math","abs","slice","degree","_solveQuadratic","_solveCubic","leading","bound","i","max","derivative","map","coef","index","criticalPoints","filter","value","sort","_evaluatePolynomial","_pushUniqueRoot","points","left","right","fLeft","fRight","_bisectPolynomialRoot","result","mid","fMid","some","root","push","inv_a","B","C","D","p","q","disc","shift","sqrtDisc","sqrt","u","cbrt","v","theta","acos","min","rho","cos","PI","s","generateData","opt","vertices","normals","tangents","uvs","indices","bbox","indexOffset","vertexCallback","Object","assign","start","N","M","OR","IR","n","alpha","cosA","sinA","sin","cx","cy","cz","m","cosT","sinT","nx","ny","nz","mag","hypot","tx","ty","tz","_transform","transform","minPoint","maxPoint"],"mappings":"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"}
@@ -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;;;;"}