@zephyr3d/scene 0.7.1 → 0.8.1

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 (441) hide show
  1. package/dist/animation/animation.js +0 -18
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +200 -3
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/ik/ccd_solver.js +371 -0
  6. package/dist/animation/ik/ccd_solver.js.map +1 -0
  7. package/dist/animation/ik/fabrik_solver.js +398 -0
  8. package/dist/animation/ik/fabrik_solver.js.map +1 -0
  9. package/dist/animation/ik/ik_angle_constraint.js +181 -0
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -0
  11. package/dist/animation/ik/ik_chain.js +163 -0
  12. package/dist/animation/ik/ik_chain.js.map +1 -0
  13. package/dist/animation/ik/ik_constraint.js +25 -0
  14. package/dist/animation/ik/ik_constraint.js.map +1 -0
  15. package/dist/animation/ik/ik_pole_constraint.js +128 -0
  16. package/dist/animation/ik/ik_pole_constraint.js.map +1 -0
  17. package/dist/animation/ik/ik_solver.js +48 -0
  18. package/dist/animation/ik/ik_solver.js.map +1 -0
  19. package/dist/animation/ik/ik_track.js +96 -0
  20. package/dist/animation/ik/ik_track.js.map +1 -0
  21. package/dist/animation/ik/ik_utils.js +191 -0
  22. package/dist/animation/ik/ik_utils.js.map +1 -0
  23. package/dist/animation/ik/two_bone_ik_solver.js +331 -0
  24. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -0
  25. package/dist/animation/ik_modifier.js +61 -0
  26. package/dist/animation/ik_modifier.js.map +1 -0
  27. package/dist/animation/ik_postprocessor.js +71 -0
  28. package/dist/animation/ik_postprocessor.js.map +1 -0
  29. package/dist/animation/manual_transform_processor.js +156 -0
  30. package/dist/animation/manual_transform_processor.js.map +1 -0
  31. package/dist/animation/skeleton.js +55 -51
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +38 -0
  34. package/dist/animation/skeleton_modifier.js.map +1 -0
  35. package/dist/animation/skeleton_postprocessor.js +50 -0
  36. package/dist/animation/skeleton_postprocessor.js.map +1 -0
  37. package/dist/animation/spring/multi_chain_spring_system.js +503 -0
  38. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -0
  39. package/dist/animation/spring/spring_bone.js +240 -0
  40. package/dist/animation/spring/spring_bone.js.map +1 -0
  41. package/dist/animation/spring/spring_bone_collider.js +198 -0
  42. package/dist/animation/spring/spring_bone_collider.js.map +1 -0
  43. package/dist/animation/spring/spring_bone_constraint.js +170 -0
  44. package/dist/animation/spring/spring_bone_constraint.js.map +1 -0
  45. package/dist/animation/spring/spring_bone_system.js +328 -0
  46. package/dist/animation/spring/spring_bone_system.js.map +1 -0
  47. package/dist/animation/spring/spring_chain.js +103 -0
  48. package/dist/animation/spring/spring_chain.js.map +1 -0
  49. package/dist/animation/spring/spring_collider.js +247 -0
  50. package/dist/animation/spring/spring_collider.js.map +1 -0
  51. package/dist/animation/spring/spring_constraint.js +21 -0
  52. package/dist/animation/spring/spring_constraint.js.map +1 -0
  53. package/dist/animation/spring/spring_particle.js +20 -0
  54. package/dist/animation/spring/spring_particle.js.map +1 -0
  55. package/dist/animation/spring/spring_system.js +526 -0
  56. package/dist/animation/spring/spring_system.js.map +1 -0
  57. package/dist/animation/spring_modifier.js +45 -0
  58. package/dist/animation/spring_modifier.js.map +1 -0
  59. package/dist/animation/spring_postprocessor.js +54 -0
  60. package/dist/animation/spring_postprocessor.js.map +1 -0
  61. package/dist/app/screen.js +1 -1
  62. package/dist/app/screen.js.map +1 -1
  63. package/dist/asset/model.js +10 -6
  64. package/dist/asset/model.js.map +1 -1
  65. package/dist/camera/perspectivecamera.js +3 -3
  66. package/dist/camera/perspectivecamera.js.map +1 -1
  67. package/dist/index.d.ts +1400 -4
  68. package/dist/index.js +16 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/material/mixins/lightmodel/blinnphong.js +66 -4
  71. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  72. package/dist/material/mixins/pbr/common.js +20 -17
  73. package/dist/material/mixins/pbr/common.js.map +1 -1
  74. package/dist/material/shader/helper.js +5 -3
  75. package/dist/material/shader/helper.js.map +1 -1
  76. package/dist/render/gpu_picking.js +100 -0
  77. package/dist/render/gpu_picking.js.map +1 -0
  78. package/dist/render/rendergraph/device_pool_allocator.js +41 -0
  79. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -0
  80. package/dist/render/rendergraph/executor.js +146 -0
  81. package/dist/render/rendergraph/executor.js.map +1 -0
  82. package/dist/render/rendergraph/forward_plus_builder.js +414 -0
  83. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -0
  84. package/dist/render/rendergraph/rendergraph.js +306 -0
  85. package/dist/render/rendergraph/rendergraph.js.map +1 -0
  86. package/dist/render/rendergraph/types.js +57 -0
  87. package/dist/render/rendergraph/types.js.map +1 -0
  88. package/dist/render/sky_motion_vector.js +85 -0
  89. package/dist/render/sky_motion_vector.js.map +1 -0
  90. package/dist/scene/mesh.js +15 -23
  91. package/dist/scene/mesh.js.map +1 -1
  92. package/dist/utility/serialization/scene/animation.js +24 -23
  93. package/dist/utility/serialization/scene/animation.js.map +1 -1
  94. package/dist/utility/serialization/scene/material.js +62 -0
  95. package/dist/utility/serialization/scene/material.js.map +1 -1
  96. package/dist/utility/serialization/scene/node.js +1 -1
  97. package/package.json +3 -3
  98. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  99. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  100. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  101. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  102. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  103. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  104. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  105. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  106. package/dist/src/animation/animation.js +0 -127
  107. package/dist/src/animation/animation.js.map +0 -1
  108. package/dist/src/animation/animationset.js +0 -255
  109. package/dist/src/animation/animationset.js.map +0 -1
  110. package/dist/src/animation/animationtrack.js +0 -34
  111. package/dist/src/animation/animationtrack.js.map +0 -1
  112. package/dist/src/animation/eulerrotationtrack.js +0 -52
  113. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  114. package/dist/src/animation/morphtarget.js +0 -93
  115. package/dist/src/animation/morphtarget.js.map +0 -1
  116. package/dist/src/animation/morphtrack.js +0 -70
  117. package/dist/src/animation/morphtrack.js.map +0 -1
  118. package/dist/src/animation/proptrack.js +0 -161
  119. package/dist/src/animation/proptrack.js.map +0 -1
  120. package/dist/src/animation/rotationtrack.js +0 -51
  121. package/dist/src/animation/rotationtrack.js.map +0 -1
  122. package/dist/src/animation/scaletrack.js +0 -50
  123. package/dist/src/animation/scaletrack.js.map +0 -1
  124. package/dist/src/animation/skeleton.js +0 -204
  125. package/dist/src/animation/skeleton.js.map +0 -1
  126. package/dist/src/animation/translationtrack.js +0 -50
  127. package/dist/src/animation/translationtrack.js.map +0 -1
  128. package/dist/src/app/app.js +0 -129
  129. package/dist/src/app/app.js.map +0 -1
  130. package/dist/src/app/inputmgr.js +0 -267
  131. package/dist/src/app/inputmgr.js.map +0 -1
  132. package/dist/src/asset/assetmanager.js +0 -404
  133. package/dist/src/asset/assetmanager.js.map +0 -1
  134. package/dist/src/asset/builtin.js +0 -337
  135. package/dist/src/asset/builtin.js.map +0 -1
  136. package/dist/src/asset/loaders/dds/dds.js +0 -470
  137. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  138. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  139. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  140. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  141. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  142. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  143. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  144. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  145. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  146. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  147. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  148. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  149. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  150. package/dist/src/asset/loaders/loader.js +0 -45
  151. package/dist/src/asset/loaders/loader.js.map +0 -1
  152. package/dist/src/asset/model.js +0 -414
  153. package/dist/src/asset/model.js.map +0 -1
  154. package/dist/src/blitter/bilateralblur.js +0 -221
  155. package/dist/src/blitter/bilateralblur.js.map +0 -1
  156. package/dist/src/blitter/blitter.js +0 -390
  157. package/dist/src/blitter/blitter.js.map +0 -1
  158. package/dist/src/blitter/box.js +0 -118
  159. package/dist/src/blitter/box.js.map +0 -1
  160. package/dist/src/blitter/copy.js +0 -22
  161. package/dist/src/blitter/copy.js.map +0 -1
  162. package/dist/src/blitter/gaussianblur.js +0 -228
  163. package/dist/src/blitter/gaussianblur.js.map +0 -1
  164. package/dist/src/camera/base.js +0 -92
  165. package/dist/src/camera/base.js.map +0 -1
  166. package/dist/src/camera/camera.js +0 -1005
  167. package/dist/src/camera/camera.js.map +0 -1
  168. package/dist/src/camera/fps.js +0 -238
  169. package/dist/src/camera/fps.js.map +0 -1
  170. package/dist/src/camera/orbit.js +0 -245
  171. package/dist/src/camera/orbit.js.map +0 -1
  172. package/dist/src/camera/orthocamera.js +0 -167
  173. package/dist/src/camera/orthocamera.js.map +0 -1
  174. package/dist/src/camera/perspectivecamera.js +0 -141
  175. package/dist/src/camera/perspectivecamera.js.map +0 -1
  176. package/dist/src/index.js +0 -120
  177. package/dist/src/index.js.map +0 -1
  178. package/dist/src/material/blinn.js +0 -81
  179. package/dist/src/material/blinn.js.map +0 -1
  180. package/dist/src/material/grassmaterial.js +0 -113
  181. package/dist/src/material/grassmaterial.js.map +0 -1
  182. package/dist/src/material/lambert.js +0 -92
  183. package/dist/src/material/lambert.js.map +0 -1
  184. package/dist/src/material/material.js +0 -301
  185. package/dist/src/material/material.js.map +0 -1
  186. package/dist/src/material/meshmaterial.js +0 -704
  187. package/dist/src/material/meshmaterial.js.map +0 -1
  188. package/dist/src/material/mixins/albedocolor.js +0 -76
  189. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  190. package/dist/src/material/mixins/foliage.js +0 -47
  191. package/dist/src/material/mixins/foliage.js.map +0 -1
  192. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  193. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  194. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  195. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  196. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  197. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  198. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  199. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  200. package/dist/src/material/mixins/lit.js +0 -476
  201. package/dist/src/material/mixins/lit.js.map +0 -1
  202. package/dist/src/material/mixins/pbr/common.js +0 -918
  203. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  204. package/dist/src/material/mixins/texture.js +0 -172
  205. package/dist/src/material/mixins/texture.js.map +0 -1
  206. package/dist/src/material/mixins/vertexcolor.js +0 -56
  207. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  208. package/dist/src/material/particle.js +0 -178
  209. package/dist/src/material/particle.js.map +0 -1
  210. package/dist/src/material/pbrmr.js +0 -97
  211. package/dist/src/material/pbrmr.js.map +0 -1
  212. package/dist/src/material/pbrsg.js +0 -97
  213. package/dist/src/material/pbrsg.js.map +0 -1
  214. package/dist/src/material/shader/helper.js +0 -1209
  215. package/dist/src/material/shader/helper.js.map +0 -1
  216. package/dist/src/material/terrain-cm.js +0 -606
  217. package/dist/src/material/terrain-cm.js.map +0 -1
  218. package/dist/src/material/terrainmaterial.js +0 -375
  219. package/dist/src/material/terrainmaterial.js.map +0 -1
  220. package/dist/src/material/unlit.js +0 -41
  221. package/dist/src/material/unlit.js.map +0 -1
  222. package/dist/src/material/water.js +0 -417
  223. package/dist/src/material/water.js.map +0 -1
  224. package/dist/src/posteffect/bloom.js +0 -361
  225. package/dist/src/posteffect/bloom.js.map +0 -1
  226. package/dist/src/posteffect/compositor.js +0 -226
  227. package/dist/src/posteffect/compositor.js.map +0 -1
  228. package/dist/src/posteffect/fxaa.js +0 -273
  229. package/dist/src/posteffect/fxaa.js.map +0 -1
  230. package/dist/src/posteffect/grayscale.js +0 -69
  231. package/dist/src/posteffect/grayscale.js.map +0 -1
  232. package/dist/src/posteffect/motionblur.js +0 -96
  233. package/dist/src/posteffect/motionblur.js.map +0 -1
  234. package/dist/src/posteffect/posteffect.js +0 -126
  235. package/dist/src/posteffect/posteffect.js.map +0 -1
  236. package/dist/src/posteffect/sao.js +0 -324
  237. package/dist/src/posteffect/sao.js.map +0 -1
  238. package/dist/src/posteffect/ssr.js +0 -489
  239. package/dist/src/posteffect/ssr.js.map +0 -1
  240. package/dist/src/posteffect/taa.js +0 -172
  241. package/dist/src/posteffect/taa.js.map +0 -1
  242. package/dist/src/posteffect/tonemap.js +0 -94
  243. package/dist/src/posteffect/tonemap.js.map +0 -1
  244. package/dist/src/render/abuffer_oit.js +0 -361
  245. package/dist/src/render/abuffer_oit.js.map +0 -1
  246. package/dist/src/render/clipmap.js +0 -851
  247. package/dist/src/render/clipmap.js.map +0 -1
  248. package/dist/src/render/cluster_light.js +0 -333
  249. package/dist/src/render/cluster_light.js.map +0 -1
  250. package/dist/src/render/cull_visitor.js +0 -187
  251. package/dist/src/render/cull_visitor.js.map +0 -1
  252. package/dist/src/render/depthpass.js +0 -68
  253. package/dist/src/render/depthpass.js.map +0 -1
  254. package/dist/src/render/drawable_mixin.js +0 -227
  255. package/dist/src/render/drawable_mixin.js.map +0 -1
  256. package/dist/src/render/envlight.js +0 -463
  257. package/dist/src/render/envlight.js.map +0 -1
  258. package/dist/src/render/fbm_wavegenerator.js +0 -251
  259. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  260. package/dist/src/render/fft_wavegenerator.js +0 -1006
  261. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  262. package/dist/src/render/fullscreenquad.js +0 -38
  263. package/dist/src/render/fullscreenquad.js.map +0 -1
  264. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  265. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  266. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  267. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  268. package/dist/src/render/hzb.js +0 -273
  269. package/dist/src/render/hzb.js.map +0 -1
  270. package/dist/src/render/lightpass.js +0 -172
  271. package/dist/src/render/lightpass.js.map +0 -1
  272. package/dist/src/render/objectcolorpass.js +0 -51
  273. package/dist/src/render/objectcolorpass.js.map +0 -1
  274. package/dist/src/render/primitive.js +0 -364
  275. package/dist/src/render/primitive.js.map +0 -1
  276. package/dist/src/render/render_queue.js +0 -467
  277. package/dist/src/render/render_queue.js.map +0 -1
  278. package/dist/src/render/renderbundle_wrapper.js +0 -152
  279. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  280. package/dist/src/render/renderer.js +0 -455
  281. package/dist/src/render/renderer.js.map +0 -1
  282. package/dist/src/render/renderpass.js +0 -200
  283. package/dist/src/render/renderpass.js.map +0 -1
  284. package/dist/src/render/shadowmap_pass.js +0 -56
  285. package/dist/src/render/shadowmap_pass.js.map +0 -1
  286. package/dist/src/render/sky.js +0 -1103
  287. package/dist/src/render/sky.js.map +0 -1
  288. package/dist/src/render/weightedblended_oit.js +0 -168
  289. package/dist/src/render/weightedblended_oit.js.map +0 -1
  290. package/dist/src/scene/batchgroup.js +0 -162
  291. package/dist/src/scene/batchgroup.js.map +0 -1
  292. package/dist/src/scene/environment.js +0 -209
  293. package/dist/src/scene/environment.js.map +0 -1
  294. package/dist/src/scene/graph_node.js +0 -72
  295. package/dist/src/scene/graph_node.js.map +0 -1
  296. package/dist/src/scene/light.js +0 -416
  297. package/dist/src/scene/light.js.map +0 -1
  298. package/dist/src/scene/mesh.js +0 -341
  299. package/dist/src/scene/mesh.js.map +0 -1
  300. package/dist/src/scene/octree.js +0 -649
  301. package/dist/src/scene/octree.js.map +0 -1
  302. package/dist/src/scene/particlesys.js +0 -738
  303. package/dist/src/scene/particlesys.js.map +0 -1
  304. package/dist/src/scene/raycast_visitor.js +0 -103
  305. package/dist/src/scene/raycast_visitor.js.map +0 -1
  306. package/dist/src/scene/scene.js +0 -284
  307. package/dist/src/scene/scene.js.map +0 -1
  308. package/dist/src/scene/scene_node.js +0 -732
  309. package/dist/src/scene/scene_node.js.map +0 -1
  310. package/dist/src/scene/terrain/grass.js +0 -278
  311. package/dist/src/scene/terrain/grass.js.map +0 -1
  312. package/dist/src/scene/terrain/heightfield.js +0 -475
  313. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  314. package/dist/src/scene/terrain/patch.js +0 -530
  315. package/dist/src/scene/terrain/patch.js.map +0 -1
  316. package/dist/src/scene/terrain/quadtree.js +0 -461
  317. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  318. package/dist/src/scene/terrain/terrain.js +0 -246
  319. package/dist/src/scene/terrain/terrain.js.map +0 -1
  320. package/dist/src/scene/terrain-cm/grass.js +0 -594
  321. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  322. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  323. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  324. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  325. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  326. package/dist/src/scene/water.js +0 -374
  327. package/dist/src/scene/water.js.map +0 -1
  328. package/dist/src/shaders/atmosphere.js +0 -957
  329. package/dist/src/shaders/atmosphere.js.map +0 -1
  330. package/dist/src/shaders/fog.js +0 -112
  331. package/dist/src/shaders/fog.js.map +0 -1
  332. package/dist/src/shaders/misc.js +0 -266
  333. package/dist/src/shaders/misc.js.map +0 -1
  334. package/dist/src/shaders/noise.js +0 -222
  335. package/dist/src/shaders/noise.js.map +0 -1
  336. package/dist/src/shaders/pbr.js +0 -51
  337. package/dist/src/shaders/pbr.js.map +0 -1
  338. package/dist/src/shaders/shadow.js +0 -636
  339. package/dist/src/shaders/shadow.js.map +0 -1
  340. package/dist/src/shaders/ssr.js +0 -490
  341. package/dist/src/shaders/ssr.js.map +0 -1
  342. package/dist/src/shaders/temporal.js +0 -215
  343. package/dist/src/shaders/temporal.js.map +0 -1
  344. package/dist/src/shaders/water.js +0 -756
  345. package/dist/src/shaders/water.js.map +0 -1
  346. package/dist/src/shadow/esm.js +0 -237
  347. package/dist/src/shadow/esm.js.map +0 -1
  348. package/dist/src/shadow/pcf_opt.js +0 -181
  349. package/dist/src/shadow/pcf_opt.js.map +0 -1
  350. package/dist/src/shadow/pcf_pd.js +0 -189
  351. package/dist/src/shadow/pcf_pd.js.map +0 -1
  352. package/dist/src/shadow/shader.js +0 -37
  353. package/dist/src/shadow/shader.js.map +0 -1
  354. package/dist/src/shadow/shadow_impl.js +0 -15
  355. package/dist/src/shadow/shadow_impl.js.map +0 -1
  356. package/dist/src/shadow/shadowmapper.js +0 -790
  357. package/dist/src/shadow/shadowmapper.js.map +0 -1
  358. package/dist/src/shadow/ssm.js +0 -159
  359. package/dist/src/shadow/ssm.js.map +0 -1
  360. package/dist/src/shadow/vsm.js +0 -297
  361. package/dist/src/shadow/vsm.js.map +0 -1
  362. package/dist/src/shapes/box.js +0 -386
  363. package/dist/src/shapes/box.js.map +0 -1
  364. package/dist/src/shapes/cylinder.js +0 -125
  365. package/dist/src/shapes/cylinder.js.map +0 -1
  366. package/dist/src/shapes/plane.js +0 -88
  367. package/dist/src/shapes/plane.js.map +0 -1
  368. package/dist/src/shapes/shape.js +0 -87
  369. package/dist/src/shapes/shape.js.map +0 -1
  370. package/dist/src/shapes/sphere.js +0 -114
  371. package/dist/src/shapes/sphere.js.map +0 -1
  372. package/dist/src/shapes/tetrahedron.js +0 -188
  373. package/dist/src/shapes/tetrahedron.js.map +0 -1
  374. package/dist/src/shapes/torus.js +0 -111
  375. package/dist/src/shapes/torus.js.map +0 -1
  376. package/dist/src/utility/aabbtree.js +0 -400
  377. package/dist/src/utility/aabbtree.js.map +0 -1
  378. package/dist/src/utility/bounding_volume.js +0 -29
  379. package/dist/src/utility/bounding_volume.js.map +0 -1
  380. package/dist/src/utility/debug.js +0 -28
  381. package/dist/src/utility/debug.js.map +0 -1
  382. package/dist/src/utility/draco/decoder.js +0 -116
  383. package/dist/src/utility/draco/decoder.js.map +0 -1
  384. package/dist/src/utility/misc.js +0 -105
  385. package/dist/src/utility/misc.js.map +0 -1
  386. package/dist/src/utility/panorama.js +0 -163
  387. package/dist/src/utility/panorama.js.map +0 -1
  388. package/dist/src/utility/pmrem.js +0 -354
  389. package/dist/src/utility/pmrem.js.map +0 -1
  390. package/dist/src/utility/rendermipmap.js +0 -115
  391. package/dist/src/utility/rendermipmap.js.map +0 -1
  392. package/dist/src/utility/serialization/json.js +0 -402
  393. package/dist/src/utility/serialization/json.js.map +0 -1
  394. package/dist/src/utility/serialization/manager.js +0 -623
  395. package/dist/src/utility/serialization/manager.js.map +0 -1
  396. package/dist/src/utility/serialization/scene/animation.js +0 -248
  397. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  398. package/dist/src/utility/serialization/scene/batch.js +0 -59
  399. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  400. package/dist/src/utility/serialization/scene/camera.js +0 -790
  401. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  402. package/dist/src/utility/serialization/scene/common.js +0 -222
  403. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  404. package/dist/src/utility/serialization/scene/light.js +0 -575
  405. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  406. package/dist/src/utility/serialization/scene/material.js +0 -1111
  407. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  408. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  409. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  410. package/dist/src/utility/serialization/scene/misc.js +0 -39
  411. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  412. package/dist/src/utility/serialization/scene/node.js +0 -451
  413. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  414. package/dist/src/utility/serialization/scene/particle.js +0 -425
  415. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  416. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  417. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  418. package/dist/src/utility/serialization/scene/scene.js +0 -704
  419. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  420. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  421. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  422. package/dist/src/utility/serialization/scene/water.js +0 -465
  423. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  424. package/dist/src/utility/shprojector.js +0 -297
  425. package/dist/src/utility/shprojector.js.map +0 -1
  426. package/dist/src/utility/textures/ggxlut.js +0 -213
  427. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  428. package/dist/src/utility/textures/gradientnoise.js +0 -62
  429. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  430. package/dist/src/utility/textures/randomnoise.js +0 -41
  431. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  432. package/dist/src/values.js +0 -162
  433. package/dist/src/values.js.map +0 -1
  434. package/dist/utility/blueprint/material/common.js +0 -7
  435. package/dist/utility/blueprint/material/common.js.map +0 -1
  436. package/dist/utility/serialization/blueprint/constants.js +0 -255
  437. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  438. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  439. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  440. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  441. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ import { SkeletonModifier } from './skeleton_modifier.js';
