@zephyr3d/scene 0.9.27 → 0.10.0

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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","sources":["../../src/animation/skeleton.ts"],"sourcesContent":["import { DRef, randomUUID, DWeakRef } from '@zephyr3d/base';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Vector3, nextPowerOf2 } from '@zephyr3d/base';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkeletonModifier } from './skeleton_modifier';\r\n\r\n/**\r\n * Standardized humanoid joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidBodyRig {\r\n Hips = 'Hips',\r\n Spine = 'Spine',\r\n Chest = 'Chest',\r\n UpperChest = 'UpperChest',\r\n Neck = 'Neck',\r\n Head = 'Head',\r\n\r\n LeftShoulder = 'LeftShoulder',\r\n LeftUpperArm = 'LeftUpperArm',\r\n LeftLowerArm = 'LeftLowerArm',\r\n LeftHand = 'LeftHand',\r\n\r\n RightShoulder = 'RightShoulder',\r\n RightUpperArm = 'RightUpperArm',\r\n RightLowerArm = 'RightLowerArm',\r\n RightHand = 'RightHand',\r\n\r\n LeftUpperLeg = 'LeftUpperLeg',\r\n LeftLowerLeg = 'LeftLowerLeg',\r\n LeftFoot = 'LeftFoot',\r\n LeftToes = 'LeftToes',\r\n\r\n RightUpperLeg = 'RightUpperLeg',\r\n RightLowerLeg = 'RightLowerLeg',\r\n RightFoot = 'RightFoot',\r\n RightToes = 'RightToes'\r\n}\r\n\r\n/**\r\n * Standardized humanoid hand joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidHandRig {\r\n ThumbProximal = 'ThumbProximal',\r\n ThumbIntermediate = 'ThumbIntermediate',\r\n ThumbDistal = 'ThumbDistal',\r\n IndexProximal = 'IndexProximal',\r\n IndexIntermediate = 'IndexIntermediate',\r\n IndexDistal = 'IndexDistal',\r\n MiddleProximal = 'MiddleProximal',\r\n MiddleIntermediate = 'MiddleIntermediate',\r\n MiddleDistal = 'MiddleDistal',\r\n RingProximal = 'RingProximal',\r\n RingIntermediate = 'RingIntermediate',\r\n RingDistal = 'RingDistal',\r\n PinkyProximal = 'PinkyProximal',\r\n PinkyIntermediate = 'PinkyIntermediate',\r\n PinkyDistal = 'PinkyDistal'\r\n}\r\n\r\n/**\r\n * Skinned bounding box information for a submesh.\r\n *\r\n * Used to compute animated AABB for skinned meshes.\r\n *\r\n * @public\r\n */\r\nexport interface SkinnedBoundingBox {\r\n /**\r\n * Number of influences stored per representative vertex.\r\n */\r\n influenceCount?: number;\r\n /**\r\n * Representative vertices used to bound a skinned mesh (extreme points along axes).\r\n */\r\n boundingVertices: Vector3[];\r\n /**\r\n * Joint indices for each representative vertex, flattened.\r\n */\r\n boundingVertexBlendIndices: Float32Array;\r\n /**\r\n * Corresponding joint weights for each representative vertex, flattened.\r\n * Layout matches `boundingVertexBlendIndices`.\r\n */\r\n boundingVertexJointWeights: Float32Array;\r\n /**\r\n * Computed axis-aligned bounding box in model space for the current pose.\r\n */\r\n boundingBox: BoundingBox;\r\n}\r\n\r\nconst tmpV0 = new Vector3();\r\nconst tmpV1 = new Vector3();\r\n\r\n/**\r\n * Humanoid joint mapping\r\n * @public\r\n */\r\nexport type HumanoidJointMapping<T extends { name: string; parent: Nullable<T>; children: T[] }> = {\r\n body: Record<HumanoidBodyRig, T>;\r\n leftHand?: Record<HumanoidHandRig, T>;\r\n rightHand?: Record<HumanoidHandRig, T>;\r\n};\r\n\r\n/** @public */\r\nexport type SkeletonBindPose = { rotation: Quaternion; scale: Vector3; position: Vector3 };\r\n\r\n/** @public */\r\nexport type SkeletonRigOptions = {\r\n rootJoint?: Nullable<SceneNode>;\r\n rootBindPose?: SkeletonBindPose;\r\n humanoidJointMapping?: Nullable<HumanoidJointMapping<SceneNode>>;\r\n /**\r\n * Optional humanoid retarget reference pose, ordered like `joints`.\r\n * When omitted, the rig bind pose is used as the retarget reference.\r\n */\r\n retargetPose?: Nullable<SkeletonBindPose[]>;\r\n};\r\n\r\ntype HumanoidJointPattern = {\r\n all?: string[];\r\n any?: string[];\r\n none?: string[];\r\n};\r\n\r\ntype HumanoidJointProfile<T extends string> = Record<T, HumanoidJointPattern[]>;\r\n\r\nconst humanoidHelperJointTokens = new Set(['end', 'nub', 'socket']);\r\n\r\ntype HumanoidJointNodeInfo<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n depth: number;\r\n tokens: string[];\r\n tokenSet: Set<string>;\r\n};\r\n\r\ntype HumanoidJointMatchCandidate<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n score: number;\r\n};\r\n\r\n/**\r\n * Shared joint rig for skeletal animation.\r\n *\r\n * A rig owns the animated joint nodes, bind pose, humanoid mapping and procedural\r\n * modifiers. Multiple skin bindings may reference the same rig with different\r\n * inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class SkeletonRig extends Disposable {\r\n private static readonly _registry: Map<string, DWeakRef<SkeletonRig>> = new Map();\r\n protected _id: string;\r\n protected _joints: SceneNode[];\r\n protected _bindPoseByJoint: Map<SceneNode, SkeletonBindPose>;\r\n protected _bindPose: SkeletonBindPose[];\r\n protected _retargetPoseByJoint: Nullable<Map<SceneNode, SkeletonBindPose>>;\r\n protected _retargetPose: Nullable<SkeletonBindPose[]>;\r\n protected _rootJoint: Nullable<SceneNode>;\r\n protected _rootBindPose: SkeletonBindPose;\r\n protected _playing: boolean;\r\n protected _modifiers: SkeletonModifier[];\r\n protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;\r\n protected _humanoidRootRotation: Quaternion;\r\n\r\n constructor(joints: SceneNode[], bindPose: SkeletonBindPose[], options?: SkeletonRigOptions) {\r\n super();\r\n this._id = randomUUID();\r\n this._joints = joints;\r\n this._bindPose = bindPose;\r\n this._bindPoseByJoint = new Map();\r\n for (let i = 0; i < joints.length; i++) {\r\n this._bindPoseByJoint.set(joints[i], bindPose[i]);\r\n }\r\n if (options?.retargetPose && options.retargetPose.length !== joints.length) {\r\n throw new Error('SkeletonRig(): retarget pose must contain one transform per joint');\r\n }\r\n this._retargetPose = options?.retargetPose ?? null;\r\n this._retargetPoseByJoint = this._retargetPose\r\n ? new Map(joints.map((joint, index) => [joint, this._retargetPose![index]]))\r\n : null;\r\n const skeletonRoot = this.findRootJoint(this._joints);\r\n this._rootJoint = options?.rootJoint ?? skeletonRoot;\r\n this._rootBindPose = options?.rootBindPose ?? this.getNodeBindPose(this._rootJoint);\r\n this._playing = false;\r\n this._modifiers = [];\r\n this.computeBindPose();\r\n this._humanoidJointMapping =\r\n options?.humanoidJointMapping !== undefined\r\n ? options.humanoidJointMapping\r\n : skeletonRoot\r\n ? Skeleton.tryExtractHumanoidJoints(skeletonRoot)\r\n : null;\r\n this._humanoidRootRotation = Quaternion.identity();\r\n const hips = this._humanoidJointMapping?.body[HumanoidBodyRig.Hips];\r\n if (hips) {\r\n let p = hips;\r\n while (this._joints.includes(p.parent!)) {\r\n Quaternion.multiply(p.parent!.rotation, this._humanoidRootRotation, this._humanoidRootRotation);\r\n p = p.parent!;\r\n }\r\n }\r\n SkeletonRig._registry.set(this._id, new DWeakRef(this));\r\n }\r\n\r\n static getRigKey(joints: SceneNode[], rootJoint?: Nullable<SceneNode>) {\r\n return [rootJoint?.persistentId ?? '', ...joints.map((joint) => joint.persistentId).sort()].join('|');\r\n }\r\n\r\n static findRigById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n\r\n get persistentId() {\r\n return this._id;\r\n }\r\n\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skeleton rig mismatch');\r\n }\r\n SkeletonRig._registry.delete(this._id);\r\n this._id = val;\r\n SkeletonRig._registry.set(this._id, m);\r\n }\r\n }\r\n\r\n get joints() {\r\n return this._joints;\r\n }\r\n\r\n get bindPose() {\r\n return this._bindPose;\r\n }\r\n\r\n /** Effective humanoid retarget reference pose. */\r\n get retargetPose() {\r\n return this._retargetPose ?? this._bindPose;\r\n }\r\n\r\n /** Whether this rig has a reference pose that is distinct from its bind pose. */\r\n get hasRetargetPose() {\r\n return !!this._retargetPose;\r\n }\r\n\r\n get rootJoint(): Nullable<SceneNode> {\r\n return this._rootJoint;\r\n }\r\n\r\n set rootJoint(joint: Nullable<SceneNode>) {\r\n this._rootJoint = joint;\r\n this._rootBindPose = this.getNodeBindPose(joint);\r\n }\r\n\r\n get rootBindPose(): SkeletonBindPose {\r\n return this._rootBindPose;\r\n }\r\n\r\n getBindPoseForJoint(joint: SceneNode) {\r\n return this._bindPoseByJoint.get(joint) ?? null;\r\n }\r\n\r\n getRetargetPoseForJoint(joint: SceneNode) {\r\n return this._retargetPoseByJoint?.get(joint) ?? this.getBindPoseForJoint(joint);\r\n }\r\n\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._humanoidJointMapping;\r\n }\r\n\r\n get humanoidRootRotation(): Quaternion {\r\n return this._humanoidRootRotation;\r\n }\r\n\r\n get modifiers(): SkeletonModifier[] {\r\n return this._modifiers;\r\n }\r\n\r\n get playing() {\r\n return this._playing;\r\n }\r\n\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n\r\n computeBindPose() {\r\n for (let i = 0; i < this._joints.length; i++) {\r\n const joint = this._joints[i];\r\n const bindpose = this._bindPose[i];\r\n joint.position.set(bindpose.position);\r\n joint.rotation.set(bindpose.rotation);\r\n joint.scale.set(bindpose.scale);\r\n }\r\n if (this._rootJoint && !this._bindPoseByJoint.has(this._rootJoint)) {\r\n this._rootJoint.position.set(this._rootBindPose.position);\r\n this._rootJoint.rotation.set(this._rootBindPose.rotation);\r\n this._rootJoint.scale.set(this._rootBindPose.scale);\r\n }\r\n }\r\n\r\n apply(deltaTime: number): void {\r\n for (const modifier of this._modifiers) {\r\n modifier.apply(this, deltaTime);\r\n }\r\n }\r\n\r\n reset() {\r\n this._playing = false;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkeletonRig._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n\r\n private findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n return root;\r\n }\r\n\r\n private getNodeBindPose(node: Nullable<SceneNode>): SkeletonBindPose {\r\n const bindPose = node ? this._bindPoseByJoint.get(node) : null;\r\n return bindPose\r\n ? {\r\n position: bindPose.position.clone(),\r\n rotation: bindPose.rotation.clone(),\r\n scale: bindPose.scale.clone()\r\n }\r\n : {\r\n position: node?.position.clone() ?? Vector3.zero(),\r\n rotation: node?.rotation.clone() ?? Quaternion.identity(),\r\n scale: node?.scale.clone() ?? Vector3.one()\r\n };\r\n }\r\n}\r\n\r\nfunction jointPattern(all: string[], none?: string[], any?: string[]): HumanoidJointPattern {\r\n return {\r\n all,\r\n any: any?.length ? any : undefined,\r\n none: none?.length ? none : undefined\r\n };\r\n}\r\n\r\nfunction sideJointPatterns(\r\n side: 'left' | 'right',\r\n patterns: Array<{ all: string[]; none?: string[]; any?: string[] }>\r\n): HumanoidJointPattern[] {\r\n const sideTokens = side === 'left' ? ['left', 'l'] : ['right', 'r'];\r\n return sideTokens.flatMap((sideToken) =>\r\n patterns.map((pattern) => ({\r\n all: [sideToken, ...pattern.all],\r\n any: pattern.any?.length ? [...pattern.any] : undefined,\r\n none: pattern.none?.length ? [...pattern.none] : undefined\r\n }))\r\n );\r\n}\r\n\r\n/**\r\n * Skin binding for skinned animation.\r\n *\r\n * Responsibilities:\r\n * - References a shared SkeletonRig.\r\n * - Maintains inverse bind and current skinning matrices for one skin.\r\n * - Provides a texture containing joint matrices for GPU skinning.\r\n * - Applies skinning state to associated meshes each frame.\r\n * - Computes animated axis-aligned bounding boxes using representative skinned vertices.\r\n *\r\n * Joint matrix texture layout:\r\n * - Texture format: `rgba32f`.\r\n * - Stored as a 2-layered ring buffer: current and previous joint transforms to support\r\n * temporal addressing if needed. Offsets are tracked in `_jointOffsets[0]` (current)\r\n * and `_jointOffsets[1]` (previous).\r\n *\r\n * Usage:\r\n * - Construct with a rig, bind data, meshes and submesh bounding info.\r\n * - Call `apply()` each frame to update joint texture, bind to meshes, and update bounds.\r\n * - Call `reset()` to clear skinning on meshes.\r\n *\r\n * @public\r\n */\r\nexport class SkinBinding extends Disposable {\r\n /** @internal Global weak registry keyed by persistentId for serialization/lookup. */\r\n private static readonly _registry: Map<string, DWeakRef<SkinBinding>> = new Map();\r\n /** @internal */\r\n protected _id: string;\r\n /** @internal */\r\n protected _rig: SkeletonRig;\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _jointMatrices!: Matrix4x4[];\r\n /** @internal */\r\n protected _jointOffsets!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointMatrixArray!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointTexture: DRef<Texture2D>;\r\n /** @internal */\r\n protected _playing: boolean;\r\n /** @internal */\r\n protected _lastUpdateTime: number;\r\n /**\r\n * Create a skin binding instance.\r\n *\r\n * @param rig - Shared skeleton rig that owns animated joint transforms.\r\n * @param joints - Joint scene nodes (one per joint), ordered to match skin data.\r\n * @param inverseBindMatrices - Inverse bind matrices for each joint.\r\n * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).\r\n */\r\n constructor(\r\n rig: SkeletonRig,\r\n inverseBindMatrices: Matrix4x4[],\r\n joints?: SceneNode[],\r\n bindPose?: SkeletonBindPose[]\r\n ) {\r\n super();\r\n this._id = randomUUID();\r\n this._rig = rig;\r\n this._joints = joints ?? rig.joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._jointTexture = new DRef();\r\n this._playing = false;\r\n this._lastUpdateTime = 0;\r\n if (bindPose && bindPose !== rig.bindPose) {\r\n // Legacy callers used Skeleton as both rig and binding. Keep the old bind\r\n // pose visible by replacing the rig pose only when explicitly supplied.\r\n this._rig = new SkeletonRig(rig.joints, bindPose, {\r\n rootJoint: rig.rootJoint,\r\n rootBindPose: rig.rootBindPose,\r\n humanoidJointMapping: rig.humanoidJointMapping,\r\n retargetPose: rig.hasRetargetPose ? rig.retargetPose : null\r\n });\r\n }\r\n this.updateJointMatrices();\r\n SkinBinding._registry.set(this._id, new DWeakRef(this));\r\n }\r\n /**\r\n * Lookup a skeleton from the global registry by persistent id.\r\n *\r\n * @param id - The persistent UUID to search for.\r\n * @returns The skeleton if alive, otherwise `null`.\r\n * @internal\r\n */\r\n static findSkinBindingById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n static findSkeletonById(id: string) {\r\n return this.findSkinBindingById(id);\r\n }\r\n get rig() {\r\n return this._rig;\r\n }\r\n /** Gets joint nodes */\r\n get joints() {\r\n return this._joints;\r\n }\r\n /** Gets the humanoid joint mapping */\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._rig.humanoidJointMapping;\r\n }\r\n /** Root rotation of humanoid hips bone */\r\n get humanoidRootRotation(): Quaternion {\r\n return this._rig.humanoidRootRotation;\r\n }\r\n /** @internal */\r\n get inverseBindMatrices() {\r\n return this._inverseBindMatrices;\r\n }\r\n /** @internal */\r\n get bindPose() {\r\n return this._joints.map((joint) => this._rig.getBindPoseForJoint(joint)!);\r\n }\r\n get playing() {\r\n return this._playing;\r\n }\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n get persistentId() {\r\n return this._id;\r\n }\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkinBinding._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skin binding mismatch');\r\n }\r\n SkinBinding._registry.delete(this._id);\r\n this._id = val;\r\n SkinBinding._registry.set(this._id, m);\r\n }\r\n }\r\n /**\r\n * Texture containing joint matrices for GPU skinning.\r\n *\r\n * Each matrix is stored in 4 texels (one row per texel, RGBA = 4 floats).\r\n */\r\n get jointTexture() {\r\n return this._jointTexture.get()!;\r\n }\r\n /**\r\n * Get joint index by joint node\r\n * @param joint - joint node\r\n * @returns The index of the joint\r\n */\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n /**\r\n * Get joint index by joint name\r\n * @param jointName - joint name\r\n * @returns The index of the joint\r\n */\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n /**\r\n * Update joint matrices from either provided transforms or the joints' world matrices.\r\n *\r\n * - Lazily creates the joint texture and its backing arrays on first call.\r\n * - Advances the ring buffer offset in `_jointOffsets` to write a new \"current\" set.\r\n * - For each joint:\r\n * - Optionally premultiplies by `worldMatrix` (to transform into model space).\r\n * - Computes skinning matrix: ( M_\\{skin\\} = M_\\{joint\\} \\\\times M_\\{inverseBind\\} ).\r\n *\r\n * Note: This method only writes into the CPU-side array; callers like `computeJoints()`\r\n * update the GPU texture.\r\n *\r\n * @param jointTransforms - Optional per-joint transforms to use instead of node world matrices.\r\n * @param worldMatrix - Optional world-to-model transform applied before inverse bind.\r\n * @internal\r\n */\r\n updateJointMatrices() {\r\n if (!this._jointTexture.get()) {\r\n this._createJointTexture();\r\n }\r\n if (this._jointOffsets[0] === 0) {\r\n this._jointOffsets[0] = 1;\r\n this._jointOffsets[1] = 1;\r\n } else {\r\n this._jointOffsets[1] = this._jointOffsets[0];\r\n this._jointOffsets[0] = this.joints.length - this._jointOffsets[0] + 2;\r\n }\r\n for (let i = 0; i < this.joints.length; i++) {\r\n Matrix4x4.multiply(\r\n this.joints[i].worldMatrix,\r\n this._inverseBindMatrices[i],\r\n this._jointMatrices[i + this._jointOffsets[0] - 1]\r\n );\r\n }\r\n }\r\n /**\r\n * Reset skeleton to bind pose\r\n *\r\n * @internal\r\n */\r\n computeBindPose() {\r\n this._rig.computeBindPose();\r\n }\r\n /**\r\n * Compute current joint matrices from the nodes and upload them to the joint texture.\r\n *\r\n * @internal\r\n */\r\n apply() {\r\n this.updateJointMatrices();\r\n const tex = this.jointTexture;\r\n this._syncJointMatrixArray();\r\n tex.update(this._jointMatrixArray, 0, 0, tex.width, tex.height);\r\n }\r\n /**\r\n * Apply all enabled modifiers.\r\n *\r\n * Modifiers are applied after the base animation/bind pose layer,\r\n * allowing procedural modifications like IK, spring physics, or manual overrides.\r\n *\r\n * @param deltaTime - Time elapsed since last frame (in seconds)\r\n * @internal\r\n */\r\n protected applyModifiers(deltaTime: number): void {\r\n this._rig.apply(deltaTime);\r\n }\r\n /**\r\n * Get all modifiers attached to this skeleton.\r\n *\r\n * @public\r\n */\r\n get modifiers(): SkeletonModifier[] {\r\n return this._rig.modifiers;\r\n }\r\n /**\r\n * Reset all meshes to an unskinned state and clear animated bounds.\r\n *\r\n * @internal\r\n */\r\n reset() {\r\n //this.updateJointMatrices(this._bindPoseMatrices);\r\n this._playing = false;\r\n }\r\n /**\r\n * Compute the animated bounding box for a single mesh using its representative vertices.\r\n *\r\n * For each representative vertex:\r\n * - Blends the vertex by up to 4 joint matrices using provided weights.\r\n * - Transforms to the mesh's local space using `invWorldMatrix`.\r\n * - Expands the bounding box.\r\n *\r\n * @param info - Precomputed bounding data (representative vertices, indices, weights).\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert to model/local space.\r\n * @internal\r\n */\r\n computeBoundingBox(info: SkinnedBoundingBox, invWorldMatrix: Matrix4x4) {\r\n info.boundingBox.beginExtend();\r\n const influenceCount = Math.max(1, info.influenceCount ?? 4);\r\n for (let i = 0; i < info.boundingVertices.length; i++) {\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(info.boundingVertexJointWeights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[\r\n (Number(info.boundingVertexBlendIndices[base + j]) || 0) + this._jointOffsets[0] - 1\r\n ];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(info.boundingVertices[i], tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n invWorldMatrix.transformPointAffine(tmpV0, tmpV0);\r\n info.boundingBox.extend(tmpV0);\r\n }\r\n }\r\n /**\r\n * Dispose GPU resources and references held by the skeleton.\r\n *\r\n * - Disposes the joint texture.\r\n * - Clears matrix arrays and joint references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._jointTexture.dispose();\r\n const m = SkinBinding._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkinBinding._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n /**\r\n * Initialize joint texture and CPU-side matrix storage.\r\n *\r\n * Layout details:\r\n * - Texture size is the next power-of-two able to contain all matrices plus two offset texels.\r\n * - `_jointMatrixArray` holds:\r\n * - First 2 vec4s: ring buffer offsets `[current, previous, 0, 0]`.\r\n * - Followed by 2×N matrices (current and previous), each as 16 floats.\r\n * - `_jointMatrices` is a view into `_jointMatrixArray` providing Matrix4x4 objects per slot.\r\n *\r\n * @internal\r\n */\r\n private _createJointTexture() {\r\n const textureWidth = nextPowerOf2(Math.max(4, Math.ceil(Math.sqrt((this.joints.length * 2 + 1) * 4))));\r\n const device = getDevice();\r\n this._jointTexture.set(\r\n device.createTexture2D('rgba32f', textureWidth, textureWidth, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n magFilter: 'nearest',\r\n minFilter: 'nearest'\r\n }\r\n })\r\n );\r\n this._jointMatrixArray = new Float32Array(textureWidth * textureWidth * 4);\r\n this._jointOffsets = this._jointMatrixArray.subarray(0, 2) as Float32Array<ArrayBuffer>;\r\n this._jointOffsets[0] = 0;\r\n this._jointOffsets[1] = 0;\r\n this._jointMatrices = Array.from({ length: this.joints.length * 2 }).map(() => new Matrix4x4());\r\n }\r\n private _syncJointMatrixArray() {\r\n for (let i = 0; i < this._jointMatrices.length; i++) {\r\n this._jointMatrixArray.set(this._jointMatrices[i], (i + 1) * 16);\r\n }\r\n }\r\n /**\r\n * Build representative skinned bounding data for a submesh.\r\n *\r\n * Strategy:\r\n * - For all vertices, compute their skinned position (using current ring buffer slot).\r\n * - Track the indices of the min/max extents along x, y, z (6 indices total).\r\n * - Store:\r\n * - The 6 representative positions in object space.\r\n * - Their 4 joint indices and weights (flattened).\r\n * - An empty BoundingBox to be filled during animation.\r\n *\r\n * @param meshData - Raw submesh attributes (positions, blend indices, weights).\r\n * @returns Skinned bounding box info used during per-frame updates.\r\n */\r\n getBoundingInfo(data: {\r\n positions: Float32Array;\r\n blendIndices: TypedArray;\r\n weights: TypedArray;\r\n influenceCount?: number;\r\n }) {\r\n const indices = [0, 0, 0, 0, 0, 0];\r\n let minx = Number.MAX_VALUE;\r\n let maxx = -Number.MAX_VALUE;\r\n let miny = Number.MAX_VALUE;\r\n let maxy = -Number.MAX_VALUE;\r\n let minz = Number.MAX_VALUE;\r\n let maxz = -Number.MAX_VALUE;\r\n const v = data.positions;\r\n const vert = new Vector3();\r\n const tmpV0 = new Vector3();\r\n const tmpV1 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\r\n const influenceCount = Math.max(1, data.influenceCount ?? 4);\r\n for (let i = 0; i < numVertices; i++) {\r\n vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(data.weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[(Number(data.blendIndices[base + j]) || 0) + this._jointOffsets[0] - 1];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(vert, tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n if (tmpV0.x < minx) {\r\n minx = tmpV0.x;\r\n indices[0] = i;\r\n }\r\n if (tmpV0.x > maxx) {\r\n maxx = tmpV0.x;\r\n indices[1] = i;\r\n }\r\n if (tmpV0.y < miny) {\r\n miny = tmpV0.y;\r\n indices[2] = i;\r\n }\r\n if (tmpV0.y > maxy) {\r\n maxy = tmpV0.y;\r\n indices[3] = i;\r\n }\r\n if (tmpV0.z < minz) {\r\n minz = tmpV0.z;\r\n indices[4] = i;\r\n }\r\n if (tmpV0.z > maxz) {\r\n maxz = tmpV0.z;\r\n indices[5] = i;\r\n }\r\n }\r\n const info: SkinnedBoundingBox = {\r\n influenceCount,\r\n boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.blendIndices[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.weights[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertices: Array.from({ length: 6 }).map(\r\n (val, index) =>\r\n new Vector3(\r\n data.positions[indices[index] * 3],\r\n data.positions[indices[index] * 3 + 1],\r\n data.positions[indices[index] * 3 + 2]\r\n )\r\n ),\r\n boundingBox: new BoundingBox()\r\n };\r\n return info;\r\n }\r\n /**\r\n * Skin all vertices into mesh-local space for the current skeleton pose.\r\n *\r\n * This is used by systems like cloth that need the animated mesh pose on CPU,\r\n * but render with GPU skinning disabled to avoid double deformation.\r\n *\r\n * @param positions - Bind-pose/object-space input positions, xyz packed.\r\n * @param blendIndices - 4 joint indices per vertex.\r\n * @param weights - 4 joint weights per vertex.\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert skinned world positions back to mesh-local space.\r\n * @param out - Optional output array to reuse.\r\n * @returns The skinned mesh-local positions.\r\n * @internal\r\n */\r\n skinPositionsToLocal(\r\n positions: Float32Array<ArrayBuffer>,\r\n blendIndices: ArrayLike<number>,\r\n weights: ArrayLike<number>,\r\n invWorldMatrix: Matrix4x4,\r\n out?: Float32Array<ArrayBuffer>,\r\n influenceCount?: number\r\n ) {\r\n const result = out && out.length === positions.length ? out : new Float32Array(positions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\r\n const effectiveInfluenceCount = Math.max(\r\n 1,\r\n influenceCount ??\r\n Math.max(1, Math.floor(weights.length / Math.max(1, Math.floor(positions.length / 3))))\r\n );\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const vertexIndex = (i / 3) >> 0;\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n let skinnedX = 0;\r\n let skinnedY = 0;\r\n let skinnedZ = 0;\r\n let weightSum = 0;\r\n const base = vertexIndex * effectiveInfluenceCount;\r\n for (let j = 0; j < effectiveInfluenceCount; j++) {\r\n const weight = Number(weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[base + j]) || 0) + matrixOffset;\r\n const matrix = this._jointMatrices[jointIndex];\r\n if (!matrix) {\r\n continue;\r\n }\r\n skinnedX += (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) * weight;\r\n skinnedY += (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) * weight;\r\n skinnedZ += (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) * weight;\r\n weightSum += weight;\r\n }\r\n if (weightSum <= 1e-6) {\r\n skinnedX = x;\r\n skinnedY = y;\r\n skinnedZ = z;\r\n }\r\n result[i] =\r\n invWorldMatrix[0] * skinnedX +\r\n invWorldMatrix[4] * skinnedY +\r\n invWorldMatrix[8] * skinnedZ +\r\n invWorldMatrix[12];\r\n result[i + 1] =\r\n invWorldMatrix[1] * skinnedX +\r\n invWorldMatrix[5] * skinnedY +\r\n invWorldMatrix[9] * skinnedZ +\r\n invWorldMatrix[13];\r\n result[i + 2] =\r\n invWorldMatrix[2] * skinnedX +\r\n invWorldMatrix[6] * skinnedY +\r\n invWorldMatrix[10] * skinnedZ +\r\n invWorldMatrix[14];\r\n }\r\n return result;\r\n }\r\n private static normalizeHumanoidJointName(name: string) {\r\n return name\r\n .slice(name.lastIndexOf(':') + 1)\r\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/([a-zA-Z])(\\d+)/g, '$1 $2')\r\n .replace(/(\\d+)([a-zA-Z])/g, '$1 $2')\r\n .replace(/[_:\\/\\\\.-]+/g, ' ')\r\n .replace(/[^a-zA-Z0-9]+/g, ' ')\r\n .toLowerCase()\r\n .replace(/\\bforearm\\b/g, 'fore arm')\r\n .replace(/\\bupperarm\\b/g, 'upper arm')\r\n .replace(/\\blowerarm\\b/g, 'lower arm')\r\n .replace(/\\bupleg\\b/g, 'up leg')\r\n .replace(/\\bupperleg\\b/g, 'upper leg')\r\n .replace(/\\blowerleg\\b/g, 'lower leg')\r\n .replace(/\\btoebase\\b/g, 'toe base')\r\n .replace(/\\bupperchest\\b/g, 'upper chest')\r\n .replace(/\\btoes\\b/g, 'toe')\r\n .replace(/\\blittle\\b/g, 'pinky')\r\n .replace(/\\bcollar\\b/g, 'clavicle')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n }\r\n private static getHumanoidJointNodeDepth<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T,\r\n node: T\r\n ) {\r\n let depth = 0;\r\n let current: Nullable<T> = node;\r\n while (current && current !== root) {\r\n depth++;\r\n current = current.parent;\r\n }\r\n return depth;\r\n }\r\n private static collectHumanoidJointNodeInfos<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointNodeInfo<T>[] {\r\n const nodes: HumanoidJointNodeInfo<T>[] = [];\r\n this.iterateNode(root, (node) => {\r\n const normalizedName = this.normalizeHumanoidJointName(node.name || '');\r\n if (!normalizedName) {\r\n return false;\r\n }\r\n const tokens = normalizedName.split(' ').filter(Boolean);\r\n if (!tokens.length || tokens.some((token) => humanoidHelperJointTokens.has(token))) {\r\n return false;\r\n }\r\n nodes.push({\r\n node,\r\n depth: this.getHumanoidJointNodeDepth(root, node),\r\n tokens,\r\n tokenSet: new Set(tokens)\r\n });\r\n return false;\r\n });\r\n return nodes;\r\n }\r\n private static matchesHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern\r\n ) {\r\n if (pattern.all?.some((token) => !info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.any?.length && !pattern.any.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.none?.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n private static scoreHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern,\r\n priority: number\r\n ) {\r\n const matchedTokens = new Set(pattern.all ?? []);\r\n for (const token of pattern.any ?? []) {\r\n if (info.tokenSet.has(token)) {\r\n matchedTokens.add(token);\r\n }\r\n }\r\n let extraTokenCount = 0;\r\n for (const token of info.tokens) {\r\n if (!matchedTokens.has(token)) {\r\n extraTokenCount++;\r\n }\r\n }\r\n return priority * 100000 + matchedTokens.size * 100 - extraTokenCount * 5 - info.depth;\r\n }\r\n private static collectHumanoidJointCandidates<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ): HumanoidJointMatchCandidate<T>[] {\r\n const candidates = new Map<T, number>();\r\n for (let index = 0; index < patterns.length; index++) {\r\n const pattern = patterns[index];\r\n const priority = patterns.length - index;\r\n for (const info of nodes) {\r\n if (used.has(info.node) || !this.matchesHumanoidJointPattern(info, pattern)) {\r\n continue;\r\n }\r\n const score = this.scoreHumanoidJointPattern(info, pattern, priority);\r\n const current = candidates.get(info.node);\r\n if (current === undefined || score > current) {\r\n candidates.set(info.node, score);\r\n }\r\n }\r\n }\r\n return Array.from(candidates, ([node, score]) => ({ node, score })).sort((a, b) => b.score - a.score);\r\n }\r\n private static findBestHumanoidJoint<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ) {\r\n return this.collectHumanoidJointCandidates(nodes, patterns, used)[0]?.node ?? null;\r\n }\r\n private static matchHumanoidJointProfile<T extends string, U extends { name: string; children: U[] }>(\r\n nodes: HumanoidJointNodeInfo<U>[],\r\n profile: HumanoidJointProfile<T>,\r\n used: Set<U>,\r\n optional?: Set<T>\r\n ): Partial<Record<T, U>> | null {\r\n const result = {} as Partial<Record<T, U>>;\r\n const reserved = new Set<U>();\r\n for (const joint of Object.keys(profile) as T[]) {\r\n const node = this.findBestHumanoidJoint(nodes, profile[joint], new Set<U>([...used, ...reserved]));\r\n if (!node) {\r\n if (optional?.has(joint)) {\r\n continue;\r\n }\r\n return null;\r\n }\r\n result[joint] = node;\r\n reserved.add(node);\r\n }\r\n for (const node of reserved) {\r\n used.add(node);\r\n }\r\n return result;\r\n }\r\n private static validateHumanoidBodyPartial<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ) {\r\n const validateAncestor = (ancestor: HumanoidBodyRig, descendant: HumanoidBodyRig) =>\r\n !body[ancestor] || !body[descendant] || this.isSameOrAncestor(body[ancestor]!, body[descendant]!);\r\n return (\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Spine) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.LeftUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.RightUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Chest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Neck, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.LeftShoulder, HumanoidBodyRig.LeftUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperArm, HumanoidBodyRig.LeftLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerArm, HumanoidBodyRig.LeftHand) &&\r\n validateAncestor(HumanoidBodyRig.RightShoulder, HumanoidBodyRig.RightUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperArm, HumanoidBodyRig.RightLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerArm, HumanoidBodyRig.RightHand) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperLeg, HumanoidBodyRig.LeftLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerLeg, HumanoidBodyRig.LeftFoot) &&\r\n validateAncestor(HumanoidBodyRig.LeftFoot, HumanoidBodyRig.LeftToes) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperLeg, HumanoidBodyRig.RightLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerLeg, HumanoidBodyRig.RightFoot) &&\r\n validateAncestor(HumanoidBodyRig.RightFoot, HumanoidBodyRig.RightToes)\r\n );\r\n }\r\n private static matchHumanoidBodyProfile<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n profile: HumanoidJointProfile<HumanoidBodyRig>,\r\n used: Set<T>,\r\n optional?: Set<HumanoidBodyRig>\r\n ): Partial<Record<HumanoidBodyRig, T>> | null {\r\n const joints = Object.keys(profile) as HumanoidBodyRig[];\r\n const candidates = new Map<HumanoidBodyRig, HumanoidJointMatchCandidate<T>[]>();\r\n for (const joint of joints) {\r\n candidates.set(joint, this.collectHumanoidJointCandidates(nodes, profile[joint], used));\r\n }\r\n const current = {} as Partial<Record<HumanoidBodyRig, T>>;\r\n const reserved = new Set<T>();\r\n let bestScore = Number.NEGATIVE_INFINITY;\r\n let bestResult: Partial<Record<HumanoidBodyRig, T>> | null = null;\r\n const search = (index: number, score: number) => {\r\n if (index >= joints.length) {\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestResult = { ...current };\r\n }\r\n return;\r\n }\r\n const joint = joints[index];\r\n let matched = false;\r\n for (const candidate of candidates.get(joint) ?? []) {\r\n if (reserved.has(candidate.node)) {\r\n continue;\r\n }\r\n current[joint] = candidate.node;\r\n reserved.add(candidate.node);\r\n if (this.validateHumanoidBodyPartial(current)) {\r\n matched = true;\r\n search(index + 1, score + candidate.score);\r\n }\r\n reserved.delete(candidate.node);\r\n delete current[joint];\r\n }\r\n if (optional?.has(joint)) {\r\n search(index + 1, score);\r\n } else if (!matched) {\r\n return;\r\n }\r\n };\r\n search(0, 0);\r\n if (!bestResult) {\r\n return null;\r\n }\r\n for (const node of Object.values(bestResult) as T[]) {\r\n used.add(node);\r\n }\r\n return bestResult;\r\n }\r\n private static getHumanoidIntermediateChain<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n ancestor: T,\r\n descendant: T\r\n ) {\r\n if (!this.isSameOrAncestor(ancestor, descendant)) {\r\n return null;\r\n }\r\n const chain: T[] = [];\r\n let current = descendant.parent;\r\n while (current && current !== ancestor) {\r\n chain.unshift(current);\r\n current = current.parent;\r\n }\r\n return chain;\r\n }\r\n private static completeHumanoidBody<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ): Record<HumanoidBodyRig, T> | null {\r\n const requiredJoints = [\r\n HumanoidBodyRig.Hips,\r\n HumanoidBodyRig.Spine,\r\n HumanoidBodyRig.Neck,\r\n HumanoidBodyRig.Head,\r\n HumanoidBodyRig.LeftShoulder,\r\n HumanoidBodyRig.LeftUpperArm,\r\n HumanoidBodyRig.LeftLowerArm,\r\n HumanoidBodyRig.LeftHand,\r\n HumanoidBodyRig.RightShoulder,\r\n HumanoidBodyRig.RightUpperArm,\r\n HumanoidBodyRig.RightLowerArm,\r\n HumanoidBodyRig.RightHand,\r\n HumanoidBodyRig.LeftUpperLeg,\r\n HumanoidBodyRig.LeftLowerLeg,\r\n HumanoidBodyRig.LeftFoot,\r\n HumanoidBodyRig.LeftToes,\r\n HumanoidBodyRig.RightUpperLeg,\r\n HumanoidBodyRig.RightLowerLeg,\r\n HumanoidBodyRig.RightFoot,\r\n HumanoidBodyRig.RightToes\r\n ];\r\n for (const joint of requiredJoints) {\r\n if (!body[joint]) {\r\n return null;\r\n }\r\n }\r\n const spine = body[HumanoidBodyRig.Spine]!;\r\n const neck = body[HumanoidBodyRig.Neck]!;\r\n let chest = body[HumanoidBodyRig.Chest];\r\n let upperChest = body[HumanoidBodyRig.UpperChest];\r\n if (!chest || !upperChest) {\r\n const spineChain = this.getHumanoidIntermediateChain(spine, neck);\r\n if (!spineChain || spineChain.length === 0) {\r\n chest ||= spine;\r\n upperChest ||= chest;\r\n } else if (spineChain.length === 1) {\r\n chest ||= spineChain[0];\r\n upperChest ||= chest;\r\n } else {\r\n chest ||= spineChain[0];\r\n upperChest ||= spineChain[spineChain.length - 1];\r\n }\r\n }\r\n if (!chest || !upperChest) {\r\n return null;\r\n }\r\n return {\r\n [HumanoidBodyRig.Hips]: body[HumanoidBodyRig.Hips]!,\r\n [HumanoidBodyRig.Spine]: spine,\r\n [HumanoidBodyRig.Chest]: chest,\r\n [HumanoidBodyRig.UpperChest]: upperChest,\r\n [HumanoidBodyRig.Neck]: neck,\r\n [HumanoidBodyRig.Head]: body[HumanoidBodyRig.Head]!,\r\n [HumanoidBodyRig.LeftShoulder]: body[HumanoidBodyRig.LeftShoulder]!,\r\n [HumanoidBodyRig.LeftUpperArm]: body[HumanoidBodyRig.LeftUpperArm]!,\r\n [HumanoidBodyRig.LeftLowerArm]: body[HumanoidBodyRig.LeftLowerArm]!,\r\n [HumanoidBodyRig.LeftHand]: body[HumanoidBodyRig.LeftHand]!,\r\n [HumanoidBodyRig.RightShoulder]: body[HumanoidBodyRig.RightShoulder]!,\r\n [HumanoidBodyRig.RightUpperArm]: body[HumanoidBodyRig.RightUpperArm]!,\r\n [HumanoidBodyRig.RightLowerArm]: body[HumanoidBodyRig.RightLowerArm]!,\r\n [HumanoidBodyRig.RightHand]: body[HumanoidBodyRig.RightHand]!,\r\n [HumanoidBodyRig.LeftUpperLeg]: body[HumanoidBodyRig.LeftUpperLeg]!,\r\n [HumanoidBodyRig.LeftLowerLeg]: body[HumanoidBodyRig.LeftLowerLeg]!,\r\n [HumanoidBodyRig.LeftFoot]: body[HumanoidBodyRig.LeftFoot]!,\r\n [HumanoidBodyRig.LeftToes]: body[HumanoidBodyRig.LeftToes]!,\r\n [HumanoidBodyRig.RightUpperLeg]: body[HumanoidBodyRig.RightUpperLeg]!,\r\n [HumanoidBodyRig.RightLowerLeg]: body[HumanoidBodyRig.RightLowerLeg]!,\r\n [HumanoidBodyRig.RightFoot]: body[HumanoidBodyRig.RightFoot]!,\r\n [HumanoidBodyRig.RightToes]: body[HumanoidBodyRig.RightToes]!\r\n };\r\n }\r\n private static completeHumanoidHand<T extends { name: string; children: T[] }>(\r\n hand: Partial<Record<HumanoidHandRig, T>>\r\n ): Record<HumanoidHandRig, T> | null {\r\n for (const joint of Object.values(HumanoidHandRig)) {\r\n if (!hand[joint]) {\r\n return null;\r\n }\r\n }\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: hand[HumanoidHandRig.ThumbProximal]!,\r\n [HumanoidHandRig.ThumbIntermediate]: hand[HumanoidHandRig.ThumbIntermediate]!,\r\n [HumanoidHandRig.ThumbDistal]: hand[HumanoidHandRig.ThumbDistal]!,\r\n [HumanoidHandRig.IndexProximal]: hand[HumanoidHandRig.IndexProximal]!,\r\n [HumanoidHandRig.IndexIntermediate]: hand[HumanoidHandRig.IndexIntermediate]!,\r\n [HumanoidHandRig.IndexDistal]: hand[HumanoidHandRig.IndexDistal]!,\r\n [HumanoidHandRig.MiddleProximal]: hand[HumanoidHandRig.MiddleProximal]!,\r\n [HumanoidHandRig.MiddleIntermediate]: hand[HumanoidHandRig.MiddleIntermediate]!,\r\n [HumanoidHandRig.MiddleDistal]: hand[HumanoidHandRig.MiddleDistal]!,\r\n [HumanoidHandRig.RingProximal]: hand[HumanoidHandRig.RingProximal]!,\r\n [HumanoidHandRig.RingIntermediate]: hand[HumanoidHandRig.RingIntermediate]!,\r\n [HumanoidHandRig.RingDistal]: hand[HumanoidHandRig.RingDistal]!,\r\n [HumanoidHandRig.PinkyProximal]: hand[HumanoidHandRig.PinkyProximal]!,\r\n [HumanoidHandRig.PinkyIntermediate]: hand[HumanoidHandRig.PinkyIntermediate]!,\r\n [HumanoidHandRig.PinkyDistal]: hand[HumanoidHandRig.PinkyDistal]!\r\n };\r\n }\r\n private static tryExtractOptionalHumanoidHand<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n side: 'left' | 'right',\r\n used: Set<T>\r\n ): Record<HumanoidHandRig, T> | undefined {\r\n const handCandidates = this.matchHumanoidJointProfile(\r\n nodes,\r\n this.createCommonHumanoidHandProfile(side),\r\n used\r\n );\r\n if (!handCandidates) {\r\n return undefined;\r\n }\r\n return this.completeHumanoidHand(handCandidates) ?? undefined;\r\n }\r\n private static isSameOrAncestor<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: T\r\n ) {\r\n return parent === child || this.isParentOf(parent, child);\r\n }\r\n private static validateHumanoidHandHierarchy<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(hand: T, joints: Record<HumanoidHandRig, T>) {\r\n const chains: [HumanoidHandRig, HumanoidHandRig, HumanoidHandRig][] = [\r\n [HumanoidHandRig.ThumbProximal, HumanoidHandRig.ThumbIntermediate, HumanoidHandRig.ThumbDistal],\r\n [HumanoidHandRig.IndexProximal, HumanoidHandRig.IndexIntermediate, HumanoidHandRig.IndexDistal],\r\n [HumanoidHandRig.MiddleProximal, HumanoidHandRig.MiddleIntermediate, HumanoidHandRig.MiddleDistal],\r\n [HumanoidHandRig.RingProximal, HumanoidHandRig.RingIntermediate, HumanoidHandRig.RingDistal],\r\n [HumanoidHandRig.PinkyProximal, HumanoidHandRig.PinkyIntermediate, HumanoidHandRig.PinkyDistal]\r\n ];\r\n return chains.every(\r\n ([proximal, intermediate, distal]) =>\r\n this.isSameOrAncestor(hand, joints[proximal]) &&\r\n this.isSameOrAncestor(joints[proximal], joints[intermediate]) &&\r\n this.isSameOrAncestor(joints[intermediate], joints[distal])\r\n );\r\n }\r\n private static validateHumanoidJointExtraction<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(result: HumanoidJointMapping<T>) {\r\n const body = result.body;\r\n return (\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.Spine]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Spine], body[HumanoidBodyRig.Chest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Chest], body[HumanoidBodyRig.UpperChest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.Neck]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Neck], body[HumanoidBodyRig.Head]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.LeftShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftShoulder], body[HumanoidBodyRig.LeftUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperArm], body[HumanoidBodyRig.LeftLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerArm], body[HumanoidBodyRig.LeftHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.RightShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightShoulder], body[HumanoidBodyRig.RightUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperArm], body[HumanoidBodyRig.RightLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerArm], body[HumanoidBodyRig.RightHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.LeftUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperLeg], body[HumanoidBodyRig.LeftLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerLeg], body[HumanoidBodyRig.LeftFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftFoot], body[HumanoidBodyRig.LeftToes]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.RightUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperLeg], body[HumanoidBodyRig.RightLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerLeg], body[HumanoidBodyRig.RightFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightFoot], body[HumanoidBodyRig.RightToes]) &&\r\n (!result.leftHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.LeftHand], result.leftHand)) &&\r\n (!result.rightHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.RightHand], result.rightHand))\r\n );\r\n }\r\n private static createCommonHumanoidHandProfile(\r\n side: 'left' | 'right'\r\n ): HumanoidJointProfile<HumanoidHandRig> {\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'proximal'] },\r\n { all: ['thumb', '1'] },\r\n { all: ['finger', '0'] }\r\n ]),\r\n [HumanoidHandRig.ThumbIntermediate]: sideJointPatterns(side, [\r\n { all: ['thumb', 'intermediate'] },\r\n { all: ['thumb', '2'] },\r\n { all: ['finger', '01'] }\r\n ]),\r\n [HumanoidHandRig.ThumbDistal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'distal'] },\r\n { all: ['thumb', '3'] },\r\n { all: ['finger', '02'] }\r\n ]),\r\n [HumanoidHandRig.IndexProximal]: sideJointPatterns(side, [\r\n { all: ['index', 'proximal'] },\r\n { all: ['index', '1'] },\r\n { all: ['finger', '1'] }\r\n ]),\r\n [HumanoidHandRig.IndexIntermediate]: sideJointPatterns(side, [\r\n { all: ['index', 'intermediate'] },\r\n { all: ['index', '2'] },\r\n { all: ['finger', '11'] }\r\n ]),\r\n [HumanoidHandRig.IndexDistal]: sideJointPatterns(side, [\r\n { all: ['index', 'distal'] },\r\n { all: ['index', '3'] },\r\n { all: ['finger', '12'] }\r\n ]),\r\n [HumanoidHandRig.MiddleProximal]: sideJointPatterns(side, [\r\n { all: ['middle', 'proximal'] },\r\n { all: ['middle', '1'] },\r\n { all: ['finger', '2'] }\r\n ]),\r\n [HumanoidHandRig.MiddleIntermediate]: sideJointPatterns(side, [\r\n { all: ['middle', 'intermediate'] },\r\n { all: ['middle', '2'] },\r\n { all: ['finger', '21'] }\r\n ]),\r\n [HumanoidHandRig.MiddleDistal]: sideJointPatterns(side, [\r\n { all: ['middle', 'distal'] },\r\n { all: ['middle', '3'] },\r\n { all: ['finger', '22'] }\r\n ]),\r\n [HumanoidHandRig.RingProximal]: sideJointPatterns(side, [\r\n { all: ['ring', 'proximal'] },\r\n { all: ['ring', '1'] },\r\n { all: ['finger', '3'] }\r\n ]),\r\n [HumanoidHandRig.RingIntermediate]: sideJointPatterns(side, [\r\n { all: ['ring', 'intermediate'] },\r\n { all: ['ring', '2'] },\r\n { all: ['finger', '31'] }\r\n ]),\r\n [HumanoidHandRig.RingDistal]: sideJointPatterns(side, [\r\n { all: ['ring', 'distal'] },\r\n { all: ['ring', '3'] },\r\n { all: ['finger', '32'] }\r\n ]),\r\n [HumanoidHandRig.PinkyProximal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'proximal'] },\r\n { all: ['pinky', '1'] },\r\n { all: ['finger', '4'] }\r\n ]),\r\n [HumanoidHandRig.PinkyIntermediate]: sideJointPatterns(side, [\r\n { all: ['pinky', 'intermediate'] },\r\n { all: ['pinky', '2'] },\r\n { all: ['finger', '41'] }\r\n ]),\r\n [HumanoidHandRig.PinkyDistal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'distal'] },\r\n { all: ['pinky', '3'] },\r\n { all: ['finger', '42'] }\r\n ])\r\n };\r\n }\r\n private static createStandardHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips']), jointPattern(['pelvis'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3', 'chest', 'upper'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['chest'], ['upper']), jointPattern(['spine', '1'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['upper', 'chest']),\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createMixamoHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createBipedHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['pelvis']), jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ])\r\n };\r\n }\r\n private static isParentOf<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: Nullable<T>\r\n ) {\r\n while (child && child !== parent) {\r\n child = child.parent!;\r\n }\r\n return child === parent;\r\n }\r\n\r\n private static iterateNode<T extends { name: string; children: T[] }>(\r\n root: T,\r\n callback: (node: T) => boolean\r\n ) {\r\n if (callback(root)) {\r\n return true;\r\n }\r\n for (const child of root.children) {\r\n if (this.iterateNode(child, callback)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n private static tryExtractHumanoidJointsByBodyProfile<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T, bodyProfile: HumanoidJointProfile<HumanoidBodyRig>): HumanoidJointMapping<T> | null {\r\n const nodes = this.collectHumanoidJointNodeInfos(root);\r\n const used = new Set<T>();\r\n const bodyCandidates = this.matchHumanoidBodyProfile(\r\n nodes,\r\n bodyProfile,\r\n used,\r\n new Set<HumanoidBodyRig>([HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest])\r\n );\r\n if (!bodyCandidates) {\r\n return null;\r\n }\r\n const body = this.completeHumanoidBody(bodyCandidates);\r\n if (!body) {\r\n return null;\r\n }\r\n const leftHand = this.tryExtractOptionalHumanoidHand(nodes, 'left', used);\r\n const rightHand = this.tryExtractOptionalHumanoidHand(nodes, 'right', used);\r\n const result: HumanoidJointMapping<T> = {\r\n body,\r\n leftHand,\r\n rightHand\r\n };\r\n return this.validateHumanoidJointExtraction(result) ? result : null;\r\n }\r\n /**\r\n * Attempt to extract humanoid joint mappings from the skeleton's joints based on their names.\r\n *\r\n * This method looks for joints with names matching the standardized `HumanoidBodyRig` and `HumanoidHandRig` enums.\r\n * If a complete mapping is found, it returns an object containing the mapped joints for the body and hands.\r\n * If any required joint is missing, it returns `null`.\r\n *\r\n * This method tries to find the best match for humanoid rigs, designed to work with Mixamo, VRoid, Unity Humanoid,\r\n * Biped, and similar skeletons. It is not guaranteed to work with all models, and may require manual adjustments or\r\n * custom modifiers for non-standard rigs.\r\n *\r\n * @param root - The root scene node to search for humanoid joints.\r\n * @returns An object containing the mapped body and hand joints if a complete humanoid rig is detected, otherwise `null`.\r\n */\r\n static tryExtractHumanoidJoints<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return (\r\n this.tryExtractHumanoidJointsMixamo(root) ??\r\n this.tryExtractHumanoidJointsVRM(root) ??\r\n this.tryExtractHumanoidJointsUnityHumanoid(root) ??\r\n this.tryExtractHumanoidJointsBiped(root)\r\n );\r\n }\r\n static tryExtractHumanoidJointsMixamo<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createMixamoHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsVRM<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsUnityHumanoid<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsBiped<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createBipedHumanoidBodyProfile());\r\n }\r\n}\r\n\r\n/**\r\n * Legacy compatibility name for a skin binding.\r\n *\r\n * New code should use {@link SkeletonRig} for the shared animated rig and\r\n * {@link SkinBinding} for per-skin inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class Skeleton extends SkinBinding {\r\n constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: SkeletonBindPose[]) {\r\n super(new SkeletonRig(joints, bindPose), inverseBindMatrices, joints);\r\n }\r\n\r\n static tryExtractHumanoidJoints = SkinBinding.tryExtractHumanoidJoints;\r\n static tryExtractHumanoidJointsMixamo = SkinBinding.tryExtractHumanoidJointsMixamo;\r\n static tryExtractHumanoidJointsVRM = SkinBinding.tryExtractHumanoidJointsVRM;\r\n static tryExtractHumanoidJointsUnityHumanoid = SkinBinding.tryExtractHumanoidJointsUnityHumanoid;\r\n static tryExtractHumanoidJointsBiped = SkinBinding.tryExtractHumanoidJointsBiped;\r\n static findSkeletonById(id: string) {\r\n return SkinBinding.findSkinBindingById(id);\r\n }\r\n}\r\n"],"names":["HumanoidBodyRig","HumanoidHandRig","tmpV0","Vector3","tmpV1","humanoidHelperJointTokens","Set","SkeletonRig","Disposable","_registry","Map","_id","_joints","_bindPoseByJoint","_bindPose","_retargetPoseByJoint","_retargetPose","_rootJoint","_rootBindPose","_playing","_modifiers","_humanoidJointMapping","_humanoidRootRotation","joints","bindPose","options","randomUUID","i","length","set","retargetPose","Error","map","joint","index","skeletonRoot","findRootJoint","rootJoint","rootBindPose","getNodeBindPose","computeBindPose","humanoidJointMapping","undefined","Skeleton","tryExtractHumanoidJoints","Quaternion","identity","hips","body","p","includes","parent","multiply","rotation","DWeakRef","getRigKey","persistentId","sort","join","findRigById","id","m","get","delete","val","hasRetargetPose","getBindPoseForJoint","getRetargetPoseForJoint","humanoidRootRotation","modifiers","playing","b","getJointIndex","indexOf","getJointIndexByName","jointName","findIndex","name","bindpose","position","scale","has","apply","deltaTime","modifier","reset","onDispose","dispose","root","isParentOf","node","clone","zero","one","jointPattern","all","none","any","sideJointPatterns","side","patterns","sideTokens","flatMap","sideToken","pattern","SkinBinding","rig","inverseBindMatrices","_rig","_inverseBindMatrices","_jointTexture","DRef","_lastUpdateTime","updateJointMatrices","findSkinBindingById","findSkeletonById","jointTexture","_createJointTexture","_jointOffsets","Matrix4x4","worldMatrix","_jointMatrices","tex","_syncJointMatrixArray","update","_jointMatrixArray","width","height","applyModifiers","computeBoundingBox","info","invWorldMatrix","boundingBox","beginExtend","influenceCount","Math","max","boundingVertices","setXYZ","base","j","weight","Number","boundingVertexJointWeights","matrix","boundingVertexBlendIndices","transformPointAffine","scaleBy","addBy","extend","textureWidth","nextPowerOf2","ceil","sqrt","device","getDevice","createTexture2D","mipmapping","samplerOptions","magFilter","minFilter","Float32Array","subarray","Array","from","getBoundingInfo","data","indices","minx","MAX_VALUE","maxx","miny","maxy","minz","maxz","v","positions","vert","numVertices","floor","weights","blendIndices","x","y","z","BoundingBox","skinPositionsToLocal","out","result","matrixOffset","effectiveInfluenceCount","vertexIndex","skinnedX","skinnedY","skinnedZ","weightSum","jointIndex","normalizeHumanoidJointName","slice","lastIndexOf","replace","toLowerCase","trim","getHumanoidJointNodeDepth","depth","current","collectHumanoidJointNodeInfos","nodes","iterateNode","normalizedName","tokens","split","filter","Boolean","some","token","push","tokenSet","matchesHumanoidJointPattern","scoreHumanoidJointPattern","priority","matchedTokens","add","extraTokenCount","size","collectHumanoidJointCandidates","used","candidates","score","a","findBestHumanoidJoint","matchHumanoidJointProfile","profile","optional","reserved","Object","keys","validateHumanoidBodyPartial","validateAncestor","ancestor","descendant","isSameOrAncestor","matchHumanoidBodyProfile","bestScore","NEGATIVE_INFINITY","bestResult","search","matched","candidate","values","getHumanoidIntermediateChain","chain","unshift","completeHumanoidBody","requiredJoints","spine","neck","chest","upperChest","spineChain","completeHumanoidHand","hand","tryExtractOptionalHumanoidHand","handCandidates","createCommonHumanoidHandProfile","child","validateHumanoidHandHierarchy","chains","every","proximal","intermediate","distal","validateHumanoidJointExtraction","leftHand","rightHand","createStandardHumanoidBodyProfile","createMixamoHumanoidBodyProfile","createBipedHumanoidBodyProfile","callback","children","tryExtractHumanoidJointsByBodyProfile","bodyProfile","bodyCandidates","tryExtractHumanoidJointsMixamo","tryExtractHumanoidJointsVRM","tryExtractHumanoidJointsUnityHumanoid","tryExtractHumanoidJointsBiped"],"mappings":"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"}
1
+ {"version":3,"file":"skeleton.js","sources":["../../src/animation/skeleton.ts"],"sourcesContent":["import { randomUUID, DWeakRef } from '@zephyr3d/base';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Vector3 } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { SkinPaletteAtlas } from './skin_palette_atlas';\r\nimport type { SkinPaletteBlock } from './skin_palette_atlas';\r\nimport type { SkeletonModifier } from './skeleton_modifier';\r\n\r\n/**\r\n * Standardized humanoid joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidBodyRig {\r\n Hips = 'Hips',\r\n Spine = 'Spine',\r\n Chest = 'Chest',\r\n UpperChest = 'UpperChest',\r\n Neck = 'Neck',\r\n Head = 'Head',\r\n\r\n LeftShoulder = 'LeftShoulder',\r\n LeftUpperArm = 'LeftUpperArm',\r\n LeftLowerArm = 'LeftLowerArm',\r\n LeftHand = 'LeftHand',\r\n\r\n RightShoulder = 'RightShoulder',\r\n RightUpperArm = 'RightUpperArm',\r\n RightLowerArm = 'RightLowerArm',\r\n RightHand = 'RightHand',\r\n\r\n LeftUpperLeg = 'LeftUpperLeg',\r\n LeftLowerLeg = 'LeftLowerLeg',\r\n LeftFoot = 'LeftFoot',\r\n LeftToes = 'LeftToes',\r\n\r\n RightUpperLeg = 'RightUpperLeg',\r\n RightLowerLeg = 'RightLowerLeg',\r\n RightFoot = 'RightFoot',\r\n RightToes = 'RightToes'\r\n}\r\n\r\n/**\r\n * Standardized humanoid hand joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidHandRig {\r\n ThumbProximal = 'ThumbProximal',\r\n ThumbIntermediate = 'ThumbIntermediate',\r\n ThumbDistal = 'ThumbDistal',\r\n IndexProximal = 'IndexProximal',\r\n IndexIntermediate = 'IndexIntermediate',\r\n IndexDistal = 'IndexDistal',\r\n MiddleProximal = 'MiddleProximal',\r\n MiddleIntermediate = 'MiddleIntermediate',\r\n MiddleDistal = 'MiddleDistal',\r\n RingProximal = 'RingProximal',\r\n RingIntermediate = 'RingIntermediate',\r\n RingDistal = 'RingDistal',\r\n PinkyProximal = 'PinkyProximal',\r\n PinkyIntermediate = 'PinkyIntermediate',\r\n PinkyDistal = 'PinkyDistal'\r\n}\r\n\r\n/**\r\n * Skinned bounding box information for a submesh.\r\n *\r\n * Used to compute animated AABB for skinned meshes.\r\n *\r\n * @public\r\n */\r\nexport interface SkinnedBoundingBox {\r\n /**\r\n * Number of influences stored per representative vertex.\r\n */\r\n influenceCount?: number;\r\n /**\r\n * Representative vertices used to bound a skinned mesh (extreme points along axes).\r\n */\r\n boundingVertices: Vector3[];\r\n /**\r\n * Joint indices for each representative vertex, flattened.\r\n */\r\n boundingVertexBlendIndices: Float32Array;\r\n /**\r\n * Corresponding joint weights for each representative vertex, flattened.\r\n * Layout matches `boundingVertexBlendIndices`.\r\n */\r\n boundingVertexJointWeights: Float32Array;\r\n /**\r\n * Computed axis-aligned bounding box in model space for the current pose.\r\n */\r\n boundingBox: BoundingBox;\r\n}\r\n\r\nconst tmpV0 = new Vector3();\r\nconst tmpMatrix = new Matrix4x4();\r\nconst tmpMatrix2 = new Matrix4x4();\r\n/** Palette header slot: absolute slot indices of the current and previous sets */\r\nconst tmpHeader = new Float32Array(16);\r\n\r\n/**\r\n * Humanoid joint mapping\r\n * @public\r\n */\r\nexport type HumanoidJointMapping<T extends { name: string; parent: Nullable<T>; children: T[] }> = {\r\n body: Record<HumanoidBodyRig, T>;\r\n leftHand?: Record<HumanoidHandRig, T>;\r\n rightHand?: Record<HumanoidHandRig, T>;\r\n};\r\n\r\n/** @public */\r\nexport type SkeletonBindPose = { rotation: Quaternion; scale: Vector3; position: Vector3 };\r\n\r\n/** @public */\r\nexport type SkeletonRigOptions = {\r\n rootJoint?: Nullable<SceneNode>;\r\n rootBindPose?: SkeletonBindPose;\r\n humanoidJointMapping?: Nullable<HumanoidJointMapping<SceneNode>>;\r\n /**\r\n * Optional humanoid retarget reference pose, ordered like `joints`.\r\n * When omitted, the rig bind pose is used as the retarget reference.\r\n */\r\n retargetPose?: Nullable<SkeletonBindPose[]>;\r\n};\r\n\r\ntype HumanoidJointPattern = {\r\n all?: string[];\r\n any?: string[];\r\n none?: string[];\r\n};\r\n\r\ntype HumanoidJointProfile<T extends string> = Record<T, HumanoidJointPattern[]>;\r\n\r\nconst humanoidHelperJointTokens = new Set(['end', 'nub', 'socket']);\r\n\r\ntype HumanoidJointNodeInfo<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n depth: number;\r\n tokens: string[];\r\n tokenSet: Set<string>;\r\n};\r\n\r\ntype HumanoidJointMatchCandidate<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n score: number;\r\n};\r\n\r\n/**\r\n * Shared joint rig for skeletal animation.\r\n *\r\n * A rig owns the animated joint nodes, bind pose, humanoid mapping and procedural\r\n * modifiers. Multiple skin bindings may reference the same rig with different\r\n * inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class SkeletonRig extends Disposable {\r\n private static readonly _registry: Map<string, DWeakRef<SkeletonRig>> = new Map();\r\n protected _id: string;\r\n protected _joints: SceneNode[];\r\n protected _bindPoseByJoint: Map<SceneNode, SkeletonBindPose>;\r\n protected _bindPose: SkeletonBindPose[];\r\n protected _retargetPoseByJoint: Nullable<Map<SceneNode, SkeletonBindPose>>;\r\n protected _retargetPose: Nullable<SkeletonBindPose[]>;\r\n protected _rootJoint: Nullable<SceneNode>;\r\n protected _rootBindPose: SkeletonBindPose;\r\n protected _playing: boolean;\r\n protected _modifiers: SkeletonModifier[];\r\n protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;\r\n protected _humanoidRootRotation: Quaternion;\r\n\r\n constructor(joints: SceneNode[], bindPose: SkeletonBindPose[], options?: SkeletonRigOptions) {\r\n super();\r\n this._id = randomUUID();\r\n this._joints = joints;\r\n this._bindPose = bindPose;\r\n this._bindPoseByJoint = new Map();\r\n for (let i = 0; i < joints.length; i++) {\r\n this._bindPoseByJoint.set(joints[i], bindPose[i]);\r\n }\r\n if (options?.retargetPose && options.retargetPose.length !== joints.length) {\r\n throw new Error('SkeletonRig(): retarget pose must contain one transform per joint');\r\n }\r\n this._retargetPose = options?.retargetPose ?? null;\r\n this._retargetPoseByJoint = this._retargetPose\r\n ? new Map(joints.map((joint, index) => [joint, this._retargetPose![index]]))\r\n : null;\r\n const skeletonRoot = this.findRootJoint(this._joints);\r\n this._rootJoint = options?.rootJoint ?? skeletonRoot;\r\n this._rootBindPose = options?.rootBindPose ?? this.getNodeBindPose(this._rootJoint);\r\n this._playing = false;\r\n this._modifiers = [];\r\n this.computeBindPose();\r\n this._humanoidJointMapping =\r\n options?.humanoidJointMapping !== undefined\r\n ? options.humanoidJointMapping\r\n : skeletonRoot\r\n ? Skeleton.tryExtractHumanoidJoints(skeletonRoot)\r\n : null;\r\n this._humanoidRootRotation = Quaternion.identity();\r\n const hips = this._humanoidJointMapping?.body[HumanoidBodyRig.Hips];\r\n if (hips) {\r\n let p = hips;\r\n while (this._joints.includes(p.parent!)) {\r\n Quaternion.multiply(p.parent!.rotation, this._humanoidRootRotation, this._humanoidRootRotation);\r\n p = p.parent!;\r\n }\r\n }\r\n SkeletonRig._registry.set(this._id, new DWeakRef(this));\r\n }\r\n\r\n static getRigKey(joints: SceneNode[], rootJoint?: Nullable<SceneNode>) {\r\n return [rootJoint?.persistentId ?? '', ...joints.map((joint) => joint.persistentId).sort()].join('|');\r\n }\r\n\r\n static findRigById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n\r\n get persistentId() {\r\n return this._id;\r\n }\r\n\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skeleton rig mismatch');\r\n }\r\n SkeletonRig._registry.delete(this._id);\r\n this._id = val;\r\n SkeletonRig._registry.set(this._id, m);\r\n }\r\n }\r\n\r\n get joints() {\r\n return this._joints;\r\n }\r\n\r\n get bindPose() {\r\n return this._bindPose;\r\n }\r\n\r\n /** Effective humanoid retarget reference pose. */\r\n get retargetPose() {\r\n return this._retargetPose ?? this._bindPose;\r\n }\r\n\r\n /** Whether this rig has a reference pose that is distinct from its bind pose. */\r\n get hasRetargetPose() {\r\n return !!this._retargetPose;\r\n }\r\n\r\n get rootJoint(): Nullable<SceneNode> {\r\n return this._rootJoint;\r\n }\r\n\r\n set rootJoint(joint: Nullable<SceneNode>) {\r\n this._rootJoint = joint;\r\n this._rootBindPose = this.getNodeBindPose(joint);\r\n }\r\n\r\n get rootBindPose(): SkeletonBindPose {\r\n return this._rootBindPose;\r\n }\r\n\r\n getBindPoseForJoint(joint: SceneNode) {\r\n return this._bindPoseByJoint.get(joint) ?? null;\r\n }\r\n\r\n getRetargetPoseForJoint(joint: SceneNode) {\r\n return this._retargetPoseByJoint?.get(joint) ?? this.getBindPoseForJoint(joint);\r\n }\r\n\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._humanoidJointMapping;\r\n }\r\n\r\n get humanoidRootRotation(): Quaternion {\r\n return this._humanoidRootRotation;\r\n }\r\n\r\n get modifiers(): SkeletonModifier[] {\r\n return this._modifiers;\r\n }\r\n\r\n get playing() {\r\n return this._playing;\r\n }\r\n\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n\r\n computeBindPose() {\r\n for (let i = 0; i < this._joints.length; i++) {\r\n const joint = this._joints[i];\r\n const bindpose = this._bindPose[i];\r\n joint.position.set(bindpose.position);\r\n joint.rotation.set(bindpose.rotation);\r\n joint.scale.set(bindpose.scale);\r\n }\r\n if (this._rootJoint && !this._bindPoseByJoint.has(this._rootJoint)) {\r\n this._rootJoint.position.set(this._rootBindPose.position);\r\n this._rootJoint.rotation.set(this._rootBindPose.rotation);\r\n this._rootJoint.scale.set(this._rootBindPose.scale);\r\n }\r\n }\r\n\r\n apply(deltaTime: number): void {\r\n for (const modifier of this._modifiers) {\r\n modifier.apply(this, deltaTime);\r\n }\r\n }\r\n\r\n reset() {\r\n this._playing = false;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkeletonRig._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n\r\n private findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n return root;\r\n }\r\n\r\n private getNodeBindPose(node: Nullable<SceneNode>): SkeletonBindPose {\r\n const bindPose = node ? this._bindPoseByJoint.get(node) : null;\r\n return bindPose\r\n ? {\r\n position: bindPose.position.clone(),\r\n rotation: bindPose.rotation.clone(),\r\n scale: bindPose.scale.clone()\r\n }\r\n : {\r\n position: node?.position.clone() ?? Vector3.zero(),\r\n rotation: node?.rotation.clone() ?? Quaternion.identity(),\r\n scale: node?.scale.clone() ?? Vector3.one()\r\n };\r\n }\r\n}\r\n\r\nfunction jointPattern(all: string[], none?: string[], any?: string[]): HumanoidJointPattern {\r\n return {\r\n all,\r\n any: any?.length ? any : undefined,\r\n none: none?.length ? none : undefined\r\n };\r\n}\r\n\r\nfunction sideJointPatterns(\r\n side: 'left' | 'right',\r\n patterns: Array<{ all: string[]; none?: string[]; any?: string[] }>\r\n): HumanoidJointPattern[] {\r\n const sideTokens = side === 'left' ? ['left', 'l'] : ['right', 'r'];\r\n return sideTokens.flatMap((sideToken) =>\r\n patterns.map((pattern) => ({\r\n all: [sideToken, ...pattern.all],\r\n any: pattern.any?.length ? [...pattern.any] : undefined,\r\n none: pattern.none?.length ? [...pattern.none] : undefined\r\n }))\r\n );\r\n}\r\n\r\n/**\r\n * Skin binding for skinned animation.\r\n *\r\n * Responsibilities:\r\n * - References a shared SkeletonRig.\r\n * - Maintains inverse bind and current skinning matrices for one skin.\r\n * - Provides a texture containing joint matrices for GPU skinning.\r\n * - Applies skinning state to associated meshes each frame.\r\n * - Computes animated axis-aligned bounding boxes using representative skinned vertices.\r\n *\r\n * Joint matrix palette layout:\r\n * - A block of slots in the shared {@link SkinPaletteAtlas}, one slot per 4x4 matrix.\r\n * - Slot 0 is a header holding the absolute slot indices of the current and previous sets.\r\n * - The rest is a 2-layered ring buffer: current and previous joint transforms to support\r\n * temporal addressing. Offsets relative to the block are tracked in `_jointOffsets[0]`\r\n * (current) and `_jointOffsets[1]` (previous).\r\n * - Palette matrices are relative to {@link SkinBinding.referenceNode}, so they do not change\r\n * when the whole character moves and can be shared by instances of the same model.\r\n *\r\n * Usage:\r\n * - Construct with a rig, bind data, meshes and submesh bounding info.\r\n * - Call `apply()` each frame to update joint texture, bind to meshes, and update bounds.\r\n * - Call `reset()` to clear skinning on meshes.\r\n *\r\n * @public\r\n */\r\nexport class SkinBinding extends Disposable {\r\n /** @internal Global weak registry keyed by persistentId for serialization/lookup. */\r\n private static readonly _registry: Map<string, DWeakRef<SkinBinding>> = new Map();\r\n /** @internal */\r\n protected _id: string;\r\n /** @internal */\r\n protected _rig: SkeletonRig;\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _jointMatrices!: Matrix4x4[];\r\n /** @internal */\r\n protected _jointOffsets!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _paletteBlock: Nullable<SkinPaletteBlock>;\r\n /** @internal Number of meshes skinned by other palettes in place of this binding's */\r\n protected _paletteSuspendCount: number;\r\n /** @internal Increased each time the pose relative to the reference node changes */\r\n protected _paletteVersion: number;\r\n /** @internal Whether both palette sets hold the current pose, so a still pose needs no write */\r\n protected _paletteSettled: boolean;\r\n /**\r\n * @internal Joints and the nodes between them and the reference node, whose local transforms\r\n * make up the pose\r\n */\r\n protected _poseNodes: Nullable<{ reference: Nullable<SceneNode>; nodes: SceneNode[] }>;\r\n /** @internal Sum of the local transform tags of the pose nodes when the pose last changed */\r\n protected _poseTag: number;\r\n /** @internal Meshes waiting for the pose to change before updating again */\r\n protected _sleepingMeshes: Set<SceneNode>;\r\n /** @internal */\r\n protected _paletteData!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _playing: boolean;\r\n /** @internal */\r\n protected _lastUpdateTime: number;\r\n /**\r\n * Create a skin binding instance.\r\n *\r\n * @param rig - Shared skeleton rig that owns animated joint transforms.\r\n * @param joints - Joint scene nodes (one per joint), ordered to match skin data.\r\n * @param inverseBindMatrices - Inverse bind matrices for each joint.\r\n * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).\r\n */\r\n constructor(\r\n rig: SkeletonRig,\r\n inverseBindMatrices: Matrix4x4[],\r\n joints?: SceneNode[],\r\n bindPose?: SkeletonBindPose[]\r\n ) {\r\n super();\r\n this._id = randomUUID();\r\n this._rig = rig;\r\n this._joints = joints ?? rig.joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._paletteBlock = null;\r\n this._paletteSuspendCount = 0;\r\n this._paletteVersion = 0;\r\n this._paletteSettled = false;\r\n this._poseNodes = null;\r\n this._poseTag = -1;\r\n this._sleepingMeshes = new Set();\r\n this._playing = false;\r\n this._lastUpdateTime = 0;\r\n if (bindPose && bindPose !== rig.bindPose) {\r\n // Legacy callers used Skeleton as both rig and binding. Keep the old bind\r\n // pose visible by replacing the rig pose only when explicitly supplied.\r\n this._rig = new SkeletonRig(rig.joints, bindPose, {\r\n rootJoint: rig.rootJoint,\r\n rootBindPose: rig.rootBindPose,\r\n humanoidJointMapping: rig.humanoidJointMapping,\r\n retargetPose: rig.hasRetargetPose ? rig.retargetPose : null\r\n });\r\n }\r\n this.updateJointMatrices();\r\n SkinBinding._registry.set(this._id, new DWeakRef(this));\r\n }\r\n /**\r\n * Lookup a skeleton from the global registry by persistent id.\r\n *\r\n * @param id - The persistent UUID to search for.\r\n * @returns The skeleton if alive, otherwise `null`.\r\n * @internal\r\n */\r\n static findSkinBindingById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n static findSkeletonById(id: string) {\r\n return this.findSkinBindingById(id);\r\n }\r\n get rig() {\r\n return this._rig;\r\n }\r\n /** Gets joint nodes */\r\n get joints() {\r\n return this._joints;\r\n }\r\n /** Gets the humanoid joint mapping */\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._rig.humanoidJointMapping;\r\n }\r\n /** Root rotation of humanoid hips bone */\r\n get humanoidRootRotation(): Quaternion {\r\n return this._rig.humanoidRootRotation;\r\n }\r\n /** @internal */\r\n get inverseBindMatrices() {\r\n return this._inverseBindMatrices;\r\n }\r\n /** @internal */\r\n get bindPose() {\r\n return this._joints.map((joint) => this._rig.getBindPoseForJoint(joint)!);\r\n }\r\n get playing() {\r\n return this._playing;\r\n }\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n get persistentId() {\r\n return this._id;\r\n }\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkinBinding._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skin binding mismatch');\r\n }\r\n SkinBinding._registry.delete(this._id);\r\n this._id = val;\r\n SkinBinding._registry.set(this._id, m);\r\n }\r\n }\r\n /**\r\n * Texture containing joint matrices for GPU skinning.\r\n *\r\n * This is the shared {@link SkinPaletteAtlas} texture; the palette of this binding starts at\r\n * slot {@link SkinBinding.paletteBase}. Each matrix is stored in 4 texels (one row per texel,\r\n * RGBA = 4 floats).\r\n */\r\n get jointTexture() {\r\n return SkinPaletteAtlas.instance.texture;\r\n }\r\n /**\r\n * Index of the header slot of this binding's palette in the joint texture.\r\n *\r\n * @internal\r\n */\r\n get paletteBase() {\r\n return this._paletteBlock?.base ?? 0;\r\n }\r\n /**\r\n * Increased each time the pose relative to the reference node changes, so skinned meshes\r\n * recompute their bounds only then. A model moving as a whole keeps its pose.\r\n *\r\n * @internal\r\n */\r\n get paletteVersion() {\r\n return this._paletteVersion;\r\n }\r\n /**\r\n * Have a skinned mesh queued for update the next time the pose changes, instead of every frame.\r\n *\r\n * @internal\r\n */\r\n sleepUntilPoseChanges(mesh: SceneNode) {\r\n this._sleepingMeshes.add(mesh);\r\n }\r\n /**\r\n * Node the palette matrices are relative to: the parent of the rig's root joint, or null\r\n * for world space.\r\n *\r\n * @remarks\r\n * A mesh skinned by this binding transforms palette output to its local space by\r\n * `inverse(mesh.worldMatrix) * referenceNode.worldMatrix`.\r\n */\r\n get referenceNode(): Nullable<SceneNode> {\r\n return this._rig.rootJoint?.parent ?? null;\r\n }\r\n /**\r\n * Get joint index by joint node\r\n * @param joint - joint node\r\n * @returns The index of the joint\r\n */\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n /**\r\n * Get joint index by joint name\r\n * @param jointName - joint name\r\n * @returns The index of the joint\r\n */\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n /**\r\n * Update joint matrices from either provided transforms or the joints' world matrices.\r\n *\r\n * - Lazily creates the joint texture and its backing arrays on first call.\r\n * - Advances the ring buffer offset in `_jointOffsets` to write a new \"current\" set.\r\n * - For each joint:\r\n * - Optionally premultiplies by `worldMatrix` (to transform into model space).\r\n * - Computes skinning matrix: ( M_\\{skin\\} = M_\\{joint\\} \\\\times M_\\{inverseBind\\} ).\r\n *\r\n * Note: This method only writes into the CPU-side array; callers like `computeJoints()`\r\n * update the GPU texture.\r\n *\r\n * @param jointTransforms - Optional per-joint transforms to use instead of node world matrices.\r\n * @param worldMatrix - Optional world-to-model transform applied before inverse bind.\r\n * @internal\r\n */\r\n updateJointMatrices() {\r\n if (!this._jointOffsets) {\r\n this._createPalette();\r\n } else if (!this._paletteBlock) {\r\n this._paletteBlock = SkinPaletteAtlas.instance.allocate(this.joints.length * 2 + 1);\r\n }\r\n const first = this._jointOffsets[0] === 0;\r\n if (first) {\r\n this._jointOffsets[0] = 1;\r\n this._jointOffsets[1] = 1;\r\n } else {\r\n this._jointOffsets[1] = this._jointOffsets[0];\r\n this._jointOffsets[0] = this.joints.length - this._jointOffsets[0] + 2;\r\n }\r\n for (let i = 0; i < this.joints.length; i++) {\r\n Matrix4x4.multiply(\r\n this.joints[i].worldMatrix,\r\n this._inverseBindMatrices[i],\r\n this._jointMatrices[i + this._jointOffsets[0] - 1]\r\n );\r\n }\r\n // CPU-side matrices are world space and always current; the palette and anything derived\r\n // from the pose only change when the pose relative to the reference node does\r\n const changed = this._poseChanged() || first;\r\n if (changed) {\r\n this._computePalette();\r\n this._paletteSettled = false;\r\n this._paletteVersion++;\r\n for (const mesh of this._sleepingMeshes) {\r\n mesh.scene?.queueUpdateNode(mesh);\r\n }\r\n this._sleepingMeshes.clear();\r\n }\r\n // The first still frame writes the pose once more so the previous set equals the current\r\n // one; after that both sets hold it and the atlas is left alone\r\n if (!this._paletteSettled) {\r\n this._writePalette();\r\n this._paletteSettled = !changed;\r\n }\r\n }\r\n /**\r\n * Reset skeleton to bind pose\r\n *\r\n * @internal\r\n */\r\n computeBindPose() {\r\n this._rig.computeBindPose();\r\n }\r\n /**\r\n * Compute current joint matrices from the nodes and write them to the joint texture.\r\n *\r\n * @remarks\r\n * The joint texture is uploaded once per frame when the scene update completes.\r\n *\r\n * @internal\r\n */\r\n apply() {\r\n if (this._paletteSuspendCount === 0) {\r\n this.updateJointMatrices();\r\n }\r\n }\r\n /**\r\n * Stop or resume updating the palette, while meshes are skinned by other palettes in place of\r\n * this binding's.\r\n *\r\n * @remarks\r\n * Calls are counted; the palette updates again once every suspension is resumed. CPU-side joint\r\n * matrices are not updated while suspended either.\r\n *\r\n * The atlas block of the palette is released while suspended, since no mesh reads it, and\r\n * allocated again on resume, at a new base: meshes pick it up as their palette overrides are\r\n * cleared.\r\n *\r\n * @param suspend - true to suspend, false to resume\r\n * @internal\r\n */\r\n suspendPalette(suspend: boolean) {\r\n const wasSuspended = this._paletteSuspendCount > 0;\r\n this._paletteSuspendCount = Math.max(0, this._paletteSuspendCount + (suspend ? 1 : -1));\r\n if (!wasSuspended && this._paletteSuspendCount > 0 && this._paletteBlock) {\r\n SkinPaletteAtlas.instance.free(this._paletteBlock);\r\n this._paletteBlock = null;\r\n } else if (wasSuspended && this._paletteSuspendCount === 0 && this._jointOffsets) {\r\n this._paletteBlock = SkinPaletteAtlas.instance.allocate(this.joints.length * 2 + 1);\r\n // The previous set is as old as the suspension, so restart the history: the next update\r\n // writes both sets, giving no motion for one frame rather than the motion since then\r\n this._jointOffsets[0] = 0;\r\n this._paletteSettled = false;\r\n }\r\n }\r\n /**\r\n * Apply all enabled modifiers.\r\n *\r\n * Modifiers are applied after the base animation/bind pose layer,\r\n * allowing procedural modifications like IK, spring physics, or manual overrides.\r\n *\r\n * @param deltaTime - Time elapsed since last frame (in seconds)\r\n * @internal\r\n */\r\n protected applyModifiers(deltaTime: number): void {\r\n this._rig.apply(deltaTime);\r\n }\r\n /**\r\n * Get all modifiers attached to this skeleton.\r\n *\r\n * @public\r\n */\r\n get modifiers(): SkeletonModifier[] {\r\n return this._rig.modifiers;\r\n }\r\n /**\r\n * Reset all meshes to an unskinned state and clear animated bounds.\r\n *\r\n * @internal\r\n */\r\n reset() {\r\n //this.updateJointMatrices(this._bindPoseMatrices);\r\n this._playing = false;\r\n }\r\n /**\r\n * Compute the animated bounding box for a single mesh using its representative vertices.\r\n *\r\n * For each representative vertex:\r\n * - Blends the vertex by up to 4 palette matrices using provided weights.\r\n * - Transforms to the mesh's local space using `skinSpaceMatrix`.\r\n * - Expands the bounding box.\r\n *\r\n * @remarks\r\n * Reads the palette, which is relative to {@link SkinBinding.referenceNode} and changes together\r\n * with {@link SkinBinding.paletteVersion}, rather than the world-space joint matrices: those are\r\n * a snapshot of when the joints were last updated, and the model may have moved since without\r\n * changing the pose, so combining them with the current mesh transform offsets the bounds.\r\n *\r\n * @param info - Precomputed bounding data (representative vertices, indices, weights).\r\n * @param skinSpaceMatrix - Matrix transforming palette output to the mesh's local space,\r\n * see {@link Mesh.getSkinSpaceMatrix}.\r\n * @internal\r\n */\r\n computeBoundingBox(info: SkinnedBoundingBox, skinSpaceMatrix: Matrix4x4) {\r\n info.boundingBox.beginExtend();\r\n const palette = this._paletteData;\r\n if (!palette) {\r\n return;\r\n }\r\n const numJoints = this.joints.length;\r\n const influenceCount = Math.max(1, info.influenceCount ?? 4);\r\n for (let i = 0; i < info.boundingVertices.length; i++) {\r\n const v = info.boundingVertices[i];\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(info.boundingVertexJointWeights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const joint = Number(info.boundingVertexBlendIndices[base + j]) || 0;\r\n if (joint < 0 || joint >= numJoints) {\r\n continue;\r\n }\r\n const m = joint * 16;\r\n x += weight * (palette[m] * v.x + palette[m + 4] * v.y + palette[m + 8] * v.z + palette[m + 12]);\r\n y += weight * (palette[m + 1] * v.x + palette[m + 5] * v.y + palette[m + 9] * v.z + palette[m + 13]);\r\n z += weight * (palette[m + 2] * v.x + palette[m + 6] * v.y + palette[m + 10] * v.z + palette[m + 14]);\r\n }\r\n tmpV0.setXYZ(x, y, z);\r\n skinSpaceMatrix.transformPointAffine(tmpV0, tmpV0);\r\n info.boundingBox.extend(tmpV0);\r\n }\r\n }\r\n /**\r\n * Dispose GPU resources and references held by the skeleton.\r\n *\r\n * - Disposes the joint texture.\r\n * - Clears matrix arrays and joint references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n if (this._paletteBlock) {\r\n SkinPaletteAtlas.instance.free(this._paletteBlock);\r\n this._paletteBlock = null;\r\n }\r\n this._sleepingMeshes.clear();\r\n const m = SkinBinding._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkinBinding._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n /**\r\n * Allocate the palette block and CPU-side matrix storage.\r\n *\r\n * Layout details:\r\n * - The block holds a header slot followed by 2×N matrix slots (current and previous).\r\n * - `_jointOffsets` holds the ring buffer offsets `[current, previous]` relative to the block.\r\n * - `_jointMatrices` holds the world-space skinning matrices of both sets, which CPU-side\r\n * consumers (bounds, cloth) read.\r\n *\r\n * @internal\r\n */\r\n private _createPalette() {\r\n this._paletteBlock = SkinPaletteAtlas.instance.allocate(this.joints.length * 2 + 1);\r\n this._paletteData = new Float32Array(this.joints.length * 16);\r\n this._paletteSettled = false;\r\n this._jointOffsets = new Float32Array(2);\r\n this._jointMatrices = Array.from({ length: this.joints.length * 2 }).map(() => new Matrix4x4());\r\n }\r\n /**\r\n * Whether the pose may have changed since it last did: the local transform of a joint, or of a\r\n * node between the joints and the reference node, has changed.\r\n *\r\n * @remarks\r\n * Moving the whole model changes the world matrices of the joints but not the pose, so world\r\n * matrices cannot tell; and comparing matrices taken back to the reference node trips over\r\n * rounding far from the origin.\r\n */\r\n private _poseChanged() {\r\n const reference = this.referenceNode;\r\n if (!this._poseNodes || this._poseNodes.reference !== reference) {\r\n const nodes = new Set<SceneNode>();\r\n for (const joint of this.joints) {\r\n for (let node: Nullable<SceneNode> = joint; node && node !== reference; node = node.parent) {\r\n if (nodes.has(node)) {\r\n break;\r\n }\r\n nodes.add(node);\r\n }\r\n }\r\n this._poseNodes = { reference, nodes: [...nodes] };\r\n this._poseTag = -1;\r\n }\r\n let tag = 0;\r\n for (const node of this._poseNodes.nodes) {\r\n tag += node.localTransformTag;\r\n }\r\n if (tag !== this._poseTag) {\r\n this._poseTag = tag;\r\n return true;\r\n }\r\n return false;\r\n }\r\n /** Compute the current set of matrices relative to the reference node */\r\n private _computePalette() {\r\n const reference = this.referenceNode;\r\n const invReference = reference ? Matrix4x4.invertAffine(reference.worldMatrix, tmpMatrix) : null;\r\n const offset = this._jointOffsets[0] - 1;\r\n for (let i = 0; i < this.joints.length; i++) {\r\n const world = this._jointMatrices[i + offset];\r\n this._paletteData.set(\r\n invReference ? Matrix4x4.multiplyAffine(invReference, world, tmpMatrix2) : world,\r\n i * 16\r\n );\r\n }\r\n }\r\n /** Write the header and the current set of matrices to the palette */\r\n private _writePalette() {\r\n const atlas = SkinPaletteAtlas.instance;\r\n const base = this._paletteBlock!.base;\r\n atlas.writeSlots(base + this._jointOffsets[0], this._paletteData);\r\n tmpHeader[0] = base + this._jointOffsets[0];\r\n tmpHeader[1] = base + this._jointOffsets[1];\r\n atlas.writeSlots(base, tmpHeader);\r\n }\r\n /**\r\n * Build representative skinned bounding data for a submesh.\r\n *\r\n * Strategy:\r\n * - For all vertices, compute their skinned position (using current ring buffer slot).\r\n * - Track the indices of the min/max extents along x, y, z (6 indices total).\r\n * - Store:\r\n * - The 6 representative positions in object space.\r\n * - Their 4 joint indices and weights (flattened).\r\n * - An empty BoundingBox to be filled during animation.\r\n *\r\n * @param meshData - Raw submesh attributes (positions, blend indices, weights).\r\n * @returns Skinned bounding box info used during per-frame updates.\r\n */\r\n getBoundingInfo(data: {\r\n positions: Float32Array;\r\n blendIndices: TypedArray;\r\n weights: TypedArray;\r\n influenceCount?: number;\r\n }) {\r\n const indices = [0, 0, 0, 0, 0, 0];\r\n let minx = Number.MAX_VALUE;\r\n let maxx = -Number.MAX_VALUE;\r\n let miny = Number.MAX_VALUE;\r\n let maxy = -Number.MAX_VALUE;\r\n let minz = Number.MAX_VALUE;\r\n let maxz = -Number.MAX_VALUE;\r\n const v = data.positions;\r\n const vert = new Vector3();\r\n const tmpV0 = new Vector3();\r\n const tmpV1 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\r\n const influenceCount = Math.max(1, data.influenceCount ?? 4);\r\n for (let i = 0; i < numVertices; i++) {\r\n vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(data.weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[(Number(data.blendIndices[base + j]) || 0) + this._jointOffsets[0] - 1];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(vert, tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n if (tmpV0.x < minx) {\r\n minx = tmpV0.x;\r\n indices[0] = i;\r\n }\r\n if (tmpV0.x > maxx) {\r\n maxx = tmpV0.x;\r\n indices[1] = i;\r\n }\r\n if (tmpV0.y < miny) {\r\n miny = tmpV0.y;\r\n indices[2] = i;\r\n }\r\n if (tmpV0.y > maxy) {\r\n maxy = tmpV0.y;\r\n indices[3] = i;\r\n }\r\n if (tmpV0.z < minz) {\r\n minz = tmpV0.z;\r\n indices[4] = i;\r\n }\r\n if (tmpV0.z > maxz) {\r\n maxz = tmpV0.z;\r\n indices[5] = i;\r\n }\r\n }\r\n const info: SkinnedBoundingBox = {\r\n influenceCount,\r\n boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.blendIndices[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.weights[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertices: Array.from({ length: 6 }).map(\r\n (val, index) =>\r\n new Vector3(\r\n data.positions[indices[index] * 3],\r\n data.positions[indices[index] * 3 + 1],\r\n data.positions[indices[index] * 3 + 2]\r\n )\r\n ),\r\n boundingBox: new BoundingBox()\r\n };\r\n return info;\r\n }\r\n /**\r\n * Skin all vertices into mesh-local space for the current skeleton pose.\r\n *\r\n * This is used by systems like cloth that need the animated mesh pose on CPU,\r\n * but render with GPU skinning disabled to avoid double deformation.\r\n *\r\n * @param positions - Bind-pose/object-space input positions, xyz packed.\r\n * @param blendIndices - 4 joint indices per vertex.\r\n * @param weights - 4 joint weights per vertex.\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert skinned world positions back to mesh-local space.\r\n * @param out - Optional output array to reuse.\r\n * @returns The skinned mesh-local positions.\r\n * @internal\r\n */\r\n skinPositionsToLocal(\r\n positions: Float32Array<ArrayBuffer>,\r\n blendIndices: ArrayLike<number>,\r\n weights: ArrayLike<number>,\r\n invWorldMatrix: Matrix4x4,\r\n out?: Float32Array<ArrayBuffer>,\r\n influenceCount?: number\r\n ) {\r\n const result = out && out.length === positions.length ? out : new Float32Array(positions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\r\n const effectiveInfluenceCount = Math.max(\r\n 1,\r\n influenceCount ??\r\n Math.max(1, Math.floor(weights.length / Math.max(1, Math.floor(positions.length / 3))))\r\n );\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const vertexIndex = (i / 3) >> 0;\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n let skinnedX = 0;\r\n let skinnedY = 0;\r\n let skinnedZ = 0;\r\n let weightSum = 0;\r\n const base = vertexIndex * effectiveInfluenceCount;\r\n for (let j = 0; j < effectiveInfluenceCount; j++) {\r\n const weight = Number(weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[base + j]) || 0) + matrixOffset;\r\n const matrix = this._jointMatrices[jointIndex];\r\n if (!matrix) {\r\n continue;\r\n }\r\n skinnedX += (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) * weight;\r\n skinnedY += (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) * weight;\r\n skinnedZ += (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) * weight;\r\n weightSum += weight;\r\n }\r\n if (weightSum <= 1e-6) {\r\n skinnedX = x;\r\n skinnedY = y;\r\n skinnedZ = z;\r\n }\r\n result[i] =\r\n invWorldMatrix[0] * skinnedX +\r\n invWorldMatrix[4] * skinnedY +\r\n invWorldMatrix[8] * skinnedZ +\r\n invWorldMatrix[12];\r\n result[i + 1] =\r\n invWorldMatrix[1] * skinnedX +\r\n invWorldMatrix[5] * skinnedY +\r\n invWorldMatrix[9] * skinnedZ +\r\n invWorldMatrix[13];\r\n result[i + 2] =\r\n invWorldMatrix[2] * skinnedX +\r\n invWorldMatrix[6] * skinnedY +\r\n invWorldMatrix[10] * skinnedZ +\r\n invWorldMatrix[14];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Skin packed direction vectors into mesh-local space for the current skeleton pose.\r\n *\r\n * Unlike positions, directions ignore matrix translation and are normalized after\r\n * conversion through the mesh inverse world matrix.\r\n *\r\n * @internal\r\n */\r\n skinDirectionsToLocal(\r\n directions: Float32Array<ArrayBuffer>,\r\n blendIndices: ArrayLike<number>,\r\n weights: ArrayLike<number>,\r\n invWorldMatrix: Matrix4x4,\r\n out?: Float32Array<ArrayBuffer>,\r\n influenceCount?: number\r\n ) {\r\n const result = out && out.length === directions.length ? out : new Float32Array(directions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\r\n const effectiveInfluenceCount = Math.max(\r\n 1,\r\n influenceCount ??\r\n Math.max(1, Math.floor(weights.length / Math.max(1, Math.floor(directions.length / 3))))\r\n );\r\n for (let i = 0; i + 2 < directions.length; i += 3) {\r\n const vertexIndex = (i / 3) >> 0;\r\n const x = directions[i];\r\n const y = directions[i + 1];\r\n const z = directions[i + 2];\r\n let skinnedX = 0;\r\n let skinnedY = 0;\r\n let skinnedZ = 0;\r\n let weightSum = 0;\r\n const base = vertexIndex * effectiveInfluenceCount;\r\n for (let j = 0; j < effectiveInfluenceCount; j++) {\r\n const weight = Number(weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[base + j]) || 0) + matrixOffset;\r\n const matrix = this._jointMatrices[jointIndex];\r\n if (!matrix) {\r\n continue;\r\n }\r\n skinnedX += (matrix[0] * x + matrix[4] * y + matrix[8] * z) * weight;\r\n skinnedY += (matrix[1] * x + matrix[5] * y + matrix[9] * z) * weight;\r\n skinnedZ += (matrix[2] * x + matrix[6] * y + matrix[10] * z) * weight;\r\n weightSum += weight;\r\n }\r\n if (weightSum <= 1e-6) {\r\n skinnedX = x;\r\n skinnedY = y;\r\n skinnedZ = z;\r\n }\r\n const localX =\r\n invWorldMatrix[0] * skinnedX + invWorldMatrix[4] * skinnedY + invWorldMatrix[8] * skinnedZ;\r\n const localY =\r\n invWorldMatrix[1] * skinnedX + invWorldMatrix[5] * skinnedY + invWorldMatrix[9] * skinnedZ;\r\n const localZ =\r\n invWorldMatrix[2] * skinnedX + invWorldMatrix[6] * skinnedY + invWorldMatrix[10] * skinnedZ;\r\n const length = Math.hypot(localX, localY, localZ);\r\n if (length > 1e-8) {\r\n result[i] = localX / length;\r\n result[i + 1] = localY / length;\r\n result[i + 2] = localZ / length;\r\n } else {\r\n result[i] = 0;\r\n result[i + 1] = 1;\r\n result[i + 2] = 0;\r\n }\r\n }\r\n return result;\r\n }\r\n private static normalizeHumanoidJointName(name: string) {\r\n return name\r\n .slice(name.lastIndexOf(':') + 1)\r\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/([a-zA-Z])(\\d+)/g, '$1 $2')\r\n .replace(/(\\d+)([a-zA-Z])/g, '$1 $2')\r\n .replace(/[_:\\/\\\\.-]+/g, ' ')\r\n .replace(/[^a-zA-Z0-9]+/g, ' ')\r\n .toLowerCase()\r\n .replace(/\\bforearm\\b/g, 'fore arm')\r\n .replace(/\\bupperarm\\b/g, 'upper arm')\r\n .replace(/\\blowerarm\\b/g, 'lower arm')\r\n .replace(/\\bupleg\\b/g, 'up leg')\r\n .replace(/\\bupperleg\\b/g, 'upper leg')\r\n .replace(/\\blowerleg\\b/g, 'lower leg')\r\n .replace(/\\btoebase\\b/g, 'toe base')\r\n .replace(/\\bupperchest\\b/g, 'upper chest')\r\n .replace(/\\btoes\\b/g, 'toe')\r\n .replace(/\\blittle\\b/g, 'pinky')\r\n .replace(/\\bcollar\\b/g, 'clavicle')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n }\r\n private static getHumanoidJointNodeDepth<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T,\r\n node: T\r\n ) {\r\n let depth = 0;\r\n let current: Nullable<T> = node;\r\n while (current && current !== root) {\r\n depth++;\r\n current = current.parent;\r\n }\r\n return depth;\r\n }\r\n private static collectHumanoidJointNodeInfos<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointNodeInfo<T>[] {\r\n const nodes: HumanoidJointNodeInfo<T>[] = [];\r\n this.iterateNode(root, (node) => {\r\n const normalizedName = this.normalizeHumanoidJointName(node.name || '');\r\n if (!normalizedName) {\r\n return false;\r\n }\r\n const tokens = normalizedName.split(' ').filter(Boolean);\r\n if (!tokens.length || tokens.some((token) => humanoidHelperJointTokens.has(token))) {\r\n return false;\r\n }\r\n nodes.push({\r\n node,\r\n depth: this.getHumanoidJointNodeDepth(root, node),\r\n tokens,\r\n tokenSet: new Set(tokens)\r\n });\r\n return false;\r\n });\r\n return nodes;\r\n }\r\n private static matchesHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern\r\n ) {\r\n if (pattern.all?.some((token) => !info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.any?.length && !pattern.any.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.none?.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n private static scoreHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern,\r\n priority: number\r\n ) {\r\n const matchedTokens = new Set(pattern.all ?? []);\r\n for (const token of pattern.any ?? []) {\r\n if (info.tokenSet.has(token)) {\r\n matchedTokens.add(token);\r\n }\r\n }\r\n let extraTokenCount = 0;\r\n for (const token of info.tokens) {\r\n if (!matchedTokens.has(token)) {\r\n extraTokenCount++;\r\n }\r\n }\r\n return priority * 100000 + matchedTokens.size * 100 - extraTokenCount * 5 - info.depth;\r\n }\r\n private static collectHumanoidJointCandidates<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ): HumanoidJointMatchCandidate<T>[] {\r\n const candidates = new Map<T, number>();\r\n for (let index = 0; index < patterns.length; index++) {\r\n const pattern = patterns[index];\r\n const priority = patterns.length - index;\r\n for (const info of nodes) {\r\n if (used.has(info.node) || !this.matchesHumanoidJointPattern(info, pattern)) {\r\n continue;\r\n }\r\n const score = this.scoreHumanoidJointPattern(info, pattern, priority);\r\n const current = candidates.get(info.node);\r\n if (current === undefined || score > current) {\r\n candidates.set(info.node, score);\r\n }\r\n }\r\n }\r\n return Array.from(candidates, ([node, score]) => ({ node, score })).sort((a, b) => b.score - a.score);\r\n }\r\n private static findBestHumanoidJoint<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ) {\r\n return this.collectHumanoidJointCandidates(nodes, patterns, used)[0]?.node ?? null;\r\n }\r\n private static matchHumanoidJointProfile<T extends string, U extends { name: string; children: U[] }>(\r\n nodes: HumanoidJointNodeInfo<U>[],\r\n profile: HumanoidJointProfile<T>,\r\n used: Set<U>,\r\n optional?: Set<T>\r\n ): Partial<Record<T, U>> | null {\r\n const result = {} as Partial<Record<T, U>>;\r\n const reserved = new Set<U>();\r\n for (const joint of Object.keys(profile) as T[]) {\r\n const node = this.findBestHumanoidJoint(nodes, profile[joint], new Set<U>([...used, ...reserved]));\r\n if (!node) {\r\n if (optional?.has(joint)) {\r\n continue;\r\n }\r\n return null;\r\n }\r\n result[joint] = node;\r\n reserved.add(node);\r\n }\r\n for (const node of reserved) {\r\n used.add(node);\r\n }\r\n return result;\r\n }\r\n private static validateHumanoidBodyPartial<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ) {\r\n const validateAncestor = (ancestor: HumanoidBodyRig, descendant: HumanoidBodyRig) =>\r\n !body[ancestor] || !body[descendant] || this.isSameOrAncestor(body[ancestor]!, body[descendant]!);\r\n return (\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Spine) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.LeftUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.RightUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Chest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Neck, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.LeftShoulder, HumanoidBodyRig.LeftUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperArm, HumanoidBodyRig.LeftLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerArm, HumanoidBodyRig.LeftHand) &&\r\n validateAncestor(HumanoidBodyRig.RightShoulder, HumanoidBodyRig.RightUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperArm, HumanoidBodyRig.RightLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerArm, HumanoidBodyRig.RightHand) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperLeg, HumanoidBodyRig.LeftLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerLeg, HumanoidBodyRig.LeftFoot) &&\r\n validateAncestor(HumanoidBodyRig.LeftFoot, HumanoidBodyRig.LeftToes) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperLeg, HumanoidBodyRig.RightLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerLeg, HumanoidBodyRig.RightFoot) &&\r\n validateAncestor(HumanoidBodyRig.RightFoot, HumanoidBodyRig.RightToes)\r\n );\r\n }\r\n private static matchHumanoidBodyProfile<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n profile: HumanoidJointProfile<HumanoidBodyRig>,\r\n used: Set<T>,\r\n optional?: Set<HumanoidBodyRig>\r\n ): Partial<Record<HumanoidBodyRig, T>> | null {\r\n const joints = Object.keys(profile) as HumanoidBodyRig[];\r\n const candidates = new Map<HumanoidBodyRig, HumanoidJointMatchCandidate<T>[]>();\r\n for (const joint of joints) {\r\n candidates.set(joint, this.collectHumanoidJointCandidates(nodes, profile[joint], used));\r\n }\r\n const current = {} as Partial<Record<HumanoidBodyRig, T>>;\r\n const reserved = new Set<T>();\r\n let bestScore = Number.NEGATIVE_INFINITY;\r\n let bestResult: Partial<Record<HumanoidBodyRig, T>> | null = null;\r\n const search = (index: number, score: number) => {\r\n if (index >= joints.length) {\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestResult = { ...current };\r\n }\r\n return;\r\n }\r\n const joint = joints[index];\r\n let matched = false;\r\n for (const candidate of candidates.get(joint) ?? []) {\r\n if (reserved.has(candidate.node)) {\r\n continue;\r\n }\r\n current[joint] = candidate.node;\r\n reserved.add(candidate.node);\r\n if (this.validateHumanoidBodyPartial(current)) {\r\n matched = true;\r\n search(index + 1, score + candidate.score);\r\n }\r\n reserved.delete(candidate.node);\r\n delete current[joint];\r\n }\r\n if (optional?.has(joint)) {\r\n search(index + 1, score);\r\n } else if (!matched) {\r\n return;\r\n }\r\n };\r\n search(0, 0);\r\n if (!bestResult) {\r\n return null;\r\n }\r\n for (const node of Object.values(bestResult) as T[]) {\r\n used.add(node);\r\n }\r\n return bestResult;\r\n }\r\n private static getHumanoidIntermediateChain<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n ancestor: T,\r\n descendant: T\r\n ) {\r\n if (!this.isSameOrAncestor(ancestor, descendant)) {\r\n return null;\r\n }\r\n const chain: T[] = [];\r\n let current = descendant.parent;\r\n while (current && current !== ancestor) {\r\n chain.unshift(current);\r\n current = current.parent;\r\n }\r\n return chain;\r\n }\r\n private static completeHumanoidBody<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ): Record<HumanoidBodyRig, T> | null {\r\n const requiredJoints = [\r\n HumanoidBodyRig.Hips,\r\n HumanoidBodyRig.Spine,\r\n HumanoidBodyRig.Neck,\r\n HumanoidBodyRig.Head,\r\n HumanoidBodyRig.LeftShoulder,\r\n HumanoidBodyRig.LeftUpperArm,\r\n HumanoidBodyRig.LeftLowerArm,\r\n HumanoidBodyRig.LeftHand,\r\n HumanoidBodyRig.RightShoulder,\r\n HumanoidBodyRig.RightUpperArm,\r\n HumanoidBodyRig.RightLowerArm,\r\n HumanoidBodyRig.RightHand,\r\n HumanoidBodyRig.LeftUpperLeg,\r\n HumanoidBodyRig.LeftLowerLeg,\r\n HumanoidBodyRig.LeftFoot,\r\n HumanoidBodyRig.LeftToes,\r\n HumanoidBodyRig.RightUpperLeg,\r\n HumanoidBodyRig.RightLowerLeg,\r\n HumanoidBodyRig.RightFoot,\r\n HumanoidBodyRig.RightToes\r\n ];\r\n for (const joint of requiredJoints) {\r\n if (!body[joint]) {\r\n return null;\r\n }\r\n }\r\n const spine = body[HumanoidBodyRig.Spine]!;\r\n const neck = body[HumanoidBodyRig.Neck]!;\r\n let chest = body[HumanoidBodyRig.Chest];\r\n let upperChest = body[HumanoidBodyRig.UpperChest];\r\n if (!chest || !upperChest) {\r\n const spineChain = this.getHumanoidIntermediateChain(spine, neck);\r\n if (!spineChain || spineChain.length === 0) {\r\n chest ||= spine;\r\n upperChest ||= chest;\r\n } else if (spineChain.length === 1) {\r\n chest ||= spineChain[0];\r\n upperChest ||= chest;\r\n } else {\r\n chest ||= spineChain[0];\r\n upperChest ||= spineChain[spineChain.length - 1];\r\n }\r\n }\r\n if (!chest || !upperChest) {\r\n return null;\r\n }\r\n return {\r\n [HumanoidBodyRig.Hips]: body[HumanoidBodyRig.Hips]!,\r\n [HumanoidBodyRig.Spine]: spine,\r\n [HumanoidBodyRig.Chest]: chest,\r\n [HumanoidBodyRig.UpperChest]: upperChest,\r\n [HumanoidBodyRig.Neck]: neck,\r\n [HumanoidBodyRig.Head]: body[HumanoidBodyRig.Head]!,\r\n [HumanoidBodyRig.LeftShoulder]: body[HumanoidBodyRig.LeftShoulder]!,\r\n [HumanoidBodyRig.LeftUpperArm]: body[HumanoidBodyRig.LeftUpperArm]!,\r\n [HumanoidBodyRig.LeftLowerArm]: body[HumanoidBodyRig.LeftLowerArm]!,\r\n [HumanoidBodyRig.LeftHand]: body[HumanoidBodyRig.LeftHand]!,\r\n [HumanoidBodyRig.RightShoulder]: body[HumanoidBodyRig.RightShoulder]!,\r\n [HumanoidBodyRig.RightUpperArm]: body[HumanoidBodyRig.RightUpperArm]!,\r\n [HumanoidBodyRig.RightLowerArm]: body[HumanoidBodyRig.RightLowerArm]!,\r\n [HumanoidBodyRig.RightHand]: body[HumanoidBodyRig.RightHand]!,\r\n [HumanoidBodyRig.LeftUpperLeg]: body[HumanoidBodyRig.LeftUpperLeg]!,\r\n [HumanoidBodyRig.LeftLowerLeg]: body[HumanoidBodyRig.LeftLowerLeg]!,\r\n [HumanoidBodyRig.LeftFoot]: body[HumanoidBodyRig.LeftFoot]!,\r\n [HumanoidBodyRig.LeftToes]: body[HumanoidBodyRig.LeftToes]!,\r\n [HumanoidBodyRig.RightUpperLeg]: body[HumanoidBodyRig.RightUpperLeg]!,\r\n [HumanoidBodyRig.RightLowerLeg]: body[HumanoidBodyRig.RightLowerLeg]!,\r\n [HumanoidBodyRig.RightFoot]: body[HumanoidBodyRig.RightFoot]!,\r\n [HumanoidBodyRig.RightToes]: body[HumanoidBodyRig.RightToes]!\r\n };\r\n }\r\n private static completeHumanoidHand<T extends { name: string; children: T[] }>(\r\n hand: Partial<Record<HumanoidHandRig, T>>\r\n ): Record<HumanoidHandRig, T> | null {\r\n for (const joint of Object.values(HumanoidHandRig)) {\r\n if (!hand[joint]) {\r\n return null;\r\n }\r\n }\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: hand[HumanoidHandRig.ThumbProximal]!,\r\n [HumanoidHandRig.ThumbIntermediate]: hand[HumanoidHandRig.ThumbIntermediate]!,\r\n [HumanoidHandRig.ThumbDistal]: hand[HumanoidHandRig.ThumbDistal]!,\r\n [HumanoidHandRig.IndexProximal]: hand[HumanoidHandRig.IndexProximal]!,\r\n [HumanoidHandRig.IndexIntermediate]: hand[HumanoidHandRig.IndexIntermediate]!,\r\n [HumanoidHandRig.IndexDistal]: hand[HumanoidHandRig.IndexDistal]!,\r\n [HumanoidHandRig.MiddleProximal]: hand[HumanoidHandRig.MiddleProximal]!,\r\n [HumanoidHandRig.MiddleIntermediate]: hand[HumanoidHandRig.MiddleIntermediate]!,\r\n [HumanoidHandRig.MiddleDistal]: hand[HumanoidHandRig.MiddleDistal]!,\r\n [HumanoidHandRig.RingProximal]: hand[HumanoidHandRig.RingProximal]!,\r\n [HumanoidHandRig.RingIntermediate]: hand[HumanoidHandRig.RingIntermediate]!,\r\n [HumanoidHandRig.RingDistal]: hand[HumanoidHandRig.RingDistal]!,\r\n [HumanoidHandRig.PinkyProximal]: hand[HumanoidHandRig.PinkyProximal]!,\r\n [HumanoidHandRig.PinkyIntermediate]: hand[HumanoidHandRig.PinkyIntermediate]!,\r\n [HumanoidHandRig.PinkyDistal]: hand[HumanoidHandRig.PinkyDistal]!\r\n };\r\n }\r\n private static tryExtractOptionalHumanoidHand<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n side: 'left' | 'right',\r\n used: Set<T>\r\n ): Record<HumanoidHandRig, T> | undefined {\r\n const handCandidates = this.matchHumanoidJointProfile(\r\n nodes,\r\n this.createCommonHumanoidHandProfile(side),\r\n used\r\n );\r\n if (!handCandidates) {\r\n return undefined;\r\n }\r\n return this.completeHumanoidHand(handCandidates) ?? undefined;\r\n }\r\n private static isSameOrAncestor<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: T\r\n ) {\r\n return parent === child || this.isParentOf(parent, child);\r\n }\r\n private static validateHumanoidHandHierarchy<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(hand: T, joints: Record<HumanoidHandRig, T>) {\r\n const chains: [HumanoidHandRig, HumanoidHandRig, HumanoidHandRig][] = [\r\n [HumanoidHandRig.ThumbProximal, HumanoidHandRig.ThumbIntermediate, HumanoidHandRig.ThumbDistal],\r\n [HumanoidHandRig.IndexProximal, HumanoidHandRig.IndexIntermediate, HumanoidHandRig.IndexDistal],\r\n [HumanoidHandRig.MiddleProximal, HumanoidHandRig.MiddleIntermediate, HumanoidHandRig.MiddleDistal],\r\n [HumanoidHandRig.RingProximal, HumanoidHandRig.RingIntermediate, HumanoidHandRig.RingDistal],\r\n [HumanoidHandRig.PinkyProximal, HumanoidHandRig.PinkyIntermediate, HumanoidHandRig.PinkyDistal]\r\n ];\r\n return chains.every(\r\n ([proximal, intermediate, distal]) =>\r\n this.isSameOrAncestor(hand, joints[proximal]) &&\r\n this.isSameOrAncestor(joints[proximal], joints[intermediate]) &&\r\n this.isSameOrAncestor(joints[intermediate], joints[distal])\r\n );\r\n }\r\n private static validateHumanoidJointExtraction<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(result: HumanoidJointMapping<T>) {\r\n const body = result.body;\r\n return (\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.Spine]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Spine], body[HumanoidBodyRig.Chest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Chest], body[HumanoidBodyRig.UpperChest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.Neck]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Neck], body[HumanoidBodyRig.Head]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.LeftShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftShoulder], body[HumanoidBodyRig.LeftUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperArm], body[HumanoidBodyRig.LeftLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerArm], body[HumanoidBodyRig.LeftHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.RightShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightShoulder], body[HumanoidBodyRig.RightUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperArm], body[HumanoidBodyRig.RightLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerArm], body[HumanoidBodyRig.RightHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.LeftUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperLeg], body[HumanoidBodyRig.LeftLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerLeg], body[HumanoidBodyRig.LeftFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftFoot], body[HumanoidBodyRig.LeftToes]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.RightUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperLeg], body[HumanoidBodyRig.RightLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerLeg], body[HumanoidBodyRig.RightFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightFoot], body[HumanoidBodyRig.RightToes]) &&\r\n (!result.leftHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.LeftHand], result.leftHand)) &&\r\n (!result.rightHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.RightHand], result.rightHand))\r\n );\r\n }\r\n private static createCommonHumanoidHandProfile(\r\n side: 'left' | 'right'\r\n ): HumanoidJointProfile<HumanoidHandRig> {\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'proximal'] },\r\n { all: ['thumb', '1'] },\r\n { all: ['finger', '0'] }\r\n ]),\r\n [HumanoidHandRig.ThumbIntermediate]: sideJointPatterns(side, [\r\n { all: ['thumb', 'intermediate'] },\r\n { all: ['thumb', '2'] },\r\n { all: ['finger', '01'] }\r\n ]),\r\n [HumanoidHandRig.ThumbDistal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'distal'] },\r\n { all: ['thumb', '3'] },\r\n { all: ['finger', '02'] }\r\n ]),\r\n [HumanoidHandRig.IndexProximal]: sideJointPatterns(side, [\r\n { all: ['index', 'proximal'] },\r\n { all: ['index', '1'] },\r\n { all: ['finger', '1'] }\r\n ]),\r\n [HumanoidHandRig.IndexIntermediate]: sideJointPatterns(side, [\r\n { all: ['index', 'intermediate'] },\r\n { all: ['index', '2'] },\r\n { all: ['finger', '11'] }\r\n ]),\r\n [HumanoidHandRig.IndexDistal]: sideJointPatterns(side, [\r\n { all: ['index', 'distal'] },\r\n { all: ['index', '3'] },\r\n { all: ['finger', '12'] }\r\n ]),\r\n [HumanoidHandRig.MiddleProximal]: sideJointPatterns(side, [\r\n { all: ['middle', 'proximal'] },\r\n { all: ['middle', '1'] },\r\n { all: ['finger', '2'] }\r\n ]),\r\n [HumanoidHandRig.MiddleIntermediate]: sideJointPatterns(side, [\r\n { all: ['middle', 'intermediate'] },\r\n { all: ['middle', '2'] },\r\n { all: ['finger', '21'] }\r\n ]),\r\n [HumanoidHandRig.MiddleDistal]: sideJointPatterns(side, [\r\n { all: ['middle', 'distal'] },\r\n { all: ['middle', '3'] },\r\n { all: ['finger', '22'] }\r\n ]),\r\n [HumanoidHandRig.RingProximal]: sideJointPatterns(side, [\r\n { all: ['ring', 'proximal'] },\r\n { all: ['ring', '1'] },\r\n { all: ['finger', '3'] }\r\n ]),\r\n [HumanoidHandRig.RingIntermediate]: sideJointPatterns(side, [\r\n { all: ['ring', 'intermediate'] },\r\n { all: ['ring', '2'] },\r\n { all: ['finger', '31'] }\r\n ]),\r\n [HumanoidHandRig.RingDistal]: sideJointPatterns(side, [\r\n { all: ['ring', 'distal'] },\r\n { all: ['ring', '3'] },\r\n { all: ['finger', '32'] }\r\n ]),\r\n [HumanoidHandRig.PinkyProximal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'proximal'] },\r\n { all: ['pinky', '1'] },\r\n { all: ['finger', '4'] }\r\n ]),\r\n [HumanoidHandRig.PinkyIntermediate]: sideJointPatterns(side, [\r\n { all: ['pinky', 'intermediate'] },\r\n { all: ['pinky', '2'] },\r\n { all: ['finger', '41'] }\r\n ]),\r\n [HumanoidHandRig.PinkyDistal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'distal'] },\r\n { all: ['pinky', '3'] },\r\n { all: ['finger', '42'] }\r\n ])\r\n };\r\n }\r\n private static createStandardHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips']), jointPattern(['pelvis'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3', 'chest', 'upper'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['chest'], ['upper']), jointPattern(['spine', '1'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['upper', 'chest']),\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createMixamoHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createBipedHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['pelvis']), jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ])\r\n };\r\n }\r\n private static isParentOf<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: Nullable<T>\r\n ) {\r\n while (child && child !== parent) {\r\n child = child.parent!;\r\n }\r\n return child === parent;\r\n }\r\n\r\n private static iterateNode<T extends { name: string; children: T[] }>(\r\n root: T,\r\n callback: (node: T) => boolean\r\n ) {\r\n if (callback(root)) {\r\n return true;\r\n }\r\n for (const child of root.children) {\r\n if (this.iterateNode(child, callback)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n private static tryExtractHumanoidJointsByBodyProfile<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T, bodyProfile: HumanoidJointProfile<HumanoidBodyRig>): HumanoidJointMapping<T> | null {\r\n const nodes = this.collectHumanoidJointNodeInfos(root);\r\n const used = new Set<T>();\r\n const bodyCandidates = this.matchHumanoidBodyProfile(\r\n nodes,\r\n bodyProfile,\r\n used,\r\n new Set<HumanoidBodyRig>([HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest])\r\n );\r\n if (!bodyCandidates) {\r\n return null;\r\n }\r\n const body = this.completeHumanoidBody(bodyCandidates);\r\n if (!body) {\r\n return null;\r\n }\r\n const leftHand = this.tryExtractOptionalHumanoidHand(nodes, 'left', used);\r\n const rightHand = this.tryExtractOptionalHumanoidHand(nodes, 'right', used);\r\n const result: HumanoidJointMapping<T> = {\r\n body,\r\n leftHand,\r\n rightHand\r\n };\r\n return this.validateHumanoidJointExtraction(result) ? result : null;\r\n }\r\n /**\r\n * Attempt to extract humanoid joint mappings from the skeleton's joints based on their names.\r\n *\r\n * This method looks for joints with names matching the standardized `HumanoidBodyRig` and `HumanoidHandRig` enums.\r\n * If a complete mapping is found, it returns an object containing the mapped joints for the body and hands.\r\n * If any required joint is missing, it returns `null`.\r\n *\r\n * This method tries to find the best match for humanoid rigs, designed to work with Mixamo, VRoid, Unity Humanoid,\r\n * Biped, and similar skeletons. It is not guaranteed to work with all models, and may require manual adjustments or\r\n * custom modifiers for non-standard rigs.\r\n *\r\n * @param root - The root scene node to search for humanoid joints.\r\n * @returns An object containing the mapped body and hand joints if a complete humanoid rig is detected, otherwise `null`.\r\n */\r\n static tryExtractHumanoidJoints<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return (\r\n this.tryExtractHumanoidJointsMixamo(root) ??\r\n this.tryExtractHumanoidJointsVRM(root) ??\r\n this.tryExtractHumanoidJointsUnityHumanoid(root) ??\r\n this.tryExtractHumanoidJointsBiped(root)\r\n );\r\n }\r\n static tryExtractHumanoidJointsMixamo<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createMixamoHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsVRM<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsUnityHumanoid<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsBiped<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createBipedHumanoidBodyProfile());\r\n }\r\n}\r\n\r\n/**\r\n * Legacy compatibility name for a skin binding.\r\n *\r\n * New code should use {@link SkeletonRig} for the shared animated rig and\r\n * {@link SkinBinding} for per-skin inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class Skeleton extends SkinBinding {\r\n constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: SkeletonBindPose[]) {\r\n super(new SkeletonRig(joints, bindPose), inverseBindMatrices, joints);\r\n }\r\n\r\n static tryExtractHumanoidJoints = SkinBinding.tryExtractHumanoidJoints;\r\n static tryExtractHumanoidJointsMixamo = SkinBinding.tryExtractHumanoidJointsMixamo;\r\n static tryExtractHumanoidJointsVRM = SkinBinding.tryExtractHumanoidJointsVRM;\r\n static tryExtractHumanoidJointsUnityHumanoid = SkinBinding.tryExtractHumanoidJointsUnityHumanoid;\r\n static tryExtractHumanoidJointsBiped = SkinBinding.tryExtractHumanoidJointsBiped;\r\n static findSkeletonById(id: string) {\r\n return SkinBinding.findSkinBindingById(id);\r\n }\r\n}\r\n"],"names":["HumanoidBodyRig","HumanoidHandRig","tmpV0","Vector3","tmpMatrix","Matrix4x4","tmpMatrix2","tmpHeader","Float32Array","humanoidHelperJointTokens","Set","SkeletonRig","Disposable","_registry","Map","_id","_joints","_bindPoseByJoint","_bindPose","_retargetPoseByJoint","_retargetPose","_rootJoint","_rootBindPose","_playing","_modifiers","_humanoidJointMapping","_humanoidRootRotation","joints","bindPose","options","randomUUID","i","length","set","retargetPose","Error","map","joint","index","skeletonRoot","findRootJoint","rootJoint","rootBindPose","getNodeBindPose","computeBindPose","humanoidJointMapping","undefined","Skeleton","tryExtractHumanoidJoints","Quaternion","identity","hips","body","p","includes","parent","multiply","rotation","DWeakRef","getRigKey","persistentId","sort","join","findRigById","id","m","get","delete","val","hasRetargetPose","getBindPoseForJoint","getRetargetPoseForJoint","humanoidRootRotation","modifiers","playing","b","getJointIndex","indexOf","getJointIndexByName","jointName","findIndex","name","bindpose","position","scale","has","apply","deltaTime","modifier","reset","onDispose","dispose","root","isParentOf","node","clone","zero","one","jointPattern","all","none","any","sideJointPatterns","side","patterns","sideTokens","flatMap","sideToken","pattern","SkinBinding","rig","inverseBindMatrices","_rig","_inverseBindMatrices","_paletteBlock","_paletteSuspendCount","_paletteVersion","_paletteSettled","_poseNodes","_poseTag","_sleepingMeshes","_lastUpdateTime","updateJointMatrices","findSkinBindingById","findSkeletonById","jointTexture","SkinPaletteAtlas","instance","texture","paletteBase","base","paletteVersion","sleepUntilPoseChanges","mesh","add","referenceNode","_jointOffsets","_createPalette","allocate","first","worldMatrix","_jointMatrices","changed","_poseChanged","_computePalette","scene","queueUpdateNode","clear","_writePalette","suspendPalette","suspend","wasSuspended","Math","max","free","applyModifiers","computeBoundingBox","info","skinSpaceMatrix","boundingBox","beginExtend","palette","_paletteData","numJoints","influenceCount","boundingVertices","v","x","y","z","j","weight","Number","boundingVertexJointWeights","boundingVertexBlendIndices","setXYZ","transformPointAffine","extend","Array","from","reference","nodes","tag","localTransformTag","invReference","invertAffine","offset","world","multiplyAffine","atlas","writeSlots","getBoundingInfo","data","indices","minx","MAX_VALUE","maxx","miny","maxy","minz","maxz","positions","vert","tmpV1","numVertices","floor","weights","matrix","blendIndices","scaleBy","addBy","BoundingBox","skinPositionsToLocal","invWorldMatrix","out","result","matrixOffset","effectiveInfluenceCount","vertexIndex","skinnedX","skinnedY","skinnedZ","weightSum","jointIndex","skinDirectionsToLocal","directions","localX","localY","localZ","hypot","normalizeHumanoidJointName","slice","lastIndexOf","replace","toLowerCase","trim","getHumanoidJointNodeDepth","depth","current","collectHumanoidJointNodeInfos","iterateNode","normalizedName","tokens","split","filter","Boolean","some","token","push","tokenSet","matchesHumanoidJointPattern","scoreHumanoidJointPattern","priority","matchedTokens","extraTokenCount","size","collectHumanoidJointCandidates","used","candidates","score","a","findBestHumanoidJoint","matchHumanoidJointProfile","profile","optional","reserved","Object","keys","validateHumanoidBodyPartial","validateAncestor","ancestor","descendant","isSameOrAncestor","matchHumanoidBodyProfile","bestScore","NEGATIVE_INFINITY","bestResult","search","matched","candidate","values","getHumanoidIntermediateChain","chain","unshift","completeHumanoidBody","requiredJoints","spine","neck","chest","upperChest","spineChain","completeHumanoidHand","hand","tryExtractOptionalHumanoidHand","handCandidates","createCommonHumanoidHandProfile","child","validateHumanoidHandHierarchy","chains","every","proximal","intermediate","distal","validateHumanoidJointExtraction","leftHand","rightHand","createStandardHumanoidBodyProfile","createMixamoHumanoidBodyProfile","createBipedHumanoidBodyProfile","callback","children","tryExtractHumanoidJointsByBodyProfile","bodyProfile","bodyCandidates","tryExtractHumanoidJointsMixamo","tryExtractHumanoidJointsVRM","tryExtractHumanoidJointsUnityHumanoid","tryExtractHumanoidJointsBiped"],"mappings":"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"}