@zephyr3d/scene 0.9.0 → 0.9.2

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 (149) hide show
  1. package/dist/animation/animationset.js +135 -133
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  12. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  13. package/dist/animation/joint_dynamics/collision.js +60 -12
  14. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  15. package/dist/animation/joint_dynamics/constraints.js +20 -4
  16. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  17. package/dist/animation/joint_dynamics/controller.js +151 -103
  18. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  19. package/dist/animation/joint_dynamics/solver.js +21 -11
  20. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  21. package/dist/animation/joint_dynamics/types.js +15 -3
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/pca_geometry_cache_track.js +5 -1
  24. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  25. package/dist/animation/skeleton.js +2 -2
  26. package/dist/animation/skeleton.js.map +1 -1
  27. package/dist/animation/skeleton_modifier.js +2 -6
  28. package/dist/animation/skeleton_modifier.js.map +1 -1
  29. package/dist/animation/spring/spring_system.js +87 -114
  30. package/dist/animation/spring/spring_system.js.map +1 -1
  31. package/dist/app/app.js.map +1 -1
  32. package/dist/app/engine.js +1 -1
  33. package/dist/app/engine.js.map +1 -1
  34. package/dist/app/screen.js +4 -4
  35. package/dist/app/screen.js.map +1 -1
  36. package/dist/app/scriptingsystem.js +24 -1
  37. package/dist/app/scriptingsystem.js.map +1 -1
  38. package/dist/app/scriptregistry.js +165 -144
  39. package/dist/app/scriptregistry.js.map +1 -1
  40. package/dist/asset/assetmanager.js +2 -2
  41. package/dist/asset/assetmanager.js.map +1 -1
  42. package/dist/asset/model.js +3 -3
  43. package/dist/asset/model.js.map +1 -1
  44. package/dist/camera/camera.js +185 -185
  45. package/dist/camera/camera.js.map +1 -1
  46. package/dist/camera/orbit.js.map +1 -1
  47. package/dist/index.d.ts +794 -261
  48. package/dist/index.js +2 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/material/material.js +290 -288
  51. package/dist/material/material.js.map +1 -1
  52. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +13 -26
  53. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  54. package/dist/material/pbrmr.js +1 -11
  55. package/dist/material/pbrmr.js.map +1 -1
  56. package/dist/material/sprite.js +6 -6
  57. package/dist/material/sprite.js.map +1 -1
  58. package/dist/material/terrain-cm.js +2 -2
  59. package/dist/material/terrain-cm.js.map +1 -1
  60. package/dist/posteffect/taa.js +31 -39
  61. package/dist/posteffect/taa.js.map +1 -1
  62. package/dist/render/drawable.js +5 -1
  63. package/dist/render/drawable.js.map +1 -1
  64. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  65. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  66. package/dist/render/rendergraph/executor.js +283 -33
  67. package/dist/render/rendergraph/executor.js.map +1 -1
  68. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  69. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  70. package/dist/render/rendergraph/history_resource_manager.js +236 -156
  71. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  72. package/dist/render/rendergraph/history_resources.js +10 -0
  73. package/dist/render/rendergraph/history_resources.js.map +1 -0
  74. package/dist/render/rendergraph/rendergraph.js +162 -35
  75. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  76. package/dist/render/rendergraph/types.js +36 -16
  77. package/dist/render/rendergraph/types.js.map +1 -1
  78. package/dist/render/rendertarget.js +5 -1
  79. package/dist/render/rendertarget.js.map +1 -1
  80. package/dist/render/screenrendertarget.js +5 -1
  81. package/dist/render/screenrendertarget.js.map +1 -1
  82. package/dist/render/sky.js +4 -4
  83. package/dist/render/sky.js.map +1 -1
  84. package/dist/scene/basesprite.js +2 -2
  85. package/dist/scene/basesprite.js.map +1 -1
  86. package/dist/scene/graph_node.js +1 -1
  87. package/dist/scene/graph_node.js.map +1 -1
  88. package/dist/scene/mesh.js +4 -20
  89. package/dist/scene/mesh.js.map +1 -1
  90. package/dist/scene/particlesys.js +1 -1
  91. package/dist/scene/particlesys.js.map +1 -1
  92. package/dist/scene/scene_node.js +2 -2
  93. package/dist/scene/scene_node.js.map +1 -1
  94. package/dist/scene/script_attachment.js +15 -3
  95. package/dist/scene/script_attachment.js.map +1 -1
  96. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  97. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  98. package/dist/shadow/shadowmapper.js.map +1 -1
  99. package/dist/shapes/box.js +1 -1
  100. package/dist/shapes/box.js.map +1 -1
  101. package/dist/shapes/capsule.js +0 -3
  102. package/dist/shapes/capsule.js.map +1 -1
  103. package/dist/shapes/cylinder.js +0 -3
  104. package/dist/shapes/cylinder.js.map +1 -1
  105. package/dist/shapes/plane.js +0 -3
  106. package/dist/shapes/plane.js.map +1 -1
  107. package/dist/shapes/tetrahedron.js +3 -9
  108. package/dist/shapes/tetrahedron.js.map +1 -1
  109. package/dist/shapes/torus.js +4 -7
  110. package/dist/shapes/torus.js.map +1 -1
  111. package/dist/utility/blueprint/material/inputs.js +3 -3
  112. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  113. package/dist/utility/blueprint/material/ir.js +493 -493
  114. package/dist/utility/blueprint/material/ir.js.map +1 -1
  115. package/dist/utility/serialization/manager.js +34 -3
  116. package/dist/utility/serialization/manager.js.map +1 -1
  117. package/dist/utility/serialization/scene/animation.js +45 -0
  118. package/dist/utility/serialization/scene/animation.js.map +1 -1
  119. package/dist/utility/serialization/scene/camera.js +53 -0
  120. package/dist/utility/serialization/scene/camera.js.map +1 -1
  121. package/dist/utility/serialization/scene/common.js +10 -0
  122. package/dist/utility/serialization/scene/common.js.map +1 -1
  123. package/dist/utility/serialization/scene/light.js +30 -0
  124. package/dist/utility/serialization/scene/light.js.map +1 -1
  125. package/dist/utility/serialization/scene/material.js +63 -0
  126. package/dist/utility/serialization/scene/material.js.map +1 -1
  127. package/dist/utility/serialization/scene/mesh.js +11 -0
  128. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  129. package/dist/utility/serialization/scene/misc.js +2 -0
  130. package/dist/utility/serialization/scene/misc.js.map +1 -1
  131. package/dist/utility/serialization/scene/node.js +19 -0
  132. package/dist/utility/serialization/scene/node.js.map +1 -1
  133. package/dist/utility/serialization/scene/particle.js +22 -0
  134. package/dist/utility/serialization/scene/particle.js.map +1 -1
  135. package/dist/utility/serialization/scene/primitive.js +33 -0
  136. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  137. package/dist/utility/serialization/scene/scene.js +39 -0
  138. package/dist/utility/serialization/scene/scene.js.map +1 -1
  139. package/dist/utility/serialization/scene/script.js +2 -0
  140. package/dist/utility/serialization/scene/script.js.map +1 -1
  141. package/dist/utility/serialization/scene/sprite.js +6 -0
  142. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  143. package/dist/utility/serialization/scene/terrain.js +9 -0
  144. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  145. package/dist/utility/serialization/scene/water.js +21 -0
  146. package/dist/utility/serialization/scene/water.js.map +1 -1
  147. package/dist/utility/serialization/types.js +5 -1
  148. package/dist/utility/serialization/types.js.map +1 -1
  149. package/package.json +2 -2