2
+
3
+ /**
4
+ * Skeleton modifier for IK solvers.
5
+ *
6
+ * Integrates IK solving into the skeleton post-processing pipeline.
7
+ * The IK solver is executed each frame and results are blended with the base animation.
8
+ *
9
+ * @public
10
+ */ class IKModifier extends SkeletonModifier {
11
+ _solver;
12
+ _target;
13
+ /**
14
+ * Create an IK post-processor.
15
+ *
16
+ * @param solver - The IK solver to integrate
17
+ * @param target - Target position for the end effector
18
+ * @param weight - Blend weight [0-1] (default: 1.0)
19
+ */ constructor(solver, target, weight = 1.0){
20
+ super(weight);
21
+ this._solver = solver;
22
+ this._target = target.clone();
23
+ }
24
+ /**
25
+ * Get the IK solver.
26
+ */ get solver() {
27
+ return this._solver;
28
+ }
29
+ /**
30
+ * Get the current target position.
31
+ */ get target() {
32
+ return this._target.clone();
33
+ }
34
+ /**
35
+ * Set the target position for the end effector.
36
+ *
37
+ * @param target - New target position (will be cloned)
38
+ */ setTarget(target) {
39
+ this._target.set(target);
40
+ }
41
+ /**
42
+ * Apply IK solving to skeleton joints.
43
+ */ apply(_skeleton, _deltaTime) {
44
+ if (!this._enabled || this._weight <= 0) {
45
+ return;
46
+ }
47
+ // Solve IK
48
+ this._solver.solve(this._target);
49
+ // Apply to nodes with blending
50
+ this._solver.applyToNodes(this._weight);
51
+ }
52
+ /**
53
+ * Reset the IK solver to initial state.
54
+ */ reset() {
55
+ // IK solvers typically don't need explicit reset
56
+ // as they solve based on current joint positions
57
+ }
58
+ }
59
+
60
+ export { IKModifier };
61
+ //# sourceMappingURL=ik_modifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ik_modifier.js","sources":["../../src/animation/ik_modifier.ts"],"sourcesContent":["import { SkeletonModifier } from './skeleton_modifier';\r\nimport type { Skeleton } from './skeleton';\r\nimport type { IKSolver } from './ik/ik_solver';\r\nimport type { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Skeleton modifier for IK solvers.\r\n *\r\n * Integrates IK solving into the skeleton post-processing pipeline.\r\n * The IK solver is executed each frame and results are blended with the base animation.\r\n *\r\n * @public\r\n */\r\nexport class IKModifier<Solver extends IKSolver = IKSolver> extends SkeletonModifier {\r\n private _solver: Solver;\r\n private _target: Vector3;\r\n\r\n /**\r\n * Create an IK post-processor.\r\n *\r\n * @param solver - The IK solver to integrate\r\n * @param target - Target position for the end effector\r\n * @param weight - Blend weight [0-1] (default: 1.0)\r\n */\r\n constructor(solver: Solver, target: Vector3, weight: number = 1.0) {\r\n super(weight);\r\n this._solver = solver;\r\n this._target = target.clone();\r\n }\r\n\r\n /**\r\n * Get the IK solver.\r\n */\r\n get solver(): Solver {\r\n return this._solver;\r\n }\r\n\r\n /**\r\n * Get the current target position.\r\n */\r\n get target(): Vector3 {\r\n return this._target.clone();\r\n }\r\n\r\n /**\r\n * Set the target position for the end effector.\r\n *\r\n * @param target - New target position (will be cloned)\r\n */\r\n setTarget(target: Vector3): void {\r\n this._target.set(target);\r\n }\r\n\r\n /**\r\n * Apply IK solving to skeleton joints.\r\n */\r\n apply(_skeleton: Skeleton, _deltaTime: number): void {\r\n if (!this._enabled || this._weight <= 0) {\r\n return;\r\n }\r\n\r\n // Solve IK\r\n this._solver.solve(this._target);\r\n\r\n // Apply to nodes with blending\r\n this._solver.applyToNodes(this._weight);\r\n }\r\n\r\n /**\r\n * Reset the IK solver to initial state.\r\n */\r\n reset(): void {\r\n // IK solvers typically don't need explicit reset\r\n // as they solve based on current joint positions\r\n }\r\n}\r\n"],"names":["IKModifier","SkeletonModifier","_solver","_target","solver","target","weight","clone","setTarget","set","apply","_skeleton","_deltaTime","_enabled","_weight","solve","applyToNodes","reset"],"mappings":";;AAKA;;;;;;;IAQO,MAAMA,UAAuDC,SAAAA,gBAAAA,CAAAA;IAC1DC,OAAgB;IAChBC,OAAiB;AAEzB;;;;;;AAMC,MACD,YAAYC,MAAc,EAAEC,MAAe,EAAEC,MAAAA,GAAiB,GAAG,CAAE;AACjE,QAAA,KAAK,CAACA,MAAAA,CAAAA;QACN,IAAI,CAACJ,OAAO,GAAGE,MAAAA;AACf,QAAA,IAAI,CAACD,OAAO,GAAGE,MAAAA,CAAOE,KAAK,EAAA;AAC7B;AAEA;;AAEC,MACD,IAAIH,MAAiB,GAAA;QACnB,OAAO,IAAI,CAACF,OAAO;AACrB;AAEA;;AAEC,MACD,IAAIG,MAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACF,OAAO,CAACI,KAAK,EAAA;AAC3B;AAEA;;;;MAKAC,SAAAA,CAAUH,MAAe,EAAQ;AAC/B,QAAA,IAAI,CAACF,OAAO,CAACM,GAAG,CAACJ,MAAAA,CAAAA;AACnB;AAEA;;AAEC,MACDK,KAAMC,CAAAA,SAAmB,EAAEC,UAAkB,EAAQ;QACnD,IAAI,CAAC,IAAI,CAACC,QAAQ,IAAI,IAAI,CAACC,OAAO,IAAI,CAAG,EAAA;AACvC,YAAA;AACF;;AAGA,QAAA,IAAI,CAACZ,OAAO,CAACa,KAAK,CAAC,IAAI,CAACZ,OAAO,CAAA;;AAG/B,QAAA,IAAI,CAACD,OAAO,CAACc,YAAY,CAAC,IAAI,CAACF,OAAO,CAAA;AACxC;AAEA;;AAEC,MACDG,KAAc,GAAA;;;AAGd;AACF;;;;"}
@@ -0,0 +1,71 @@
1
+ import { SkeletonPostProcessor } from './skeleton_postprocessor.js';
2
+
3
+ /**
4
+ * Post-processor wrapper for IK solvers.
5
+ *
6
+ * Integrates IK solving into the skeleton post-processing pipeline.
7
+ * The IK solver is executed each frame and results are blended with the base animation.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const ikChain = new IKChain([joint1, joint2, joint3]);
12
+ * const ikSolver = new FABRIKSolver(ikChain);
13
+ * const targetPos = new Vector3(1, 2, 3);
14
+ * const processor = new IKPostProcessor(ikSolver, targetPos, 1.0);
15
+ * skeleton.addPostProcessor(processor);
16
+ * ```
17
+ *
18
+ * @public
19
+ */ class IKPostProcessor extends SkeletonPostProcessor {
20
+ _solver;
21
+ _target;
22
+ /**
23
+ * Create an IK post-processor.
24
+ *
25
+ * @param solver - The IK solver to integrate
26
+ * @param target - Target position for the end effector
27
+ * @param weight - Blend weight [0-1] (default: 1.0)
28
+ * @param priority - Priority for ordering (default: 50)
29
+ */ constructor(solver, target, weight = 1.0, priority = 50){
30
+ super(weight, priority);
31
+ this._solver = solver;
32
+ this._target = target.clone();
33
+ }
34
+ /**
35
+ * Get the IK solver.
36
+ */ get solver() {
37
+ return this._solver;
38
+ }
39
+ /**
40
+ * Get the current target position.
41
+ */ get target() {
42
+ return this._target.clone();
43
+ }
44
+ /**
45
+ * Set the target position for the end effector.
46
+ *
47
+ * @param target - New target position (will be cloned)
48
+ */ setTarget(target) {
49
+ this._target.set(target);
50
+ }
51
+ /**
52
+ * Apply IK solving to skeleton joints.
53
+ */ apply(_skeleton, _deltaTime) {
54
+ if (!this._enabled || this._weight <= 0) {
55
+ return;
56
+ }
57
+ // Solve IK
58
+ this._solver.solve(this._target);
59
+ // Apply to nodes with blending
60
+ this._solver.applyToNodes(this._weight);
61
+ }
62
+ /**
63
+ * Reset the IK solver to initial state.
64
+ */ reset() {
65
+ // IK solvers typically don't need explicit reset
66
+ // as they solve based on current joint positions
67
+ }
68
+ }
69
+
70
+ export { IKPostProcessor };
71
+ //# sourceMappingURL=ik_postprocessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ik_postprocessor.js","sources":["../../src/animation/ik_postprocessor.ts"],"sourcesContent":["import { SkeletonPostProcessor } from './skeleton_postprocessor';\r\nimport type { Skeleton } from './skeleton';\r\nimport type { IKSolver } from './ik/ik_solver';\r\nimport type { Vector3 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Post-processor wrapper for IK solvers.\r\n *\r\n * Integrates IK solving into the skeleton post-processing pipeline.\r\n * The IK solver is executed each frame and results are blended with the base animation.\r\n *\r\n * @example\r\n * ```typescript\r\n * const ikChain = new IKChain([joint1, joint2, joint3]);\r\n * const ikSolver = new FABRIKSolver(ikChain);\r\n * const targetPos = new Vector3(1, 2, 3);\r\n * const processor = new IKPostProcessor(ikSolver, targetPos, 1.0);\r\n * skeleton.addPostProcessor(processor);\r\n * ```\r\n *\r\n * @public\r\n */\r\nexport class IKPostProcessor<Solver extends IKSolver = IKSolver> extends SkeletonPostProcessor {\r\n private _solver: Solver;\r\n private _target: Vector3;\r\n\r\n /**\r\n * Create an IK post-processor.\r\n *\r\n * @param solver - The IK solver to integrate\r\n * @param target - Target position for the end effector\r\n * @param weight - Blend weight [0-1] (default: 1.0)\r\n * @param priority - Priority for ordering (default: 50)\r\n */\r\n constructor(solver: Solver, target: Vector3, weight: number = 1.0, priority: number = 50) {\r\n super(weight, priority);\r\n this._solver = solver;\r\n this._target = target.clone();\r\n }\r\n\r\n /**\r\n * Get the IK solver.\r\n */\r\n get solver(): Solver {\r\n return this._solver;\r\n }\r\n\r\n /**\r\n * Get the current target position.\r\n */\r\n get target(): Vector3 {\r\n return this._target.clone();\r\n }\r\n\r\n /**\r\n * Set the target position for the end effector.\r\n *\r\n * @param target - New target position (will be cloned)\r\n */\r\n setTarget(target: Vector3): void {\r\n this._target.set(target);\r\n }\r\n\r\n /**\r\n * Apply IK solving to skeleton joints.\r\n */\r\n apply(_skeleton: Skeleton, _deltaTime: number): void {\r\n if (!this._enabled || this._weight <= 0) {\r\n return;\r\n }\r\n\r\n // Solve IK\r\n this._solver.solve(this._target);\r\n\r\n // Apply to nodes with blending\r\n this._solver.applyToNodes(this._weight);\r\n }\r\n\r\n /**\r\n * Reset the IK solver to initial state.\r\n */\r\n reset(): void {\r\n // IK solvers typically don't need explicit reset\r\n // as they solve based on current joint positions\r\n }\r\n}\r\n"],"names":["IKPostProcessor","SkeletonPostProcessor","_solver","_target","solver","target","weight","priority","clone","setTarget","set","apply","_skeleton","_deltaTime","_enabled","_weight","solve","applyToNodes","reset"],"mappings":";;AAKA;;;;;;;;;;;;;;;;IAiBO,MAAMA,eAA4DC,SAAAA,qBAAAA,CAAAA;IAC/DC,OAAgB;IAChBC,OAAiB;AAEzB;;;;;;;MAQA,WAAA,CAAYC,MAAc,EAAEC,MAAe,EAAEC,SAAiB,GAAG,EAAEC,QAAmB,GAAA,EAAE,CAAE;AACxF,QAAA,KAAK,CAACD,MAAQC,EAAAA,QAAAA,CAAAA;QACd,IAAI,CAACL,OAAO,GAAGE,MAAAA;AACf,QAAA,IAAI,CAACD,OAAO,GAAGE,MAAAA,CAAOG,KAAK,EAAA;AAC7B;AAEA;;AAEC,MACD,IAAIJ,MAAiB,GAAA;QACnB,OAAO,IAAI,CAACF,OAAO;AACrB;AAEA;;AAEC,MACD,IAAIG,MAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAACF,OAAO,CAACK,KAAK,EAAA;AAC3B;AAEA;;;;MAKAC,SAAAA,CAAUJ,MAAe,EAAQ;AAC/B,QAAA,IAAI,CAACF,OAAO,CAACO,GAAG,CAACL,MAAAA,CAAAA;AACnB;AAEA;;AAEC,MACDM,KAAMC,CAAAA,SAAmB,EAAEC,UAAkB,EAAQ;QACnD,IAAI,CAAC,IAAI,CAACC,QAAQ,IAAI,IAAI,CAACC,OAAO,IAAI,CAAG,EAAA;AACvC,YAAA;AACF;;AAGA,QAAA,IAAI,CAACb,OAAO,CAACc,KAAK,CAAC,IAAI,CAACb,OAAO,CAAA;;AAG/B,QAAA,IAAI,CAACD,OAAO,CAACe,YAAY,CAAC,IAAI,CAACF,OAAO,CAAA;AACxC;AAEA;;AAEC,MACDG,KAAc,GAAA;;;AAGd;AACF;;;;"}
@@ -0,0 +1,156 @@
1
+ import { Vector3, Quaternion } from '@zephyr3d/base';
2
+ import { SkeletonPostProcessor } from './skeleton_postprocessor.js';
3
+
4
+ /**
5
+ * Post-processor for manual joint transform control.
6
+ *
7
+ * Allows setting custom transforms for specific joints that blend with
8
+ * the base animation/bind pose layer.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const processor = new ManualTransformProcessor();
13
+ * processor.setJointPosition(5, new Vector3(1, 2, 3));
14
+ * processor.setJointRotation(5, Quaternion.fromEuler(0, Math.PI / 2, 0));
15
+ * skeleton.addPostProcessor(processor);
16
+ * ```
17
+ *
18
+ * @public
19
+ */ class ManualTransformProcessor extends SkeletonPostProcessor {
20
+ /** Map of joint index to transform overrides */ _overrides;
21
+ constructor(weight = 1.0, priority = 100){
22
+ super(weight, priority);
23
+ this._overrides = new Map();
24
+ }
25
+ /**
26
+ * Set position override for a joint.
27
+ *
28
+ * @param jointIndex - Index of the joint in the skeleton
29
+ * @param position - New local position (will be cloned)
30
+ */ setJointPosition(jointIndex, position) {
31
+ let override = this._overrides.get(jointIndex);
32
+ if (!override) {
33
+ override = {};
34
+ this._overrides.set(jointIndex, override);
35
+ }
36
+ override.position = position.clone();
37
+ }
38
+ /**
39
+ * Set rotation override for a joint.
40
+ *
41
+ * @param jointIndex - Index of the joint in the skeleton
42
+ * @param rotation - New local rotation (will be cloned)
43
+ */ setJointRotation(jointIndex, rotation) {
44
+ let override = this._overrides.get(jointIndex);
45
+ if (!override) {
46
+ override = {};
47
+ this._overrides.set(jointIndex, override);
48
+ }
49
+ override.rotation = rotation.clone();
50
+ }
51
+ /**
52
+ * Set scale override for a joint.
53
+ *
54
+ * @param jointIndex - Index of the joint in the skeleton
55
+ * @param scale - New local scale (will be cloned)
56
+ */ setJointScale(jointIndex, scale) {
57
+ let override = this._overrides.get(jointIndex);
58
+ if (!override) {
59
+ override = {};
60
+ this._overrides.set(jointIndex, override);
61
+ }
62
+ override.scale = scale.clone();
63
+ }
64
+ /**
65
+ * Set full transform override for a joint.
66
+ *
67
+ * @param jointIndex - Index of the joint in the skeleton
68
+ * @param position - New local position (optional)
69
+ * @param rotation - New local rotation (optional)
70
+ * @param scale - New local scale (optional)
71
+ */ setJointTransform(jointIndex, position, rotation, scale) {
72
+ const override = {};
73
+ if (position) {
74
+ override.position = position.clone();
75
+ }
76
+ if (rotation) {
77
+ override.rotation = rotation.clone();
78
+ }
79
+ if (scale) {
80
+ override.scale = scale.clone();
81
+ }
82
+ this._overrides.set(jointIndex, override);
83
+ }
84
+ /**
85
+ * Clear override for a specific joint.
86
+ *
87
+ * @param jointIndex - Index of the joint to clear
88
+ */ clearJoint(jointIndex) {
89
+ this._overrides.delete(jointIndex);
90
+ }
91
+ /**
92
+ * Clear all joint overrides.
93
+ */ clearAll() {
94
+ this._overrides.clear();
95
+ }
96
+ /**
97
+ * Check if a joint has any overrides.
98
+ *
99
+ * @param jointIndex - Index of the joint to check
100
+ * @returns True if the joint has overrides
101
+ */ hasOverride(jointIndex) {
102
+ return this._overrides.has(jointIndex);
103
+ }
104
+ /**
105
+ * Get the number of joints with overrides.
106
+ */ get overrideCount() {
107
+ return this._overrides.size;
108
+ }
109
+ /**
110
+ * Apply manual transform overrides to skeleton joints.
111
+ */ apply(skeleton, _deltaTime) {
112
+ if (!this._enabled || this._overrides.size === 0 || this._weight <= 0) {
113
+ return;
114
+ }
115
+ const joints = skeleton.joints;
116
+ const weight = this._weight;
117
+ this._overrides.forEach((override, jointIndex)=>{
118
+ if (jointIndex < 0 || jointIndex >= joints.length) {
119
+ return;
120
+ }
121
+ const joint = joints[jointIndex];
122
+ // Blend position
123
+ if (override.position) {
124
+ if (weight >= 1) {
125
+ joint.position = override.position;
126
+ } else {
127
+ joint.position = Vector3.combine(joint.position, override.position, weight, 1 - weight);
128
+ }
129
+ }
130
+ // Blend rotation
131
+ if (override.rotation) {
132
+ if (weight >= 1) {
133
+ joint.rotation = override.rotation;
134
+ } else {
135
+ joint.rotation = Quaternion.slerp(joint.rotation, override.rotation, weight);
136
+ }
137
+ }
138
+ // Blend scale
139
+ if (override.scale) {
140
+ if (weight >= 1) {
141
+ joint.scale = override.scale;
142
+ } else {
143
+ joint.scale = Vector3.combine(joint.scale, override.scale, weight, 1 - weight);
144
+ }
145
+ }
146
+ });
147
+ }
148
+ /**
149
+ * Reset the processor (clears all overrides).
150
+ */ reset() {
151
+ this._overrides.clear();
152
+ }
153
+ }
154
+
155
+ export { ManualTransformProcessor };
156
+ //# sourceMappingURL=manual_transform_processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual_transform_processor.js","sources":["../../src/animation/manual_transform_processor.ts"],"sourcesContent":["import { Vector3, Quaternion } from '@zephyr3d/base';\r\nimport { SkeletonPostProcessor } from './skeleton_postprocessor';\r\nimport type { Skeleton } from './skeleton';\r\n\r\n/**\r\n * Manual transform override for specific joints.\r\n *\r\n * Stores position, rotation, and scale overrides for joints and blends them\r\n * with the base animation layer.\r\n */\r\ninterface JointOverride {\r\n position?: Vector3;\r\n rotation?: Quaternion;\r\n scale?: Vector3;\r\n}\r\n\r\n/**\r\n * Post-processor for manual joint transform control.\r\n *\r\n * Allows setting custom transforms for specific joints that blend with\r\n * the base animation/bind pose layer.\r\n *\r\n * @example\r\n * ```typescript\r\n * const processor = new ManualTransformProcessor();\r\n * processor.setJointPosition(5, new Vector3(1, 2, 3));\r\n * processor.setJointRotation(5, Quaternion.fromEuler(0, Math.PI / 2, 0));\r\n * skeleton.addPostProcessor(processor);\r\n * ```\r\n *\r\n * @public\r\n */\r\nexport class ManualTransformProcessor extends SkeletonPostProcessor {\r\n /** Map of joint index to transform overrides */\r\n private _overrides: Map<number, JointOverride>;\r\n\r\n constructor(weight: number = 1.0, priority: number = 100) {\r\n super(weight, priority);\r\n this._overrides = new Map();\r\n }\r\n\r\n /**\r\n * Set position override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param position - New local position (will be cloned)\r\n */\r\n setJointPosition(jointIndex: number, position: Vector3): void {\r\n let override = this._overrides.get(jointIndex);\r\n if (!override) {\r\n override = {};\r\n this._overrides.set(jointIndex, override);\r\n }\r\n override.position = position.clone();\r\n }\r\n\r\n /**\r\n * Set rotation override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param rotation - New local rotation (will be cloned)\r\n */\r\n setJointRotation(jointIndex: number, rotation: Quaternion): void {\r\n let override = this._overrides.get(jointIndex);\r\n if (!override) {\r\n override = {};\r\n this._overrides.set(jointIndex, override);\r\n }\r\n override.rotation = rotation.clone();\r\n }\r\n\r\n /**\r\n * Set scale override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param scale - New local scale (will be cloned)\r\n */\r\n setJointScale(jointIndex: number, scale: Vector3): void {\r\n let override = this._overrides.get(jointIndex);\r\n if (!override) {\r\n override = {};\r\n this._overrides.set(jointIndex, override);\r\n }\r\n override.scale = scale.clone();\r\n }\r\n\r\n /**\r\n * Set full transform override for a joint.\r\n *\r\n * @param jointIndex - Index of the joint in the skeleton\r\n * @param position - New local position (optional)\r\n * @param rotation - New local rotation (optional)\r\n * @param scale - New local scale (optional)\r\n */\r\n setJointTransform(jointIndex: number, position?: Vector3, rotation?: Quaternion, scale?: Vector3): void {\r\n const override: JointOverride = {};\r\n if (position) {\r\n override.position = position.clone();\r\n }\r\n if (rotation) {\r\n override.rotation = rotation.clone();\r\n }\r\n if (scale) {\r\n override.scale = scale.clone();\r\n }\r\n this._overrides.set(jointIndex, override);\r\n }\r\n\r\n /**\r\n * Clear override for a specific joint.\r\n *\r\n * @param jointIndex - Index of the joint to clear\r\n */\r\n clearJoint(jointIndex: number): void {\r\n this._overrides.delete(jointIndex);\r\n }\r\n\r\n /**\r\n * Clear all joint overrides.\r\n */\r\n clearAll(): void {\r\n this._overrides.clear();\r\n }\r\n\r\n /**\r\n * Check if a joint has any overrides.\r\n *\r\n * @param jointIndex - Index of the joint to check\r\n * @returns True if the joint has overrides\r\n */\r\n hasOverride(jointIndex: number): boolean {\r\n return this._overrides.has(jointIndex);\r\n }\r\n\r\n /**\r\n * Get the number of joints with overrides.\r\n */\r\n get overrideCount(): number {\r\n return this._overrides.size;\r\n }\r\n\r\n /**\r\n * Apply manual transform overrides to skeleton joints.\r\n */\r\n apply(skeleton: Skeleton, _deltaTime: number): void {\r\n if (!this._enabled || this._overrides.size === 0 || this._weight <= 0) {\r\n return;\r\n }\r\n\r\n const joints = skeleton.joints;\r\n const weight = this._weight;\r\n\r\n this._overrides.forEach((override, jointIndex) => {\r\n if (jointIndex < 0 || jointIndex >= joints.length) {\r\n return;\r\n }\r\n\r\n const joint = joints[jointIndex];\r\n\r\n // Blend position\r\n if (override.position) {\r\n if (weight >= 1) {\r\n joint.position = override.position;\r\n } else {\r\n joint.position = Vector3.combine(joint.position, override.position, weight, 1 - weight);\r\n }\r\n }\r\n\r\n // Blend rotation\r\n if (override.rotation) {\r\n if (weight >= 1) {\r\n joint.rotation = override.rotation;\r\n } else {\r\n joint.rotation = Quaternion.slerp(joint.rotation, override.rotation, weight);\r\n }\r\n }\r\n\r\n // Blend scale\r\n if (override.scale) {\r\n if (weight >= 1) {\r\n joint.scale = override.scale;\r\n } else {\r\n joint.scale = Vector3.combine(joint.scale, override.scale, weight, 1 - weight);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reset the processor (clears all overrides).\r\n */\r\n reset(): void {\r\n this._overrides.clear();\r\n }\r\n}\r\n"],"names":["ManualTransformProcessor","SkeletonPostProcessor","weight","priority","_overrides","Map","setJointPosition","jointIndex","position","override","get","set","clone","setJointRotation","rotation","setJointScale","scale","setJointTransform","clearJoint","delete","clearAll","clear","hasOverride","has","overrideCount","size","apply","skeleton","_deltaTime","_enabled","_weight","joints","forEach","length","joint","Vector3","combine","Quaternion","slerp","reset"],"mappings":"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"}
@@ -32,42 +32,32 @@ const tmpV3 = new Vector3();
32
32
  /** @internal */ _id;
