@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
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morphtarget.js","sources":["../../../src/animation/morphtarget.ts"],"sourcesContent":["import { PBArrayTypeInfo, PBPrimitiveType, PBPrimitiveTypeInfo, PBStructTypeInfo } from '@zephyr3d/device';\r\nimport { Application } from '../app/app';\r\nimport type { AssetSubMeshData } from '../asset';\r\nimport {\r\n MAX_MORPH_ATTRIBUTES,\r\n MAX_MORPH_TARGETS,\r\n MORPH_ATTRIBUTE_VECTOR_COUNT,\r\n MORPH_WEIGHTS_VECTOR_COUNT\r\n} from '../values';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\n\r\nexport function processMorphData(subMesh: AssetSubMeshData, morphWeights: number[]) {\r\n const device = Application.instance.device;\r\n const numTargets = subMesh.numTargets;\r\n if (numTargets === 0) {\r\n return;\r\n }\r\n const attributes = Object.getOwnPropertyNames(subMesh.targets);\r\n const numVertices = subMesh.primitive.get().getNumVertices();\r\n const weightsAndOffsets = new Float32Array(4 + MAX_MORPH_TARGETS + MAX_MORPH_ATTRIBUTES);\r\n for (let i = 0; i < numTargets; i++) {\r\n weightsAndOffsets[4 + i] = morphWeights?.[i] ?? 0;\r\n }\r\n const textureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * numTargets));\r\n if (textureSize > device.getDeviceCaps().textureCaps.maxTextureSize) {\r\n // TODO: reduce morph attributes\r\n throw new Error(`Morph target data too large`);\r\n }\r\n weightsAndOffsets[0] = textureSize;\r\n weightsAndOffsets[1] = textureSize;\r\n weightsAndOffsets[2] = numVertices;\r\n weightsAndOffsets[3] = numTargets;\r\n let offset = 0;\r\n const textureData = new Float32Array(textureSize * textureSize * 4);\r\n for (let attrib = 0; attrib < MAX_MORPH_ATTRIBUTES; attrib++) {\r\n const index = attributes.indexOf(String(attrib));\r\n if (index < 0) {\r\n weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = -1;\r\n continue;\r\n }\r\n weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = offset >> 2;\r\n const info = subMesh.targets[attrib];\r\n if (info.data.length !== numTargets) {\r\n console.error(`Invalid morph target data`);\r\n return;\r\n }\r\n for (let t = 0; t < numTargets; t++) {\r\n const data = info.data[t];\r\n for (let i = 0; i < numVertices; i++) {\r\n for (let j = 0; j < 4; j++) {\r\n textureData[offset++] = j < info.numComponents ? data[i * info.numComponents + j] : 1;\r\n }\r\n }\r\n }\r\n }\r\n const morphTexture = device.createTexture2D('rgba32f', textureSize, textureSize, {\r\n samplerOptions: {\r\n minFilter: 'nearest',\r\n magFilter: 'nearest',\r\n mipFilter: 'none'\r\n }\r\n });\r\n morphTexture.update(textureData, 0, 0, textureSize, textureSize);\r\n const bufferType = new PBStructTypeInfo('dummy', 'std140', [\r\n {\r\n name: ShaderHelper.getMorphInfoUniformName(),\r\n type: new PBArrayTypeInfo(\r\n new PBPrimitiveTypeInfo(PBPrimitiveType.F32VEC4),\r\n 1 + MORPH_WEIGHTS_VECTOR_COUNT + MORPH_ATTRIBUTE_VECTOR_COUNT\r\n )\r\n }\r\n ]);\r\n const morphUniformBuffer = device.createStructuredBuffer(\r\n bufferType,\r\n {\r\n usage: 'uniform'\r\n },\r\n weightsAndOffsets\r\n );\r\n const morphBoundingBox = new BoundingBox();\r\n calculateMorphBoundingBox(\r\n morphBoundingBox,\r\n subMesh.targetBox,\r\n weightsAndOffsets.subarray(4, 4 + MAX_MORPH_TARGETS),\r\n numTargets\r\n );\r\n const meshAABB = subMesh.mesh.getBoundingVolume().toAABB();\r\n morphBoundingBox.minPoint.addBy(meshAABB.minPoint);\r\n morphBoundingBox.maxPoint.addBy(meshAABB.maxPoint);\r\n\r\n subMesh.mesh.setMorphData(morphTexture);\r\n subMesh.mesh.setMorphInfo(morphUniformBuffer);\r\n subMesh.mesh.setAnimatedBoundingBox(morphBoundingBox);\r\n}\r\n\r\n/** @internal */\r\nexport function calculateMorphBoundingBox(\r\n morphBoundingBox: BoundingBox,\r\n keyframeBoundingBox: BoundingBox[],\r\n weights: Float32Array,\r\n numTargets: number\r\n) {\r\n morphBoundingBox.minPoint.setXYZ(0, 0, 0);\r\n morphBoundingBox.maxPoint.setXYZ(0, 0, 0);\r\n for (let i = 0; i < numTargets; i++) {\r\n const weight = weights[i];\r\n const keyframeBox = keyframeBoundingBox[i];\r\n morphBoundingBox.minPoint.x += keyframeBox.minPoint.x * weight;\r\n morphBoundingBox.minPoint.y += keyframeBox.minPoint.y * weight;\r\n morphBoundingBox.minPoint.y += keyframeBox.minPoint.z * weight;\r\n morphBoundingBox.maxPoint.x += keyframeBox.maxPoint.x * weight;\r\n morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.y * weight;\r\n morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.z * weight;\r\n }\r\n}\r\n"],"names":["processMorphData","subMesh","morphWeights","device","Application","instance","numTargets","attributes","Object","getOwnPropertyNames","targets","numVertices","primitive","get","getNumVertices","weightsAndOffsets","Float32Array","MAX_MORPH_TARGETS","MAX_MORPH_ATTRIBUTES","i","textureSize","Math","ceil","sqrt","length","getDeviceCaps","textureCaps","maxTextureSize","Error","offset","textureData","attrib","index","indexOf","String","info","data","console","error","t","j","numComponents","morphTexture","createTexture2D","samplerOptions","minFilter","magFilter","mipFilter","update","bufferType","PBStructTypeInfo","name","ShaderHelper","getMorphInfoUniformName","type","PBArrayTypeInfo","PBPrimitiveTypeInfo","PBPrimitiveType","F32VEC4","MORPH_WEIGHTS_VECTOR_COUNT","MORPH_ATTRIBUTE_VECTOR_COUNT","morphUniformBuffer","createStructuredBuffer","usage","morphBoundingBox","BoundingBox","calculateMorphBoundingBox","targetBox","subarray","meshAABB","mesh","getBoundingVolume","toAABB","minPoint","addBy","maxPoint","setMorphData","setMorphInfo","setAnimatedBoundingBox","keyframeBoundingBox","weights","setXYZ","weight","keyframeBox","x","y","z"],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { AnimationTrack } from './animationtrack.js';
2
+ import { BoundingBox } from '../utility/bounding_volume.js';
3
+ import { MAX_MORPH_TARGETS } from '../values.js';
4
+ import { calculateMorphBoundingBox } from './morphtarget.js';
5
+ import { Vector3 } from '@zephyr3d/base';
6
+
7
+ /**
8
+ * Morph target track
9
+ * @public
10
+ */ class MorphTargetTrack extends AnimationTrack {
11
+ _state;
12
+ _originBox;
13
+ _boundingBox;
14
+ _defaultWeights;
15
+ _interpolator;
16
+ /**
17
+ * Create an instance of MorphTargetTrack
18
+ */ constructor(assetTrack, subMesh, embedded){
19
+ super(embedded);
20
+ this._interpolator = assetTrack.interpolator;
21
+ this._state = {
22
+ numTargets: assetTrack.interpolator.stride,
23
+ boundingBox: new BoundingBox(),
24
+ weights: new Float32Array(MAX_MORPH_TARGETS)
25
+ };
26
+ this._boundingBox = subMesh.targetBox;
27
+ this._originBox = subMesh.mesh.getBoundingVolume().toAABB();
28
+ this._defaultWeights = assetTrack.defaultMorphWeights ?? Array.from({
29
+ length: this._state.numTargets
30
+ }).map(()=>0);
31
+ }
32
+ calculateState(target, currentTime) {
33
+ this._interpolator.interpolate(currentTime, this._state.weights);
34
+ calculateMorphBoundingBox(this._state.boundingBox, this._boundingBox, this._state.weights, this._state.numTargets);
35
+ return this._state;
36
+ }
37
+ applyState(node, state) {
38
+ node.getMorphInfo().bufferSubData(4 * 4, state.weights);
39
+ state.boundingBox.minPoint.addBy(this._originBox.minPoint);
40
+ state.boundingBox.maxPoint.addBy(this._originBox.maxPoint);
41
+ node.setAnimatedBoundingBox(state.boundingBox);
42
+ }
43
+ mixState(a, b, t) {
44
+ const state = {
45
+ weights: new Float32Array(a.numTargets),
46
+ boundingBox: new BoundingBox(),
47
+ numTargets: a.numTargets
48
+ };
49
+ for(let i = 0; i < a.numTargets; i++){
50
+ state.weights[i] = a.weights[i] + (b.weights[i] - a.weights[i]) * t;
51
+ state.boundingBox.minPoint = Vector3.min(a.boundingBox.minPoint, b.boundingBox.minPoint);
52
+ state.boundingBox.maxPoint = Vector3.max(a.boundingBox.maxPoint, b.boundingBox.maxPoint);
53
+ }
54
+ return state;
55
+ }
56
+ getBlendId() {
57
+ return 'node-morph';
58
+ }
59
+ getDuration() {
60
+ return this._interpolator.maxTime;
61
+ }
62
+ reset(node) {
63
+ // apply default weights
64
+ this._state.weights.set(this._defaultWeights);
65
+ this.applyState(node, this._state);
66
+ }
67
+ }
68
+
69
+ export { MorphTargetTrack };
70
+ //# sourceMappingURL=morphtrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morphtrack.js","sources":["../../../src/animation/morphtrack.ts"],"sourcesContent":["import { AnimationTrack } from './animationtrack';\nimport type { Mesh, SceneNode } from '../scene';\nimport type { AssetAnimationTrack, AssetSubMeshData } from '../asset';\nimport { BoundingBox } from '../utility/bounding_volume';\nimport { MAX_MORPH_TARGETS } from '../values';\nimport { calculateMorphBoundingBox } from './morphtarget';\nimport type { AABB, Interpolator } from '@zephyr3d/base';\nimport { Vector3 } from '@zephyr3d/base';\n\n/** Morph animation state */\nexport type MorphState = {\n numTargets: number;\n weights: Float32Array<ArrayBuffer>;\n boundingBox: BoundingBox;\n};\n\n/**\n * Morph target track\n * @public\n */\nexport class MorphTargetTrack extends AnimationTrack<MorphState> {\n private readonly _state: MorphState;\n private readonly _originBox: AABB;\n private readonly _boundingBox: BoundingBox[];\n private readonly _defaultWeights: number[];\n private readonly _interpolator: Interpolator;\n /**\n * Create an instance of MorphTargetTrack\n */\n constructor(assetTrack: AssetAnimationTrack, subMesh: AssetSubMeshData, embedded?: boolean) {\n super(embedded);\n this._interpolator = assetTrack.interpolator;\n this._state = {\n numTargets: assetTrack.interpolator.stride,\n boundingBox: new BoundingBox(),\n weights: new Float32Array(MAX_MORPH_TARGETS)\n };\n this._boundingBox = subMesh.targetBox;\n this._originBox = subMesh.mesh.getBoundingVolume().toAABB();\n this._defaultWeights =\n assetTrack.defaultMorphWeights ?? Array.from({ length: this._state.numTargets }).map(() => 0);\n }\n calculateState(target: object, currentTime: number): MorphState {\n this._interpolator.interpolate(currentTime, this._state.weights);\n calculateMorphBoundingBox(\n this._state.boundingBox,\n this._boundingBox,\n this._state.weights,\n this._state.numTargets\n );\n return this._state;\n }\n applyState(node: SceneNode, state: MorphState) {\n (node as Mesh).getMorphInfo().bufferSubData(4 * 4, state.weights);\n state.boundingBox.minPoint.addBy(this._originBox.minPoint);\n state.boundingBox.maxPoint.addBy(this._originBox.maxPoint);\n (node as Mesh).setAnimatedBoundingBox(state.boundingBox);\n }\n mixState(a: MorphState, b: MorphState, t: number): MorphState {\n const state: MorphState = {\n weights: new Float32Array(a.numTargets),\n boundingBox: new BoundingBox(),\n numTargets: a.numTargets\n };\n for (let i = 0; i < a.numTargets; i++) {\n state.weights[i] = a.weights[i] + (b.weights[i] - a.weights[i]) * t;\n state.boundingBox.minPoint = Vector3.min(a.boundingBox.minPoint, b.boundingBox.minPoint);\n state.boundingBox.maxPoint = Vector3.max(a.boundingBox.maxPoint, b.boundingBox.maxPoint);\n }\n return state;\n }\n getBlendId(): unknown {\n return 'node-morph';\n }\n getDuration(): number {\n return this._interpolator.maxTime;\n }\n reset(node: SceneNode) {\n // apply default weights\n this._state.weights.set(this._defaultWeights);\n this.applyState(node, this._state);\n }\n}\n"],"names":["MorphTargetTrack","AnimationTrack","_state","_originBox","_boundingBox","_defaultWeights","_interpolator","assetTrack","subMesh","embedded","interpolator","numTargets","stride","boundingBox","BoundingBox","weights","Float32Array","MAX_MORPH_TARGETS","targetBox","mesh","getBoundingVolume","toAABB","defaultMorphWeights","Array","from","length","map","calculateState","target","currentTime","interpolate","calculateMorphBoundingBox","applyState","node","state","getMorphInfo","bufferSubData","minPoint","addBy","maxPoint","setAnimatedBoundingBox","mixState","a","b","t","i","Vector3","min","max","getBlendId","getDuration","maxTime","reset","set"],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ import { AnimationTrack } from './animationtrack.js';
2
+ import { Interpolator } from '@zephyr3d/base';
3
+
4
+ /**
5
+ * Translate animation track
6
+ * @public
7
+ */ class PropertyTrack extends AnimationTrack {
8
+ _state;
9
+ _stateAlpha;
10
+ _target;
11
+ _prop;
12
+ _count;
13
+ _interpolator;
14
+ _interpolatorAlpha;
15
+ /**
16
+ * Create an instance of TranslationTrack from keyframe values
17
+ * @param prop - Property to be animated
18
+ */ constructor(prop, value, embedded){
19
+ super(embedded);
20
+ this._prop = prop;
21
+ this._target = '';
22
+ this._state = {
23
+ num: [
24
+ 0,
25
+ 0,
26
+ 0,
27
+ 0
28
+ ]
29
+ };
30
+ this._stateAlpha = null;
31
+ this._interpolator = null;
32
+ this._interpolatorAlpha = null;
33
+ if (value) {
34
+ this._state.num = value.slice();
35
+ }
36
+ switch(this._prop.type){
37
+ case 'float':
38
+ this._count = 1;
39
+ this._interpolator = new Interpolator('cubicspline-natural', 'number', new Float32Array([
40
+ 0,
41
+ 1
42
+ ]), new Float32Array([
43
+ this._state.num[0],
44
+ this._state.num[0]
45
+ ]));
46
+ break;
47
+ case 'vec2':
48
+ this._count = 2;
49
+ this._interpolator = new Interpolator('cubicspline-natural', 'vec2', new Float32Array([
50
+ 0,
51
+ 1
52
+ ]), new Float32Array([
53
+ ...this._state.num.slice(0, 2),
54
+ ...this._state.num.slice(0, 2)
55
+ ]));
56
+ break;
57
+ case 'rgb':
58
+ case 'vec3':
59
+ this._count = 3;
60
+ this._interpolator = new Interpolator('cubicspline-natural', 'vec3', new Float32Array([
61
+ 0,
62
+ 1
63
+ ]), new Float32Array([
64
+ ...this._state.num.slice(0, 3),
65
+ ...this._state.num.slice(0, 3)
66
+ ]));
67
+ break;
68
+ case 'vec4':
69
+ this._count = 4;
70
+ this._interpolator = new Interpolator('cubicspline-natural', 'vec4', new Float32Array([
71
+ 0,
72
+ 1
73
+ ]), new Float32Array([
74
+ ...this._state.num.slice(0, 4),
75
+ ...this._state.num.slice(0, 4)
76
+ ]));
77
+ break;
78
+ case 'rgba':
79
+ this._count = 4;
80
+ this._interpolator = new Interpolator('linear', 'vec3', new Float32Array([
81
+ 0,
82
+ 1
83
+ ]), new Float32Array([
84
+ ...this._state.num.slice(0, 3),
85
+ ...this._state.num.slice(0, 3)
86
+ ]));
87
+ this._interpolatorAlpha = new Interpolator('linear', 'number', new Float32Array([
88
+ 0,
89
+ 1
90
+ ]), new Float32Array([
91
+ this._state.num[3],
92
+ this._state.num[3]
93
+ ]));
94
+ this._stateAlpha = {
95
+ num: [
96
+ this._state.num[3]
97
+ ]
98
+ };
99
+ break;
100
+ default:
101
+ throw new Error(`Property '${this._prop.name}' cannot be animated`);
102
+ }
103
+ }
104
+ get target() {
105
+ return this._target;
106
+ }
107
+ set target(val) {
108
+ this._target = val;
109
+ }
110
+ get interpolator() {
111
+ return this._interpolator;
112
+ }
113
+ set interpolator(interpolator) {
114
+ this._interpolator = interpolator;
115
+ }
116
+ get interpolatorAlpha() {
117
+ return this._interpolatorAlpha;
118
+ }
119
+ set interpolatorAlpha(interpolator) {
120
+ this._interpolatorAlpha = interpolator ?? null;
121
+ if (!this._stateAlpha && this._interpolatorAlpha) {
122
+ this._stateAlpha = {
123
+ num: [
124
+ 0
125
+ ]
126
+ };
127
+ }
128
+ }
129
+ calculateState(target, currentTime) {
130
+ this._interpolator.interpolate(currentTime, this._state.num);
131
+ if (this._interpolatorAlpha) {
132
+ this._interpolatorAlpha.interpolate(currentTime, this._stateAlpha.num);
133
+ this._state.num[3] = this._stateAlpha.num[0];
134
+ }
135
+ return this._state;
136
+ }
137
+ applyState(target, state) {
138
+ this._prop.set.call(target, state);
139
+ }
140
+ mixState(a, b, t) {
141
+ const v = [];
142
+ for(let i = 0; i < this._count; i++){
143
+ v[i] = a.num[i] + t * (b.num[i] - a.num[i]);
144
+ }
145
+ return {
146
+ num: v
147
+ };
148
+ }
149
+ getBlendId() {
150
+ return this._prop;
151
+ }
152
+ getDuration() {
153
+ return this._interpolator.maxTime;
154
+ }
155
+ getProp() {
156
+ return this._prop;
157
+ }
158
+ }
159
+
160
+ export { PropertyTrack };
161
+ //# sourceMappingURL=proptrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proptrack.js","sources":["../../../src/animation/proptrack.ts"],"sourcesContent":["import { AnimationTrack } from './animationtrack';\r\nimport type { PropertyAccessor, PropertyValue } from '../utility';\r\nimport { Interpolator } from '@zephyr3d/base';\r\n\r\n/**\r\n * Translate animation track\r\n * @public\r\n */\r\nexport class PropertyTrack extends AnimationTrack<PropertyValue> {\r\n private readonly _state: PropertyValue;\r\n private _stateAlpha: PropertyValue;\r\n private _target: string;\r\n private readonly _prop: PropertyAccessor;\r\n private readonly _count: number;\r\n private _interpolator: Interpolator;\r\n private _interpolatorAlpha: Interpolator;\r\n /**\r\n * Create an instance of TranslationTrack from keyframe values\r\n * @param prop - Property to be animated\r\n */\r\n constructor(prop: PropertyAccessor, value?: number[], embedded?: boolean) {\r\n super(embedded);\r\n this._prop = prop;\r\n this._target = '';\r\n this._state = { num: [0, 0, 0, 0] };\r\n this._stateAlpha = null;\r\n this._interpolator = null;\r\n this._interpolatorAlpha = null;\r\n if (value) {\r\n this._state.num = value.slice();\r\n }\r\n switch (this._prop.type) {\r\n case 'float':\r\n this._count = 1;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'number',\r\n new Float32Array([0, 1]),\r\n new Float32Array([this._state.num[0], this._state.num[0]])\r\n );\r\n break;\r\n case 'vec2':\r\n this._count = 2;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec2',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 2), ...this._state.num.slice(0, 2)])\r\n );\r\n break;\r\n case 'rgb':\r\n case 'vec3':\r\n this._count = 3;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec3',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 3), ...this._state.num.slice(0, 3)])\r\n );\r\n break;\r\n case 'vec4':\r\n this._count = 4;\r\n this._interpolator = new Interpolator(\r\n 'cubicspline-natural',\r\n 'vec4',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 4), ...this._state.num.slice(0, 4)])\r\n );\r\n break;\r\n case 'rgba':\r\n this._count = 4;\r\n this._interpolator = new Interpolator(\r\n 'linear',\r\n 'vec3',\r\n new Float32Array([0, 1]),\r\n new Float32Array([...this._state.num.slice(0, 3), ...this._state.num.slice(0, 3)])\r\n );\r\n this._interpolatorAlpha = new Interpolator(\r\n 'linear',\r\n 'number',\r\n new Float32Array([0, 1]),\r\n new Float32Array([this._state.num[3], this._state.num[3]])\r\n );\r\n this._stateAlpha = { num: [this._state.num[3]] };\r\n break;\r\n default:\r\n throw new Error(`Property '${this._prop.name}' cannot be animated`);\r\n }\r\n }\r\n get target() {\r\n return this._target;\r\n }\r\n set target(val: string) {\r\n this._target = val;\r\n }\r\n get interpolator() {\r\n return this._interpolator;\r\n }\r\n set interpolator(interpolator: Interpolator) {\r\n this._interpolator = interpolator;\r\n }\r\n get interpolatorAlpha() {\r\n return this._interpolatorAlpha;\r\n }\r\n set interpolatorAlpha(interpolator: Interpolator) {\r\n this._interpolatorAlpha = interpolator ?? null;\r\n if (!this._stateAlpha && this._interpolatorAlpha) {\r\n this._stateAlpha = { num: [0] };\r\n }\r\n }\r\n calculateState(target: unknown, currentTime: number): PropertyValue {\r\n this._interpolator.interpolate(currentTime, this._state.num);\r\n if (this._interpolatorAlpha) {\r\n this._interpolatorAlpha.interpolate(currentTime, this._stateAlpha.num);\r\n this._state.num[3] = this._stateAlpha.num[0];\r\n }\r\n return this._state;\r\n }\r\n applyState(target: object, state: PropertyValue) {\r\n this._prop.set.call(target, state);\r\n }\r\n mixState(a: PropertyValue, b: PropertyValue, t: number): PropertyValue {\r\n const v: number[] = [];\r\n for (let i = 0; i < this._count; i++) {\r\n v[i] = a.num[i] + t * (b.num[i] - a.num[i]);\r\n }\r\n return { num: v };\r\n }\r\n getBlendId(): unknown {\r\n return this._prop;\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n getProp(): PropertyAccessor {\r\n return this._prop;\r\n }\r\n}\r\n"],"names":["PropertyTrack","AnimationTrack","_state","_stateAlpha","_target","_prop","_count","_interpolator","_interpolatorAlpha","prop","value","embedded","num","slice","type","Interpolator","Float32Array","Error","name","target","val","interpolator","interpolatorAlpha","calculateState","currentTime","interpolate","applyState","state","set","call","mixState","a","b","t","v","i","getBlendId","getDuration","maxTime","getProp"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { Interpolator, Quaternion } from '@zephyr3d/base';
2
+ import { AnimationTrack } from './animationtrack.js';
3
+
4
+ /**
5
+ * Rotation animation track
6
+ * @public
7
+ */ class NodeRotationTrack extends AnimationTrack {
8
+ _state;
9
+ _interpolator;
10
+ constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
11
+ if (modeOrInterpolator instanceof Interpolator) {
12
+ if (modeOrInterpolator.target !== 'quat') {
13
+ throw new Error(`RotationTrack(): interpolator target must be 'quat'`);
14
+ }
15
+ super(keyFramesOrEmbedded ?? false);
16
+ this._interpolator = modeOrInterpolator;
17
+ } else {
18
+ const keyFrames = keyFramesOrEmbedded;
19
+ const inputs = new Float32Array(keyFrames.map((val)=>val.time));
20
+ const outputs = new Float32Array(keyFrames.length * 4);
21
+ for(let i = 0; i < keyFrames.length; i++){
22
+ outputs[i * 4 + 0] = keyFrames[i].value.x;
23
+ outputs[i * 4 + 1] = keyFrames[i].value.y;
24
+ outputs[i * 4 + 2] = keyFrames[i].value.z;
25
+ outputs[i * 4 + 3] = keyFrames[i].value.w;
26
+ }
27
+ super(embedded ?? false);
28
+ this._interpolator = new Interpolator(modeOrInterpolator, 'quat', inputs, outputs);
29
+ }
30
+ this._state = new Quaternion();
31
+ }
32
+ calculateState(target, currentTime) {
33
+ this._interpolator.interpolate(currentTime, this._state);
34
+ return this._state;
35
+ }
36
+ applyState(node, state) {
37
+ node.rotation.set(state);
38
+ }
39
+ mixState(a, b, t) {
40
+ return Quaternion.slerp(a, b, t);
41
+ }
42
+ getBlendId() {
43
+ return 'node-rotation';
44
+ }
45
+ getDuration() {
46
+ return this._interpolator.maxTime;
47
+ }
48
+ }
49
+
50
+ export { NodeRotationTrack };
51
+ //# sourceMappingURL=rotationtrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotationtrack.js","sources":["../../../src/animation/rotationtrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Quaternion } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Rotation animation track\r\n * @public\r\n */\r\nexport class NodeRotationTrack extends AnimationTrack<Quaternion> {\r\n private readonly _state: Quaternion;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of RotationTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of RotationTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Quaternion }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Quaternion }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'quat') {\r\n throw new Error(`RotationTrack(): interpolator target must be 'quat'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Quaternion }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 4);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 4 + 0] = keyFrames[i].value.x;\r\n outputs[i * 4 + 1] = keyFrames[i].value.y;\r\n outputs[i * 4 + 2] = keyFrames[i].value.z;\r\n outputs[i * 4 + 3] = keyFrames[i].value.w;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'quat', inputs, outputs);\r\n }\r\n this._state = new Quaternion();\r\n }\r\n calculateState(target: object, currentTime: number): Quaternion {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Quaternion) {\r\n node.rotation.set(state);\r\n }\r\n mixState(a: Quaternion, b: Quaternion, t: number): Quaternion {\r\n return Quaternion.slerp(a, b, t);\r\n }\r\n getBlendId(): unknown {\r\n return 'node-rotation';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeRotationTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","w","Quaternion","calculateState","currentTime","interpolate","applyState","node","state","rotation","set","mixState","a","b","t","slerp","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,iBAA0BC,SAAAA,cAAAA,CAAAA;IACpBC,MAAmB;IACnBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAoD,EACpDC,mBAAqE,EACrEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,mDAAmD,CAAC,CAAA;AACvE;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;gBACzCN,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACI,CAAC;AAC3C;AACA,YAAA,KAAK,CAACjB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIsB,UAAAA,EAAAA;AACpB;IACAC,cAAejB,CAAAA,MAAc,EAAEkB,WAAmB,EAAc;QAC9D,IAAI,CAACvB,aAAa,CAACwB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACxB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACA0B,UAAWC,CAAAA,IAAe,EAAEC,KAAiB,EAAE;QAC7CD,IAAKE,CAAAA,QAAQ,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACpB;AACAG,IAAAA,QAAAA,CAASC,CAAa,EAAEC,CAAa,EAAEC,CAAS,EAAc;AAC5D,QAAA,OAAOZ,UAAWa,CAAAA,KAAK,CAACH,CAAAA,EAAGC,CAAGC,EAAAA,CAAAA,CAAAA;AAChC;IACAE,UAAsB,GAAA;QACpB,OAAO,eAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACpC,aAAa,CAACqC,OAAO;AACnC;AACF;;;;"}
@@ -0,0 +1,50 @@
1
+ import { Interpolator, Vector3 } from '@zephyr3d/base';
2
+ import { AnimationTrack } from './animationtrack.js';
3
+
4
+ /**
5
+ * Scale animation track
6
+ * @public
7
+ */ class NodeScaleTrack extends AnimationTrack {
8
+ _state;
9
+ _interpolator;
10
+ constructor(modeOrInterpolator, keyFramesOrEmbedded, embedded){
11
+ if (modeOrInterpolator instanceof Interpolator) {
12
+ if (modeOrInterpolator.target !== 'vec3') {
13
+ throw new Error(`ScaleTrack(): interpolator target must be 'vec3'`);
14
+ }
15
+ super(keyFramesOrEmbedded ?? false);
16
+ this._interpolator = modeOrInterpolator;
17
+ } else {
18
+ const keyFrames = keyFramesOrEmbedded;
19
+ const inputs = new Float32Array(keyFrames.map((val)=>val.time));
20
+ const outputs = new Float32Array(keyFrames.length * 3);
21
+ for(let i = 0; i < keyFrames.length; i++){
22
+ outputs[i * 3 + 0] = keyFrames[i].value.x;
23
+ outputs[i * 3 + 1] = keyFrames[i].value.y;
24
+ outputs[i * 3 + 2] = keyFrames[i].value.z;
25
+ }
26
+ super(embedded ?? false);
27
+ this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);
28
+ }
29
+ this._state = new Vector3();
30
+ }
31
+ calculateState(target, currentTime) {
32
+ this._interpolator.interpolate(currentTime, this._state);
33
+ return this._state;
34
+ }
35
+ applyState(node, state) {
36
+ node.scale.set(state);
37
+ }
38
+ mixState(a, b, t) {
39
+ return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));
40
+ }
41
+ getBlendId() {
42
+ return 'node-scale';
43
+ }
44
+ getDuration() {
45
+ return this._interpolator.maxTime;
46
+ }
47
+ }
48
+
49
+ export { NodeScaleTrack };
50
+ //# sourceMappingURL=scaletrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaletrack.js","sources":["../../../src/animation/scaletrack.ts"],"sourcesContent":["import type { InterpolationMode } from '@zephyr3d/base';\r\nimport { Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport { AnimationTrack } from './animationtrack';\r\nimport type { SceneNode } from '../scene';\r\n\r\n/**\r\n * Scale animation track\r\n * @public\r\n */\r\nexport class NodeScaleTrack extends AnimationTrack<Vector3> {\r\n private readonly _state: Vector3;\r\n private readonly _interpolator: Interpolator;\r\n /**\r\n * Create an instance of ScaleTrack from keyframe values\r\n * @param interpolator - Interpolator object that contains keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(interpolator: Interpolator, embedded?: boolean);\r\n /**\r\n * Create an instance of ScaleTrack from keyframe values\r\n * @param mode - The interpolation mode of keyframes\r\n * @param keyFrames - Keyframe values\r\n * @param embedded - Whether this track be an embedded track\r\n */\r\n constructor(mode: InterpolationMode, keyFrames: { time: number; value: Vector3 }[], embedded?: boolean);\r\n constructor(\r\n modeOrInterpolator?: Interpolator | InterpolationMode,\r\n keyFramesOrEmbedded?: { time: number; value: Vector3 }[] | boolean,\r\n embedded?: boolean\r\n ) {\r\n if (modeOrInterpolator instanceof Interpolator) {\r\n if (modeOrInterpolator.target !== 'vec3') {\r\n throw new Error(`ScaleTrack(): interpolator target must be 'vec3'`);\r\n }\r\n super((keyFramesOrEmbedded as boolean) ?? false);\r\n this._interpolator = modeOrInterpolator;\r\n } else {\r\n const keyFrames = keyFramesOrEmbedded as { time: number; value: Vector3 }[];\r\n const inputs = new Float32Array(keyFrames.map((val) => val.time));\r\n const outputs = new Float32Array(keyFrames.length * 3);\r\n for (let i = 0; i < keyFrames.length; i++) {\r\n outputs[i * 3 + 0] = keyFrames[i].value.x;\r\n outputs[i * 3 + 1] = keyFrames[i].value.y;\r\n outputs[i * 3 + 2] = keyFrames[i].value.z;\r\n }\r\n super(embedded ?? false);\r\n this._interpolator = new Interpolator(modeOrInterpolator, 'vec3', inputs, outputs);\r\n }\r\n this._state = new Vector3();\r\n }\r\n calculateState(target: object, currentTime: number): Vector3 {\r\n this._interpolator.interpolate(currentTime, this._state);\r\n return this._state;\r\n }\r\n applyState(node: SceneNode, state: Vector3) {\r\n node.scale.set(state);\r\n }\r\n mixState(a: Vector3, b: Vector3, t: number): Vector3 {\r\n return new Vector3(a.x + t * (b.x - a.x), a.y + t * (b.y - a.y), a.z + t * (b.z - a.z));\r\n }\r\n getBlendId(): unknown {\r\n return 'node-scale';\r\n }\r\n getDuration(): number {\r\n return this._interpolator.maxTime;\r\n }\r\n}\r\n"],"names":["NodeScaleTrack","AnimationTrack","_state","_interpolator","modeOrInterpolator","keyFramesOrEmbedded","embedded","Interpolator","target","Error","keyFrames","inputs","Float32Array","map","val","time","outputs","length","i","value","x","y","z","Vector3","calculateState","currentTime","interpolate","applyState","node","state","scale","set","mixState","a","b","t","getBlendId","getDuration","maxTime"],"mappings":";;;AAKA;;;IAIO,MAAMA,cAAuBC,SAAAA,cAAAA,CAAAA;IACjBC,MAAgB;IAChBC,aAA4B;AAc7C,IAAA,WAAA,CACEC,kBAAqD,EACrDC,mBAAkE,EAClEC,QAAkB,CAClB;AACA,QAAA,IAAIF,8BAA8BG,YAAc,EAAA;YAC9C,IAAIH,kBAAAA,CAAmBI,MAAM,KAAK,MAAQ,EAAA;AACxC,gBAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,gDAAgD,CAAC,CAAA;AACpE;YACA,KAAK,CAAC,mBAAoC,IAAA,KAAA,CAAA;YAC1C,IAAI,CAACN,aAAa,GAAGC,kBAAAA;SAChB,MAAA;AACL,YAAA,MAAMM,SAAYL,GAAAA,mBAAAA;YAClB,MAAMM,MAAAA,GAAS,IAAIC,YAAaF,CAAAA,SAAAA,CAAUG,GAAG,CAAC,CAACC,GAAQA,GAAAA,GAAAA,CAAIC,IAAI,CAAA,CAAA;AAC/D,YAAA,MAAMC,OAAU,GAAA,IAAIJ,YAAaF,CAAAA,SAAAA,CAAUO,MAAM,GAAG,CAAA,CAAA;AACpD,YAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAIR,SAAUO,CAAAA,MAAM,EAAEC,CAAK,EAAA,CAAA;gBACzCF,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACC,CAAC;gBACzCJ,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACE,CAAC;gBACzCL,OAAO,CAACE,CAAI,GAAA,CAAA,GAAI,CAAE,CAAA,GAAGR,SAAS,CAACQ,CAAE,CAAA,CAACC,KAAK,CAACG,CAAC;AAC3C;AACA,YAAA,KAAK,CAAChB,QAAY,IAAA,KAAA,CAAA;AAClB,YAAA,IAAI,CAACH,aAAa,GAAG,IAAII,YAAaH,CAAAA,kBAAAA,EAAoB,QAAQO,MAAQK,EAAAA,OAAAA,CAAAA;AAC5E;QACA,IAAI,CAACd,MAAM,GAAG,IAAIqB,OAAAA,EAAAA;AACpB;IACAC,cAAehB,CAAAA,MAAc,EAAEiB,WAAmB,EAAW;QAC3D,IAAI,CAACtB,aAAa,CAACuB,WAAW,CAACD,WAAa,EAAA,IAAI,CAACvB,MAAM,CAAA;QACvD,OAAO,IAAI,CAACA,MAAM;AACpB;IACAyB,UAAWC,CAAAA,IAAe,EAAEC,KAAc,EAAE;QAC1CD,IAAKE,CAAAA,KAAK,CAACC,GAAG,CAACF,KAAAA,CAAAA;AACjB;AACAG,IAAAA,QAAAA,CAASC,CAAU,EAAEC,CAAU,EAAEC,CAAS,EAAW;AACnD,QAAA,OAAO,IAAIZ,OAAQU,CAAAA,CAAAA,CAAEb,CAAC,GAAGe,KAAKD,CAAAA,CAAEd,CAAC,GAAGa,EAAEb,CAAAA,CAAIa,EAAAA,CAAAA,CAAEZ,CAAC,GAAGc,CAAAA,IAAKD,CAAAA,CAAEb,CAAC,GAAGY,CAAAA,CAAEZ,CAAAA,GAAIY,CAAEX,CAAAA,CAAC,GAAGa,CAAAA,IAAKD,CAAEZ,CAAAA,CAAC,GAAGW,CAAAA,CAAEX,CAAC,CAADA,CAAAA;AACtF;IACAc,UAAsB,GAAA;QACpB,OAAO,YAAA;AACT;IACAC,WAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAClC,aAAa,CAACmC,OAAO;AACnC;AACF;;;;"}