@zephyr3d/scene 0.9.26 → 0.9.27
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.
- package/dist/animation/animationset.js +92 -30
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/skeleton.js +21 -1
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/asset/model.js +6 -2
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +75 -23
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +4764 -3600
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/material/hairstrand.js +235 -235
- package/dist/material/hairstrand.js.map +1 -1
- package/dist/material/material.js +296 -296
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lit.js +33 -1
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/shader/helper.js +404 -3
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/water.js +2057 -72
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/motionblur.js +663 -58
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js +12 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +46 -44
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/sss.js +30 -2
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/render/abuffer_oit.js +37 -37
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +156 -5
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cull_visitor.js +1 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +49 -49
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +3 -3
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +57 -15
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +127 -20
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/hzb.js +80 -22
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +6 -3
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/oit.js +11 -11
- package/dist/render/oit.js.map +1 -1
- package/dist/render/render_queue.js +36 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +4 -0
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +1 -0
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +318 -9
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_resource_requirements.js +1 -0
- package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +8 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/underwater.js +624 -0
- package/dist/render/underwater.js.map +1 -0
- package/dist/render/water_caustics.js +1380 -0
- package/dist/render/water_caustics.js.map +1 -0
- package/dist/render/weightedblended_oit.js +33 -33
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/water.js +540 -4
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/water.js +22 -19
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +56 -0
- package/dist/shaders/water_medium.js.map +1 -0
- package/dist/shadow/shadow_region.js +49 -49
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/utility/serialization/manager.js +3 -1
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +31 -2
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -25
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1101 -21
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/shprojector.js +87 -87
- package/dist/utility/shprojector.js.map +1 -1
- package/package.json +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +0 -41
- package/dist/render/rendergraph/frame_graph_context.js.map +0 -1
- package/dist/shaders/ssgi.js +0 -63
- package/dist/shaders/ssgi.js.map +0 -1
- package/dist/shaders/ssgi_reprojection.js +0 -118
- package/dist/shaders/ssgi_reprojection.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","sources":["../../src/animation/skeleton.ts"],"sourcesContent":["import { DRef, randomUUID, DWeakRef } from '@zephyr3d/base';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Vector3, nextPowerOf2 } from '@zephyr3d/base';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkeletonModifier } from './skeleton_modifier';\r\n\r\n/**\r\n * Standardized humanoid joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidBodyRig {\r\n Hips = 'Hips',\r\n Spine = 'Spine',\r\n Chest = 'Chest',\r\n UpperChest = 'UpperChest',\r\n Neck = 'Neck',\r\n Head = 'Head',\r\n\r\n LeftShoulder = 'LeftShoulder',\r\n LeftUpperArm = 'LeftUpperArm',\r\n LeftLowerArm = 'LeftLowerArm',\r\n LeftHand = 'LeftHand',\r\n\r\n RightShoulder = 'RightShoulder',\r\n RightUpperArm = 'RightUpperArm',\r\n RightLowerArm = 'RightLowerArm',\r\n RightHand = 'RightHand',\r\n\r\n LeftUpperLeg = 'LeftUpperLeg',\r\n LeftLowerLeg = 'LeftLowerLeg',\r\n LeftFoot = 'LeftFoot',\r\n LeftToes = 'LeftToes',\r\n\r\n RightUpperLeg = 'RightUpperLeg',\r\n RightLowerLeg = 'RightLowerLeg',\r\n RightFoot = 'RightFoot',\r\n RightToes = 'RightToes'\r\n}\r\n\r\n/**\r\n * Standardized humanoid hand joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidHandRig {\r\n ThumbProximal = 'ThumbProximal',\r\n ThumbIntermediate = 'ThumbIntermediate',\r\n ThumbDistal = 'ThumbDistal',\r\n IndexProximal = 'IndexProximal',\r\n IndexIntermediate = 'IndexIntermediate',\r\n IndexDistal = 'IndexDistal',\r\n MiddleProximal = 'MiddleProximal',\r\n MiddleIntermediate = 'MiddleIntermediate',\r\n MiddleDistal = 'MiddleDistal',\r\n RingProximal = 'RingProximal',\r\n RingIntermediate = 'RingIntermediate',\r\n RingDistal = 'RingDistal',\r\n PinkyProximal = 'PinkyProximal',\r\n PinkyIntermediate = 'PinkyIntermediate',\r\n PinkyDistal = 'PinkyDistal'\r\n}\r\n\r\n/**\r\n * Skinned bounding box information for a submesh.\r\n *\r\n * Used to compute animated AABB for skinned meshes.\r\n *\r\n * @public\r\n */\r\nexport interface SkinnedBoundingBox {\r\n /**\r\n * Number of influences stored per representative vertex.\r\n */\r\n influenceCount?: number;\r\n /**\r\n * Representative vertices used to bound a skinned mesh (extreme points along axes).\r\n */\r\n boundingVertices: Vector3[];\r\n /**\r\n * Joint indices for each representative vertex, flattened.\r\n */\r\n boundingVertexBlendIndices: Float32Array;\r\n /**\r\n * Corresponding joint weights for each representative vertex, flattened.\r\n * Layout matches `boundingVertexBlendIndices`.\r\n */\r\n boundingVertexJointWeights: Float32Array;\r\n /**\r\n * Computed axis-aligned bounding box in model space for the current pose.\r\n */\r\n boundingBox: BoundingBox;\r\n}\r\n\r\nconst tmpV0 = new Vector3();\r\nconst tmpV1 = new Vector3();\r\n\r\n/**\r\n * Humanoid joint mapping\r\n * @public\r\n */\r\nexport type HumanoidJointMapping<T extends { name: string; parent: Nullable<T>; children: T[] }> = {\r\n body: Record<HumanoidBodyRig, T>;\r\n leftHand?: Record<HumanoidHandRig, T>;\r\n rightHand?: Record<HumanoidHandRig, T>;\r\n};\r\n\r\n/** @public */\r\nexport type SkeletonBindPose = { rotation: Quaternion; scale: Vector3; position: Vector3 };\r\n\r\n/** @public */\r\nexport type SkeletonRigOptions = {\r\n rootJoint?: Nullable<SceneNode>;\r\n rootBindPose?: SkeletonBindPose;\r\n humanoidJointMapping?: Nullable<HumanoidJointMapping<SceneNode>>;\r\n};\r\n\r\ntype HumanoidJointPattern = {\r\n all?: string[];\r\n any?: string[];\r\n none?: string[];\r\n};\r\n\r\ntype HumanoidJointProfile<T extends string> = Record<T, HumanoidJointPattern[]>;\r\n\r\nconst humanoidHelperJointTokens = new Set(['end', 'nub', 'socket']);\r\n\r\ntype HumanoidJointNodeInfo<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n depth: number;\r\n tokens: string[];\r\n tokenSet: Set<string>;\r\n};\r\n\r\ntype HumanoidJointMatchCandidate<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n score: number;\r\n};\r\n\r\n/**\r\n * Shared joint rig for skeletal animation.\r\n *\r\n * A rig owns the animated joint nodes, bind pose, humanoid mapping and procedural\r\n * modifiers. Multiple skin bindings may reference the same rig with different\r\n * inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class SkeletonRig extends Disposable {\r\n private static readonly _registry: Map<string, DWeakRef<SkeletonRig>> = new Map();\r\n protected _id: string;\r\n protected _joints: SceneNode[];\r\n protected _bindPoseByJoint: Map<SceneNode, SkeletonBindPose>;\r\n protected _bindPose: SkeletonBindPose[];\r\n protected _rootJoint: Nullable<SceneNode>;\r\n protected _rootBindPose: SkeletonBindPose;\r\n protected _playing: boolean;\r\n protected _modifiers: SkeletonModifier[];\r\n protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;\r\n protected _humanoidRootRotation: Quaternion;\r\n\r\n constructor(joints: SceneNode[], bindPose: SkeletonBindPose[], options?: SkeletonRigOptions) {\r\n super();\r\n this._id = randomUUID();\r\n this._joints = joints;\r\n this._bindPose = bindPose;\r\n this._bindPoseByJoint = new Map();\r\n for (let i = 0; i < joints.length; i++) {\r\n this._bindPoseByJoint.set(joints[i], bindPose[i]);\r\n }\r\n const skeletonRoot = this.findRootJoint(this._joints);\r\n this._rootJoint = options?.rootJoint ?? skeletonRoot;\r\n this._rootBindPose = options?.rootBindPose ?? this.getNodeBindPose(this._rootJoint);\r\n this._playing = false;\r\n this._modifiers = [];\r\n this.computeBindPose();\r\n this._humanoidJointMapping =\r\n options?.humanoidJointMapping !== undefined\r\n ? options.humanoidJointMapping\r\n : skeletonRoot\r\n ? Skeleton.tryExtractHumanoidJoints(skeletonRoot)\r\n : null;\r\n this._humanoidRootRotation = Quaternion.identity();\r\n const hips = this._humanoidJointMapping?.body[HumanoidBodyRig.Hips];\r\n if (hips) {\r\n let p = hips;\r\n while (this._joints.includes(p.parent!)) {\r\n Quaternion.multiply(p.parent!.rotation, this._humanoidRootRotation, this._humanoidRootRotation);\r\n p = p.parent!;\r\n }\r\n }\r\n SkeletonRig._registry.set(this._id, new DWeakRef(this));\r\n }\r\n\r\n static getRigKey(joints: SceneNode[], rootJoint?: Nullable<SceneNode>) {\r\n return [rootJoint?.persistentId ?? '', ...joints.map((joint) => joint.persistentId).sort()].join('|');\r\n }\r\n\r\n static findRigById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n\r\n get persistentId() {\r\n return this._id;\r\n }\r\n\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skeleton rig mismatch');\r\n }\r\n SkeletonRig._registry.delete(this._id);\r\n this._id = val;\r\n SkeletonRig._registry.set(this._id, m);\r\n }\r\n }\r\n\r\n get joints() {\r\n return this._joints;\r\n }\r\n\r\n get bindPose() {\r\n return this._bindPose;\r\n }\r\n\r\n get rootJoint(): Nullable<SceneNode> {\r\n return this._rootJoint;\r\n }\r\n\r\n set rootJoint(joint: Nullable<SceneNode>) {\r\n this._rootJoint = joint;\r\n this._rootBindPose = this.getNodeBindPose(joint);\r\n }\r\n\r\n get rootBindPose(): SkeletonBindPose {\r\n return this._rootBindPose;\r\n }\r\n\r\n getBindPoseForJoint(joint: SceneNode) {\r\n return this._bindPoseByJoint.get(joint) ?? null;\r\n }\r\n\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._humanoidJointMapping;\r\n }\r\n\r\n get humanoidRootRotation(): Quaternion {\r\n return this._humanoidRootRotation;\r\n }\r\n\r\n get modifiers(): SkeletonModifier[] {\r\n return this._modifiers;\r\n }\r\n\r\n get playing() {\r\n return this._playing;\r\n }\r\n\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n\r\n computeBindPose() {\r\n for (let i = 0; i < this._joints.length; i++) {\r\n const joint = this._joints[i];\r\n const bindpose = this._bindPose[i];\r\n joint.position.set(bindpose.position);\r\n joint.rotation.set(bindpose.rotation);\r\n joint.scale.set(bindpose.scale);\r\n }\r\n if (this._rootJoint && !this._bindPoseByJoint.has(this._rootJoint)) {\r\n this._rootJoint.position.set(this._rootBindPose.position);\r\n this._rootJoint.rotation.set(this._rootBindPose.rotation);\r\n this._rootJoint.scale.set(this._rootBindPose.scale);\r\n }\r\n }\r\n\r\n apply(deltaTime: number): void {\r\n for (const modifier of this._modifiers) {\r\n modifier.apply(this, deltaTime);\r\n }\r\n }\r\n\r\n reset() {\r\n this._playing = false;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkeletonRig._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n\r\n private findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n return root;\r\n }\r\n\r\n private getNodeBindPose(node: Nullable<SceneNode>): SkeletonBindPose {\r\n const bindPose = node ? this._bindPoseByJoint.get(node) : null;\r\n return bindPose\r\n ? {\r\n position: bindPose.position.clone(),\r\n rotation: bindPose.rotation.clone(),\r\n scale: bindPose.scale.clone()\r\n }\r\n : {\r\n position: node?.position.clone() ?? Vector3.zero(),\r\n rotation: node?.rotation.clone() ?? Quaternion.identity(),\r\n scale: node?.scale.clone() ?? Vector3.one()\r\n };\r\n }\r\n}\r\n\r\nfunction jointPattern(all: string[], none?: string[], any?: string[]): HumanoidJointPattern {\r\n return {\r\n all,\r\n any: any?.length ? any : undefined,\r\n none: none?.length ? none : undefined\r\n };\r\n}\r\n\r\nfunction sideJointPatterns(\r\n side: 'left' | 'right',\r\n patterns: Array<{ all: string[]; none?: string[]; any?: string[] }>\r\n): HumanoidJointPattern[] {\r\n const sideTokens = side === 'left' ? ['left', 'l'] : ['right', 'r'];\r\n return sideTokens.flatMap((sideToken) =>\r\n patterns.map((pattern) => ({\r\n all: [sideToken, ...pattern.all],\r\n any: pattern.any?.length ? [...pattern.any] : undefined,\r\n none: pattern.none?.length ? [...pattern.none] : undefined\r\n }))\r\n );\r\n}\r\n\r\n/**\r\n * Skin binding for skinned animation.\r\n *\r\n * Responsibilities:\r\n * - References a shared SkeletonRig.\r\n * - Maintains inverse bind and current skinning matrices for one skin.\r\n * - Provides a texture containing joint matrices for GPU skinning.\r\n * - Applies skinning state to associated meshes each frame.\r\n * - Computes animated axis-aligned bounding boxes using representative skinned vertices.\r\n *\r\n * Joint matrix texture layout:\r\n * - Texture format: `rgba32f`.\r\n * - Stored as a 2-layered ring buffer: current and previous joint transforms to support\r\n * temporal addressing if needed. Offsets are tracked in `_jointOffsets[0]` (current)\r\n * and `_jointOffsets[1]` (previous).\r\n *\r\n * Usage:\r\n * - Construct with a rig, bind data, meshes and submesh bounding info.\r\n * - Call `apply()` each frame to update joint texture, bind to meshes, and update bounds.\r\n * - Call `reset()` to clear skinning on meshes.\r\n *\r\n * @public\r\n */\r\nexport class SkinBinding extends Disposable {\r\n /** @internal Global weak registry keyed by persistentId for serialization/lookup. */\r\n private static readonly _registry: Map<string, DWeakRef<SkinBinding>> = new Map();\r\n /** @internal */\r\n protected _id: string;\r\n /** @internal */\r\n protected _rig: SkeletonRig;\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _jointMatrices!: Matrix4x4[];\r\n /** @internal */\r\n protected _jointOffsets!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointMatrixArray!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointTexture: DRef<Texture2D>;\r\n /** @internal */\r\n protected _playing: boolean;\r\n /** @internal */\r\n protected _lastUpdateTime: number;\r\n /**\r\n * Create a skin binding instance.\r\n *\r\n * @param rig - Shared skeleton rig that owns animated joint transforms.\r\n * @param joints - Joint scene nodes (one per joint), ordered to match skin data.\r\n * @param inverseBindMatrices - Inverse bind matrices for each joint.\r\n * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).\r\n */\r\n constructor(\r\n rig: SkeletonRig,\r\n inverseBindMatrices: Matrix4x4[],\r\n joints?: SceneNode[],\r\n bindPose?: SkeletonBindPose[]\r\n ) {\r\n super();\r\n this._id = randomUUID();\r\n this._rig = rig;\r\n this._joints = joints ?? rig.joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._jointTexture = new DRef();\r\n this._playing = false;\r\n this._lastUpdateTime = 0;\r\n if (bindPose && bindPose !== rig.bindPose) {\r\n // Legacy callers used Skeleton as both rig and binding. Keep the old bind\r\n // pose visible by replacing the rig pose only when explicitly supplied.\r\n this._rig = new SkeletonRig(rig.joints, bindPose, {\r\n rootJoint: rig.rootJoint,\r\n rootBindPose: rig.rootBindPose,\r\n humanoidJointMapping: rig.humanoidJointMapping\r\n });\r\n }\r\n this.updateJointMatrices();\r\n SkinBinding._registry.set(this._id, new DWeakRef(this));\r\n }\r\n /**\r\n * Lookup a skeleton from the global registry by persistent id.\r\n *\r\n * @param id - The persistent UUID to search for.\r\n * @returns The skeleton if alive, otherwise `null`.\r\n * @internal\r\n */\r\n static findSkinBindingById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n static findSkeletonById(id: string) {\r\n return this.findSkinBindingById(id);\r\n }\r\n get rig() {\r\n return this._rig;\r\n }\r\n /** Gets joint nodes */\r\n get joints() {\r\n return this._joints;\r\n }\r\n /** Gets the humanoid joint mapping */\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._rig.humanoidJointMapping;\r\n }\r\n /** Root rotation of humanoid hips bone */\r\n get humanoidRootRotation(): Quaternion {\r\n return this._rig.humanoidRootRotation;\r\n }\r\n /** @internal */\r\n get inverseBindMatrices() {\r\n return this._inverseBindMatrices;\r\n }\r\n /** @internal */\r\n get bindPose() {\r\n return this._joints.map((joint) => this._rig.getBindPoseForJoint(joint)!);\r\n }\r\n get playing() {\r\n return this._playing;\r\n }\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n get persistentId() {\r\n return this._id;\r\n }\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkinBinding._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skin binding mismatch');\r\n }\r\n SkinBinding._registry.delete(this._id);\r\n this._id = val;\r\n SkinBinding._registry.set(this._id, m);\r\n }\r\n }\r\n /**\r\n * Texture containing joint matrices for GPU skinning.\r\n *\r\n * Each matrix is stored in 4 texels (one row per texel, RGBA = 4 floats).\r\n */\r\n get jointTexture() {\r\n return this._jointTexture.get()!;\r\n }\r\n /**\r\n * Get joint index by joint node\r\n * @param joint - joint node\r\n * @returns The index of the joint\r\n */\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n /**\r\n * Get joint index by joint name\r\n * @param jointName - joint name\r\n * @returns The index of the joint\r\n */\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n /**\r\n * Update joint matrices from either provided transforms or the joints' world matrices.\r\n *\r\n * - Lazily creates the joint texture and its backing arrays on first call.\r\n * - Advances the ring buffer offset in `_jointOffsets` to write a new \"current\" set.\r\n * - For each joint:\r\n * - Optionally premultiplies by `worldMatrix` (to transform into model space).\r\n * - Computes skinning matrix: ( M_\\{skin\\} = M_\\{joint\\} \\\\times M_\\{inverseBind\\} ).\r\n *\r\n * Note: This method only writes into the CPU-side array; callers like `computeJoints()`\r\n * update the GPU texture.\r\n *\r\n * @param jointTransforms - Optional per-joint transforms to use instead of node world matrices.\r\n * @param worldMatrix - Optional world-to-model transform applied before inverse bind.\r\n * @internal\r\n */\r\n updateJointMatrices() {\r\n if (!this._jointTexture.get()) {\r\n this._createJointTexture();\r\n }\r\n if (this._jointOffsets[0] === 0) {\r\n this._jointOffsets[0] = 1;\r\n this._jointOffsets[1] = 1;\r\n } else {\r\n this._jointOffsets[1] = this._jointOffsets[0];\r\n this._jointOffsets[0] = this.joints.length - this._jointOffsets[0] + 2;\r\n }\r\n for (let i = 0; i < this.joints.length; i++) {\r\n Matrix4x4.multiply(\r\n this.joints[i].worldMatrix,\r\n this._inverseBindMatrices[i],\r\n this._jointMatrices[i + this._jointOffsets[0] - 1]\r\n );\r\n }\r\n }\r\n /**\r\n * Reset skeleton to bind pose\r\n *\r\n * @internal\r\n */\r\n computeBindPose() {\r\n this._rig.computeBindPose();\r\n }\r\n /**\r\n * Compute current joint matrices from the nodes and upload them to the joint texture.\r\n *\r\n * @internal\r\n */\r\n apply() {\r\n this.updateJointMatrices();\r\n const tex = this.jointTexture;\r\n this._syncJointMatrixArray();\r\n tex.update(this._jointMatrixArray, 0, 0, tex.width, tex.height);\r\n }\r\n /**\r\n * Apply all enabled modifiers.\r\n *\r\n * Modifiers are applied after the base animation/bind pose layer,\r\n * allowing procedural modifications like IK, spring physics, or manual overrides.\r\n *\r\n * @param deltaTime - Time elapsed since last frame (in seconds)\r\n * @internal\r\n */\r\n protected applyModifiers(deltaTime: number): void {\r\n this._rig.apply(deltaTime);\r\n }\r\n /**\r\n * Get all modifiers attached to this skeleton.\r\n *\r\n * @public\r\n */\r\n get modifiers(): SkeletonModifier[] {\r\n return this._rig.modifiers;\r\n }\r\n /**\r\n * Reset all meshes to an unskinned state and clear animated bounds.\r\n *\r\n * @internal\r\n */\r\n reset() {\r\n //this.updateJointMatrices(this._bindPoseMatrices);\r\n this._playing = false;\r\n }\r\n /**\r\n * Compute the animated bounding box for a single mesh using its representative vertices.\r\n *\r\n * For each representative vertex:\r\n * - Blends the vertex by up to 4 joint matrices using provided weights.\r\n * - Transforms to the mesh's local space using `invWorldMatrix`.\r\n * - Expands the bounding box.\r\n *\r\n * @param info - Precomputed bounding data (representative vertices, indices, weights).\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert to model/local space.\r\n * @internal\r\n */\r\n computeBoundingBox(info: SkinnedBoundingBox, invWorldMatrix: Matrix4x4) {\r\n info.boundingBox.beginExtend();\r\n const influenceCount = Math.max(1, info.influenceCount ?? 4);\r\n for (let i = 0; i < info.boundingVertices.length; i++) {\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(info.boundingVertexJointWeights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[\r\n (Number(info.boundingVertexBlendIndices[base + j]) || 0) + this._jointOffsets[0] - 1\r\n ];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(info.boundingVertices[i], tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n invWorldMatrix.transformPointAffine(tmpV0, tmpV0);\r\n info.boundingBox.extend(tmpV0);\r\n }\r\n }\r\n /**\r\n * Dispose GPU resources and references held by the skeleton.\r\n *\r\n * - Disposes the joint texture.\r\n * - Clears matrix arrays and joint references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._jointTexture.dispose();\r\n const m = SkinBinding._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkinBinding._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n /**\r\n * Initialize joint texture and CPU-side matrix storage.\r\n *\r\n * Layout details:\r\n * - Texture size is the next power-of-two able to contain all matrices plus two offset texels.\r\n * - `_jointMatrixArray` holds:\r\n * - First 2 vec4s: ring buffer offsets `[current, previous, 0, 0]`.\r\n * - Followed by 2×N matrices (current and previous), each as 16 floats.\r\n * - `_jointMatrices` is a view into `_jointMatrixArray` providing Matrix4x4 objects per slot.\r\n *\r\n * @internal\r\n */\r\n private _createJointTexture() {\r\n const textureWidth = nextPowerOf2(Math.max(4, Math.ceil(Math.sqrt((this.joints.length * 2 + 1) * 4))));\r\n const device = getDevice();\r\n this._jointTexture.set(\r\n device.createTexture2D('rgba32f', textureWidth, textureWidth, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n magFilter: 'nearest',\r\n minFilter: 'nearest'\r\n }\r\n })\r\n );\r\n this._jointMatrixArray = new Float32Array(textureWidth * textureWidth * 4);\r\n this._jointOffsets = this._jointMatrixArray.subarray(0, 2) as Float32Array<ArrayBuffer>;\r\n this._jointOffsets[0] = 0;\r\n this._jointOffsets[1] = 0;\r\n this._jointMatrices = Array.from({ length: this.joints.length * 2 }).map(() => new Matrix4x4());\r\n }\r\n private _syncJointMatrixArray() {\r\n for (let i = 0; i < this._jointMatrices.length; i++) {\r\n this._jointMatrixArray.set(this._jointMatrices[i], (i + 1) * 16);\r\n }\r\n }\r\n /**\r\n * Build representative skinned bounding data for a submesh.\r\n *\r\n * Strategy:\r\n * - For all vertices, compute their skinned position (using current ring buffer slot).\r\n * - Track the indices of the min/max extents along x, y, z (6 indices total).\r\n * - Store:\r\n * - The 6 representative positions in object space.\r\n * - Their 4 joint indices and weights (flattened).\r\n * - An empty BoundingBox to be filled during animation.\r\n *\r\n * @param meshData - Raw submesh attributes (positions, blend indices, weights).\r\n * @returns Skinned bounding box info used during per-frame updates.\r\n */\r\n getBoundingInfo(data: {\r\n positions: Float32Array;\r\n blendIndices: TypedArray;\r\n weights: TypedArray;\r\n influenceCount?: number;\r\n }) {\r\n const indices = [0, 0, 0, 0, 0, 0];\r\n let minx = Number.MAX_VALUE;\r\n let maxx = -Number.MAX_VALUE;\r\n let miny = Number.MAX_VALUE;\r\n let maxy = -Number.MAX_VALUE;\r\n let minz = Number.MAX_VALUE;\r\n let maxz = -Number.MAX_VALUE;\r\n const v = data.positions;\r\n const vert = new Vector3();\r\n const tmpV0 = new Vector3();\r\n const tmpV1 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\r\n const influenceCount = Math.max(1, data.influenceCount ?? 4);\r\n for (let i = 0; i < numVertices; i++) {\r\n vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(data.weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[(Number(data.blendIndices[base + j]) || 0) + this._jointOffsets[0] - 1];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(vert, tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n if (tmpV0.x < minx) {\r\n minx = tmpV0.x;\r\n indices[0] = i;\r\n }\r\n if (tmpV0.x > maxx) {\r\n maxx = tmpV0.x;\r\n indices[1] = i;\r\n }\r\n if (tmpV0.y < miny) {\r\n miny = tmpV0.y;\r\n indices[2] = i;\r\n }\r\n if (tmpV0.y > maxy) {\r\n maxy = tmpV0.y;\r\n indices[3] = i;\r\n }\r\n if (tmpV0.z < minz) {\r\n minz = tmpV0.z;\r\n indices[4] = i;\r\n }\r\n if (tmpV0.z > maxz) {\r\n maxz = tmpV0.z;\r\n indices[5] = i;\r\n }\r\n }\r\n const info: SkinnedBoundingBox = {\r\n influenceCount,\r\n boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.blendIndices[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.weights[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertices: Array.from({ length: 6 }).map(\r\n (val, index) =>\r\n new Vector3(\r\n data.positions[indices[index] * 3],\r\n data.positions[indices[index] * 3 + 1],\r\n data.positions[indices[index] * 3 + 2]\r\n )\r\n ),\r\n boundingBox: new BoundingBox()\r\n };\r\n return info;\r\n }\r\n /**\r\n * Skin all vertices into mesh-local space for the current skeleton pose.\r\n *\r\n * This is used by systems like cloth that need the animated mesh pose on CPU,\r\n * but render with GPU skinning disabled to avoid double deformation.\r\n *\r\n * @param positions - Bind-pose/object-space input positions, xyz packed.\r\n * @param blendIndices - 4 joint indices per vertex.\r\n * @param weights - 4 joint weights per vertex.\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert skinned world positions back to mesh-local space.\r\n * @param out - Optional output array to reuse.\r\n * @returns The skinned mesh-local positions.\r\n * @internal\r\n */\r\n skinPositionsToLocal(\r\n positions: Float32Array<ArrayBuffer>,\r\n blendIndices: ArrayLike<number>,\r\n weights: ArrayLike<number>,\r\n invWorldMatrix: Matrix4x4,\r\n out?: Float32Array<ArrayBuffer>,\r\n influenceCount?: number\r\n ) {\r\n const result = out && out.length === positions.length ? out : new Float32Array(positions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\r\n const effectiveInfluenceCount = Math.max(\r\n 1,\r\n influenceCount ??\r\n Math.max(1, Math.floor(weights.length / Math.max(1, Math.floor(positions.length / 3))))\r\n );\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const vertexIndex = (i / 3) >> 0;\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n let skinnedX = 0;\r\n let skinnedY = 0;\r\n let skinnedZ = 0;\r\n let weightSum = 0;\r\n const base = vertexIndex * effectiveInfluenceCount;\r\n for (let j = 0; j < effectiveInfluenceCount; j++) {\r\n const weight = Number(weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[base + j]) || 0) + matrixOffset;\r\n const matrix = this._jointMatrices[jointIndex];\r\n if (!matrix) {\r\n continue;\r\n }\r\n skinnedX += (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) * weight;\r\n skinnedY += (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) * weight;\r\n skinnedZ += (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) * weight;\r\n weightSum += weight;\r\n }\r\n if (weightSum <= 1e-6) {\r\n skinnedX = x;\r\n skinnedY = y;\r\n skinnedZ = z;\r\n }\r\n result[i] =\r\n invWorldMatrix[0] * skinnedX +\r\n invWorldMatrix[4] * skinnedY +\r\n invWorldMatrix[8] * skinnedZ +\r\n invWorldMatrix[12];\r\n result[i + 1] =\r\n invWorldMatrix[1] * skinnedX +\r\n invWorldMatrix[5] * skinnedY +\r\n invWorldMatrix[9] * skinnedZ +\r\n invWorldMatrix[13];\r\n result[i + 2] =\r\n invWorldMatrix[2] * skinnedX +\r\n invWorldMatrix[6] * skinnedY +\r\n invWorldMatrix[10] * skinnedZ +\r\n invWorldMatrix[14];\r\n }\r\n return result;\r\n }\r\n private static normalizeHumanoidJointName(name: string) {\r\n return name\r\n .slice(name.lastIndexOf(':') + 1)\r\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/([a-zA-Z])(\\d+)/g, '$1 $2')\r\n .replace(/(\\d+)([a-zA-Z])/g, '$1 $2')\r\n .replace(/[_:\\/\\\\.-]+/g, ' ')\r\n .replace(/[^a-zA-Z0-9]+/g, ' ')\r\n .toLowerCase()\r\n .replace(/\\bforearm\\b/g, 'fore arm')\r\n .replace(/\\bupperarm\\b/g, 'upper arm')\r\n .replace(/\\blowerarm\\b/g, 'lower arm')\r\n .replace(/\\bupleg\\b/g, 'up leg')\r\n .replace(/\\bupperleg\\b/g, 'upper leg')\r\n .replace(/\\blowerleg\\b/g, 'lower leg')\r\n .replace(/\\btoebase\\b/g, 'toe base')\r\n .replace(/\\bupperchest\\b/g, 'upper chest')\r\n .replace(/\\btoes\\b/g, 'toe')\r\n .replace(/\\blittle\\b/g, 'pinky')\r\n .replace(/\\bcollar\\b/g, 'clavicle')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n }\r\n private static getHumanoidJointNodeDepth<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T,\r\n node: T\r\n ) {\r\n let depth = 0;\r\n let current: Nullable<T> = node;\r\n while (current && current !== root) {\r\n depth++;\r\n current = current.parent;\r\n }\r\n return depth;\r\n }\r\n private static collectHumanoidJointNodeInfos<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointNodeInfo<T>[] {\r\n const nodes: HumanoidJointNodeInfo<T>[] = [];\r\n this.iterateNode(root, (node) => {\r\n const normalizedName = this.normalizeHumanoidJointName(node.name || '');\r\n if (!normalizedName) {\r\n return false;\r\n }\r\n const tokens = normalizedName.split(' ').filter(Boolean);\r\n if (!tokens.length || tokens.some((token) => humanoidHelperJointTokens.has(token))) {\r\n return false;\r\n }\r\n nodes.push({\r\n node,\r\n depth: this.getHumanoidJointNodeDepth(root, node),\r\n tokens,\r\n tokenSet: new Set(tokens)\r\n });\r\n return false;\r\n });\r\n return nodes;\r\n }\r\n private static matchesHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern\r\n ) {\r\n if (pattern.all?.some((token) => !info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.any?.length && !pattern.any.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.none?.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n private static scoreHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern,\r\n priority: number\r\n ) {\r\n const matchedTokens = new Set(pattern.all ?? []);\r\n for (const token of pattern.any ?? []) {\r\n if (info.tokenSet.has(token)) {\r\n matchedTokens.add(token);\r\n }\r\n }\r\n let extraTokenCount = 0;\r\n for (const token of info.tokens) {\r\n if (!matchedTokens.has(token)) {\r\n extraTokenCount++;\r\n }\r\n }\r\n return priority * 100000 + matchedTokens.size * 100 - extraTokenCount * 5 - info.depth;\r\n }\r\n private static collectHumanoidJointCandidates<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ): HumanoidJointMatchCandidate<T>[] {\r\n const candidates = new Map<T, number>();\r\n for (let index = 0; index < patterns.length; index++) {\r\n const pattern = patterns[index];\r\n const priority = patterns.length - index;\r\n for (const info of nodes) {\r\n if (used.has(info.node) || !this.matchesHumanoidJointPattern(info, pattern)) {\r\n continue;\r\n }\r\n const score = this.scoreHumanoidJointPattern(info, pattern, priority);\r\n const current = candidates.get(info.node);\r\n if (current === undefined || score > current) {\r\n candidates.set(info.node, score);\r\n }\r\n }\r\n }\r\n return Array.from(candidates, ([node, score]) => ({ node, score })).sort((a, b) => b.score - a.score);\r\n }\r\n private static findBestHumanoidJoint<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ) {\r\n return this.collectHumanoidJointCandidates(nodes, patterns, used)[0]?.node ?? null;\r\n }\r\n private static matchHumanoidJointProfile<T extends string, U extends { name: string; children: U[] }>(\r\n nodes: HumanoidJointNodeInfo<U>[],\r\n profile: HumanoidJointProfile<T>,\r\n used: Set<U>,\r\n optional?: Set<T>\r\n ): Partial<Record<T, U>> | null {\r\n const result = {} as Partial<Record<T, U>>;\r\n const reserved = new Set<U>();\r\n for (const joint of Object.keys(profile) as T[]) {\r\n const node = this.findBestHumanoidJoint(nodes, profile[joint], new Set<U>([...used, ...reserved]));\r\n if (!node) {\r\n if (optional?.has(joint)) {\r\n continue;\r\n }\r\n return null;\r\n }\r\n result[joint] = node;\r\n reserved.add(node);\r\n }\r\n for (const node of reserved) {\r\n used.add(node);\r\n }\r\n return result;\r\n }\r\n private static validateHumanoidBodyPartial<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ) {\r\n const validateAncestor = (ancestor: HumanoidBodyRig, descendant: HumanoidBodyRig) =>\r\n !body[ancestor] || !body[descendant] || this.isSameOrAncestor(body[ancestor]!, body[descendant]!);\r\n return (\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Spine) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.LeftUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.RightUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Chest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Neck, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.LeftShoulder, HumanoidBodyRig.LeftUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperArm, HumanoidBodyRig.LeftLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerArm, HumanoidBodyRig.LeftHand) &&\r\n validateAncestor(HumanoidBodyRig.RightShoulder, HumanoidBodyRig.RightUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperArm, HumanoidBodyRig.RightLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerArm, HumanoidBodyRig.RightHand) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperLeg, HumanoidBodyRig.LeftLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerLeg, HumanoidBodyRig.LeftFoot) &&\r\n validateAncestor(HumanoidBodyRig.LeftFoot, HumanoidBodyRig.LeftToes) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperLeg, HumanoidBodyRig.RightLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerLeg, HumanoidBodyRig.RightFoot) &&\r\n validateAncestor(HumanoidBodyRig.RightFoot, HumanoidBodyRig.RightToes)\r\n );\r\n }\r\n private static matchHumanoidBodyProfile<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n profile: HumanoidJointProfile<HumanoidBodyRig>,\r\n used: Set<T>,\r\n optional?: Set<HumanoidBodyRig>\r\n ): Partial<Record<HumanoidBodyRig, T>> | null {\r\n const joints = Object.keys(profile) as HumanoidBodyRig[];\r\n const candidates = new Map<HumanoidBodyRig, HumanoidJointMatchCandidate<T>[]>();\r\n for (const joint of joints) {\r\n candidates.set(joint, this.collectHumanoidJointCandidates(nodes, profile[joint], used));\r\n }\r\n const current = {} as Partial<Record<HumanoidBodyRig, T>>;\r\n const reserved = new Set<T>();\r\n let bestScore = Number.NEGATIVE_INFINITY;\r\n let bestResult: Partial<Record<HumanoidBodyRig, T>> | null = null;\r\n const search = (index: number, score: number) => {\r\n if (index >= joints.length) {\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestResult = { ...current };\r\n }\r\n return;\r\n }\r\n const joint = joints[index];\r\n let matched = false;\r\n for (const candidate of candidates.get(joint) ?? []) {\r\n if (reserved.has(candidate.node)) {\r\n continue;\r\n }\r\n current[joint] = candidate.node;\r\n reserved.add(candidate.node);\r\n if (this.validateHumanoidBodyPartial(current)) {\r\n matched = true;\r\n search(index + 1, score + candidate.score);\r\n }\r\n reserved.delete(candidate.node);\r\n delete current[joint];\r\n }\r\n if (optional?.has(joint)) {\r\n search(index + 1, score);\r\n } else if (!matched) {\r\n return;\r\n }\r\n };\r\n search(0, 0);\r\n if (!bestResult) {\r\n return null;\r\n }\r\n for (const node of Object.values(bestResult) as T[]) {\r\n used.add(node);\r\n }\r\n return bestResult;\r\n }\r\n private static getHumanoidIntermediateChain<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n ancestor: T,\r\n descendant: T\r\n ) {\r\n if (!this.isSameOrAncestor(ancestor, descendant)) {\r\n return null;\r\n }\r\n const chain: T[] = [];\r\n let current = descendant.parent;\r\n while (current && current !== ancestor) {\r\n chain.unshift(current);\r\n current = current.parent;\r\n }\r\n return chain;\r\n }\r\n private static completeHumanoidBody<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ): Record<HumanoidBodyRig, T> | null {\r\n const requiredJoints = [\r\n HumanoidBodyRig.Hips,\r\n HumanoidBodyRig.Spine,\r\n HumanoidBodyRig.Neck,\r\n HumanoidBodyRig.Head,\r\n HumanoidBodyRig.LeftShoulder,\r\n HumanoidBodyRig.LeftUpperArm,\r\n HumanoidBodyRig.LeftLowerArm,\r\n HumanoidBodyRig.LeftHand,\r\n HumanoidBodyRig.RightShoulder,\r\n HumanoidBodyRig.RightUpperArm,\r\n HumanoidBodyRig.RightLowerArm,\r\n HumanoidBodyRig.RightHand,\r\n HumanoidBodyRig.LeftUpperLeg,\r\n HumanoidBodyRig.LeftLowerLeg,\r\n HumanoidBodyRig.LeftFoot,\r\n HumanoidBodyRig.LeftToes,\r\n HumanoidBodyRig.RightUpperLeg,\r\n HumanoidBodyRig.RightLowerLeg,\r\n HumanoidBodyRig.RightFoot,\r\n HumanoidBodyRig.RightToes\r\n ];\r\n for (const joint of requiredJoints) {\r\n if (!body[joint]) {\r\n return null;\r\n }\r\n }\r\n const spine = body[HumanoidBodyRig.Spine]!;\r\n const neck = body[HumanoidBodyRig.Neck]!;\r\n let chest = body[HumanoidBodyRig.Chest];\r\n let upperChest = body[HumanoidBodyRig.UpperChest];\r\n if (!chest || !upperChest) {\r\n const spineChain = this.getHumanoidIntermediateChain(spine, neck);\r\n if (!spineChain || spineChain.length === 0) {\r\n chest ||= spine;\r\n upperChest ||= chest;\r\n } else if (spineChain.length === 1) {\r\n chest ||= spineChain[0];\r\n upperChest ||= chest;\r\n } else {\r\n chest ||= spineChain[0];\r\n upperChest ||= spineChain[spineChain.length - 1];\r\n }\r\n }\r\n if (!chest || !upperChest) {\r\n return null;\r\n }\r\n return {\r\n [HumanoidBodyRig.Hips]: body[HumanoidBodyRig.Hips]!,\r\n [HumanoidBodyRig.Spine]: spine,\r\n [HumanoidBodyRig.Chest]: chest,\r\n [HumanoidBodyRig.UpperChest]: upperChest,\r\n [HumanoidBodyRig.Neck]: neck,\r\n [HumanoidBodyRig.Head]: body[HumanoidBodyRig.Head]!,\r\n [HumanoidBodyRig.LeftShoulder]: body[HumanoidBodyRig.LeftShoulder]!,\r\n [HumanoidBodyRig.LeftUpperArm]: body[HumanoidBodyRig.LeftUpperArm]!,\r\n [HumanoidBodyRig.LeftLowerArm]: body[HumanoidBodyRig.LeftLowerArm]!,\r\n [HumanoidBodyRig.LeftHand]: body[HumanoidBodyRig.LeftHand]!,\r\n [HumanoidBodyRig.RightShoulder]: body[HumanoidBodyRig.RightShoulder]!,\r\n [HumanoidBodyRig.RightUpperArm]: body[HumanoidBodyRig.RightUpperArm]!,\r\n [HumanoidBodyRig.RightLowerArm]: body[HumanoidBodyRig.RightLowerArm]!,\r\n [HumanoidBodyRig.RightHand]: body[HumanoidBodyRig.RightHand]!,\r\n [HumanoidBodyRig.LeftUpperLeg]: body[HumanoidBodyRig.LeftUpperLeg]!,\r\n [HumanoidBodyRig.LeftLowerLeg]: body[HumanoidBodyRig.LeftLowerLeg]!,\r\n [HumanoidBodyRig.LeftFoot]: body[HumanoidBodyRig.LeftFoot]!,\r\n [HumanoidBodyRig.LeftToes]: body[HumanoidBodyRig.LeftToes]!,\r\n [HumanoidBodyRig.RightUpperLeg]: body[HumanoidBodyRig.RightUpperLeg]!,\r\n [HumanoidBodyRig.RightLowerLeg]: body[HumanoidBodyRig.RightLowerLeg]!,\r\n [HumanoidBodyRig.RightFoot]: body[HumanoidBodyRig.RightFoot]!,\r\n [HumanoidBodyRig.RightToes]: body[HumanoidBodyRig.RightToes]!\r\n };\r\n }\r\n private static completeHumanoidHand<T extends { name: string; children: T[] }>(\r\n hand: Partial<Record<HumanoidHandRig, T>>\r\n ): Record<HumanoidHandRig, T> | null {\r\n for (const joint of Object.values(HumanoidHandRig)) {\r\n if (!hand[joint]) {\r\n return null;\r\n }\r\n }\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: hand[HumanoidHandRig.ThumbProximal]!,\r\n [HumanoidHandRig.ThumbIntermediate]: hand[HumanoidHandRig.ThumbIntermediate]!,\r\n [HumanoidHandRig.ThumbDistal]: hand[HumanoidHandRig.ThumbDistal]!,\r\n [HumanoidHandRig.IndexProximal]: hand[HumanoidHandRig.IndexProximal]!,\r\n [HumanoidHandRig.IndexIntermediate]: hand[HumanoidHandRig.IndexIntermediate]!,\r\n [HumanoidHandRig.IndexDistal]: hand[HumanoidHandRig.IndexDistal]!,\r\n [HumanoidHandRig.MiddleProximal]: hand[HumanoidHandRig.MiddleProximal]!,\r\n [HumanoidHandRig.MiddleIntermediate]: hand[HumanoidHandRig.MiddleIntermediate]!,\r\n [HumanoidHandRig.MiddleDistal]: hand[HumanoidHandRig.MiddleDistal]!,\r\n [HumanoidHandRig.RingProximal]: hand[HumanoidHandRig.RingProximal]!,\r\n [HumanoidHandRig.RingIntermediate]: hand[HumanoidHandRig.RingIntermediate]!,\r\n [HumanoidHandRig.RingDistal]: hand[HumanoidHandRig.RingDistal]!,\r\n [HumanoidHandRig.PinkyProximal]: hand[HumanoidHandRig.PinkyProximal]!,\r\n [HumanoidHandRig.PinkyIntermediate]: hand[HumanoidHandRig.PinkyIntermediate]!,\r\n [HumanoidHandRig.PinkyDistal]: hand[HumanoidHandRig.PinkyDistal]!\r\n };\r\n }\r\n private static tryExtractOptionalHumanoidHand<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n side: 'left' | 'right',\r\n used: Set<T>\r\n ): Record<HumanoidHandRig, T> | undefined {\r\n const handCandidates = this.matchHumanoidJointProfile(\r\n nodes,\r\n this.createCommonHumanoidHandProfile(side),\r\n used\r\n );\r\n if (!handCandidates) {\r\n return undefined;\r\n }\r\n return this.completeHumanoidHand(handCandidates) ?? undefined;\r\n }\r\n private static isSameOrAncestor<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: T\r\n ) {\r\n return parent === child || this.isParentOf(parent, child);\r\n }\r\n private static validateHumanoidHandHierarchy<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(hand: T, joints: Record<HumanoidHandRig, T>) {\r\n const chains: [HumanoidHandRig, HumanoidHandRig, HumanoidHandRig][] = [\r\n [HumanoidHandRig.ThumbProximal, HumanoidHandRig.ThumbIntermediate, HumanoidHandRig.ThumbDistal],\r\n [HumanoidHandRig.IndexProximal, HumanoidHandRig.IndexIntermediate, HumanoidHandRig.IndexDistal],\r\n [HumanoidHandRig.MiddleProximal, HumanoidHandRig.MiddleIntermediate, HumanoidHandRig.MiddleDistal],\r\n [HumanoidHandRig.RingProximal, HumanoidHandRig.RingIntermediate, HumanoidHandRig.RingDistal],\r\n [HumanoidHandRig.PinkyProximal, HumanoidHandRig.PinkyIntermediate, HumanoidHandRig.PinkyDistal]\r\n ];\r\n return chains.every(\r\n ([proximal, intermediate, distal]) =>\r\n this.isSameOrAncestor(hand, joints[proximal]) &&\r\n this.isSameOrAncestor(joints[proximal], joints[intermediate]) &&\r\n this.isSameOrAncestor(joints[intermediate], joints[distal])\r\n );\r\n }\r\n private static validateHumanoidJointExtraction<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(result: HumanoidJointMapping<T>) {\r\n const body = result.body;\r\n return (\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.Spine]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Spine], body[HumanoidBodyRig.Chest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Chest], body[HumanoidBodyRig.UpperChest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.Neck]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Neck], body[HumanoidBodyRig.Head]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.LeftShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftShoulder], body[HumanoidBodyRig.LeftUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperArm], body[HumanoidBodyRig.LeftLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerArm], body[HumanoidBodyRig.LeftHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.RightShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightShoulder], body[HumanoidBodyRig.RightUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperArm], body[HumanoidBodyRig.RightLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerArm], body[HumanoidBodyRig.RightHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.LeftUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperLeg], body[HumanoidBodyRig.LeftLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerLeg], body[HumanoidBodyRig.LeftFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftFoot], body[HumanoidBodyRig.LeftToes]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.RightUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperLeg], body[HumanoidBodyRig.RightLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerLeg], body[HumanoidBodyRig.RightFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightFoot], body[HumanoidBodyRig.RightToes]) &&\r\n (!result.leftHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.LeftHand], result.leftHand)) &&\r\n (!result.rightHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.RightHand], result.rightHand))\r\n );\r\n }\r\n private static createCommonHumanoidHandProfile(\r\n side: 'left' | 'right'\r\n ): HumanoidJointProfile<HumanoidHandRig> {\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'proximal'] },\r\n { all: ['thumb', '1'] },\r\n { all: ['finger', '0'] }\r\n ]),\r\n [HumanoidHandRig.ThumbIntermediate]: sideJointPatterns(side, [\r\n { all: ['thumb', 'intermediate'] },\r\n { all: ['thumb', '2'] },\r\n { all: ['finger', '01'] }\r\n ]),\r\n [HumanoidHandRig.ThumbDistal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'distal'] },\r\n { all: ['thumb', '3'] },\r\n { all: ['finger', '02'] }\r\n ]),\r\n [HumanoidHandRig.IndexProximal]: sideJointPatterns(side, [\r\n { all: ['index', 'proximal'] },\r\n { all: ['index', '1'] },\r\n { all: ['finger', '1'] }\r\n ]),\r\n [HumanoidHandRig.IndexIntermediate]: sideJointPatterns(side, [\r\n { all: ['index', 'intermediate'] },\r\n { all: ['index', '2'] },\r\n { all: ['finger', '11'] }\r\n ]),\r\n [HumanoidHandRig.IndexDistal]: sideJointPatterns(side, [\r\n { all: ['index', 'distal'] },\r\n { all: ['index', '3'] },\r\n { all: ['finger', '12'] }\r\n ]),\r\n [HumanoidHandRig.MiddleProximal]: sideJointPatterns(side, [\r\n { all: ['middle', 'proximal'] },\r\n { all: ['middle', '1'] },\r\n { all: ['finger', '2'] }\r\n ]),\r\n [HumanoidHandRig.MiddleIntermediate]: sideJointPatterns(side, [\r\n { all: ['middle', 'intermediate'] },\r\n { all: ['middle', '2'] },\r\n { all: ['finger', '21'] }\r\n ]),\r\n [HumanoidHandRig.MiddleDistal]: sideJointPatterns(side, [\r\n { all: ['middle', 'distal'] },\r\n { all: ['middle', '3'] },\r\n { all: ['finger', '22'] }\r\n ]),\r\n [HumanoidHandRig.RingProximal]: sideJointPatterns(side, [\r\n { all: ['ring', 'proximal'] },\r\n { all: ['ring', '1'] },\r\n { all: ['finger', '3'] }\r\n ]),\r\n [HumanoidHandRig.RingIntermediate]: sideJointPatterns(side, [\r\n { all: ['ring', 'intermediate'] },\r\n { all: ['ring', '2'] },\r\n { all: ['finger', '31'] }\r\n ]),\r\n [HumanoidHandRig.RingDistal]: sideJointPatterns(side, [\r\n { all: ['ring', 'distal'] },\r\n { all: ['ring', '3'] },\r\n { all: ['finger', '32'] }\r\n ]),\r\n [HumanoidHandRig.PinkyProximal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'proximal'] },\r\n { all: ['pinky', '1'] },\r\n { all: ['finger', '4'] }\r\n ]),\r\n [HumanoidHandRig.PinkyIntermediate]: sideJointPatterns(side, [\r\n { all: ['pinky', 'intermediate'] },\r\n { all: ['pinky', '2'] },\r\n { all: ['finger', '41'] }\r\n ]),\r\n [HumanoidHandRig.PinkyDistal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'distal'] },\r\n { all: ['pinky', '3'] },\r\n { all: ['finger', '42'] }\r\n ])\r\n };\r\n }\r\n private static createStandardHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips']), jointPattern(['pelvis'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3', 'chest', 'upper'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['chest'], ['upper']), jointPattern(['spine', '1'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['upper', 'chest']),\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createMixamoHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createBipedHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['pelvis']), jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ])\r\n };\r\n }\r\n private static isParentOf<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: Nullable<T>\r\n ) {\r\n while (child && child !== parent) {\r\n child = child.parent!;\r\n }\r\n return child === parent;\r\n }\r\n\r\n private static iterateNode<T extends { name: string; children: T[] }>(\r\n root: T,\r\n callback: (node: T) => boolean\r\n ) {\r\n if (callback(root)) {\r\n return true;\r\n }\r\n for (const child of root.children) {\r\n if (this.iterateNode(child, callback)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n private static tryExtractHumanoidJointsByBodyProfile<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T, bodyProfile: HumanoidJointProfile<HumanoidBodyRig>): HumanoidJointMapping<T> | null {\r\n const nodes = this.collectHumanoidJointNodeInfos(root);\r\n const used = new Set<T>();\r\n const bodyCandidates = this.matchHumanoidBodyProfile(\r\n nodes,\r\n bodyProfile,\r\n used,\r\n new Set<HumanoidBodyRig>([HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest])\r\n );\r\n if (!bodyCandidates) {\r\n return null;\r\n }\r\n const body = this.completeHumanoidBody(bodyCandidates);\r\n if (!body) {\r\n return null;\r\n }\r\n const leftHand = this.tryExtractOptionalHumanoidHand(nodes, 'left', used);\r\n const rightHand = this.tryExtractOptionalHumanoidHand(nodes, 'right', used);\r\n const result: HumanoidJointMapping<T> = {\r\n body,\r\n leftHand,\r\n rightHand\r\n };\r\n return this.validateHumanoidJointExtraction(result) ? result : null;\r\n }\r\n /**\r\n * Attempt to extract humanoid joint mappings from the skeleton's joints based on their names.\r\n *\r\n * This method looks for joints with names matching the standardized `HumanoidBodyRig` and `HumanoidHandRig` enums.\r\n * If a complete mapping is found, it returns an object containing the mapped joints for the body and hands.\r\n * If any required joint is missing, it returns `null`.\r\n *\r\n * This method tries to find the best match for humanoid rigs, designed to work with Mixamo, VRoid, Unity Humanoid,\r\n * Biped, and similar skeletons. It is not guaranteed to work with all models, and may require manual adjustments or\r\n * custom modifiers for non-standard rigs.\r\n *\r\n * @param root - The root scene node to search for humanoid joints.\r\n * @returns An object containing the mapped body and hand joints if a complete humanoid rig is detected, otherwise `null`.\r\n */\r\n static tryExtractHumanoidJoints<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return (\r\n this.tryExtractHumanoidJointsMixamo(root) ??\r\n this.tryExtractHumanoidJointsVRM(root) ??\r\n this.tryExtractHumanoidJointsUnityHumanoid(root) ??\r\n this.tryExtractHumanoidJointsBiped(root)\r\n );\r\n }\r\n static tryExtractHumanoidJointsMixamo<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createMixamoHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsVRM<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsUnityHumanoid<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsBiped<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createBipedHumanoidBodyProfile());\r\n }\r\n}\r\n\r\n/**\r\n * Legacy compatibility name for a skin binding.\r\n *\r\n * New code should use {@link SkeletonRig} for the shared animated rig and\r\n * {@link SkinBinding} for per-skin inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class Skeleton extends SkinBinding {\r\n constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: SkeletonBindPose[]) {\r\n super(new SkeletonRig(joints, bindPose), inverseBindMatrices, joints);\r\n }\r\n\r\n static tryExtractHumanoidJoints = SkinBinding.tryExtractHumanoidJoints;\r\n static tryExtractHumanoidJointsMixamo = SkinBinding.tryExtractHumanoidJointsMixamo;\r\n static tryExtractHumanoidJointsVRM = SkinBinding.tryExtractHumanoidJointsVRM;\r\n static tryExtractHumanoidJointsUnityHumanoid = SkinBinding.tryExtractHumanoidJointsUnityHumanoid;\r\n static tryExtractHumanoidJointsBiped = SkinBinding.tryExtractHumanoidJointsBiped;\r\n static findSkeletonById(id: string) {\r\n return SkinBinding.findSkinBindingById(id);\r\n }\r\n}\r\n"],"names":["HumanoidBodyRig","HumanoidHandRig","tmpV0","Vector3","tmpV1","humanoidHelperJointTokens","Set","SkeletonRig","Disposable","_registry","Map","_id","_joints","_bindPoseByJoint","_bindPose","_rootJoint","_rootBindPose","_playing","_modifiers","_humanoidJointMapping","_humanoidRootRotation","joints","bindPose","options","randomUUID","i","length","set","skeletonRoot","findRootJoint","rootJoint","rootBindPose","getNodeBindPose","computeBindPose","humanoidJointMapping","undefined","Skeleton","tryExtractHumanoidJoints","Quaternion","identity","hips","body","p","includes","parent","multiply","rotation","DWeakRef","getRigKey","persistentId","map","joint","sort","join","findRigById","id","m","get","delete","val","Error","getBindPoseForJoint","humanoidRootRotation","modifiers","playing","b","getJointIndex","indexOf","getJointIndexByName","jointName","findIndex","name","bindpose","position","scale","has","apply","deltaTime","modifier","reset","onDispose","dispose","root","isParentOf","node","clone","zero","one","jointPattern","all","none","any","sideJointPatterns","side","patterns","sideTokens","flatMap","sideToken","pattern","SkinBinding","rig","inverseBindMatrices","_rig","_inverseBindMatrices","_jointTexture","DRef","_lastUpdateTime","updateJointMatrices","findSkinBindingById","findSkeletonById","jointTexture","_createJointTexture","_jointOffsets","Matrix4x4","worldMatrix","_jointMatrices","tex","_syncJointMatrixArray","update","_jointMatrixArray","width","height","applyModifiers","computeBoundingBox","info","invWorldMatrix","boundingBox","beginExtend","influenceCount","Math","max","boundingVertices","setXYZ","base","j","weight","Number","boundingVertexJointWeights","matrix","boundingVertexBlendIndices","transformPointAffine","scaleBy","addBy","extend","textureWidth","nextPowerOf2","ceil","sqrt","device","getDevice","createTexture2D","mipmapping","samplerOptions","magFilter","minFilter","Float32Array","subarray","Array","from","getBoundingInfo","data","indices","minx","MAX_VALUE","maxx","miny","maxy","minz","maxz","v","positions","vert","numVertices","floor","weights","blendIndices","x","y","z","index","BoundingBox","skinPositionsToLocal","out","result","matrixOffset","effectiveInfluenceCount","vertexIndex","skinnedX","skinnedY","skinnedZ","weightSum","jointIndex","normalizeHumanoidJointName","slice","lastIndexOf","replace","toLowerCase","trim","getHumanoidJointNodeDepth","depth","current","collectHumanoidJointNodeInfos","nodes","iterateNode","normalizedName","tokens","split","filter","Boolean","some","token","push","tokenSet","matchesHumanoidJointPattern","scoreHumanoidJointPattern","priority","matchedTokens","add","extraTokenCount","size","collectHumanoidJointCandidates","used","candidates","score","a","findBestHumanoidJoint","matchHumanoidJointProfile","profile","optional","reserved","Object","keys","validateHumanoidBodyPartial","validateAncestor","ancestor","descendant","isSameOrAncestor","matchHumanoidBodyProfile","bestScore","NEGATIVE_INFINITY","bestResult","search","matched","candidate","values","getHumanoidIntermediateChain","chain","unshift","completeHumanoidBody","requiredJoints","spine","neck","chest","upperChest","spineChain","completeHumanoidHand","hand","tryExtractOptionalHumanoidHand","handCandidates","createCommonHumanoidHandProfile","child","validateHumanoidHandHierarchy","chains","every","proximal","intermediate","distal","validateHumanoidJointExtraction","leftHand","rightHand","createStandardHumanoidBodyProfile","createMixamoHumanoidBodyProfile","createBipedHumanoidBodyProfile","callback","children","tryExtractHumanoidJointsByBodyProfile","bodyProfile","bodyCandidates","tryExtractHumanoidJointsMixamo","tryExtractHumanoidJointsVRM","tryExtractHumanoidJointsUnityHumanoid","tryExtractHumanoidJointsBiped"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skeleton.js","sources":["../../src/animation/skeleton.ts"],"sourcesContent":["import { DRef, randomUUID, DWeakRef } from '@zephyr3d/base';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Vector3, nextPowerOf2 } from '@zephyr3d/base';\r\nimport type { Texture2D } from '@zephyr3d/device';\r\nimport type { SceneNode } from '../scene/scene_node';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { getDevice } from '../app/api';\r\nimport type { SkeletonModifier } from './skeleton_modifier';\r\n\r\n/**\r\n * Standardized humanoid joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidBodyRig {\r\n Hips = 'Hips',\r\n Spine = 'Spine',\r\n Chest = 'Chest',\r\n UpperChest = 'UpperChest',\r\n Neck = 'Neck',\r\n Head = 'Head',\r\n\r\n LeftShoulder = 'LeftShoulder',\r\n LeftUpperArm = 'LeftUpperArm',\r\n LeftLowerArm = 'LeftLowerArm',\r\n LeftHand = 'LeftHand',\r\n\r\n RightShoulder = 'RightShoulder',\r\n RightUpperArm = 'RightUpperArm',\r\n RightLowerArm = 'RightLowerArm',\r\n RightHand = 'RightHand',\r\n\r\n LeftUpperLeg = 'LeftUpperLeg',\r\n LeftLowerLeg = 'LeftLowerLeg',\r\n LeftFoot = 'LeftFoot',\r\n LeftToes = 'LeftToes',\r\n\r\n RightUpperLeg = 'RightUpperLeg',\r\n RightLowerLeg = 'RightLowerLeg',\r\n RightFoot = 'RightFoot',\r\n RightToes = 'RightToes'\r\n}\r\n\r\n/**\r\n * Standardized humanoid hand joint names for consistent skeleton mapping across models and animations.\r\n *\r\n * These names align with common conventions used in 3D modeling and animation tools, facilitating interoperability and reuse of assets.\r\n *\r\n * @public\r\n */\r\nexport enum HumanoidHandRig {\r\n ThumbProximal = 'ThumbProximal',\r\n ThumbIntermediate = 'ThumbIntermediate',\r\n ThumbDistal = 'ThumbDistal',\r\n IndexProximal = 'IndexProximal',\r\n IndexIntermediate = 'IndexIntermediate',\r\n IndexDistal = 'IndexDistal',\r\n MiddleProximal = 'MiddleProximal',\r\n MiddleIntermediate = 'MiddleIntermediate',\r\n MiddleDistal = 'MiddleDistal',\r\n RingProximal = 'RingProximal',\r\n RingIntermediate = 'RingIntermediate',\r\n RingDistal = 'RingDistal',\r\n PinkyProximal = 'PinkyProximal',\r\n PinkyIntermediate = 'PinkyIntermediate',\r\n PinkyDistal = 'PinkyDistal'\r\n}\r\n\r\n/**\r\n * Skinned bounding box information for a submesh.\r\n *\r\n * Used to compute animated AABB for skinned meshes.\r\n *\r\n * @public\r\n */\r\nexport interface SkinnedBoundingBox {\r\n /**\r\n * Number of influences stored per representative vertex.\r\n */\r\n influenceCount?: number;\r\n /**\r\n * Representative vertices used to bound a skinned mesh (extreme points along axes).\r\n */\r\n boundingVertices: Vector3[];\r\n /**\r\n * Joint indices for each representative vertex, flattened.\r\n */\r\n boundingVertexBlendIndices: Float32Array;\r\n /**\r\n * Corresponding joint weights for each representative vertex, flattened.\r\n * Layout matches `boundingVertexBlendIndices`.\r\n */\r\n boundingVertexJointWeights: Float32Array;\r\n /**\r\n * Computed axis-aligned bounding box in model space for the current pose.\r\n */\r\n boundingBox: BoundingBox;\r\n}\r\n\r\nconst tmpV0 = new Vector3();\r\nconst tmpV1 = new Vector3();\r\n\r\n/**\r\n * Humanoid joint mapping\r\n * @public\r\n */\r\nexport type HumanoidJointMapping<T extends { name: string; parent: Nullable<T>; children: T[] }> = {\r\n body: Record<HumanoidBodyRig, T>;\r\n leftHand?: Record<HumanoidHandRig, T>;\r\n rightHand?: Record<HumanoidHandRig, T>;\r\n};\r\n\r\n/** @public */\r\nexport type SkeletonBindPose = { rotation: Quaternion; scale: Vector3; position: Vector3 };\r\n\r\n/** @public */\r\nexport type SkeletonRigOptions = {\r\n rootJoint?: Nullable<SceneNode>;\r\n rootBindPose?: SkeletonBindPose;\r\n humanoidJointMapping?: Nullable<HumanoidJointMapping<SceneNode>>;\r\n /**\r\n * Optional humanoid retarget reference pose, ordered like `joints`.\r\n * When omitted, the rig bind pose is used as the retarget reference.\r\n */\r\n retargetPose?: Nullable<SkeletonBindPose[]>;\r\n};\r\n\r\ntype HumanoidJointPattern = {\r\n all?: string[];\r\n any?: string[];\r\n none?: string[];\r\n};\r\n\r\ntype HumanoidJointProfile<T extends string> = Record<T, HumanoidJointPattern[]>;\r\n\r\nconst humanoidHelperJointTokens = new Set(['end', 'nub', 'socket']);\r\n\r\ntype HumanoidJointNodeInfo<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n depth: number;\r\n tokens: string[];\r\n tokenSet: Set<string>;\r\n};\r\n\r\ntype HumanoidJointMatchCandidate<T extends { name: string; children: T[] }> = {\r\n node: T;\r\n score: number;\r\n};\r\n\r\n/**\r\n * Shared joint rig for skeletal animation.\r\n *\r\n * A rig owns the animated joint nodes, bind pose, humanoid mapping and procedural\r\n * modifiers. Multiple skin bindings may reference the same rig with different\r\n * inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class SkeletonRig extends Disposable {\r\n private static readonly _registry: Map<string, DWeakRef<SkeletonRig>> = new Map();\r\n protected _id: string;\r\n protected _joints: SceneNode[];\r\n protected _bindPoseByJoint: Map<SceneNode, SkeletonBindPose>;\r\n protected _bindPose: SkeletonBindPose[];\r\n protected _retargetPoseByJoint: Nullable<Map<SceneNode, SkeletonBindPose>>;\r\n protected _retargetPose: Nullable<SkeletonBindPose[]>;\r\n protected _rootJoint: Nullable<SceneNode>;\r\n protected _rootBindPose: SkeletonBindPose;\r\n protected _playing: boolean;\r\n protected _modifiers: SkeletonModifier[];\r\n protected _humanoidJointMapping: Nullable<HumanoidJointMapping<SceneNode>>;\r\n protected _humanoidRootRotation: Quaternion;\r\n\r\n constructor(joints: SceneNode[], bindPose: SkeletonBindPose[], options?: SkeletonRigOptions) {\r\n super();\r\n this._id = randomUUID();\r\n this._joints = joints;\r\n this._bindPose = bindPose;\r\n this._bindPoseByJoint = new Map();\r\n for (let i = 0; i < joints.length; i++) {\r\n this._bindPoseByJoint.set(joints[i], bindPose[i]);\r\n }\r\n if (options?.retargetPose && options.retargetPose.length !== joints.length) {\r\n throw new Error('SkeletonRig(): retarget pose must contain one transform per joint');\r\n }\r\n this._retargetPose = options?.retargetPose ?? null;\r\n this._retargetPoseByJoint = this._retargetPose\r\n ? new Map(joints.map((joint, index) => [joint, this._retargetPose![index]]))\r\n : null;\r\n const skeletonRoot = this.findRootJoint(this._joints);\r\n this._rootJoint = options?.rootJoint ?? skeletonRoot;\r\n this._rootBindPose = options?.rootBindPose ?? this.getNodeBindPose(this._rootJoint);\r\n this._playing = false;\r\n this._modifiers = [];\r\n this.computeBindPose();\r\n this._humanoidJointMapping =\r\n options?.humanoidJointMapping !== undefined\r\n ? options.humanoidJointMapping\r\n : skeletonRoot\r\n ? Skeleton.tryExtractHumanoidJoints(skeletonRoot)\r\n : null;\r\n this._humanoidRootRotation = Quaternion.identity();\r\n const hips = this._humanoidJointMapping?.body[HumanoidBodyRig.Hips];\r\n if (hips) {\r\n let p = hips;\r\n while (this._joints.includes(p.parent!)) {\r\n Quaternion.multiply(p.parent!.rotation, this._humanoidRootRotation, this._humanoidRootRotation);\r\n p = p.parent!;\r\n }\r\n }\r\n SkeletonRig._registry.set(this._id, new DWeakRef(this));\r\n }\r\n\r\n static getRigKey(joints: SceneNode[], rootJoint?: Nullable<SceneNode>) {\r\n return [rootJoint?.persistentId ?? '', ...joints.map((joint) => joint.persistentId).sort()].join('|');\r\n }\r\n\r\n static findRigById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n\r\n get persistentId() {\r\n return this._id;\r\n }\r\n\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skeleton rig mismatch');\r\n }\r\n SkeletonRig._registry.delete(this._id);\r\n this._id = val;\r\n SkeletonRig._registry.set(this._id, m);\r\n }\r\n }\r\n\r\n get joints() {\r\n return this._joints;\r\n }\r\n\r\n get bindPose() {\r\n return this._bindPose;\r\n }\r\n\r\n /** Effective humanoid retarget reference pose. */\r\n get retargetPose() {\r\n return this._retargetPose ?? this._bindPose;\r\n }\r\n\r\n /** Whether this rig has a reference pose that is distinct from its bind pose. */\r\n get hasRetargetPose() {\r\n return !!this._retargetPose;\r\n }\r\n\r\n get rootJoint(): Nullable<SceneNode> {\r\n return this._rootJoint;\r\n }\r\n\r\n set rootJoint(joint: Nullable<SceneNode>) {\r\n this._rootJoint = joint;\r\n this._rootBindPose = this.getNodeBindPose(joint);\r\n }\r\n\r\n get rootBindPose(): SkeletonBindPose {\r\n return this._rootBindPose;\r\n }\r\n\r\n getBindPoseForJoint(joint: SceneNode) {\r\n return this._bindPoseByJoint.get(joint) ?? null;\r\n }\r\n\r\n getRetargetPoseForJoint(joint: SceneNode) {\r\n return this._retargetPoseByJoint?.get(joint) ?? this.getBindPoseForJoint(joint);\r\n }\r\n\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._humanoidJointMapping;\r\n }\r\n\r\n get humanoidRootRotation(): Quaternion {\r\n return this._humanoidRootRotation;\r\n }\r\n\r\n get modifiers(): SkeletonModifier[] {\r\n return this._modifiers;\r\n }\r\n\r\n get playing() {\r\n return this._playing;\r\n }\r\n\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n\r\n computeBindPose() {\r\n for (let i = 0; i < this._joints.length; i++) {\r\n const joint = this._joints[i];\r\n const bindpose = this._bindPose[i];\r\n joint.position.set(bindpose.position);\r\n joint.rotation.set(bindpose.rotation);\r\n joint.scale.set(bindpose.scale);\r\n }\r\n if (this._rootJoint && !this._bindPoseByJoint.has(this._rootJoint)) {\r\n this._rootJoint.position.set(this._rootBindPose.position);\r\n this._rootJoint.rotation.set(this._rootBindPose.rotation);\r\n this._rootJoint.scale.set(this._rootBindPose.scale);\r\n }\r\n }\r\n\r\n apply(deltaTime: number): void {\r\n for (const modifier of this._modifiers) {\r\n modifier.apply(this, deltaTime);\r\n }\r\n }\r\n\r\n reset() {\r\n this._playing = false;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n const m = SkeletonRig._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkeletonRig._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n\r\n private findRootJoint(joints: SceneNode[]) {\r\n let root: Nullable<SceneNode> = null;\r\n for (const joint of joints) {\r\n if (!root) {\r\n root = joint;\r\n }\r\n while (!root!.isParentOf(joint)) {\r\n root = root!.parent;\r\n }\r\n if (!root) {\r\n break;\r\n }\r\n }\r\n return root;\r\n }\r\n\r\n private getNodeBindPose(node: Nullable<SceneNode>): SkeletonBindPose {\r\n const bindPose = node ? this._bindPoseByJoint.get(node) : null;\r\n return bindPose\r\n ? {\r\n position: bindPose.position.clone(),\r\n rotation: bindPose.rotation.clone(),\r\n scale: bindPose.scale.clone()\r\n }\r\n : {\r\n position: node?.position.clone() ?? Vector3.zero(),\r\n rotation: node?.rotation.clone() ?? Quaternion.identity(),\r\n scale: node?.scale.clone() ?? Vector3.one()\r\n };\r\n }\r\n}\r\n\r\nfunction jointPattern(all: string[], none?: string[], any?: string[]): HumanoidJointPattern {\r\n return {\r\n all,\r\n any: any?.length ? any : undefined,\r\n none: none?.length ? none : undefined\r\n };\r\n}\r\n\r\nfunction sideJointPatterns(\r\n side: 'left' | 'right',\r\n patterns: Array<{ all: string[]; none?: string[]; any?: string[] }>\r\n): HumanoidJointPattern[] {\r\n const sideTokens = side === 'left' ? ['left', 'l'] : ['right', 'r'];\r\n return sideTokens.flatMap((sideToken) =>\r\n patterns.map((pattern) => ({\r\n all: [sideToken, ...pattern.all],\r\n any: pattern.any?.length ? [...pattern.any] : undefined,\r\n none: pattern.none?.length ? [...pattern.none] : undefined\r\n }))\r\n );\r\n}\r\n\r\n/**\r\n * Skin binding for skinned animation.\r\n *\r\n * Responsibilities:\r\n * - References a shared SkeletonRig.\r\n * - Maintains inverse bind and current skinning matrices for one skin.\r\n * - Provides a texture containing joint matrices for GPU skinning.\r\n * - Applies skinning state to associated meshes each frame.\r\n * - Computes animated axis-aligned bounding boxes using representative skinned vertices.\r\n *\r\n * Joint matrix texture layout:\r\n * - Texture format: `rgba32f`.\r\n * - Stored as a 2-layered ring buffer: current and previous joint transforms to support\r\n * temporal addressing if needed. Offsets are tracked in `_jointOffsets[0]` (current)\r\n * and `_jointOffsets[1]` (previous).\r\n *\r\n * Usage:\r\n * - Construct with a rig, bind data, meshes and submesh bounding info.\r\n * - Call `apply()` each frame to update joint texture, bind to meshes, and update bounds.\r\n * - Call `reset()` to clear skinning on meshes.\r\n *\r\n * @public\r\n */\r\nexport class SkinBinding extends Disposable {\r\n /** @internal Global weak registry keyed by persistentId for serialization/lookup. */\r\n private static readonly _registry: Map<string, DWeakRef<SkinBinding>> = new Map();\r\n /** @internal */\r\n protected _id: string;\r\n /** @internal */\r\n protected _rig: SkeletonRig;\r\n /** @internal */\r\n protected _joints: SceneNode[];\r\n /** @internal */\r\n protected _inverseBindMatrices: Matrix4x4[];\r\n /** @internal */\r\n protected _jointMatrices!: Matrix4x4[];\r\n /** @internal */\r\n protected _jointOffsets!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointMatrixArray!: Float32Array<ArrayBuffer>;\r\n /** @internal */\r\n protected _jointTexture: DRef<Texture2D>;\r\n /** @internal */\r\n protected _playing: boolean;\r\n /** @internal */\r\n protected _lastUpdateTime: number;\r\n /**\r\n * Create a skin binding instance.\r\n *\r\n * @param rig - Shared skeleton rig that owns animated joint transforms.\r\n * @param joints - Joint scene nodes (one per joint), ordered to match skin data.\r\n * @param inverseBindMatrices - Inverse bind matrices for each joint.\r\n * @param bindPoseMatrices - Bind pose matrices for each joint (model-space).\r\n */\r\n constructor(\r\n rig: SkeletonRig,\r\n inverseBindMatrices: Matrix4x4[],\r\n joints?: SceneNode[],\r\n bindPose?: SkeletonBindPose[]\r\n ) {\r\n super();\r\n this._id = randomUUID();\r\n this._rig = rig;\r\n this._joints = joints ?? rig.joints;\r\n this._inverseBindMatrices = inverseBindMatrices;\r\n this._jointTexture = new DRef();\r\n this._playing = false;\r\n this._lastUpdateTime = 0;\r\n if (bindPose && bindPose !== rig.bindPose) {\r\n // Legacy callers used Skeleton as both rig and binding. Keep the old bind\r\n // pose visible by replacing the rig pose only when explicitly supplied.\r\n this._rig = new SkeletonRig(rig.joints, bindPose, {\r\n rootJoint: rig.rootJoint,\r\n rootBindPose: rig.rootBindPose,\r\n humanoidJointMapping: rig.humanoidJointMapping,\r\n retargetPose: rig.hasRetargetPose ? rig.retargetPose : null\r\n });\r\n }\r\n this.updateJointMatrices();\r\n SkinBinding._registry.set(this._id, new DWeakRef(this));\r\n }\r\n /**\r\n * Lookup a skeleton from the global registry by persistent id.\r\n *\r\n * @param id - The persistent UUID to search for.\r\n * @returns The skeleton if alive, otherwise `null`.\r\n * @internal\r\n */\r\n static findSkinBindingById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n static findSkeletonById(id: string) {\r\n return this.findSkinBindingById(id);\r\n }\r\n get rig() {\r\n return this._rig;\r\n }\r\n /** Gets joint nodes */\r\n get joints() {\r\n return this._joints;\r\n }\r\n /** Gets the humanoid joint mapping */\r\n get humanoidJointMapping(): Nullable<HumanoidJointMapping<SceneNode>> {\r\n return this._rig.humanoidJointMapping;\r\n }\r\n /** Root rotation of humanoid hips bone */\r\n get humanoidRootRotation(): Quaternion {\r\n return this._rig.humanoidRootRotation;\r\n }\r\n /** @internal */\r\n get inverseBindMatrices() {\r\n return this._inverseBindMatrices;\r\n }\r\n /** @internal */\r\n get bindPose() {\r\n return this._joints.map((joint) => this._rig.getBindPoseForJoint(joint)!);\r\n }\r\n get playing() {\r\n return this._playing;\r\n }\r\n set playing(b: boolean) {\r\n this._playing = b;\r\n }\r\n get persistentId() {\r\n return this._id;\r\n }\r\n set persistentId(val) {\r\n if (val !== this._id) {\r\n const m = SkinBinding._registry.get(this._id);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry skin binding mismatch');\r\n }\r\n SkinBinding._registry.delete(this._id);\r\n this._id = val;\r\n SkinBinding._registry.set(this._id, m);\r\n }\r\n }\r\n /**\r\n * Texture containing joint matrices for GPU skinning.\r\n *\r\n * Each matrix is stored in 4 texels (one row per texel, RGBA = 4 floats).\r\n */\r\n get jointTexture() {\r\n return this._jointTexture.get()!;\r\n }\r\n /**\r\n * Get joint index by joint node\r\n * @param joint - joint node\r\n * @returns The index of the joint\r\n */\r\n getJointIndex(joint: SceneNode) {\r\n return this._joints.indexOf(joint);\r\n }\r\n /**\r\n * Get joint index by joint name\r\n * @param jointName - joint name\r\n * @returns The index of the joint\r\n */\r\n getJointIndexByName(jointName: string) {\r\n return this._joints.findIndex((joint) => joint.name === jointName);\r\n }\r\n /**\r\n * Update joint matrices from either provided transforms or the joints' world matrices.\r\n *\r\n * - Lazily creates the joint texture and its backing arrays on first call.\r\n * - Advances the ring buffer offset in `_jointOffsets` to write a new \"current\" set.\r\n * - For each joint:\r\n * - Optionally premultiplies by `worldMatrix` (to transform into model space).\r\n * - Computes skinning matrix: ( M_\\{skin\\} = M_\\{joint\\} \\\\times M_\\{inverseBind\\} ).\r\n *\r\n * Note: This method only writes into the CPU-side array; callers like `computeJoints()`\r\n * update the GPU texture.\r\n *\r\n * @param jointTransforms - Optional per-joint transforms to use instead of node world matrices.\r\n * @param worldMatrix - Optional world-to-model transform applied before inverse bind.\r\n * @internal\r\n */\r\n updateJointMatrices() {\r\n if (!this._jointTexture.get()) {\r\n this._createJointTexture();\r\n }\r\n if (this._jointOffsets[0] === 0) {\r\n this._jointOffsets[0] = 1;\r\n this._jointOffsets[1] = 1;\r\n } else {\r\n this._jointOffsets[1] = this._jointOffsets[0];\r\n this._jointOffsets[0] = this.joints.length - this._jointOffsets[0] + 2;\r\n }\r\n for (let i = 0; i < this.joints.length; i++) {\r\n Matrix4x4.multiply(\r\n this.joints[i].worldMatrix,\r\n this._inverseBindMatrices[i],\r\n this._jointMatrices[i + this._jointOffsets[0] - 1]\r\n );\r\n }\r\n }\r\n /**\r\n * Reset skeleton to bind pose\r\n *\r\n * @internal\r\n */\r\n computeBindPose() {\r\n this._rig.computeBindPose();\r\n }\r\n /**\r\n * Compute current joint matrices from the nodes and upload them to the joint texture.\r\n *\r\n * @internal\r\n */\r\n apply() {\r\n this.updateJointMatrices();\r\n const tex = this.jointTexture;\r\n this._syncJointMatrixArray();\r\n tex.update(this._jointMatrixArray, 0, 0, tex.width, tex.height);\r\n }\r\n /**\r\n * Apply all enabled modifiers.\r\n *\r\n * Modifiers are applied after the base animation/bind pose layer,\r\n * allowing procedural modifications like IK, spring physics, or manual overrides.\r\n *\r\n * @param deltaTime - Time elapsed since last frame (in seconds)\r\n * @internal\r\n */\r\n protected applyModifiers(deltaTime: number): void {\r\n this._rig.apply(deltaTime);\r\n }\r\n /**\r\n * Get all modifiers attached to this skeleton.\r\n *\r\n * @public\r\n */\r\n get modifiers(): SkeletonModifier[] {\r\n return this._rig.modifiers;\r\n }\r\n /**\r\n * Reset all meshes to an unskinned state and clear animated bounds.\r\n *\r\n * @internal\r\n */\r\n reset() {\r\n //this.updateJointMatrices(this._bindPoseMatrices);\r\n this._playing = false;\r\n }\r\n /**\r\n * Compute the animated bounding box for a single mesh using its representative vertices.\r\n *\r\n * For each representative vertex:\r\n * - Blends the vertex by up to 4 joint matrices using provided weights.\r\n * - Transforms to the mesh's local space using `invWorldMatrix`.\r\n * - Expands the bounding box.\r\n *\r\n * @param info - Precomputed bounding data (representative vertices, indices, weights).\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert to model/local space.\r\n * @internal\r\n */\r\n computeBoundingBox(info: SkinnedBoundingBox, invWorldMatrix: Matrix4x4) {\r\n info.boundingBox.beginExtend();\r\n const influenceCount = Math.max(1, info.influenceCount ?? 4);\r\n for (let i = 0; i < info.boundingVertices.length; i++) {\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(info.boundingVertexJointWeights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[\r\n (Number(info.boundingVertexBlendIndices[base + j]) || 0) + this._jointOffsets[0] - 1\r\n ];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(info.boundingVertices[i], tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n invWorldMatrix.transformPointAffine(tmpV0, tmpV0);\r\n info.boundingBox.extend(tmpV0);\r\n }\r\n }\r\n /**\r\n * Dispose GPU resources and references held by the skeleton.\r\n *\r\n * - Disposes the joint texture.\r\n * - Clears matrix arrays and joint references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._jointTexture.dispose();\r\n const m = SkinBinding._registry.get(this._id);\r\n if (m?.get() === this) {\r\n SkinBinding._registry.delete(this._id);\r\n m.dispose();\r\n }\r\n }\r\n /**\r\n * Initialize joint texture and CPU-side matrix storage.\r\n *\r\n * Layout details:\r\n * - Texture size is the next power-of-two able to contain all matrices plus two offset texels.\r\n * - `_jointMatrixArray` holds:\r\n * - First 2 vec4s: ring buffer offsets `[current, previous, 0, 0]`.\r\n * - Followed by 2×N matrices (current and previous), each as 16 floats.\r\n * - `_jointMatrices` is a view into `_jointMatrixArray` providing Matrix4x4 objects per slot.\r\n *\r\n * @internal\r\n */\r\n private _createJointTexture() {\r\n const textureWidth = nextPowerOf2(Math.max(4, Math.ceil(Math.sqrt((this.joints.length * 2 + 1) * 4))));\r\n const device = getDevice();\r\n this._jointTexture.set(\r\n device.createTexture2D('rgba32f', textureWidth, textureWidth, {\r\n mipmapping: false,\r\n samplerOptions: {\r\n magFilter: 'nearest',\r\n minFilter: 'nearest'\r\n }\r\n })\r\n );\r\n this._jointMatrixArray = new Float32Array(textureWidth * textureWidth * 4);\r\n this._jointOffsets = this._jointMatrixArray.subarray(0, 2) as Float32Array<ArrayBuffer>;\r\n this._jointOffsets[0] = 0;\r\n this._jointOffsets[1] = 0;\r\n this._jointMatrices = Array.from({ length: this.joints.length * 2 }).map(() => new Matrix4x4());\r\n }\r\n private _syncJointMatrixArray() {\r\n for (let i = 0; i < this._jointMatrices.length; i++) {\r\n this._jointMatrixArray.set(this._jointMatrices[i], (i + 1) * 16);\r\n }\r\n }\r\n /**\r\n * Build representative skinned bounding data for a submesh.\r\n *\r\n * Strategy:\r\n * - For all vertices, compute their skinned position (using current ring buffer slot).\r\n * - Track the indices of the min/max extents along x, y, z (6 indices total).\r\n * - Store:\r\n * - The 6 representative positions in object space.\r\n * - Their 4 joint indices and weights (flattened).\r\n * - An empty BoundingBox to be filled during animation.\r\n *\r\n * @param meshData - Raw submesh attributes (positions, blend indices, weights).\r\n * @returns Skinned bounding box info used during per-frame updates.\r\n */\r\n getBoundingInfo(data: {\r\n positions: Float32Array;\r\n blendIndices: TypedArray;\r\n weights: TypedArray;\r\n influenceCount?: number;\r\n }) {\r\n const indices = [0, 0, 0, 0, 0, 0];\r\n let minx = Number.MAX_VALUE;\r\n let maxx = -Number.MAX_VALUE;\r\n let miny = Number.MAX_VALUE;\r\n let maxy = -Number.MAX_VALUE;\r\n let minz = Number.MAX_VALUE;\r\n let maxz = -Number.MAX_VALUE;\r\n const v = data.positions;\r\n const vert = new Vector3();\r\n const tmpV0 = new Vector3();\r\n const tmpV1 = new Vector3();\r\n const numVertices = Math.floor(v.length / 3);\r\n const influenceCount = Math.max(1, data.influenceCount ?? 4);\r\n for (let i = 0; i < numVertices; i++) {\r\n vert.setXYZ(v[i * 3], v[i * 3 + 1], v[i * 3 + 2]);\r\n tmpV0.setXYZ(0, 0, 0);\r\n const base = i * influenceCount;\r\n for (let j = 0; j < influenceCount; j++) {\r\n const weight = Number(data.weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const matrix =\r\n this._jointMatrices[(Number(data.blendIndices[base + j]) || 0) + this._jointOffsets[0] - 1];\r\n if (!matrix) {\r\n continue;\r\n }\r\n matrix.transformPointAffine(vert, tmpV1).scaleBy(weight);\r\n tmpV0.addBy(tmpV1);\r\n }\r\n if (tmpV0.x < minx) {\r\n minx = tmpV0.x;\r\n indices[0] = i;\r\n }\r\n if (tmpV0.x > maxx) {\r\n maxx = tmpV0.x;\r\n indices[1] = i;\r\n }\r\n if (tmpV0.y < miny) {\r\n miny = tmpV0.y;\r\n indices[2] = i;\r\n }\r\n if (tmpV0.y > maxy) {\r\n maxy = tmpV0.y;\r\n indices[3] = i;\r\n }\r\n if (tmpV0.z < minz) {\r\n minz = tmpV0.z;\r\n indices[4] = i;\r\n }\r\n if (tmpV0.z > maxz) {\r\n maxz = tmpV0.z;\r\n indices[5] = i;\r\n }\r\n }\r\n const info: SkinnedBoundingBox = {\r\n influenceCount,\r\n boundingVertexBlendIndices: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.blendIndices[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertexJointWeights: new Float32Array(\r\n Array.from({ length: 6 * influenceCount }).map(\r\n (val, index) =>\r\n data.weights[\r\n indices[Math.floor(index / influenceCount)] * influenceCount + (index % influenceCount)\r\n ]\r\n )\r\n ),\r\n boundingVertices: Array.from({ length: 6 }).map(\r\n (val, index) =>\r\n new Vector3(\r\n data.positions[indices[index] * 3],\r\n data.positions[indices[index] * 3 + 1],\r\n data.positions[indices[index] * 3 + 2]\r\n )\r\n ),\r\n boundingBox: new BoundingBox()\r\n };\r\n return info;\r\n }\r\n /**\r\n * Skin all vertices into mesh-local space for the current skeleton pose.\r\n *\r\n * This is used by systems like cloth that need the animated mesh pose on CPU,\r\n * but render with GPU skinning disabled to avoid double deformation.\r\n *\r\n * @param positions - Bind-pose/object-space input positions, xyz packed.\r\n * @param blendIndices - 4 joint indices per vertex.\r\n * @param weights - 4 joint weights per vertex.\r\n * @param invWorldMatrix - Mesh inverse world matrix to convert skinned world positions back to mesh-local space.\r\n * @param out - Optional output array to reuse.\r\n * @returns The skinned mesh-local positions.\r\n * @internal\r\n */\r\n skinPositionsToLocal(\r\n positions: Float32Array<ArrayBuffer>,\r\n blendIndices: ArrayLike<number>,\r\n weights: ArrayLike<number>,\r\n invWorldMatrix: Matrix4x4,\r\n out?: Float32Array<ArrayBuffer>,\r\n influenceCount?: number\r\n ) {\r\n const result = out && out.length === positions.length ? out : new Float32Array(positions.length);\r\n const matrixOffset = this._jointOffsets[0] - 1;\r\n const effectiveInfluenceCount = Math.max(\r\n 1,\r\n influenceCount ??\r\n Math.max(1, Math.floor(weights.length / Math.max(1, Math.floor(positions.length / 3))))\r\n );\r\n for (let i = 0; i + 2 < positions.length; i += 3) {\r\n const vertexIndex = (i / 3) >> 0;\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n let skinnedX = 0;\r\n let skinnedY = 0;\r\n let skinnedZ = 0;\r\n let weightSum = 0;\r\n const base = vertexIndex * effectiveInfluenceCount;\r\n for (let j = 0; j < effectiveInfluenceCount; j++) {\r\n const weight = Number(weights[base + j]) || 0;\r\n if (weight <= 0) {\r\n continue;\r\n }\r\n const jointIndex = (Number(blendIndices[base + j]) || 0) + matrixOffset;\r\n const matrix = this._jointMatrices[jointIndex];\r\n if (!matrix) {\r\n continue;\r\n }\r\n skinnedX += (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) * weight;\r\n skinnedY += (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) * weight;\r\n skinnedZ += (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) * weight;\r\n weightSum += weight;\r\n }\r\n if (weightSum <= 1e-6) {\r\n skinnedX = x;\r\n skinnedY = y;\r\n skinnedZ = z;\r\n }\r\n result[i] =\r\n invWorldMatrix[0] * skinnedX +\r\n invWorldMatrix[4] * skinnedY +\r\n invWorldMatrix[8] * skinnedZ +\r\n invWorldMatrix[12];\r\n result[i + 1] =\r\n invWorldMatrix[1] * skinnedX +\r\n invWorldMatrix[5] * skinnedY +\r\n invWorldMatrix[9] * skinnedZ +\r\n invWorldMatrix[13];\r\n result[i + 2] =\r\n invWorldMatrix[2] * skinnedX +\r\n invWorldMatrix[6] * skinnedY +\r\n invWorldMatrix[10] * skinnedZ +\r\n invWorldMatrix[14];\r\n }\r\n return result;\r\n }\r\n private static normalizeHumanoidJointName(name: string) {\r\n return name\r\n .slice(name.lastIndexOf(':') + 1)\r\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\r\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\r\n .replace(/([a-zA-Z])(\\d+)/g, '$1 $2')\r\n .replace(/(\\d+)([a-zA-Z])/g, '$1 $2')\r\n .replace(/[_:\\/\\\\.-]+/g, ' ')\r\n .replace(/[^a-zA-Z0-9]+/g, ' ')\r\n .toLowerCase()\r\n .replace(/\\bforearm\\b/g, 'fore arm')\r\n .replace(/\\bupperarm\\b/g, 'upper arm')\r\n .replace(/\\blowerarm\\b/g, 'lower arm')\r\n .replace(/\\bupleg\\b/g, 'up leg')\r\n .replace(/\\bupperleg\\b/g, 'upper leg')\r\n .replace(/\\blowerleg\\b/g, 'lower leg')\r\n .replace(/\\btoebase\\b/g, 'toe base')\r\n .replace(/\\bupperchest\\b/g, 'upper chest')\r\n .replace(/\\btoes\\b/g, 'toe')\r\n .replace(/\\blittle\\b/g, 'pinky')\r\n .replace(/\\bcollar\\b/g, 'clavicle')\r\n .replace(/\\s+/g, ' ')\r\n .trim();\r\n }\r\n private static getHumanoidJointNodeDepth<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T,\r\n node: T\r\n ) {\r\n let depth = 0;\r\n let current: Nullable<T> = node;\r\n while (current && current !== root) {\r\n depth++;\r\n current = current.parent;\r\n }\r\n return depth;\r\n }\r\n private static collectHumanoidJointNodeInfos<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointNodeInfo<T>[] {\r\n const nodes: HumanoidJointNodeInfo<T>[] = [];\r\n this.iterateNode(root, (node) => {\r\n const normalizedName = this.normalizeHumanoidJointName(node.name || '');\r\n if (!normalizedName) {\r\n return false;\r\n }\r\n const tokens = normalizedName.split(' ').filter(Boolean);\r\n if (!tokens.length || tokens.some((token) => humanoidHelperJointTokens.has(token))) {\r\n return false;\r\n }\r\n nodes.push({\r\n node,\r\n depth: this.getHumanoidJointNodeDepth(root, node),\r\n tokens,\r\n tokenSet: new Set(tokens)\r\n });\r\n return false;\r\n });\r\n return nodes;\r\n }\r\n private static matchesHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern\r\n ) {\r\n if (pattern.all?.some((token) => !info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.any?.length && !pattern.any.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n if (pattern.none?.some((token) => info.tokenSet.has(token))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n private static scoreHumanoidJointPattern<T extends { name: string; children: T[] }>(\r\n info: HumanoidJointNodeInfo<T>,\r\n pattern: HumanoidJointPattern,\r\n priority: number\r\n ) {\r\n const matchedTokens = new Set(pattern.all ?? []);\r\n for (const token of pattern.any ?? []) {\r\n if (info.tokenSet.has(token)) {\r\n matchedTokens.add(token);\r\n }\r\n }\r\n let extraTokenCount = 0;\r\n for (const token of info.tokens) {\r\n if (!matchedTokens.has(token)) {\r\n extraTokenCount++;\r\n }\r\n }\r\n return priority * 100000 + matchedTokens.size * 100 - extraTokenCount * 5 - info.depth;\r\n }\r\n private static collectHumanoidJointCandidates<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ): HumanoidJointMatchCandidate<T>[] {\r\n const candidates = new Map<T, number>();\r\n for (let index = 0; index < patterns.length; index++) {\r\n const pattern = patterns[index];\r\n const priority = patterns.length - index;\r\n for (const info of nodes) {\r\n if (used.has(info.node) || !this.matchesHumanoidJointPattern(info, pattern)) {\r\n continue;\r\n }\r\n const score = this.scoreHumanoidJointPattern(info, pattern, priority);\r\n const current = candidates.get(info.node);\r\n if (current === undefined || score > current) {\r\n candidates.set(info.node, score);\r\n }\r\n }\r\n }\r\n return Array.from(candidates, ([node, score]) => ({ node, score })).sort((a, b) => b.score - a.score);\r\n }\r\n private static findBestHumanoidJoint<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n patterns: HumanoidJointPattern[],\r\n used: Set<T>\r\n ) {\r\n return this.collectHumanoidJointCandidates(nodes, patterns, used)[0]?.node ?? null;\r\n }\r\n private static matchHumanoidJointProfile<T extends string, U extends { name: string; children: U[] }>(\r\n nodes: HumanoidJointNodeInfo<U>[],\r\n profile: HumanoidJointProfile<T>,\r\n used: Set<U>,\r\n optional?: Set<T>\r\n ): Partial<Record<T, U>> | null {\r\n const result = {} as Partial<Record<T, U>>;\r\n const reserved = new Set<U>();\r\n for (const joint of Object.keys(profile) as T[]) {\r\n const node = this.findBestHumanoidJoint(nodes, profile[joint], new Set<U>([...used, ...reserved]));\r\n if (!node) {\r\n if (optional?.has(joint)) {\r\n continue;\r\n }\r\n return null;\r\n }\r\n result[joint] = node;\r\n reserved.add(node);\r\n }\r\n for (const node of reserved) {\r\n used.add(node);\r\n }\r\n return result;\r\n }\r\n private static validateHumanoidBodyPartial<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ) {\r\n const validateAncestor = (ancestor: HumanoidBodyRig, descendant: HumanoidBodyRig) =>\r\n !body[ancestor] || !body[descendant] || this.isSameOrAncestor(body[ancestor]!, body[descendant]!);\r\n return (\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Spine) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.LeftUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Hips, HumanoidBodyRig.RightUpperLeg) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Chest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Spine, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Chest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Neck) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.LeftShoulder) &&\r\n validateAncestor(HumanoidBodyRig.UpperChest, HumanoidBodyRig.RightShoulder) &&\r\n validateAncestor(HumanoidBodyRig.Neck, HumanoidBodyRig.Head) &&\r\n validateAncestor(HumanoidBodyRig.LeftShoulder, HumanoidBodyRig.LeftUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperArm, HumanoidBodyRig.LeftLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerArm, HumanoidBodyRig.LeftHand) &&\r\n validateAncestor(HumanoidBodyRig.RightShoulder, HumanoidBodyRig.RightUpperArm) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperArm, HumanoidBodyRig.RightLowerArm) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerArm, HumanoidBodyRig.RightHand) &&\r\n validateAncestor(HumanoidBodyRig.LeftUpperLeg, HumanoidBodyRig.LeftLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.LeftLowerLeg, HumanoidBodyRig.LeftFoot) &&\r\n validateAncestor(HumanoidBodyRig.LeftFoot, HumanoidBodyRig.LeftToes) &&\r\n validateAncestor(HumanoidBodyRig.RightUpperLeg, HumanoidBodyRig.RightLowerLeg) &&\r\n validateAncestor(HumanoidBodyRig.RightLowerLeg, HumanoidBodyRig.RightFoot) &&\r\n validateAncestor(HumanoidBodyRig.RightFoot, HumanoidBodyRig.RightToes)\r\n );\r\n }\r\n private static matchHumanoidBodyProfile<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n profile: HumanoidJointProfile<HumanoidBodyRig>,\r\n used: Set<T>,\r\n optional?: Set<HumanoidBodyRig>\r\n ): Partial<Record<HumanoidBodyRig, T>> | null {\r\n const joints = Object.keys(profile) as HumanoidBodyRig[];\r\n const candidates = new Map<HumanoidBodyRig, HumanoidJointMatchCandidate<T>[]>();\r\n for (const joint of joints) {\r\n candidates.set(joint, this.collectHumanoidJointCandidates(nodes, profile[joint], used));\r\n }\r\n const current = {} as Partial<Record<HumanoidBodyRig, T>>;\r\n const reserved = new Set<T>();\r\n let bestScore = Number.NEGATIVE_INFINITY;\r\n let bestResult: Partial<Record<HumanoidBodyRig, T>> | null = null;\r\n const search = (index: number, score: number) => {\r\n if (index >= joints.length) {\r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestResult = { ...current };\r\n }\r\n return;\r\n }\r\n const joint = joints[index];\r\n let matched = false;\r\n for (const candidate of candidates.get(joint) ?? []) {\r\n if (reserved.has(candidate.node)) {\r\n continue;\r\n }\r\n current[joint] = candidate.node;\r\n reserved.add(candidate.node);\r\n if (this.validateHumanoidBodyPartial(current)) {\r\n matched = true;\r\n search(index + 1, score + candidate.score);\r\n }\r\n reserved.delete(candidate.node);\r\n delete current[joint];\r\n }\r\n if (optional?.has(joint)) {\r\n search(index + 1, score);\r\n } else if (!matched) {\r\n return;\r\n }\r\n };\r\n search(0, 0);\r\n if (!bestResult) {\r\n return null;\r\n }\r\n for (const node of Object.values(bestResult) as T[]) {\r\n used.add(node);\r\n }\r\n return bestResult;\r\n }\r\n private static getHumanoidIntermediateChain<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n ancestor: T,\r\n descendant: T\r\n ) {\r\n if (!this.isSameOrAncestor(ancestor, descendant)) {\r\n return null;\r\n }\r\n const chain: T[] = [];\r\n let current = descendant.parent;\r\n while (current && current !== ancestor) {\r\n chain.unshift(current);\r\n current = current.parent;\r\n }\r\n return chain;\r\n }\r\n private static completeHumanoidBody<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n body: Partial<Record<HumanoidBodyRig, T>>\r\n ): Record<HumanoidBodyRig, T> | null {\r\n const requiredJoints = [\r\n HumanoidBodyRig.Hips,\r\n HumanoidBodyRig.Spine,\r\n HumanoidBodyRig.Neck,\r\n HumanoidBodyRig.Head,\r\n HumanoidBodyRig.LeftShoulder,\r\n HumanoidBodyRig.LeftUpperArm,\r\n HumanoidBodyRig.LeftLowerArm,\r\n HumanoidBodyRig.LeftHand,\r\n HumanoidBodyRig.RightShoulder,\r\n HumanoidBodyRig.RightUpperArm,\r\n HumanoidBodyRig.RightLowerArm,\r\n HumanoidBodyRig.RightHand,\r\n HumanoidBodyRig.LeftUpperLeg,\r\n HumanoidBodyRig.LeftLowerLeg,\r\n HumanoidBodyRig.LeftFoot,\r\n HumanoidBodyRig.LeftToes,\r\n HumanoidBodyRig.RightUpperLeg,\r\n HumanoidBodyRig.RightLowerLeg,\r\n HumanoidBodyRig.RightFoot,\r\n HumanoidBodyRig.RightToes\r\n ];\r\n for (const joint of requiredJoints) {\r\n if (!body[joint]) {\r\n return null;\r\n }\r\n }\r\n const spine = body[HumanoidBodyRig.Spine]!;\r\n const neck = body[HumanoidBodyRig.Neck]!;\r\n let chest = body[HumanoidBodyRig.Chest];\r\n let upperChest = body[HumanoidBodyRig.UpperChest];\r\n if (!chest || !upperChest) {\r\n const spineChain = this.getHumanoidIntermediateChain(spine, neck);\r\n if (!spineChain || spineChain.length === 0) {\r\n chest ||= spine;\r\n upperChest ||= chest;\r\n } else if (spineChain.length === 1) {\r\n chest ||= spineChain[0];\r\n upperChest ||= chest;\r\n } else {\r\n chest ||= spineChain[0];\r\n upperChest ||= spineChain[spineChain.length - 1];\r\n }\r\n }\r\n if (!chest || !upperChest) {\r\n return null;\r\n }\r\n return {\r\n [HumanoidBodyRig.Hips]: body[HumanoidBodyRig.Hips]!,\r\n [HumanoidBodyRig.Spine]: spine,\r\n [HumanoidBodyRig.Chest]: chest,\r\n [HumanoidBodyRig.UpperChest]: upperChest,\r\n [HumanoidBodyRig.Neck]: neck,\r\n [HumanoidBodyRig.Head]: body[HumanoidBodyRig.Head]!,\r\n [HumanoidBodyRig.LeftShoulder]: body[HumanoidBodyRig.LeftShoulder]!,\r\n [HumanoidBodyRig.LeftUpperArm]: body[HumanoidBodyRig.LeftUpperArm]!,\r\n [HumanoidBodyRig.LeftLowerArm]: body[HumanoidBodyRig.LeftLowerArm]!,\r\n [HumanoidBodyRig.LeftHand]: body[HumanoidBodyRig.LeftHand]!,\r\n [HumanoidBodyRig.RightShoulder]: body[HumanoidBodyRig.RightShoulder]!,\r\n [HumanoidBodyRig.RightUpperArm]: body[HumanoidBodyRig.RightUpperArm]!,\r\n [HumanoidBodyRig.RightLowerArm]: body[HumanoidBodyRig.RightLowerArm]!,\r\n [HumanoidBodyRig.RightHand]: body[HumanoidBodyRig.RightHand]!,\r\n [HumanoidBodyRig.LeftUpperLeg]: body[HumanoidBodyRig.LeftUpperLeg]!,\r\n [HumanoidBodyRig.LeftLowerLeg]: body[HumanoidBodyRig.LeftLowerLeg]!,\r\n [HumanoidBodyRig.LeftFoot]: body[HumanoidBodyRig.LeftFoot]!,\r\n [HumanoidBodyRig.LeftToes]: body[HumanoidBodyRig.LeftToes]!,\r\n [HumanoidBodyRig.RightUpperLeg]: body[HumanoidBodyRig.RightUpperLeg]!,\r\n [HumanoidBodyRig.RightLowerLeg]: body[HumanoidBodyRig.RightLowerLeg]!,\r\n [HumanoidBodyRig.RightFoot]: body[HumanoidBodyRig.RightFoot]!,\r\n [HumanoidBodyRig.RightToes]: body[HumanoidBodyRig.RightToes]!\r\n };\r\n }\r\n private static completeHumanoidHand<T extends { name: string; children: T[] }>(\r\n hand: Partial<Record<HumanoidHandRig, T>>\r\n ): Record<HumanoidHandRig, T> | null {\r\n for (const joint of Object.values(HumanoidHandRig)) {\r\n if (!hand[joint]) {\r\n return null;\r\n }\r\n }\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: hand[HumanoidHandRig.ThumbProximal]!,\r\n [HumanoidHandRig.ThumbIntermediate]: hand[HumanoidHandRig.ThumbIntermediate]!,\r\n [HumanoidHandRig.ThumbDistal]: hand[HumanoidHandRig.ThumbDistal]!,\r\n [HumanoidHandRig.IndexProximal]: hand[HumanoidHandRig.IndexProximal]!,\r\n [HumanoidHandRig.IndexIntermediate]: hand[HumanoidHandRig.IndexIntermediate]!,\r\n [HumanoidHandRig.IndexDistal]: hand[HumanoidHandRig.IndexDistal]!,\r\n [HumanoidHandRig.MiddleProximal]: hand[HumanoidHandRig.MiddleProximal]!,\r\n [HumanoidHandRig.MiddleIntermediate]: hand[HumanoidHandRig.MiddleIntermediate]!,\r\n [HumanoidHandRig.MiddleDistal]: hand[HumanoidHandRig.MiddleDistal]!,\r\n [HumanoidHandRig.RingProximal]: hand[HumanoidHandRig.RingProximal]!,\r\n [HumanoidHandRig.RingIntermediate]: hand[HumanoidHandRig.RingIntermediate]!,\r\n [HumanoidHandRig.RingDistal]: hand[HumanoidHandRig.RingDistal]!,\r\n [HumanoidHandRig.PinkyProximal]: hand[HumanoidHandRig.PinkyProximal]!,\r\n [HumanoidHandRig.PinkyIntermediate]: hand[HumanoidHandRig.PinkyIntermediate]!,\r\n [HumanoidHandRig.PinkyDistal]: hand[HumanoidHandRig.PinkyDistal]!\r\n };\r\n }\r\n private static tryExtractOptionalHumanoidHand<T extends { name: string; children: T[] }>(\r\n nodes: HumanoidJointNodeInfo<T>[],\r\n side: 'left' | 'right',\r\n used: Set<T>\r\n ): Record<HumanoidHandRig, T> | undefined {\r\n const handCandidates = this.matchHumanoidJointProfile(\r\n nodes,\r\n this.createCommonHumanoidHandProfile(side),\r\n used\r\n );\r\n if (!handCandidates) {\r\n return undefined;\r\n }\r\n return this.completeHumanoidHand(handCandidates) ?? undefined;\r\n }\r\n private static isSameOrAncestor<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: T\r\n ) {\r\n return parent === child || this.isParentOf(parent, child);\r\n }\r\n private static validateHumanoidHandHierarchy<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(hand: T, joints: Record<HumanoidHandRig, T>) {\r\n const chains: [HumanoidHandRig, HumanoidHandRig, HumanoidHandRig][] = [\r\n [HumanoidHandRig.ThumbProximal, HumanoidHandRig.ThumbIntermediate, HumanoidHandRig.ThumbDistal],\r\n [HumanoidHandRig.IndexProximal, HumanoidHandRig.IndexIntermediate, HumanoidHandRig.IndexDistal],\r\n [HumanoidHandRig.MiddleProximal, HumanoidHandRig.MiddleIntermediate, HumanoidHandRig.MiddleDistal],\r\n [HumanoidHandRig.RingProximal, HumanoidHandRig.RingIntermediate, HumanoidHandRig.RingDistal],\r\n [HumanoidHandRig.PinkyProximal, HumanoidHandRig.PinkyIntermediate, HumanoidHandRig.PinkyDistal]\r\n ];\r\n return chains.every(\r\n ([proximal, intermediate, distal]) =>\r\n this.isSameOrAncestor(hand, joints[proximal]) &&\r\n this.isSameOrAncestor(joints[proximal], joints[intermediate]) &&\r\n this.isSameOrAncestor(joints[intermediate], joints[distal])\r\n );\r\n }\r\n private static validateHumanoidJointExtraction<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(result: HumanoidJointMapping<T>) {\r\n const body = result.body;\r\n return (\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.Spine]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Spine], body[HumanoidBodyRig.Chest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Chest], body[HumanoidBodyRig.UpperChest]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.Neck]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Neck], body[HumanoidBodyRig.Head]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.LeftShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftShoulder], body[HumanoidBodyRig.LeftUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperArm], body[HumanoidBodyRig.LeftLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerArm], body[HumanoidBodyRig.LeftHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.UpperChest], body[HumanoidBodyRig.RightShoulder]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightShoulder], body[HumanoidBodyRig.RightUpperArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperArm], body[HumanoidBodyRig.RightLowerArm]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerArm], body[HumanoidBodyRig.RightHand]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.LeftUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftUpperLeg], body[HumanoidBodyRig.LeftLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftLowerLeg], body[HumanoidBodyRig.LeftFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.LeftFoot], body[HumanoidBodyRig.LeftToes]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.Hips], body[HumanoidBodyRig.RightUpperLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightUpperLeg], body[HumanoidBodyRig.RightLowerLeg]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightLowerLeg], body[HumanoidBodyRig.RightFoot]) &&\r\n this.isSameOrAncestor(body[HumanoidBodyRig.RightFoot], body[HumanoidBodyRig.RightToes]) &&\r\n (!result.leftHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.LeftHand], result.leftHand)) &&\r\n (!result.rightHand ||\r\n this.validateHumanoidHandHierarchy(body[HumanoidBodyRig.RightHand], result.rightHand))\r\n );\r\n }\r\n private static createCommonHumanoidHandProfile(\r\n side: 'left' | 'right'\r\n ): HumanoidJointProfile<HumanoidHandRig> {\r\n return {\r\n [HumanoidHandRig.ThumbProximal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'proximal'] },\r\n { all: ['thumb', '1'] },\r\n { all: ['finger', '0'] }\r\n ]),\r\n [HumanoidHandRig.ThumbIntermediate]: sideJointPatterns(side, [\r\n { all: ['thumb', 'intermediate'] },\r\n { all: ['thumb', '2'] },\r\n { all: ['finger', '01'] }\r\n ]),\r\n [HumanoidHandRig.ThumbDistal]: sideJointPatterns(side, [\r\n { all: ['thumb', 'distal'] },\r\n { all: ['thumb', '3'] },\r\n { all: ['finger', '02'] }\r\n ]),\r\n [HumanoidHandRig.IndexProximal]: sideJointPatterns(side, [\r\n { all: ['index', 'proximal'] },\r\n { all: ['index', '1'] },\r\n { all: ['finger', '1'] }\r\n ]),\r\n [HumanoidHandRig.IndexIntermediate]: sideJointPatterns(side, [\r\n { all: ['index', 'intermediate'] },\r\n { all: ['index', '2'] },\r\n { all: ['finger', '11'] }\r\n ]),\r\n [HumanoidHandRig.IndexDistal]: sideJointPatterns(side, [\r\n { all: ['index', 'distal'] },\r\n { all: ['index', '3'] },\r\n { all: ['finger', '12'] }\r\n ]),\r\n [HumanoidHandRig.MiddleProximal]: sideJointPatterns(side, [\r\n { all: ['middle', 'proximal'] },\r\n { all: ['middle', '1'] },\r\n { all: ['finger', '2'] }\r\n ]),\r\n [HumanoidHandRig.MiddleIntermediate]: sideJointPatterns(side, [\r\n { all: ['middle', 'intermediate'] },\r\n { all: ['middle', '2'] },\r\n { all: ['finger', '21'] }\r\n ]),\r\n [HumanoidHandRig.MiddleDistal]: sideJointPatterns(side, [\r\n { all: ['middle', 'distal'] },\r\n { all: ['middle', '3'] },\r\n { all: ['finger', '22'] }\r\n ]),\r\n [HumanoidHandRig.RingProximal]: sideJointPatterns(side, [\r\n { all: ['ring', 'proximal'] },\r\n { all: ['ring', '1'] },\r\n { all: ['finger', '3'] }\r\n ]),\r\n [HumanoidHandRig.RingIntermediate]: sideJointPatterns(side, [\r\n { all: ['ring', 'intermediate'] },\r\n { all: ['ring', '2'] },\r\n { all: ['finger', '31'] }\r\n ]),\r\n [HumanoidHandRig.RingDistal]: sideJointPatterns(side, [\r\n { all: ['ring', 'distal'] },\r\n { all: ['ring', '3'] },\r\n { all: ['finger', '32'] }\r\n ]),\r\n [HumanoidHandRig.PinkyProximal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'proximal'] },\r\n { all: ['pinky', '1'] },\r\n { all: ['finger', '4'] }\r\n ]),\r\n [HumanoidHandRig.PinkyIntermediate]: sideJointPatterns(side, [\r\n { all: ['pinky', 'intermediate'] },\r\n { all: ['pinky', '2'] },\r\n { all: ['finger', '41'] }\r\n ]),\r\n [HumanoidHandRig.PinkyDistal]: sideJointPatterns(side, [\r\n { all: ['pinky', 'distal'] },\r\n { all: ['pinky', '3'] },\r\n { all: ['finger', '42'] }\r\n ])\r\n };\r\n }\r\n private static createStandardHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips']), jointPattern(['pelvis'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3', 'chest', 'upper'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['chest'], ['upper']), jointPattern(['spine', '1'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['upper', 'chest']),\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['lower', 'arm'], none: ['twist'] },\r\n { all: ['fore', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createMixamoHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['shoulder'] },\r\n { all: ['clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['arm'], none: ['upper', 'fore', 'lower', 'hand', 'twist', 'shoulder'] },\r\n { all: ['upper', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['up', 'leg'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['thigh'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['calf'] },\r\n { all: ['shin'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', 'base'] },\r\n { all: ['toe'], none: ['end'] }\r\n ])\r\n };\r\n }\r\n private static createBipedHumanoidBodyProfile(): HumanoidJointProfile<HumanoidBodyRig> {\r\n return {\r\n [HumanoidBodyRig.Hips]: [jointPattern(['pelvis']), jointPattern(['hips'])],\r\n [HumanoidBodyRig.Spine]: [jointPattern(['spine'], ['1', '2', '3'])],\r\n [HumanoidBodyRig.Chest]: [jointPattern(['spine', '1']), jointPattern(['chest'], ['upper'])],\r\n [HumanoidBodyRig.UpperChest]: [\r\n jointPattern(['spine', '2']),\r\n jointPattern(['spine', '3']),\r\n jointPattern(['upper', 'chest'])\r\n ],\r\n [HumanoidBodyRig.Neck]: [jointPattern(['neck'], ['1', '2'])],\r\n [HumanoidBodyRig.Head]: [jointPattern(['head'], ['top', 'end', 'nub'])],\r\n [HumanoidBodyRig.LeftShoulder]: sideJointPatterns('left', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperArm]: sideJointPatterns('left', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerArm]: sideJointPatterns('left', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.LeftHand]: sideJointPatterns('left', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.RightShoulder]: sideJointPatterns('right', [\r\n { all: ['clavicle'] },\r\n { all: ['shoulder'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperArm]: sideJointPatterns('right', [\r\n { all: ['upper', 'arm'], none: ['twist'] },\r\n { all: ['arm'], none: ['fore', 'lower', 'hand', 'twist', 'shoulder', 'clavicle'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerArm]: sideJointPatterns('right', [\r\n { all: ['fore', 'arm'], none: ['twist'] },\r\n { all: ['lower', 'arm'], none: ['twist'] }\r\n ]),\r\n [HumanoidBodyRig.RightHand]: sideJointPatterns('right', [\r\n { all: ['hand'], none: ['finger', 'thumb', 'index', 'middle', 'ring', 'pinky'] }\r\n ]),\r\n [HumanoidBodyRig.LeftUpperLeg]: sideJointPatterns('left', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.LeftLowerLeg]: sideJointPatterns('left', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.LeftFoot]: sideJointPatterns('left', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.LeftToes]: sideJointPatterns('left', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ]),\r\n [HumanoidBodyRig.RightUpperLeg]: sideJointPatterns('right', [\r\n { all: ['thigh'] },\r\n { all: ['upper', 'leg'] },\r\n { all: ['up', 'leg'] }\r\n ]),\r\n [HumanoidBodyRig.RightLowerLeg]: sideJointPatterns('right', [\r\n { all: ['calf'] },\r\n { all: ['lower', 'leg'] },\r\n { all: ['leg'], none: ['upper', 'up', 'thigh', 'foot', 'toe'] }\r\n ]),\r\n [HumanoidBodyRig.RightFoot]: sideJointPatterns('right', [{ all: ['foot'], none: ['toe'] }]),\r\n [HumanoidBodyRig.RightToes]: sideJointPatterns('right', [\r\n { all: ['toe', '0'] },\r\n { all: ['toe'], none: ['end'] },\r\n { all: ['ball'] }\r\n ])\r\n };\r\n }\r\n private static isParentOf<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n parent: T,\r\n child: Nullable<T>\r\n ) {\r\n while (child && child !== parent) {\r\n child = child.parent!;\r\n }\r\n return child === parent;\r\n }\r\n\r\n private static iterateNode<T extends { name: string; children: T[] }>(\r\n root: T,\r\n callback: (node: T) => boolean\r\n ) {\r\n if (callback(root)) {\r\n return true;\r\n }\r\n for (const child of root.children) {\r\n if (this.iterateNode(child, callback)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n private static tryExtractHumanoidJointsByBodyProfile<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T, bodyProfile: HumanoidJointProfile<HumanoidBodyRig>): HumanoidJointMapping<T> | null {\r\n const nodes = this.collectHumanoidJointNodeInfos(root);\r\n const used = new Set<T>();\r\n const bodyCandidates = this.matchHumanoidBodyProfile(\r\n nodes,\r\n bodyProfile,\r\n used,\r\n new Set<HumanoidBodyRig>([HumanoidBodyRig.Chest, HumanoidBodyRig.UpperChest])\r\n );\r\n if (!bodyCandidates) {\r\n return null;\r\n }\r\n const body = this.completeHumanoidBody(bodyCandidates);\r\n if (!body) {\r\n return null;\r\n }\r\n const leftHand = this.tryExtractOptionalHumanoidHand(nodes, 'left', used);\r\n const rightHand = this.tryExtractOptionalHumanoidHand(nodes, 'right', used);\r\n const result: HumanoidJointMapping<T> = {\r\n body,\r\n leftHand,\r\n rightHand\r\n };\r\n return this.validateHumanoidJointExtraction(result) ? result : null;\r\n }\r\n /**\r\n * Attempt to extract humanoid joint mappings from the skeleton's joints based on their names.\r\n *\r\n * This method looks for joints with names matching the standardized `HumanoidBodyRig` and `HumanoidHandRig` enums.\r\n * If a complete mapping is found, it returns an object containing the mapped joints for the body and hands.\r\n * If any required joint is missing, it returns `null`.\r\n *\r\n * This method tries to find the best match for humanoid rigs, designed to work with Mixamo, VRoid, Unity Humanoid,\r\n * Biped, and similar skeletons. It is not guaranteed to work with all models, and may require manual adjustments or\r\n * custom modifiers for non-standard rigs.\r\n *\r\n * @param root - The root scene node to search for humanoid joints.\r\n * @returns An object containing the mapped body and hand joints if a complete humanoid rig is detected, otherwise `null`.\r\n */\r\n static tryExtractHumanoidJoints<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return (\r\n this.tryExtractHumanoidJointsMixamo(root) ??\r\n this.tryExtractHumanoidJointsVRM(root) ??\r\n this.tryExtractHumanoidJointsUnityHumanoid(root) ??\r\n this.tryExtractHumanoidJointsBiped(root)\r\n );\r\n }\r\n static tryExtractHumanoidJointsMixamo<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createMixamoHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsVRM<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsUnityHumanoid<\r\n T extends { name: string; parent: Nullable<T>; children: T[] }\r\n >(root: T): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createStandardHumanoidBodyProfile());\r\n }\r\n static tryExtractHumanoidJointsBiped<T extends { name: string; parent: Nullable<T>; children: T[] }>(\r\n root: T\r\n ): HumanoidJointMapping<T> | null {\r\n return this.tryExtractHumanoidJointsByBodyProfile(root, this.createBipedHumanoidBodyProfile());\r\n }\r\n}\r\n\r\n/**\r\n * Legacy compatibility name for a skin binding.\r\n *\r\n * New code should use {@link SkeletonRig} for the shared animated rig and\r\n * {@link SkinBinding} for per-skin inverse bind matrices.\r\n *\r\n * @public\r\n */\r\nexport class Skeleton extends SkinBinding {\r\n constructor(joints: SceneNode[], inverseBindMatrices: Matrix4x4[], bindPose: SkeletonBindPose[]) {\r\n super(new SkeletonRig(joints, bindPose), inverseBindMatrices, joints);\r\n }\r\n\r\n static tryExtractHumanoidJoints = SkinBinding.tryExtractHumanoidJoints;\r\n static tryExtractHumanoidJointsMixamo = SkinBinding.tryExtractHumanoidJointsMixamo;\r\n static tryExtractHumanoidJointsVRM = SkinBinding.tryExtractHumanoidJointsVRM;\r\n static tryExtractHumanoidJointsUnityHumanoid = SkinBinding.tryExtractHumanoidJointsUnityHumanoid;\r\n static tryExtractHumanoidJointsBiped = SkinBinding.tryExtractHumanoidJointsBiped;\r\n static findSkeletonById(id: string) {\r\n return SkinBinding.findSkinBindingById(id);\r\n }\r\n}\r\n"],"names":["HumanoidBodyRig","HumanoidHandRig","tmpV0","Vector3","tmpV1","humanoidHelperJointTokens","Set","SkeletonRig","Disposable","_registry","Map","_id","_joints","_bindPoseByJoint","_bindPose","_retargetPoseByJoint","_retargetPose","_rootJoint","_rootBindPose","_playing","_modifiers","_humanoidJointMapping","_humanoidRootRotation","joints","bindPose","options","randomUUID","i","length","set","retargetPose","Error","map","joint","index","skeletonRoot","findRootJoint","rootJoint","rootBindPose","getNodeBindPose","computeBindPose","humanoidJointMapping","undefined","Skeleton","tryExtractHumanoidJoints","Quaternion","identity","hips","body","p","includes","parent","multiply","rotation","DWeakRef","getRigKey","persistentId","sort","join","findRigById","id","m","get","delete","val","hasRetargetPose","getBindPoseForJoint","getRetargetPoseForJoint","humanoidRootRotation","modifiers","playing","b","getJointIndex","indexOf","getJointIndexByName","jointName","findIndex","name","bindpose","position","scale","has","apply","deltaTime","modifier","reset","onDispose","dispose","root","isParentOf","node","clone","zero","one","jointPattern","all","none","any","sideJointPatterns","side","patterns","sideTokens","flatMap","sideToken","pattern","SkinBinding","rig","inverseBindMatrices","_rig","_inverseBindMatrices","_jointTexture","DRef","_lastUpdateTime","updateJointMatrices","findSkinBindingById","findSkeletonById","jointTexture","_createJointTexture","_jointOffsets","Matrix4x4","worldMatrix","_jointMatrices","tex","_syncJointMatrixArray","update","_jointMatrixArray","width","height","applyModifiers","computeBoundingBox","info","invWorldMatrix","boundingBox","beginExtend","influenceCount","Math","max","boundingVertices","setXYZ","base","j","weight","Number","boundingVertexJointWeights","matrix","boundingVertexBlendIndices","transformPointAffine","scaleBy","addBy","extend","textureWidth","nextPowerOf2","ceil","sqrt","device","getDevice","createTexture2D","mipmapping","samplerOptions","magFilter","minFilter","Float32Array","subarray","Array","from","getBoundingInfo","data","indices","minx","MAX_VALUE","maxx","miny","maxy","minz","maxz","v","positions","vert","numVertices","floor","weights","blendIndices","x","y","z","BoundingBox","skinPositionsToLocal","out","result","matrixOffset","effectiveInfluenceCount","vertexIndex","skinnedX","skinnedY","skinnedZ","weightSum","jointIndex","normalizeHumanoidJointName","slice","lastIndexOf","replace","toLowerCase","trim","getHumanoidJointNodeDepth","depth","current","collectHumanoidJointNodeInfos","nodes","iterateNode","normalizedName","tokens","split","filter","Boolean","some","token","push","tokenSet","matchesHumanoidJointPattern","scoreHumanoidJointPattern","priority","matchedTokens","add","extraTokenCount","size","collectHumanoidJointCandidates","used","candidates","score","a","findBestHumanoidJoint","matchHumanoidJointProfile","profile","optional","reserved","Object","keys","validateHumanoidBodyPartial","validateAncestor","ancestor","descendant","isSameOrAncestor","matchHumanoidBodyProfile","bestScore","NEGATIVE_INFINITY","bestResult","search","matched","candidate","values","getHumanoidIntermediateChain","chain","unshift","completeHumanoidBody","requiredJoints","spine","neck","chest","upperChest","spineChain","completeHumanoidHand","hand","tryExtractOptionalHumanoidHand","handCandidates","createCommonHumanoidHandProfile","child","validateHumanoidHandHierarchy","chains","every","proximal","intermediate","distal","validateHumanoidJointExtraction","leftHand","rightHand","createStandardHumanoidBodyProfile","createMixamoHumanoidBodyProfile","createBipedHumanoidBodyProfile","callback","children","tryExtractHumanoidJointsByBodyProfile","bodyProfile","bodyCandidates","tryExtractHumanoidJointsMixamo","tryExtractHumanoidJointsVRM","tryExtractHumanoidJointsUnityHumanoid","tryExtractHumanoidJointsBiped"],"mappings":"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"}
|