33
33
  /** @internal */ _joints;
34
34
  /** @internal */ _inverseBindMatrices;
35
- /** @internal */ _bindPoseMatrices;
35
+ /** @internal */ _bindPose;
36
36
  /** @internal */ _jointMatrices;
37
- /** @internal */ _jointTransforms;
38
37
  /** @internal */ _jointOffsets;
39
38
  /** @internal */ _jointMatrixArray;
40
39
  /** @internal */ _jointTexture;
41
40
  /** @internal */ _playing;
41
+ /** @internal */ _modifiers;
42
+ /** @internal */ _lastUpdateTime;
42
43
  /**
43
44
  * Create a skeleton instance.
44
45
  *
45
46
  * @param joints - Joint scene nodes (one per joint), ordered to match skin data.
46
47
  * @param inverseBindMatrices - Inverse bind matrices for each joint.
47
48
  * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).
48
- */ constructor(joints, inverseBindMatrices, bindPoseMatrices, jointTransforms){
49
+ */ constructor(joints, inverseBindMatrices, bindPose){
49
50
  super();
50
51
  this._id = randomUUID();
51
52
  this._joints = joints;
52
53
  this._inverseBindMatrices = inverseBindMatrices;
53
- this._bindPoseMatrices = bindPoseMatrices;
54
+ this._bindPose = bindPose;
54
55
  this._jointTexture = new DRef();
55
56
  this._playing = false;
56
- if (jointTransforms) {
57
- this._jointTransforms = jointTransforms;
58
- for(let i = 0; i < jointTransforms.length; i++){
59
- this._joints[i].scale = jointTransforms[i].scale;
60
- this._joints[i].rotation = jointTransforms[i].rotation;
61
- this._joints[i].position = jointTransforms[i].position;
62
- }
63
- } else {
64
- this._jointTransforms = this._joints.map((joint)=>({
65
- scale: joint.scale.clone(),
66
- rotation: joint.rotation.clone(),
67
- position: joint.position.clone()
68
- }));
69
- }
70
- this.updateJointMatrices();
57
+ this._modifiers = [];
58
+ this._lastUpdateTime = 0;
59
+ this.computeBindPose();
60
+ this.updateJointMatrices(0);
71
61
  Skeleton._registry.set(this._id, new DWeakRef(this));
72
62
  }
73
63
  /**
@@ -87,14 +77,11 @@ const tmpV3 = new Vector3();
87
77
  /** @internal */ get joints() {
88
78
  return this._joints;
89
79
  }
90
- /** @internal */ get jointTransforms() {
91
- return this._jointTransforms;
92
- }
93
80
  /** @internal */ get inverseBindMatrices() {
94
81
  return this._inverseBindMatrices;
95
82
  }
96
- /** @internal */ get bindPoseMatrices() {
97
- return this._bindPoseMatrices;
83
+ /** @internal */ get bindPose() {
84
+ return this._bindPose;
98
85
  }
99
86
  /** @internal */ get playing() {
100
87
  return this._playing;
@@ -124,6 +111,20 @@ const tmpV3 = new Vector3();
124
111
  return this._jointTexture.get();
125
112
  }
126
113
  /**
114
+ * Get joint index by joint node
115
+ * @param joint - joint node
116
+ * @returns The index of the joint
117
+ */ getJointIndex(joint) {
118
+ return this._joints.indexOf(joint);
119
+ }
120
+ /**
121
+ * Get joint index by joint name
122
+ * @param jointName - joint name
123
+ * @returns The index of the joint
124
+ */ getJointIndexByName(jointName) {
125
+ return this._joints.findIndex((joint)=>joint.name === jointName);
126
+ }
127
+ /**
127
128
  * Update joint matrices from either provided transforms or the joints' world matrices.
128
129
  *
129
130
  * - Lazily creates the joint texture and its backing arrays on first call.
@@ -138,7 +139,8 @@ const tmpV3 = new Vector3();
138
139
  * @param jointTransforms - Optional per-joint transforms to use instead of node world matrices.
139
140
  * @param worldMatrix - Optional world-to-model transform applied before inverse bind.
140
141
  * @internal
141
- */ updateJointMatrices(jointTransforms, worldMatrix) {
142
+ */ updateJointMatrices(deltaTime) {
143
+ this.applyModifiers(deltaTime);
142
144
  if (!this._jointTexture.get()) {
143
145
  this._createJointTexture();
144
146
  }
@@ -150,48 +152,50 @@ const tmpV3 = new Vector3();
150
152
  this._jointOffsets[0] = this._joints.length - this._jointOffsets[0] + 2;
151
153
  }
152
154
  for(let i = 0; i < this._joints.length; i++){
153
- const mat = this._jointMatrices[i + this._jointOffsets[0] - 1];
154
- const jointTransform = jointTransforms ? jointTransforms[i] : this._joints[i].worldMatrix;
155
- if (worldMatrix) {
156
- Matrix4x4.multiplyAffine(worldMatrix, jointTransform, mat);
157
- Matrix4x4.multiply(mat, this._inverseBindMatrices[i], mat);
158
- } else {
159
- Matrix4x4.multiply(jointTransform, this._inverseBindMatrices[i], mat);
160
- }
155
+ Matrix4x4.multiply(this._joints[i].worldMatrix, this._inverseBindMatrices[i], this._jointMatrices[i + this._jointOffsets[0] - 1]);
161
156
  }
162
157
  }
163
158
  /**
164
- * Compute and upload the bind pose matrices to the joint texture for a given model.
165
- *
166
- * - Fills the "current" ring buffer slot with bind pose transforms.
167
- * - Uploads the entire matrix array to the GPU texture.
159
+ * Reset skeleton to bind pose
168
160
  *
169
- * @param model - The model node whose world matrix provides the reference space.
170
161
  * @internal
171
- */ computeBindPose(model) {
172
- this.updateJointMatrices(this._bindPoseMatrices, model.worldMatrix);
173
- this._jointOffsets[1] = this._jointOffsets[0];
174
- const tex = this.jointTexture;
175
- tex.update(this._jointMatrixArray, 0, 0, tex.width, tex.height);
162
+ */ computeBindPose() {
163
+ for(let i = 0; i < this._joints.length; i++){
164
+ const joint = this._joints[i];
165
+ const bindpose = this._bindPose[i];
166
+ joint.position.set(bindpose.position);
167
+ joint.rotation.set(bindpose.rotation);
168
+ joint.scale.set(bindpose.scale);
169
+ }
176
170
  }
177
171
  /**
178
172
  * Compute current joint matrices from the nodes and upload them to the joint texture.
179
173
  *
180
174
  * @internal
181
- */ computeJoints() {
182
- this.updateJointMatrices();
175
+ */ apply(deltaTime) {
176
+ this.updateJointMatrices(deltaTime);
183
177
  const tex = this.jointTexture;
184
178
  tex.update(this._jointMatrixArray, 0, 0, tex.width, tex.height);
185
179
  }
186
180
  /**
187
- * Apply current skeleton state to all meshes:
188
- * - Updates joint matrices and uploads to the texture.
189
- * - Computes animated bounding boxes per mesh in model space.
190
- * - Binds the joint texture to each mesh for GPU skinning.
181
+ * Apply all enabled modifiers.
182
+ *
183
+ * Modifiers are applied after the base animation/bind pose layer,
184
+ * allowing procedural modifications like IK, spring physics, or manual overrides.
191
185
  *
186
+ * @param deltaTime - Time elapsed since last frame (in seconds)
192
187
  * @internal
193
- */ apply() {
194
- this.computeJoints();
188
+ */ applyModifiers(deltaTime) {
189
+ for (const modifier of this._modifiers){
190
+ modifier.apply(this, deltaTime);
191
+ }
192
+ }
193
+ /**
194
+ * Get all modifiers attached to this skeleton.
195
+ *
196
+ * @public
197
+ */ get modifiers() {
198
+ return this._modifiers;
195
199
  }
196
200
  /**
197
201
  * Reset all meshes to an unskinned state and clear animated bounds.