@@ -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 * Representative vertices used to bound a skinned mesh (extreme points along axes).\r\n */\r\n boundingVertices: Vector3[];\r\n /**\r\n * Joint indices (up to 4 per vertex) for each representative vertex, flattened.\r\n * Layout: [i0_0, i0_1, i0_2, i0_3, i1_0, ...] for 6 vertices.\r\n */\r\n boundingVertexBlendIndices: Float32Array;\r\n /**\r\n * Corresponding joint weights (up to 4 per vertex) 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\nconst tmpV2 = new Vector3();\r\nconst tmpV3 = 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\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\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\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 * Skeleton for skinned animation.\r\n *\r\n * Responsibilities:\r\n * - Maintains joint transforms: inverse bind, bind pose, and current skinning matrices.\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 joints, 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 Skeleton extends Disposable {\r\n /** @internal Global weak registry keyed by persistentId for serialization/lookup. */\r\n private static readonly _registry: Map<string, DWeakRef<Skeleton>> = new Map();\r\n /** @internal */\r\n protected _id: string;\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _bindPose: { rotation: Quaternion; scale: Vector3; position: Vector3 }[];\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 _modifiers: SkeletonModifier[];\r\n /** @internal */\r\n protected _lastUpdateTime: number;\r\n /** @internal */\r\n protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;\r\n /** @internal */\r\n protected _humanoidRootRotation: Quaternion;\r\n /**\r\n * Create a skeleton instance.\r\n *\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 joints: SceneNode[],\r\n inverseBindMatrices: Matrix4x4[],\r\n bindPose: { rotation: Quaternion; scale: Vector3; position: Vector3 }[]\r\n ) {\r\n super();\r\n this._id = randomUUID();\r\n this._joints = joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._bindPose = bindPose;\r\n this._jointTexture = new DRef();\r\n this._playing = false;\r\n this._modifiers = [];\r\n this._lastUpdateTime = 0;\r\n this.computeBindPose();\r\n this.updateJointMatrices(0);\r\n let skeletonRoot = this.findRootJoint(this._joints);\r\n if (!skeletonRoot || !this._joints.includes(skeletonRoot)) {\r\n throw new Error('Skeleton root must be included in the joint list');\r\n }\r\n this._humanoidJointMapping = Skeleton.tryExtractHumanoidJoints(skeletonRoot);\r\n this._humanoidRootRotation = Quaternion.identity();\r\n if (this._humanoidJointMapping) {\r\n let p = this._humanoidJointMapping.body[HumanoidBodyRig.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 Skeleton._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 findSkeletonById(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 /** 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._humanoidJointMapping;\r\n }\r\n /** Root rotation of humanoid hips bone */\r\n get humanoidRootRotation(): Quaternion {\r\n return this._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._bindPose;\r\n }\r\n /** @internal */\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 /** @internal */\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 = Skeleton._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skeleton mismatch');\r\n }\r\n Skeleton._registry.delete(this._id);\r\n this._id = val;\r\n Skeleton._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(deltaTime: number) {\r\n this.applyModifiers(deltaTime);\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 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.rotation.identity();\r\n joint.scale.set(bindpose.scale);\r\n }\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(deltaTime: number) {\r\n this.updateJointMatrices(deltaTime);\r\n const tex = this.jointTexture;\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 for (const modifier of this._modifiers) {\r\n modifier.apply(this, deltaTime);\r\n }\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._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 for (let i = 0; i < info.boundingVertices.length; i++) {\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV0)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 0]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV1)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 1]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV2)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 2]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV3)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 3]);\r\n tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);\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 = Skeleton._registry.get(this._id);\r\n if (m?.get() === this) {\r\n Skeleton._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 const buffer = this._jointMatrixArray.buffer;\r\n this._jointOffsets = new Float32Array(buffer);\r\n this._jointOffsets[0] = 0;\r\n this._jointOffsets[1] = 0;\r\n this._jointMatrices = Array.from({ length: this._joints.length * 2 }).map(\r\n (val, index) => new Matrix4x4(buffer, (index + 1) * 16 * Float32Array.BYTES_PER_ELEMENT)\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: { positions: Float32Array; blendIndices: TypedArray; weights: TypedArray }) {\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 tmpV2 = new Vector3();\r\n const tmpV3 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\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 this._jointMatrices[data.blendIndices[i * 4 + 0] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV0)\r\n .scaleBy(data.weights[i * 4 + 0]);\r\n this._jointMatrices[data.blendIndices[i * 4 + 1] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV1)\r\n .scaleBy(data.weights[i * 4 + 1]);\r\n this._jointMatrices[data.blendIndices[i * 4 + 2] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV2)\r\n .scaleBy(data.weights[i * 4 + 2]);\r\n this._jointMatrices[data.blendIndices[i * 4 + 3] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV3)\r\n .scaleBy(data.weights[i * 4 + 3]);\r\n tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);\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 boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * 4 }).map(\r\n (val, index) => data.blendIndices[indices[index >> 2] * 4 + (index % 4)]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * 4 }).map((val, index) => data.weights[indices[index >> 2] * 4 + (index % 4)])\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 ) {\r\n const result = out && out.length === positions.length ? out : new Float32Array(positions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\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 for (let j = 0; j < 4; j++) {\r\n const weight = Number(weights[vertexIndex * 4 + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[vertexIndex * 4 + 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 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 private static normalizeHumanoidJointName(name: string) {\r\n return name\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) {\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 ]),\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 ])\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"],"names":["HumanoidBodyRig","HumanoidHandRig","tmpV0","Vector3","tmpV1","tmpV2","tmpV3","jointPattern","all","none","any","length","undefined","sideJointPatterns","side","patterns","sideTokens","flatMap","sideToken","map","pattern","Skeleton","Disposable","_registry","Map","joints","inverseBindMatrices","bindPose","_id","randomUUID","_joints","_inverseBindMatrices","_bindPose","_jointTexture","DRef","_playing","_modifiers","_lastUpdateTime","computeBindPose","updateJointMatrices","skeletonRoot","findRootJoint","includes","Error","_humanoidJointMapping","tryExtractHumanoidJoints","_humanoidRootRotation","Quaternion","identity","p","body","parent","multiply","rotation","set","DWeakRef","findSkeletonById","id","m","get","delete","humanoidJointMapping","humanoidRootRotation","playing","b","persistentId","val","jointTexture","getJointIndex","joint","indexOf","getJointIndexByName","jointName","findIndex","name","deltaTime","applyModifiers","_createJointTexture","_jointOffsets","i","Matrix4x4","worldMatrix","_jointMatrices","bindpose","position","scale","apply","tex","update","_jointMatrixArray","width","height","modifier","modifiers","reset","computeBoundingBox","info","invWorldMatrix","boundingBox","beginExtend","boundingVertices","boundingVertexBlendIndices","transformPointAffine","scaleBy","boundingVertexJointWeights","addBy","extend","onDispose","dispose","textureWidth","nextPowerOf2","Math","max","ceil","sqrt","device","getDevice","createTexture2D","mipmapping","samplerOptions","magFilter","minFilter","Float32Array","buffer","Array","from","index","BYTES_PER_ELEMENT","getBoundingInfo","data","indices","minx","Number","MAX_VALUE","maxx","miny","maxy","minz","maxz","v","positions","vert","numVertices","floor","setXYZ","blendIndices","weights","x","y","z","BoundingBox","skinPositionsToLocal","out","result","matrixOffset","vertexIndex","skinnedX","skinnedY","skinnedZ","weightSum","j","weight","jointIndex","matrix","root","isParentOf","normalizeHumanoidJointName","replace","toLowerCase","trim","getHumanoidJointNodeDepth","node","depth","current","collectHumanoidJointNodeInfos","nodes","iterateNode","normalizedName","tokens","split","filter","Boolean","push","tokenSet","Set","matchesHumanoidJointPattern","some","token","has","scoreHumanoidJointPattern","priority","matchedTokens","add","extraTokenCount","size","collectHumanoidJointCandidates","used","candidates","score","sort","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 { 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 * Representative vertices used to bound a skinned mesh (extreme points along axes).\r\n */\r\n boundingVertices: Vector3[];\r\n /**\r\n * Joint indices (up to 4 per vertex) for each representative vertex, flattened.\r\n * Layout: [i0_0, i0_1, i0_2, i0_3, i1_0, ...] for 6 vertices.\r\n */\r\n boundingVertexBlendIndices: Float32Array;\r\n /**\r\n * Corresponding joint weights (up to 4 per vertex) 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\nconst tmpV2 = new Vector3();\r\nconst tmpV3 = 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\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\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\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 * Skeleton for skinned animation.\r\n *\r\n * Responsibilities:\r\n * - Maintains joint transforms: inverse bind, bind pose, and current skinning matrices.\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 joints, 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 Skeleton extends Disposable {\r\n /** @internal Global weak registry keyed by persistentId for serialization/lookup. */\r\n private static readonly _registry: Map<string, DWeakRef<Skeleton>> = new Map();\r\n /** @internal */\r\n protected _id: string;\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _bindPose: { rotation: Quaternion; scale: Vector3; position: Vector3 }[];\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 _modifiers: SkeletonModifier[];\r\n /** @internal */\r\n protected _lastUpdateTime: number;\r\n /** @internal */\r\n protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;\r\n /** @internal */\r\n protected _humanoidRootRotation: Quaternion;\r\n /**\r\n * Create a skeleton instance.\r\n *\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 joints: SceneNode[],\r\n inverseBindMatrices: Matrix4x4[],\r\n bindPose: { rotation: Quaternion; scale: Vector3; position: Vector3 }[]\r\n ) {\r\n super();\r\n this._id = randomUUID();\r\n this._joints = joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._bindPose = bindPose;\r\n this._jointTexture = new DRef();\r\n this._playing = false;\r\n this._modifiers = [];\r\n this._lastUpdateTime = 0;\r\n this.computeBindPose();\r\n this.updateJointMatrices(0);\r\n let skeletonRoot = this.findRootJoint(this._joints);\r\n if (!skeletonRoot || !this._joints.includes(skeletonRoot)) {\r\n throw new Error('Skeleton root must be included in the joint list');\r\n }\r\n this._humanoidJointMapping = Skeleton.tryExtractHumanoidJoints(skeletonRoot);\r\n this._humanoidRootRotation = Quaternion.identity();\r\n if (this._humanoidJointMapping) {\r\n let p = this._humanoidJointMapping.body[HumanoidBodyRig.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 Skeleton._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 findSkeletonById(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 /** 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._humanoidJointMapping;\r\n }\r\n /** Root rotation of humanoid hips bone */\r\n get humanoidRootRotation(): Quaternion {\r\n return this._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._bindPose;\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 = Skeleton._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skeleton mismatch');\r\n }\r\n Skeleton._registry.delete(this._id);\r\n this._id = val;\r\n Skeleton._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(deltaTime: number) {\r\n this.applyModifiers(deltaTime);\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 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.rotation.identity();\r\n joint.scale.set(bindpose.scale);\r\n }\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(deltaTime: number) {\r\n this.updateJointMatrices(deltaTime);\r\n const tex = this.jointTexture;\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 for (const modifier of this._modifiers) {\r\n modifier.apply(this, deltaTime);\r\n }\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._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 for (let i = 0; i < info.boundingVertices.length; i++) {\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 0] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV0)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 0]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 1] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV1)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 1]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 2] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV2)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 2]);\r\n this._jointMatrices[info.boundingVertexBlendIndices[i * 4 + 3] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(info.boundingVertices[i], tmpV3)\r\n .scaleBy(info.boundingVertexJointWeights[i * 4 + 3]);\r\n tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);\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 = Skeleton._registry.get(this._id);\r\n if (m?.get() === this) {\r\n Skeleton._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 const buffer = this._jointMatrixArray.buffer;\r\n this._jointOffsets = new Float32Array(buffer);\r\n this._jointOffsets[0] = 0;\r\n this._jointOffsets[1] = 0;\r\n this._jointMatrices = Array.from({ length: this._joints.length * 2 }).map(\r\n (val, index) => new Matrix4x4(buffer, (index + 1) * 16 * Float32Array.BYTES_PER_ELEMENT)\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: { positions: Float32Array; blendIndices: TypedArray; weights: TypedArray }) {\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 tmpV2 = new Vector3();\r\n const tmpV3 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\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 this._jointMatrices[data.blendIndices[i * 4 + 0] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV0)\r\n .scaleBy(data.weights[i * 4 + 0]);\r\n this._jointMatrices[data.blendIndices[i * 4 + 1] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV1)\r\n .scaleBy(data.weights[i * 4 + 1]);\r\n this._jointMatrices[data.blendIndices[i * 4 + 2] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV2)\r\n .scaleBy(data.weights[i * 4 + 2]);\r\n this._jointMatrices[data.blendIndices[i * 4 + 3] + this._jointOffsets[0] - 1]\r\n .transformPointAffine(vert, tmpV3)\r\n .scaleBy(data.weights[i * 4 + 3]);\r\n tmpV0.addBy(tmpV1).addBy(tmpV2).addBy(tmpV3);\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 boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * 4 }).map(\r\n (val, index) => data.blendIndices[indices[index >> 2] * 4 + (index % 4)]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * 4 }).map((val, index) => data.weights[indices[index >> 2] * 4 + (index % 4)])\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 ) {\r\n const result = out && out.length === positions.length ? out : new Float32Array(positions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\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 for (let j = 0; j < 4; j++) {\r\n const weight = Number(weights[vertexIndex * 4 + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[vertexIndex * 4 + 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 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 private static normalizeHumanoidJointName(name: string) {\r\n return name\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) {\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 ]),\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 ])\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"],"names":["HumanoidBodyRig","HumanoidHandRig","tmpV0","Vector3","tmpV1","tmpV2","tmpV3","jointPattern","all","none","any","length","undefined","sideJointPatterns","side","patterns","sideTokens","flatMap","sideToken","map","pattern","Skeleton","Disposable","_registry","Map","joints","inverseBindMatrices","bindPose","_id","randomUUID","_joints","_inverseBindMatrices","_bindPose","_jointTexture","DRef","_playing","_modifiers","_lastUpdateTime","computeBindPose","updateJointMatrices","skeletonRoot","findRootJoint","includes","Error","_humanoidJointMapping","tryExtractHumanoidJoints","_humanoidRootRotation","Quaternion","identity","p","body","parent","multiply","rotation","set","DWeakRef","findSkeletonById","id","m","get","delete","humanoidJointMapping","humanoidRootRotation","playing","b","persistentId","val","jointTexture","getJointIndex","joint","indexOf","getJointIndexByName","jointName","findIndex","name","deltaTime","applyModifiers","_createJointTexture","_jointOffsets","i","Matrix4x4","worldMatrix","_jointMatrices","bindpose","position","scale","apply","tex","update","_jointMatrixArray","width","height","modifier","modifiers","reset","computeBoundingBox","info","invWorldMatrix","boundingBox","beginExtend","boundingVertices","boundingVertexBlendIndices","transformPointAffine","scaleBy","boundingVertexJointWeights","addBy","extend","onDispose","dispose","textureWidth","nextPowerOf2","Math","max","ceil","sqrt","device","getDevice","createTexture2D","mipmapping","samplerOptions","magFilter","minFilter","Float32Array","buffer","Array","from","index","BYTES_PER_ELEMENT","getBoundingInfo","data","indices","minx","Number","MAX_VALUE","maxx","miny","maxy","minz","maxz","v","positions","vert","numVertices","floor","setXYZ","blendIndices","weights","x","y","z","BoundingBox","skinPositionsToLocal","out","result","matrixOffset","vertexIndex","skinnedX","skinnedY","skinnedZ","weightSum","j","weight","jointIndex","matrix","root","isParentOf","normalizeHumanoidJointName","replace","toLowerCase","trim","getHumanoidJointNodeDepth","node","depth","current","collectHumanoidJointNodeInfos","nodes","iterateNode","normalizedName","tokens","split","filter","Boolean","push","tokenSet","Set","matchesHumanoidJointPattern","some","token","has","scoreHumanoidJointPattern","priority","matchedTokens","add","extraTokenCount","size","collectHumanoidJointCandidates","used","candidates","score","sort","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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"}