@zephyr3d/editor 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/assets/{index-DzQzWsCG.js → index-DlnbO59X.js} +2 -2
  2. package/dist/assistant/zephyr-types-index.json +9 -10
  3. package/dist/index.html +1 -1
  4. package/dist/modules/zephyr3d_backend-webgpu.js +13 -12
  5. package/dist/modules/zephyr3d_backend-webgpu.js.map +1 -1
  6. package/dist/modules/zephyr3d_base.js +152 -152
  7. package/dist/modules/zephyr3d_base.js.map +1 -1
  8. package/dist/modules/zephyr3d_device.js +15 -15
  9. package/dist/modules/zephyr3d_device.js.map +1 -1
  10. package/dist/modules/zephyr3d_loaders.js +6 -6
  11. package/dist/modules/zephyr3d_loaders.js.map +1 -1
  12. package/dist/modules/zephyr3d_scene.js +1382 -1385
  13. package/dist/modules/zephyr3d_scene.js.map +1 -1
  14. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js +7 -6
  15. package/dist/vendor/zephyr3d/backend-webgpu/dist/capabilities_webgpu.js.map +1 -1
  16. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js +6 -6
  17. package/dist/vendor/zephyr3d/backend-webgpu/dist/renderpass_webgpu.js.map +1 -1
  18. package/dist/vendor/zephyr3d/base/dist/vfs/common.js +152 -152
  19. package/dist/vendor/zephyr3d/base/dist/vfs/common.js.map +1 -1
  20. package/dist/vendor/zephyr3d/device/dist/device.js +15 -15
  21. package/dist/vendor/zephyr3d/device/dist/device.js.map +1 -1
  22. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js +6 -6
  23. package/dist/vendor/zephyr3d/loaders/dist/gltf/gltf_importer.js.map +1 -1
  24. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js +191 -194
  25. package/dist/vendor/zephyr3d/scene/dist/animation/animationset.js.map +1 -1
  26. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js +19 -19
  27. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics_modifier.js.map +1 -1
  28. package/dist/vendor/zephyr3d/scene/dist/app/engine.js +131 -131
  29. package/dist/vendor/zephyr3d/scene/dist/app/engine.js.map +1 -1
  30. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js +119 -119
  31. package/dist/vendor/zephyr3d/scene/dist/app/scriptregistry.js.map +1 -1
  32. package/dist/vendor/zephyr3d/scene/dist/asset/model.js +62 -62
  33. package/dist/vendor/zephyr3d/scene/dist/asset/model.js.map +1 -1
  34. package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js +13 -13
  35. package/dist/vendor/zephyr3d/scene/dist/avatar/wardrobe.js.map +1 -1
  36. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js +201 -201
  37. package/dist/vendor/zephyr3d/scene/dist/camera/camera.js.map +1 -1
  38. package/dist/vendor/zephyr3d/scene/dist/index.d.ts +1 -1
  39. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
  40. package/dist/vendor/zephyr3d/scene/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  41. package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js +4 -4
  42. package/dist/vendor/zephyr3d/scene/dist/material/mtoon.js.map +1 -1
  43. package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js +11 -11
  44. package/dist/vendor/zephyr3d/scene/dist/material/pbrblueprint.js.map +1 -1
  45. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js +284 -284
  46. package/dist/vendor/zephyr3d/scene/dist/material/shader/helper.js.map +1 -1
  47. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js +9 -9
  48. package/dist/vendor/zephyr3d/scene/dist/posteffect/ssr.js.map +1 -1
  49. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js +5 -5
  50. package/dist/vendor/zephyr3d/scene/dist/render/lightpass.js.map +1 -1
  51. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js +7 -7
  52. package/dist/vendor/zephyr3d/scene/dist/render/renderer.js.map +1 -1
  53. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js +1 -1
  54. package/dist/vendor/zephyr3d/scene/dist/shadow/esm.js.map +1 -1
  55. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js +45 -45
  56. package/dist/vendor/zephyr3d/scene/dist/shadow/shadow_region.js.map +1 -1
  57. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js +275 -275
  58. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/manager.js.map +1 -1
  59. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/camera.js.map +1 -1
  60. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/mesh.js.map +1 -1
  61. package/dist/vendor/zephyr3d/scene/dist/utility/serialization/scene/sprite.js.map +1 -1
  62. package/package.json +3 -3
  63. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js +0 -320
  64. package/dist/vendor/zephyr3d/scene/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"animationset.js","sources":["../../src/animation/animationset.ts"],"sourcesContent":["import { weightedAverage, Disposable, Interpolator, Vector3 } from '@zephyr3d/base';\r\nimport type { DRef, IDisposable, Nullable } from '@zephyr3d/base';\r\nimport { Quaternion } from '@zephyr3d/base';\r\nimport type { SceneNode } from '../scene';\r\nimport { AnimationClip } from './animation';\r\nimport type { AnimationTrack } from './animationtrack';\r\nimport { NodeRotationTrack } from './rotationtrack';\r\nimport { NodeEulerRotationTrack } from './eulerrotationtrack';\r\nimport { NodeTranslationTrack } from './translationtrack';\r\nimport { NodeScaleTrack } from './scaletrack';\r\nimport type { SkeletonBindPose, SkeletonRig, SkinBinding } from './skeleton';\r\nimport { HumanoidBodyRig } from './skeleton';\r\nimport type { SkeletalAnimationMaskOptions } from './animationmask';\r\nimport { createSkeletalMaskedAnimationClip } from './animationmask';\r\n\r\n/**\r\n * Options for playing an animation.\r\n *\r\n * Controls looping, playback speed (including reverse), and fade-in blending.\r\n * @public\r\n **/\r\nexport type PlayAnimationOptions = {\r\n /**\r\n * Number of loops to play.\r\n *\r\n * - 0: infinite looping (default).\r\n * - n \\> 0: play exactly n loops (each loop is one full duration of the clip).\r\n */\r\n repeat?: number;\r\n /**\r\n * Playback speed multiplier.\r\n *\r\n * - 1: normal speed (default).\r\n * - \\>1: faster; \\<1: slower.\r\n * - Negative values play the clip in reverse. The initial `currentTime` will be set to the end.\r\n */\r\n speedRatio?: number;\r\n /**\r\n * Fade-in duration in seconds.\r\n *\r\n * Interpolates the animation weight from 0 to the clip's configured weight over this time.\r\n * Use together with `stopAnimation(..., { fadeOut })` for smooth cross-fading.\r\n * Default is 0 (no fade-in).\r\n */\r\n fadeIn?: number;\r\n /**\r\n * Weight of the animation clip.\r\n *\r\n * Used during blending when multiple animations affect the same property.\r\n * Default is the clip's configured weight.\r\n */\r\n weight?: number;\r\n};\r\n\r\n/**\r\n * Options for stopping an animation.\r\n *\r\n * Allows a graceful fade-out instead of abrupt stop.\r\n * @public\r\n */\r\nexport type StopAnimationOptions = {\r\n /**\r\n * Fade-out duration in seconds.\r\n *\r\n * Interpolates the current animation weight down to 0 over this time.\r\n * Default is 0 (immediate stop).\r\n */\r\n fadeOut?: number;\r\n};\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionMode = 'scaled' | 'copy' | 'locked' | 'none';\r\n\r\n/** @public */\r\nexport type HumanoidRootMotionScaleMode = 'legLength' | 'none' | number;\r\n\r\n/** @public */\r\nexport type HumanoidRetargetAxisLocks = {\r\n x?: boolean;\r\n y?: boolean;\r\n z?: boolean;\r\n};\r\n\r\n/** @public */\r\nexport type CopyHumanoidAnimationOptions = {\r\n /**\r\n * Name for the new clip. Ignored when the legacy third `targetName` argument is a string.\r\n */\r\n targetName?: string;\r\n /**\r\n * How root translation should be handled.\r\n *\r\n * - `scaled`: retarget and scale root motion to the destination rig size.\r\n * - `copy`: retarget root motion without scale.\r\n * - `locked`: write a constant destination bind-pose root translation.\r\n * - `none`: do not create a root translation track.\r\n */\r\n rootMotion?: HumanoidRootMotionMode;\r\n /**\r\n * Scale used when `rootMotion` is `scaled`.\r\n */\r\n rootMotionScale?: HumanoidRootMotionScaleMode;\r\n /**\r\n * Axis locks applied after root motion retargeting. Locked axes stay at the destination bind pose.\r\n */\r\n lockRootMotionAxes?: HumanoidRetargetAxisLocks;\r\n /**\r\n * Whether to preserve non-root humanoid translation tracks. These are skipped by default because\r\n * retargeting humanoid joints should normally keep the destination skeleton lengths intact.\r\n */\r\n jointTranslations?: 'skip' | 'preserve';\r\n};\r\n\r\ntype JointRetargetRemap = {\r\n dstNode: SceneNode;\r\n dstJointIndex: number;\r\n srcNode: SceneNode;\r\n srcBindRotInv: Quaternion;\r\n dstBindRot: Quaternion;\r\n srcBindPos: Vector3;\r\n dstBindPos: Vector3;\r\n translationScale: number;\r\n translationRotation?: Quaternion;\r\n translationAxisLocks?: HumanoidRetargetAxisLocks;\r\n};\r\n\r\nfunction cloneInterpolator(src: Interpolator): Interpolator {\r\n return new Interpolator(\r\n src.mode,\r\n src.target,\r\n src.inputs instanceof Float32Array ? new Float32Array(src.inputs) : [...src.inputs],\r\n src.outputs instanceof Float32Array ? new Float32Array(src.outputs) : [...src.outputs]\r\n );\r\n}\r\n\r\nfunction createJointRetargetRemap(\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcJoint: SceneNode,\r\n dstJoint: SceneNode,\r\n translationRotation?: Quaternion,\r\n translationScale?: number,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks\r\n): JointRetargetRemap {\r\n const si = srcSkeleton.joints.indexOf(srcJoint);\r\n const di = dstSkeleton.joints.indexOf(dstJoint);\r\n const srcBindPose = srcSkeleton.bindPose[si];\r\n const dstBindPose = dstSkeleton.bindPose[di];\r\n const srcLen = srcBindPose.position.magnitude;\r\n const dstLen = dstBindPose.position.magnitude;\r\n return {\r\n dstNode: dstJoint,\r\n dstJointIndex: di,\r\n srcNode: srcJoint,\r\n srcBindRotInv: Quaternion.inverse(srcBindPose.rotation),\r\n dstBindRot: dstBindPose.rotation.clone(),\r\n srcBindPos: srcBindPose.position.clone(),\r\n dstBindPos: dstBindPose.position.clone(),\r\n translationScale: translationScale ?? (srcLen > 1e-6 ? dstLen / srcLen : 1),\r\n translationRotation,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction createTranslationRetargetRemap(\r\n srcNode: SceneNode,\r\n dstNode: SceneNode,\r\n srcBindPos: Vector3,\r\n dstBindPos: Vector3,\r\n dstJointIndex: number,\r\n translationScale: number,\r\n translationRotation?: Quaternion,\r\n translationAxisLocks?: HumanoidRetargetAxisLocks\r\n): JointRetargetRemap {\r\n return {\r\n dstNode,\r\n dstJointIndex,\r\n srcNode,\r\n srcBindRotInv: Quaternion.identity(),\r\n dstBindRot: Quaternion.identity(),\r\n srcBindPos: srcBindPos.clone(),\r\n dstBindPos: dstBindPos.clone(),\r\n translationScale,\r\n translationRotation,\r\n translationAxisLocks\r\n };\r\n}\r\n\r\nfunction getBindPosition(skeleton: SkeletonRig, joint: SceneNode): Vector3 | null {\r\n const index = skeleton.joints.indexOf(joint);\r\n return index >= 0 ? skeleton.bindPose[index].position : null;\r\n}\r\n\r\nfunction getRigBindPoseForNode(skeleton: SkeletonRig, node: SceneNode): SkeletonBindPose {\r\n return (\r\n skeleton.getBindPoseForJoint(node) ??\r\n (node === skeleton.rootJoint\r\n ? skeleton.rootBindPose\r\n : {\r\n position: node.position,\r\n rotation: node.rotation,\r\n scale: node.scale\r\n })\r\n );\r\n}\r\n\r\nfunction getBindDistanceToAncestor(skeleton: SkeletonRig, joint: SceneNode, ancestor: SceneNode): number {\r\n let distance = 0;\r\n let node: SceneNode | null = joint;\r\n while (node && node !== ancestor) {\r\n const bindPosition = getBindPosition(skeleton, node);\r\n if (!bindPosition) {\r\n return 0;\r\n }\r\n distance += bindPosition.magnitude;\r\n node = node.parent;\r\n }\r\n return node === ancestor ? distance : 0;\r\n}\r\n\r\nfunction getHumanoidLegLength(skeleton: SkeletonRig, side: 'left' | 'right'): number {\r\n const mapping = skeleton.humanoidJointMapping;\r\n if (!mapping) {\r\n return 0;\r\n }\r\n const body = mapping.body;\r\n const hips = body[HumanoidBodyRig.Hips];\r\n const foot = side === 'left' ? body[HumanoidBodyRig.LeftFoot] : body[HumanoidBodyRig.RightFoot];\r\n const toes = side === 'left' ? body[HumanoidBodyRig.LeftToes] : body[HumanoidBodyRig.RightToes];\r\n return Math.max(\r\n getBindDistanceToAncestor(skeleton, foot, hips),\r\n getBindDistanceToAncestor(skeleton, toes, hips)\r\n );\r\n}\r\n\r\nfunction getHumanoidRootMotionScale(srcSkeleton: SkeletonRig, dstSkeleton: SkeletonRig): number {\r\n const srcLeftLeg = getHumanoidLegLength(srcSkeleton, 'left');\r\n const srcRightLeg = getHumanoidLegLength(srcSkeleton, 'right');\r\n const dstLeftLeg = getHumanoidLegLength(dstSkeleton, 'left');\r\n const dstRightLeg = getHumanoidLegLength(dstSkeleton, 'right');\r\n const srcLegLength = Math.max(srcLeftLeg, srcRightLeg);\r\n const dstLegLength = Math.max(dstLeftLeg, dstRightLeg);\r\n return srcLegLength > 1e-6 && dstLegLength > 1e-6 ? dstLegLength / srcLegLength : 1;\r\n}\r\n\r\nfunction findTranslationTrack(tracks: AnimationTrack[] | undefined): NodeTranslationTrack | null {\r\n return (tracks?.find((track) => track instanceof NodeTranslationTrack) ??\r\n null) as NodeTranslationTrack | null;\r\n}\r\n\r\nfunction applyTranslationAxisLocks(\r\n value: Vector3,\r\n bindValue: Vector3,\r\n locks: HumanoidRetargetAxisLocks | undefined\r\n) {\r\n if (locks?.x) {\r\n value.x = bindValue.x;\r\n }\r\n if (locks?.y) {\r\n value.y = bindValue.y;\r\n }\r\n if (locks?.z) {\r\n value.z = bindValue.z;\r\n }\r\n}\r\n\r\nfunction applyTranslationTangentAxisLocks(value: Vector3, locks: HumanoidRetargetAxisLocks | undefined) {\r\n if (locks?.x) {\r\n value.x = 0;\r\n }\r\n if (locks?.y) {\r\n value.y = 0;\r\n }\r\n if (locks?.z) {\r\n value.z = 0;\r\n }\r\n}\r\n\r\nfunction retargetRotation(qSrcAnim: Quaternion, remap: JointRetargetRemap, out: Quaternion): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcAnim, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out.inplaceNormalize();\r\n}\r\n\r\nfunction retargetRotationTangent(\r\n qSrcTangent: Quaternion,\r\n remap: JointRetargetRemap,\r\n out: Quaternion\r\n): Quaternion {\r\n Quaternion.multiply(remap.srcBindRotInv, qSrcTangent, out);\r\n Quaternion.multiply(remap.dstBindRot, out, out);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationValue(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.subBy(remap.srcBindPos);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n out.addBy(remap.dstBindPos);\r\n applyTranslationAxisLocks(out, remap.dstBindPos, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetTranslationTangent(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\r\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\r\n out.scaleBy(remap.translationScale);\r\n if (remap.translationRotation) {\r\n remap.translationRotation.transform(out, out);\r\n }\r\n applyTranslationTangentAxisLocks(out, remap.translationAxisLocks);\r\n return out;\r\n}\r\n\r\nfunction retargetRotationTrack(src: NodeRotationTrack, remap: JointRetargetRemap): NodeRotationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 12 : 4;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 4 : 0;\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n q.setXYZW(\r\n srcOutputs[base + t],\r\n srcOutputs[base + t + 1],\r\n srcOutputs[base + t + 2],\r\n srcOutputs[base + t + 3]\r\n );\r\n retargetRotation(q, remap, q);\r\n if (isCubic) {\r\n // Cubic quaternion tangents live in the same component space, so apply the\r\n // same constant bind-pose transform without normalizing them.\r\n q.setXYZW(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2], srcOutputs[base + 3]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base);\r\n newOutputs.set(\r\n retargetRotation(new Quaternion(srcOutputs.subarray(base + 4, base + 8)), remap, q),\r\n base + 4\r\n );\r\n q.setXYZW(srcOutputs[base + 8], srcOutputs[base + 9], srcOutputs[base + 10], srcOutputs[base + 11]);\r\n newOutputs.set(retargetRotationTangent(q, remap, q), base + 8);\r\n } else {\r\n newOutputs.set(q, base);\r\n }\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'quat',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetEulerToRotationTrack(\r\n src: NodeEulerRotationTrack,\r\n remap: JointRetargetRemap\r\n): NodeRotationTrack {\r\n const srcInputs = src.interpolator.inputs as Float32Array;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const t = isCubic ? 3 : 0;\r\n const numFrames = srcInputs.length;\r\n const newOutputs = new Float32Array(numFrames * 4);\r\n const q = new Quaternion();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride + t;\r\n q.fromEulerAngle(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n retargetRotation(q, remap, q);\r\n newOutputs.set(q, f * 4);\r\n }\r\n return new NodeRotationTrack(\r\n new Interpolator(\r\n src.interpolator.mode === 'step' ? 'step' : 'linear',\r\n 'quat',\r\n new Float32Array(srcInputs),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction retargetTranslationTrack(\r\n src: NodeTranslationTrack,\r\n remap: JointRetargetRemap\r\n): NodeTranslationTrack {\r\n const isCubic = src.interpolator.mode === 'cubicspline';\r\n const frameStride = isCubic ? 9 : 3;\r\n const numFrames = (src.interpolator.inputs as Float32Array).length;\r\n const srcOutputs = src.interpolator.outputs as Float32Array;\r\n const newOutputs = new Float32Array(srcOutputs.length);\r\n const t = isCubic ? 3 : 0;\r\n const v = new Vector3();\r\n for (let f = 0; f < numFrames; f++) {\r\n const base = f * frameStride;\r\n v.setXYZ(srcOutputs[base + t], srcOutputs[base + t + 1], srcOutputs[base + t + 2]);\r\n retargetTranslationValue(v, remap, v);\r\n if (isCubic) {\r\n v.setXYZ(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base);\r\n v.setXYZ(srcOutputs[base + 3], srcOutputs[base + 4], srcOutputs[base + 5]);\r\n newOutputs.set(retargetTranslationValue(v, remap, v), base + 3);\r\n v.setXYZ(srcOutputs[base + 6], srcOutputs[base + 7], srcOutputs[base + 8]);\r\n newOutputs.set(retargetTranslationTangent(v, remap, v), base + 6);\r\n } else {\r\n newOutputs.set(v, base);\r\n }\r\n }\r\n return new NodeTranslationTrack(\r\n new Interpolator(\r\n src.interpolator.mode,\r\n 'vec3',\r\n new Float32Array(src.interpolator.inputs as Float32Array),\r\n newOutputs\r\n )\r\n );\r\n}\r\n\r\nfunction createConstantTranslationTrack(value: Vector3): NodeTranslationTrack {\r\n return new NodeTranslationTrack(\r\n new Interpolator('step', 'vec3', new Float32Array([0]), new Float32Array([value.x, value.y, value.z]))\r\n );\r\n}\r\n\r\nfunction findRotationTrack(\r\n tracks: AnimationTrack[] | undefined\r\n): NodeRotationTrack | NodeEulerRotationTrack | null {\r\n return (tracks?.find(\r\n (track) => track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack\r\n ) ?? null) as NodeRotationTrack | NodeEulerRotationTrack | null;\r\n}\r\n\r\nfunction collectTrackTimes(track: AnimationTrack | null, times: Set<number>) {\r\n if (track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack) {\r\n for (const time of track.interpolator.inputs as Float32Array) {\r\n times.add(time);\r\n }\r\n }\r\n}\r\n\r\nfunction sampleRotationTrack(\r\n track: NodeRotationTrack | NodeEulerRotationTrack | null,\r\n time: number,\r\n fallback: Quaternion,\r\n out: Quaternion\r\n): Quaternion {\r\n if (!track) {\r\n out.set(fallback);\r\n return out;\r\n }\r\n const state = track.calculateState({}, time);\r\n out.set(state);\r\n return out;\r\n}\r\n\r\nfunction bakeHumanoidRotationTracks(\r\n sourceClip: AnimationClip,\r\n srcSkeleton: SkeletonRig,\r\n dstSkeleton: SkeletonRig,\r\n srcRootRotation: Quaternion,\r\n dstRootRotation: Quaternion,\r\n dstClip: AnimationClip,\r\n remaps: JointRetargetRemap[]\r\n) {\r\n const rotationTracksByRemap = new Map<\r\n JointRetargetRemap,\r\n NodeRotationTrack | NodeEulerRotationTrack | null\r\n >();\r\n const times = new Set<number>([0, sourceClip.timeDuration]);\r\n const remapsByDstNode = new Map<object, JointRetargetRemap>();\r\n const srcJointSet = new Set(srcSkeleton.joints);\r\n const dstJointSet = new Set(dstSkeleton.joints);\r\n const srcBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const dstBindRotByNode = new Map<SceneNode, Quaternion>();\r\n const srcRotationTrackByNode = new Map<SceneNode, NodeRotationTrack | NodeEulerRotationTrack | null>();\r\n\r\n for (let i = 0; i < srcSkeleton.joints.length; i++) {\r\n const joint = srcSkeleton.joints[i];\r\n srcBindRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);\r\n const track = findRotationTrack(sourceClip.tracks.get(joint));\r\n srcRotationTrackByNode.set(joint, track);\r\n collectTrackTimes(track, times);\r\n }\r\n for (let i = 0; i < dstSkeleton.joints.length; i++) {\r\n dstBindRotByNode.set(dstSkeleton.joints[i], dstSkeleton.bindPose[i].rotation);\r\n }\r\n for (const remap of remaps) {\r\n const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));\r\n rotationTracksByRemap.set(remap, track);\r\n remapsByDstNode.set(remap.dstNode, remap);\r\n }\r\n const inputs = new Float32Array([...times].sort((a, b) => a - b));\r\n const srcBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstBindWorldRots = new Map<SceneNode, Quaternion>();\r\n const srcAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const dstAnimWorldRots = new Map<SceneNode, Quaternion>();\r\n const outputsByRemap = new Map<JointRetargetRemap, Float32Array>();\r\n const tmpLocalRot = new Quaternion();\r\n const tmpWorldDelta = new Quaternion();\r\n const tmpParentInv = new Quaternion();\r\n\r\n for (const remap of remaps) {\r\n outputsByRemap.set(remap, new Float32Array(inputs.length * 4));\r\n }\r\n\r\n function getSrcBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = srcBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (srcBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && srcJointSet.has(parent)) {\r\n Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, rot, rot);\r\n }\r\n srcBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstBindWorldRot(node: SceneNode): Quaternion {\r\n let rot = dstBindWorldRots.get(node);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(node) ?? Quaternion.identity()).clone();\r\n const parent = node.parent;\r\n if (parent && dstJointSet.has(parent)) {\r\n Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);\r\n } else {\r\n Quaternion.multiply(dstRootRotation, rot, rot);\r\n }\r\n dstBindWorldRots.set(node, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getSrcAnimWorldRot(node: SceneNode, time: number): Quaternion {\r\n let rot = srcAnimWorldRots.get(node);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n srcAnimWorldRots.set(node, rot);\r\n }\r\n const parent = node.parent;\r\n const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;\r\n sampleRotationTrack(\r\n srcRotationTrackByNode.get(node) ?? null,\r\n time,\r\n srcBindRotByNode.get(node) ?? Quaternion.identity(),\r\n tmpLocalRot\r\n );\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);\r\n } else {\r\n Quaternion.multiply(srcRootRotation, tmpLocalRot, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n function getDstAnimWorldRot(remap: JointRetargetRemap, time: number): Quaternion {\r\n let rot = dstAnimWorldRots.get(remap.dstNode);\r\n if (!rot) {\r\n rot = new Quaternion();\r\n dstAnimWorldRots.set(remap.dstNode, rot);\r\n }\r\n const srcBindWorldRot = getSrcBindWorldRot(remap.srcNode);\r\n const srcAnimWorldRot = getSrcAnimWorldRot(remap.srcNode, time);\r\n Quaternion.multiply(srcAnimWorldRot, Quaternion.inverse(srcBindWorldRot, tmpWorldDelta), tmpWorldDelta);\r\n Quaternion.multiply(tmpWorldDelta, getDstBindWorldRot(remap.dstNode), rot);\r\n return rot;\r\n }\r\n\r\n function getDstParentAnimWorldRot(node: SceneNode, time: number): Quaternion | null {\r\n const parent = node.parent;\r\n if (!parent || !dstJointSet.has(parent)) {\r\n return dstRootRotation;\r\n }\r\n const mappedParent = remapsByDstNode.get(parent);\r\n if (mappedParent) {\r\n return getDstAnimWorldRot(mappedParent, time);\r\n }\r\n let rot = dstAnimWorldRots.get(parent);\r\n if (!rot) {\r\n rot = (dstBindRotByNode.get(parent) ?? Quaternion.identity()).clone();\r\n const parentWorldRot = getDstParentAnimWorldRot(parent, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(parentWorldRot, rot, rot);\r\n }\r\n dstAnimWorldRots.set(parent, rot);\r\n }\r\n return rot;\r\n }\r\n\r\n for (let i = 0; i < inputs.length; i++) {\r\n const time = inputs[i];\r\n srcAnimWorldRots.clear();\r\n dstAnimWorldRots.clear();\r\n for (const remap of remaps) {\r\n const dstAnimWorldRot = getDstAnimWorldRot(remap, time);\r\n const parentWorldRot = getDstParentAnimWorldRot(remap.dstNode, time);\r\n if (parentWorldRot) {\r\n Quaternion.multiply(Quaternion.inverse(parentWorldRot, tmpParentInv), dstAnimWorldRot, tmpLocalRot);\r\n } else {\r\n tmpLocalRot.set(dstAnimWorldRot);\r\n }\r\n tmpLocalRot.inplaceNormalize();\r\n outputsByRemap.get(remap)!.set(tmpLocalRot, i * 4);\r\n }\r\n }\r\n\r\n for (const remap of remaps) {\r\n if (!rotationTracksByRemap.get(remap)) {\r\n continue;\r\n }\r\n const outputs = new Float32Array(outputsByRemap.get(remap)!);\r\n const track = new NodeRotationTrack(\r\n new Interpolator('linear', 'quat', new Float32Array(inputs), outputs)\r\n );\r\n track.name = 'rotation';\r\n track.target = remap.dstNode.persistentId;\r\n track.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(remap.dstNode, track);\r\n }\r\n}\r\n\r\n/**\r\n * Animation set\r\n *\r\n * Manages a collection of named animation clips for a model and orchestrates:\r\n * - Playback state (time, loops, speed, weights, fade-in/out).\r\n * - Blending across multiple tracks targeting the same property via weighted averages.\r\n * - Skeleton usage and application for clips that drive skeletal animation.\r\n * - Active track registration and cleanup as clips start/stop.\r\n *\r\n * Usage:\r\n * - Create or retrieve `AnimationClip`s by name.\r\n * - Start playback with `playAnimation(name, options)`.\r\n * - Advance animation with `update(deltaSeconds)`.\r\n * - Optionally adjust weight while playing with `setAnimationWeight(name, weight)`.\r\n *\r\n * Lifetime:\r\n * - Disposing the set releases references to the model, clips, and clears active state.\r\n *\r\n * @public\r\n */\r\nexport class AnimationSet extends Disposable implements IDisposable {\r\n /** @internal */\r\n private _model: SceneNode;\r\n /** @internal */\r\n private _animations: Partial<Record<string, AnimationClip>>;\r\n /** @internal */\r\n private _skeletons: DRef<SkinBinding>[];\r\n /** @internal */\r\n private _rigs: DRef<SkeletonRig>[];\r\n /** @internal */\r\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\r\n /** @internal */\r\n private readonly _activeSkinBindings: Map<SkinBinding, number>;\r\n /** @internal */\r\n private readonly _activeRigs: Map<SkeletonRig, number>;\r\n /** @internal */\r\n private readonly _activeAnimations: Map<\r\n AnimationClip,\r\n {\r\n currentTime: number;\r\n repeat: number;\r\n repeatCounter: number;\r\n weight: number;\r\n speedRatio: number;\r\n firstFrame: boolean;\r\n fadeIn: number;\r\n fadeOut: number;\r\n fadeOutStart: number;\r\n animateTime: number;\r\n }\r\n >;\r\n /**\r\n * Create an AnimationSet controlling the provided model.\r\n *\r\n * @param model - The SceneNode (model root) controlled by this animation set.\r\n */\r\n constructor(model: SceneNode) {\r\n super();\r\n this._model = model;\r\n this._animations = {};\r\n this._activeTracks = new Map();\r\n this._activeSkinBindings = new Map();\r\n this._activeRigs = new Map();\r\n this._activeAnimations = new Map();\r\n this._skeletons = [];\r\n this._rigs = [];\r\n }\r\n /**\r\n * The model (SceneNode) controlled by this animation set.\r\n */\r\n get model() {\r\n return this._model;\r\n }\r\n /**\r\n * Number of animation clips registered in this set.\r\n */\r\n get numAnimations() {\r\n return Object.getOwnPropertyNames(this._animations).length;\r\n }\r\n /**\r\n * The skeletons used by animations in this set.\r\n */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /**\r\n * The shared rigs used by animations in this set.\r\n */\r\n get rigs() {\r\n return this._rigs;\r\n }\r\n /**\r\n * Per-skin bindings used by skinned meshes in this set.\r\n */\r\n get skinBindings() {\r\n return this._skeletons;\r\n }\r\n private resolveRigByAnimationBindingId(id: string): SkeletonRig | null {\r\n return this._model.findSkeletonRigById(id) ?? this._model.findSkinBindingById(id)?.rig ?? null;\r\n }\r\n private resolveClipRig(clip: AnimationClip): SkeletonRig | null {\r\n let rig: SkeletonRig | null = null;\r\n for (const id of clip.skeletons) {\r\n const nextRig = this.resolveRigByAnimationBindingId(id);\r\n if (!nextRig) {\r\n continue;\r\n }\r\n if (!rig) {\r\n rig = nextRig;\r\n } else if (rig !== nextRig) {\r\n return null;\r\n }\r\n }\r\n return rig;\r\n }\r\n /**\r\n * Retrieve an animation clip by name.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n get(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Create and register a new animation clip.\r\n *\r\n * @param name - Unique name for the animation clip.\r\n * @param embedded - Whether the clip is embedded/owned (implementation-specific). Default false.\r\n * @returns The created clip, or null if the name is empty or not unique.\r\n */\r\n createAnimation(name: string, embedded = false) {\r\n if (!name || this._animations[name]) {\r\n console.error('Animation must have unique name');\r\n return null;\r\n } else {\r\n const animation = new AnimationClip(name, this, embedded);\r\n this._animations[name] = animation;\r\n this._model.scene?.queueUpdateNode(this._model);\r\n return animation;\r\n }\r\n }\r\n /**\r\n * Delete and dispose an animation clip by name.\r\n *\r\n * - If the animation is currently playing, it is first stopped (immediately).\r\n *\r\n * @param name - Name of the animation to remove.\r\n */\r\n deleteAnimation(name: string) {\r\n const animation = this._animations[name];\r\n if (animation) {\r\n this.stopAnimation(name);\r\n delete this._animations[name];\r\n animation.dispose();\r\n }\r\n }\r\n /**\r\n * Get the list of all registered animation names.\r\n *\r\n * @returns An array of clip names.\r\n */\r\n getAnimationNames() {\r\n return Object.keys(this._animations);\r\n }\r\n /**\r\n * Advance and apply active animations.\r\n *\r\n * Responsibilities per call:\r\n * - Update time cursor for each active clip (respecting speedRatio and looping).\r\n * - Enforce repeat limits and apply fade-out termination if configured.\r\n * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)\r\n * and apply the resulting state to the target.\r\n * - Apply shared rig modifiers once, then update skin binding palettes.\r\n *\r\n * @param deltaInSeconds - Time step in seconds since last update.\r\n */\r\n update(deltaInSeconds: number) {\r\n this._activeAnimations.forEach((v, k) => {\r\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\r\n v.fadeOutStart = v.animateTime;\r\n }\r\n // Update animation time\r\n if (v.firstFrame) {\r\n v.firstFrame = false;\r\n } else {\r\n const timeAdvance = deltaInSeconds * v.speedRatio;\r\n v.currentTime += timeAdvance;\r\n v.animateTime += timeAdvance;\r\n if (k.timeDuration > 0) {\r\n if (v.currentTime > k.timeDuration) {\r\n v.repeatCounter += Math.max(1, Math.floor(v.currentTime / k.timeDuration));\r\n v.currentTime %= k.timeDuration;\r\n } else if (v.currentTime < 0) {\r\n v.repeatCounter += Math.max(1, Math.ceil(-v.currentTime / k.timeDuration));\r\n v.currentTime = ((v.currentTime % k.timeDuration) + k.timeDuration) % k.timeDuration;\r\n }\r\n }\r\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\r\n this.stopAnimation(k.name);\r\n } else if (v.fadeOut > 0) {\r\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\r\n this.stopAnimation(k.name);\r\n }\r\n }\r\n }\r\n });\r\n // Update tracks\r\n this._activeTracks.forEach((v, k) => {\r\n v.forEach((alltracks) => {\r\n // Only deal with tracks which have not been removed\r\n const tracks = alltracks.filter(\r\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\r\n );\r\n if (tracks.length > 0) {\r\n const weights = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const weight = info.weight;\r\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\r\n let fadeOut = 1;\r\n if (info.fadeOut !== 0) {\r\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\r\n }\r\n return weight * fadeIn * fadeOut;\r\n });\r\n const states = tracks.map((track) => {\r\n const info = this._activeAnimations.get(track.animation!)!;\r\n const t = (info.currentTime / track.animation!.timeDuration) * track.getDuration();\r\n return track.calculateState(k, t);\r\n });\r\n const state = weightedAverage(weights, states, (a, b, t) => {\r\n return tracks[0].mixState(a, b, t);\r\n });\r\n tracks[0].applyState(k, state);\r\n }\r\n });\r\n });\r\n // Update rigs once before computing per-skin palettes.\r\n this._rigs.forEach((v) => {\r\n v.get()?.apply(deltaInSeconds);\r\n });\r\n this._skeletons.forEach((v) => {\r\n v.get()?.apply();\r\n });\r\n }\r\n /**\r\n * Check whether an animation is currently playing.\r\n *\r\n * @param name - Optional animation name. If omitted, returns true if any animation is playing.\r\n * @returns True if playing; otherwise false.\r\n */\r\n isPlayingAnimation(name?: string) {\r\n if (name) {\r\n const animation = this._animations[name];\r\n return !!animation && this._activeAnimations.has(animation);\r\n }\r\n return this._activeAnimations.size > 0;\r\n }\r\n /**\r\n * Get an animation clip by name.\r\n *\r\n * Alias of `get(name)` returning a nullable type.\r\n *\r\n * @param name - Name of the animation.\r\n * @returns The clip if present; otherwise null.\r\n */\r\n getAnimationClip(name: string) {\r\n return this._animations[name] ?? null;\r\n }\r\n /**\r\n * Set the runtime blend weight for a currently playing animation.\r\n *\r\n * Has no effect if the clip is not active.\r\n *\r\n * @param name - Name of the playing animation.\r\n * @param weight - New weight value used during blending.\r\n */\r\n setAnimationWeight(name: string, weight: number) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.weight = weight;\r\n }\r\n }\r\n /**\r\n * Start (or update) playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If the clip is already playing, updates its fade-in (resets fade-out).\r\n * - Otherwise initializes playback state (repeat counter, speed, weight, initial time).\r\n * - Registers clip tracks and skeletons into the active sets for blending and application.\r\n *\r\n * @param name - Name of the animation to play.\r\n * @param options - Playback options (repeat, speedRatio, fadeIn).\r\n */\r\n playAnimation(name: string, options?: PlayAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n info.fadeOut = 0;\r\n info.fadeIn = fadeIn;\r\n } else {\r\n const repeat = options?.repeat ?? 0;\r\n const speedRatio = options?.speedRatio ?? 1;\r\n const weight = options?.weight ?? ani.weight ?? 1;\r\n this._activeAnimations.set(ani, {\r\n repeat,\r\n weight,\r\n speedRatio,\r\n fadeIn,\r\n fadeOut: 0,\r\n repeatCounter: 0,\r\n currentTime: speedRatio < 0 ? ani.timeDuration : 0,\r\n animateTime: 0,\r\n fadeOutStart: 0,\r\n firstFrame: true\r\n });\r\n ani.tracks?.forEach((v, k) => {\r\n let nodeTracks = this._activeTracks.get(k);\r\n if (!nodeTracks) {\r\n nodeTracks = new Map();\r\n this._activeTracks.set(k, nodeTracks);\r\n }\r\n for (const track of v) {\r\n const blendId = track.getBlendId();\r\n let blendedTracks = nodeTracks.get(blendId);\r\n if (!blendedTracks) {\r\n blendedTracks = [];\r\n nodeTracks.set(blendId, blendedTracks);\r\n }\r\n blendedTracks.push(track);\r\n }\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig);\r\n this._activeRigs.set(rig, refcount ? refcount + 1 : 1);\r\n rig.playing = true;\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding);\r\n this._activeSkinBindings.set(binding, refcount ? refcount + 1 : 1);\r\n binding.playing = true;\r\n const rigRefcount = this._activeRigs.get(binding.rig);\r\n this._activeRigs.set(binding.rig, rigRefcount ? rigRefcount + 1 : 1);\r\n binding.rig.playing = true;\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Stop playback of an animation clip.\r\n *\r\n * Behavior:\r\n * - If `options.fadeOut > 0`, marks the clip for fade-out; actual removal occurs after fade completes.\r\n * - If `fadeOut` is 0 or omitted, immediately:\r\n * - Removes the clip from active animations.\r\n * - Unregisters its tracks from active track maps.\r\n * - Decrements skeleton reference counts; resets and removes skeletons when refcount reaches 0.\r\n *\r\n * @param name - Name of the animation to stop.\r\n * @param options - Optional fade-out configuration.\r\n */\r\n stopAnimation(name: string, options?: StopAnimationOptions) {\r\n const ani = this._animations[name];\r\n if (!ani) {\r\n console.error(`Animation ${name} not exists`);\r\n return;\r\n }\r\n const info = this._activeAnimations.get(ani);\r\n if (info) {\r\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\r\n if (fadeOut !== 0) {\r\n info.fadeOut = fadeOut;\r\n info.fadeOutStart = -1;\r\n } else {\r\n this._activeAnimations.delete(ani);\r\n this._activeTracks.forEach((v) => {\r\n v.forEach((tracks, id) => {\r\n v.set(\r\n id,\r\n tracks.filter((track) => track.animation !== ani)\r\n );\r\n });\r\n });\r\n ani.skeletons?.forEach((v, k) => {\r\n const rig = this.model.findSkeletonRigById(k);\r\n if (rig) {\r\n const refcount = this._activeRigs.get(rig)!;\r\n if (refcount === 1) {\r\n rig.reset();\r\n this._activeRigs.delete(rig);\r\n } else {\r\n this._activeRigs.set(rig, refcount - 1);\r\n }\r\n return;\r\n }\r\n const binding = this.model.findSkinBindingById(k);\r\n if (binding) {\r\n const refcount = this._activeSkinBindings.get(binding)!;\r\n if (refcount === 1) {\r\n binding.reset();\r\n this._activeSkinBindings.delete(binding);\r\n } else {\r\n this._activeSkinBindings.set(binding, refcount - 1);\r\n }\r\n const rigRefcount = this._activeRigs.get(binding.rig)!;\r\n if (rigRefcount === 1) {\r\n binding.rig.reset();\r\n this._activeRigs.delete(binding.rig);\r\n } else {\r\n this._activeRigs.set(binding.rig, rigRefcount - 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n * Create a skeletal-only masked clip from an existing clip in this set.\r\n *\r\n * The generated clip is a regular `AnimationClip`: it contains cloned node transform tracks\r\n * for the selected rig joints and can be played/blended through the normal animation system.\r\n * Non-skeletal tracks are skipped by default.\r\n *\r\n * @param sourceName - Name of the source clip.\r\n * @param targetName - Name of the generated clip.\r\n * @param options - Humanoid semantic or joint-name based mask options.\r\n * @returns The generated clip, or null on failure.\r\n */\r\n createSkeletalMaskedAnimation(\r\n sourceName: string,\r\n targetName: string,\r\n options: SkeletalAnimationMaskOptions\r\n ): AnimationClip | null {\r\n const sourceClip = this.get(sourceName);\r\n if (!sourceClip) {\r\n console.error(`createSkeletalMaskedAnimation: animation '${sourceName}' not found`);\r\n return null;\r\n }\r\n const rig = this.resolveClipRig(sourceClip);\r\n if (!rig) {\r\n console.error(`createSkeletalMaskedAnimation: source animation must resolve to exactly one rig`);\r\n return null;\r\n }\r\n return createSkeletalMaskedAnimationClip(this, sourceClip, targetName, rig, options);\r\n }\r\n /**\r\n * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.\r\n *\r\n * Prerequisites:\r\n * - Both source and destination skeletons must have a non-null `humanoidJointMapping`.\r\n * - Joints are matched by shared `HumanoidBodyRig` / `HumanoidHandRig` keys instead of joint names.\r\n * - The source clip must exist in `sourceSet` and must be driven by exactly one skeleton.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n */\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n options?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null;\r\n copyHumanoidAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetNameOrOptions?: string | CopyHumanoidAnimationOptions,\r\n copyOptions?: CopyHumanoidAnimationOptions\r\n ): AnimationClip | null {\r\n const options =\r\n typeof targetNameOrOptions === 'string' ? (copyOptions ?? {}) : (targetNameOrOptions ?? {});\r\n const destName =\r\n typeof targetNameOrOptions === 'string' ? targetNameOrOptions : (options.targetName ?? animationName);\r\n const rootMotion = options.rootMotion ?? 'scaled';\r\n const jointTranslations = options.jointTranslations ?? 'skip';\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyHumanoidAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: source animation clip must resolve to exactly one humanoid rig`\r\n );\r\n return null;\r\n }\r\n\r\n // Check that source skeleton has humanoid mapping\r\n const srcHumanoidMapping = srcSkeleton.humanoidJointMapping;\r\n if (!srcHumanoidMapping) {\r\n console.error(`copyHumanoidAnimationFrom: source skeleton does not have a humanoid joint mapping`);\r\n return null;\r\n }\r\n\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n // Find a destination skeleton that has a humanoid mapping and share at least the body rig keys\r\n let srcJointsFiltered: SceneNode[] = [];\r\n let dstJointsFiltered: SceneNode[] = [];\r\n\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n // Check that destination skeleton has humanoid mapping\r\n const dstHumanoidMapping = sk.humanoidJointMapping;\r\n if (!dstHumanoidMapping) {\r\n return false;\r\n }\r\n\r\n // Collect matched (srcJoint, dstJoint) pairs via shared humanoid rig keys\r\n const srcMatched: SceneNode[] = [];\r\n const dstMatched: SceneNode[] = [];\r\n\r\n // Match body rig joints\r\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\r\n const srcJoint = srcHumanoidMapping.body[key];\r\n const dstJoint = dstHumanoidMapping.body[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n\r\n // Match left hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.leftHand && dstHumanoidMapping.leftHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.leftHand\r\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\r\n const srcJoint = srcHumanoidMapping.leftHand[key];\r\n const dstJoint = dstHumanoidMapping.leftHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n // Match right hand rig joints only when both sides define them; skip silently if either is absent\r\n if (srcHumanoidMapping.rightHand && dstHumanoidMapping.rightHand) {\r\n for (const key of Object.keys(\r\n srcHumanoidMapping.rightHand\r\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\r\n const srcJoint = srcHumanoidMapping.rightHand[key];\r\n const dstJoint = dstHumanoidMapping.rightHand[key];\r\n if (srcJoint && dstJoint) {\r\n srcMatched.push(srcJoint);\r\n dstMatched.push(dstJoint);\r\n }\r\n }\r\n }\r\n\r\n if (srcMatched.length === 0) {\r\n return false;\r\n }\r\n\r\n srcJointsFiltered = srcMatched;\r\n dstJointsFiltered = dstMatched;\r\n return true;\r\n });\r\n\r\n if (!dstSkeleton) {\r\n console.error(\r\n `copyHumanoidAnimationFrom: no matching humanoid skeleton in target set for '${srcSkeletonId}'`\r\n );\r\n return null;\r\n }\r\n\r\n // Compute the world-space rotation of the parent chain above a motion node,\r\n // walking ALL ancestor nodes up to (but not including) the model root.\r\n // This must include non-joint nodes such as \"Armature\" in Mixamo rigs, which\r\n // carry a 90° X rotation that is NOT captured by humanoidRootRotation (which\r\n // only traverses nodes inside the skeleton joints list).\r\n function computeParentChainRotation(\r\n node: SceneNode,\r\n modelRoot: SceneNode,\r\n skeleton: SkeletonRig\r\n ): Quaternion {\r\n const result = Quaternion.identity();\r\n const jointSet = new Set(skeleton.joints);\r\n let p = node.parent;\r\n while (p && p !== modelRoot) {\r\n if (!jointSet.has(p)) {\r\n Quaternion.multiply(p.rotation, result, result);\r\n }\r\n p = p.parent;\r\n }\r\n return result;\r\n }\r\n\r\n const srcHipsNode = srcSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const dstHipsNode = dstSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\r\n const srcRootNode = srcSkeleton.rootJoint ?? srcHipsNode;\r\n const dstRootNode = dstSkeleton.rootJoint ?? dstHipsNode;\r\n const srcRootRot = computeParentChainRotation(srcRootNode, sourceSet.model, srcSkeleton);\r\n const dstRootRot = computeParentChainRotation(dstRootNode, this._model, dstSkeleton);\r\n const srcRootTranslationTrack = findTranslationTrack(sourceClip.tracks.get(srcRootNode));\r\n const srcFallbackHipsTranslationTrack =\r\n !srcRootTranslationTrack && srcRootNode !== srcHipsNode\r\n ? findTranslationTrack(sourceClip.tracks.get(srcHipsNode))\r\n : null;\r\n const srcMotionTrack = srcRootTranslationTrack ?? srcFallbackHipsTranslationTrack;\r\n const srcMotionNode = srcRootTranslationTrack\r\n ? srcRootNode\r\n : srcFallbackHipsTranslationTrack\r\n ? srcHipsNode\r\n : null;\r\n const srcMotionParentRot = srcMotionNode\r\n ? computeParentChainRotation(srcMotionNode, sourceSet.model, srcSkeleton)\r\n : srcRootRot;\r\n const rootTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcMotionParentRot);\r\n const rootTranslationScale =\r\n rootMotion === 'scaled'\r\n ? typeof options.rootMotionScale === 'number'\r\n ? options.rootMotionScale\r\n : options.rootMotionScale === 'none'\r\n ? 1\r\n : getHumanoidRootMotionScale(srcSkeleton, dstSkeleton)\r\n : 1;\r\n const jointRemaps: JointRetargetRemap[] = [];\r\n const mappedSrcNodes = new Set<SceneNode>();\r\n const mappedDstNodes = new Set<SceneNode>();\r\n // Build remap for matched joint pairs\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n if (mappedSrcNodes.has(srcJoint) || mappedDstNodes.has(dstJoint)) {\r\n continue;\r\n }\r\n mappedSrcNodes.add(srcJoint);\r\n mappedDstNodes.add(dstJoint);\r\n nodeMap.set(srcJoint, dstJoint);\r\n const remap = createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint);\r\n jointRemaps.push(remap);\r\n jointRemapBySrcNode.set(srcJoint, remap);\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n bakeHumanoidRotationTracks(\r\n sourceClip,\r\n srcSkeleton,\r\n dstSkeleton,\r\n srcRootRot,\r\n dstRootRot,\r\n dstClip,\r\n jointRemaps\r\n );\r\n\r\n if (rootMotion !== 'none') {\r\n const dstRootBindPose = getRigBindPoseForNode(dstSkeleton, dstRootNode);\r\n let dstRootTrack: NodeTranslationTrack | null = null;\r\n if (rootMotion === 'locked') {\r\n dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);\r\n } else if (srcMotionTrack && srcMotionNode) {\r\n const srcMotionBindPose = getRigBindPoseForNode(srcSkeleton, srcMotionNode);\r\n const rootRemap = createTranslationRetargetRemap(\r\n srcMotionNode,\r\n dstRootNode,\r\n srcMotionBindPose.position,\r\n dstRootBindPose.position,\r\n dstSkeleton.joints.indexOf(dstRootNode),\r\n rootTranslationScale,\r\n rootTranslationRotation,\r\n options.lockRootMotionAxes\r\n );\r\n dstRootTrack = retargetTranslationTrack(srcMotionTrack, rootRemap);\r\n }\r\n if (dstRootTrack) {\r\n dstRootTrack.name = srcMotionTrack?.name ?? 'translation';\r\n dstRootTrack.target = dstRootNode.persistentId;\r\n dstRootTrack.jointIndex = dstSkeleton.joints.indexOf(dstRootNode);\r\n dstClip.addTrack(dstRootNode, dstRootTrack);\r\n }\r\n }\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n // Not every humanoid joint must have a track; skip silently\r\n continue;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n continue;\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n if (srcNode === srcRootNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {\r\n continue;\r\n }\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(\r\n `copyHumanoidAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`\r\n );\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n }\r\n /**\r\n * Copy an animation clip from another AnimationSet into this one.\r\n *\r\n * Prerequisites:\r\n * - Both sets must reference skeletons with identical joint names and counts.\r\n * - The source clip must exist in `sourceSet`.\r\n *\r\n * @param sourceSet - The AnimationSet to copy from.\r\n * @param animationName - Name of the clip to copy.\r\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\r\n * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from\r\n * skeleton structure matching.\r\n * @returns The newly created AnimationClip, or null on failure.\r\n *\r\n * @deprecated Use AnimationSet.copyHumanoidAnimationFrom instead.\r\n */\r\n copyAnimationFrom(\r\n sourceSet: AnimationSet,\r\n animationName: string,\r\n targetName?: string,\r\n excludeJoint?: (jointName: string) => boolean\r\n ): AnimationClip | null {\r\n const destName = targetName ?? animationName;\r\n const sourceClip = sourceSet.get(animationName);\r\n if (!sourceClip) {\r\n console.error(`copyAnimationFrom: animation '${animationName}' not found in source set`);\r\n return null;\r\n }\r\n if (this._animations[destName]) {\r\n console.error(`copyAnimationFrom: animation '${destName}' already exists in target set`);\r\n return null;\r\n }\r\n\r\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\r\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\r\n if (!srcSkeleton) {\r\n console.error(`copyAnimationFrom: source animation clip must resolve to exactly one rig`);\r\n return null;\r\n }\r\n const nodeMap = new Map<object, SceneNode>();\r\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\r\n\r\n const jointsFiltered = srcSkeleton.joints.filter((j) => !excludeJoint?.(j.name));\r\n const srcRootNode = findRootJoint(jointsFiltered);\r\n if (!srcRootNode) {\r\n console.error(`copyAnimationFrom: cannot determine the root joint for source skeleton`);\r\n return null;\r\n }\r\n // Build filtered joint lists for matching (exclude joints rejected by filterJoint)\r\n const srcJointsFiltered = sortJoints(srcRootNode, jointsFiltered);\r\n if (!srcJointsFiltered) {\r\n console.error(`copyAnimationFrom: invalid source skeleton structure`);\r\n return null;\r\n }\r\n let dstJointsFiltered: SceneNode[] = [];\r\n const dstSkeleton = this._rigs\r\n .map((ref) => ref.get())\r\n .find((sk) => {\r\n if (!sk) {\r\n return false;\r\n }\r\n const jointsFiltered = sk.joints.filter((j) => !excludeJoint?.(j.name));\r\n if (jointsFiltered.length !== srcJointsFiltered.length) {\r\n return false;\r\n }\r\n const rootNode = findRootJoint(jointsFiltered);\r\n if (!rootNode) {\r\n return false;\r\n }\r\n const sortedJointsFiltered = sortJoints(rootNode, jointsFiltered);\r\n if (\r\n sortedJointsFiltered &&\r\n srcJointsFiltered.every((j, i) => j.name === sortedJointsFiltered[i].name)\r\n ) {\r\n dstJointsFiltered = sortedJointsFiltered;\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!dstJointsFiltered || !dstSkeleton) {\r\n console.error(`copyAnimationFrom: no matching skeleton in target set for '${srcSkeletonId}'`);\r\n return null;\r\n }\r\n // Build remap only for joints that pass the filter\r\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\r\n const srcJoint = srcJointsFiltered[fi];\r\n const dstJoint = dstJointsFiltered[fi];\r\n nodeMap.set(srcJoint, dstJoint);\r\n jointRemapBySrcNode.set(\r\n srcJoint,\r\n createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint)\r\n );\r\n }\r\n\r\n const dstClip = this.createAnimation(destName);\r\n if (!dstClip) {\r\n return null;\r\n }\r\n dstClip.timeDuration = sourceClip.timeDuration;\r\n dstClip.weight = sourceClip.weight;\r\n dstClip.autoPlay = sourceClip.autoPlay;\r\n\r\n // Register destination skeleton\r\n dstClip.addSkeleton(dstSkeleton.persistentId);\r\n\r\n for (const srcNode of srcJointsFiltered) {\r\n const srcTracks = sourceClip.tracks.get(srcNode);\r\n if (!srcTracks) {\r\n console.error(`copyAnimationFrom: no track for joint: ${srcNode.name}`);\r\n return null;\r\n }\r\n const dstNode = nodeMap.get(srcNode)!;\r\n const remap = jointRemapBySrcNode.get(srcNode)!;\r\n\r\n for (const srcTrack of srcTracks) {\r\n let dstTrack: AnimationTrack;\r\n if (srcTrack instanceof NodeRotationTrack) {\r\n dstTrack = retargetRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\r\n dstTrack = retargetEulerToRotationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeTranslationTrack) {\r\n dstTrack = retargetTranslationTrack(srcTrack, remap);\r\n } else if (srcTrack instanceof NodeScaleTrack) {\r\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\r\n } else {\r\n console.warn(`copyAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`);\r\n continue;\r\n }\r\n\r\n dstTrack.name = srcTrack.name;\r\n dstTrack.target = dstNode.persistentId;\r\n dstTrack.jointIndex = remap.dstJointIndex;\r\n dstClip.addTrack(dstNode, dstTrack);\r\n }\r\n }\r\n\r\n return dstClip;\r\n\r\n function 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 if (!root || !joints.includes(root)) {\r\n return null;\r\n }\r\n return root;\r\n }\r\n\r\n function sortJoints(root: SceneNode, joints: SceneNode[]): Nullable<SceneNode[]> {\r\n const ordered: SceneNode[] = [];\r\n const visited = new Set<SceneNode>();\r\n function visit(joint: SceneNode) {\r\n if (visited.has(joint)) {\r\n return true;\r\n }\r\n if (!joints.includes(joint)) {\r\n return false;\r\n }\r\n if (joint !== root) {\r\n visit(joint.parent!);\r\n }\r\n visited.add(joint);\r\n ordered.push(joint);\r\n return true;\r\n }\r\n for (const joint of joints) {\r\n if (!visit(joint)) {\r\n return null;\r\n }\r\n }\r\n return ordered;\r\n }\r\n }\r\n\r\n /**\r\n * Reset all skeleton modifiers\r\n */\r\n resetSkeletonModifiers() {\r\n for (const sk of this._skeletons) {\r\n for (const modifier of sk.get()!.modifiers) {\r\n modifier.reset();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the animation set and release owned resources.\r\n *\r\n * - Disposes the weak reference to the model.\r\n * - Disposes all registered animation clips.\r\n * - Clears active animations, tracks, and skeleton references.\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const k in this._animations) {\r\n this._animations[k]!.dispose();\r\n }\r\n this._animations = {};\r\n this._activeAnimations.clear();\r\n this._activeSkinBindings.clear();\r\n this._activeRigs.clear();\r\n this._activeTracks.clear();\r\n }\r\n}\r\n"],"names":["cloneInterpolator","src","Interpolator","mode","target","inputs","Float32Array","outputs","createJointRetargetRemap","srcSkeleton","dstSkeleton","srcJoint","dstJoint","translationRotation","translationScale","translationAxisLocks","si","joints","indexOf","di","srcBindPose","bindPose","dstBindPose","srcLen","position","magnitude","dstLen","dstNode","dstJointIndex","srcNode","srcBindRotInv","Quaternion","inverse","rotation","dstBindRot","clone","srcBindPos","dstBindPos","createTranslationRetargetRemap","identity","getBindPosition","skeleton","joint","index","getRigBindPoseForNode","node","getBindPoseForJoint","rootJoint","rootBindPose","scale","getBindDistanceToAncestor","ancestor","distance","bindPosition","parent","getHumanoidLegLength","side","mapping","humanoidJointMapping","body","hips","HumanoidBodyRig","Hips","foot","LeftFoot","RightFoot","toes","LeftToes","RightToes","Math","max","getHumanoidRootMotionScale","srcLeftLeg","srcRightLeg","dstLeftLeg","dstRightLeg","srcLegLength","dstLegLength","findTranslationTrack","tracks","find","track","NodeTranslationTrack","applyTranslationAxisLocks","value","bindValue","locks","x","y","z","applyTranslationTangentAxisLocks","retargetRotation","qSrcAnim","remap","out","multiply","inplaceNormalize","retargetRotationTangent","qSrcTangent","retargetTranslationValue","srcValue","setXYZ","subBy","scaleBy","transform","addBy","retargetTranslationTangent","retargetRotationTrack","isCubic","interpolator","frameStride","numFrames","length","srcOutputs","newOutputs","t","q","f","base","setXYZW","set","subarray","NodeRotationTrack","retargetEulerToRotationTrack","srcInputs","fromEulerAngle","retargetTranslationTrack","v","Vector3","createConstantTranslationTrack","findRotationTrack","NodeEulerRotationTrack","collectTrackTimes","times","time","add","sampleRotationTrack","fallback","state","calculateState","bakeHumanoidRotationTracks","sourceClip","srcRootRotation","dstRootRotation","dstClip","remaps","rotationTracksByRemap","Map","Set","timeDuration","remapsByDstNode","srcJointSet","dstJointSet","srcBindRotByNode","dstBindRotByNode","srcRotationTrackByNode","i","get","sort","a","b","srcBindWorldRots","dstBindWorldRots","srcAnimWorldRots","dstAnimWorldRots","outputsByRemap","tmpLocalRot","tmpWorldDelta","tmpParentInv","getSrcBindWorldRot","rot","has","getDstBindWorldRot","getSrcAnimWorldRot","parentWorldRot","getDstAnimWorldRot","srcBindWorldRot","srcAnimWorldRot","getDstParentAnimWorldRot","mappedParent","clear","dstAnimWorldRot","name","persistentId","jointIndex","addTrack","AnimationSet","Disposable","model","_model","_animations","_activeTracks","_activeSkinBindings","_activeRigs","_activeAnimations","_skeletons","_rigs","numAnimations","Object","getOwnPropertyNames","skeletons","rigs","skinBindings","resolveRigByAnimationBindingId","id","findSkeletonRigById","findSkinBindingById","rig","resolveClipRig","clip","nextRig","createAnimation","embedded","console","error","animation","AnimationClip","scene","queueUpdateNode","deleteAnimation","stopAnimation","dispose","getAnimationNames","keys","update","deltaInSeconds","forEach","k","fadeOut","fadeOutStart","animateTime","firstFrame","timeAdvance","speedRatio","currentTime","repeatCounter","floor","ceil","repeat","alltracks","filter","isPlayingAnimation","weights","map","info","weight","fadeIn","min","states","getDuration","weightedAverage","mixState","applyState","apply","size","getAnimationClip","setAnimationWeight","ani","playAnimation","options","nodeTracks","blendId","getBlendId","blendedTracks","push","refcount","playing","binding","rigRefcount","delete","reset","createSkeletalMaskedAnimation","sourceName","targetName","createSkeletalMaskedAnimationClip","copyHumanoidAnimationFrom","sourceSet","animationName","targetNameOrOptions","copyOptions","destName","rootMotion","jointTranslations","srcSkeletonId","srcHumanoidMapping","nodeMap","jointRemapBySrcNode","srcJointsFiltered","dstJointsFiltered","ref","sk","dstHumanoidMapping","srcMatched","dstMatched","key","leftHand","rightHand","computeParentChainRotation","modelRoot","result","jointSet","p","srcHipsNode","dstHipsNode","srcRootNode","dstRootNode","srcRootRot","dstRootRot","srcRootTranslationTrack","srcFallbackHipsTranslationTrack","srcMotionTrack","srcMotionNode","srcMotionParentRot","rootTranslationRotation","rootTranslationScale","rootMotionScale","jointRemaps","mappedSrcNodes","mappedDstNodes","fi","autoPlay","addSkeleton","dstRootBindPose","dstRootTrack","srcMotionBindPose","rootRemap","lockRootMotionAxes","srcTracks","srcTrack","dstTrack","NodeScaleTrack","warn","copyAnimationFrom","excludeJoint","jointsFiltered","j","findRootJoint","sortJoints","rootNode","sortedJointsFiltered","every","root","isParentOf","includes","ordered","visited","visit","resetSkeletonModifiers","modifier","modifiers","onDispose"],"mappings":"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"}
1
+ {"version":3,"file":"animationset.js","sources":["../../src/animation/animationset.ts"],"sourcesContent":["import { weightedAverage, Disposable, Interpolator, Vector3 } from '@zephyr3d/base';\nimport type { DRef, IDisposable, Nullable } from '@zephyr3d/base';\nimport { Quaternion } from '@zephyr3d/base';\nimport type { SceneNode } from '../scene';\nimport { AnimationClip } from './animation';\nimport type { AnimationTrack } from './animationtrack';\nimport { NodeRotationTrack } from './rotationtrack';\nimport { NodeEulerRotationTrack } from './eulerrotationtrack';\nimport { NodeTranslationTrack } from './translationtrack';\nimport { NodeScaleTrack } from './scaletrack';\nimport type { SkeletonBindPose, SkeletonRig, SkinBinding } from './skeleton';\nimport { HumanoidBodyRig } from './skeleton';\nimport type { SkeletalAnimationMaskOptions } from './animationmask';\nimport { createSkeletalMaskedAnimationClip } from './animationmask';\n\n/**\n * Options for playing an animation.\n *\n * Controls looping, playback speed (including reverse), and fade-in blending.\n * @public\n **/\nexport type PlayAnimationOptions = {\n /**\n * Number of loops to play.\n *\n * - 0: infinite looping (default).\n * - n \\> 0: play exactly n loops (each loop is one full duration of the clip).\n */\n repeat?: number;\n /**\n * Playback speed multiplier.\n *\n * - 1: normal speed (default).\n * - \\>1: faster; \\<1: slower.\n * - Negative values play the clip in reverse. The initial `currentTime` will be set to the end.\n */\n speedRatio?: number;\n /**\n * Fade-in duration in seconds.\n *\n * Interpolates the animation weight from 0 to the clip's configured weight over this time.\n * Use together with `stopAnimation(..., { fadeOut })` for smooth cross-fading.\n * Default is 0 (no fade-in).\n */\n fadeIn?: number;\n /**\n * Weight of the animation clip.\n *\n * Used during blending when multiple animations affect the same property.\n * Default is the clip's configured weight.\n */\n weight?: number;\n};\n\n/**\n * Options for stopping an animation.\n *\n * Allows a graceful fade-out instead of abrupt stop.\n * @public\n */\nexport type StopAnimationOptions = {\n /**\n * Fade-out duration in seconds.\n *\n * Interpolates the current animation weight down to 0 over this time.\n * Default is 0 (immediate stop).\n */\n fadeOut?: number;\n};\n\n/** @public */\nexport type HumanoidRootMotionMode = 'scaled' | 'copy' | 'locked' | 'none';\n\n/** @public */\nexport type HumanoidRootMotionScaleMode = 'legLength' | 'none' | number;\n\n/** @public */\nexport type HumanoidRetargetAxisLocks = {\n x?: boolean;\n y?: boolean;\n z?: boolean;\n};\n\n/** @public */\nexport type CopyHumanoidAnimationOptions = {\n /**\n * Name for the new clip. Ignored when the legacy third `targetName` argument is a string.\n */\n targetName?: string;\n /**\n * How root translation should be handled.\n *\n * - `scaled`: retarget and scale root motion to the destination rig size.\n * - `copy`: retarget root motion without scale.\n * - `locked`: write a constant destination bind-pose root translation.\n * - `none`: do not create a root translation track.\n */\n rootMotion?: HumanoidRootMotionMode;\n /**\n * Scale used when `rootMotion` is `scaled`.\n */\n rootMotionScale?: HumanoidRootMotionScaleMode;\n /**\n * Axis locks applied after root motion retargeting. Locked axes stay at the destination bind pose.\n */\n lockRootMotionAxes?: HumanoidRetargetAxisLocks;\n /**\n * Whether to preserve non-root humanoid translation tracks. These are skipped by default because\n * retargeting humanoid joints should normally keep the destination skeleton lengths intact.\n */\n jointTranslations?: 'skip' | 'preserve';\n};\n\ntype JointRetargetRemap = {\n dstNode: SceneNode;\n dstJointIndex: number;\n srcNode: SceneNode;\n srcBindRotInv: Quaternion;\n dstBindRot: Quaternion;\n srcBindPos: Vector3;\n dstBindPos: Vector3;\n translationScale: number;\n translationRotation?: Quaternion;\n translationAxisLocks?: HumanoidRetargetAxisLocks;\n};\n\nfunction cloneInterpolator(src: Interpolator): Interpolator {\n return new Interpolator(\n src.mode,\n src.target,\n src.inputs instanceof Float32Array ? new Float32Array(src.inputs) : [...src.inputs],\n src.outputs instanceof Float32Array ? new Float32Array(src.outputs) : [...src.outputs]\n );\n}\n\nfunction createJointRetargetRemap(\n srcSkeleton: SkeletonRig,\n dstSkeleton: SkeletonRig,\n srcJoint: SceneNode,\n dstJoint: SceneNode,\n translationRotation?: Quaternion,\n translationScale?: number,\n translationAxisLocks?: HumanoidRetargetAxisLocks\n): JointRetargetRemap {\n const si = srcSkeleton.joints.indexOf(srcJoint);\n const di = dstSkeleton.joints.indexOf(dstJoint);\n const srcBindPose = srcSkeleton.bindPose[si];\n const dstBindPose = dstSkeleton.bindPose[di];\n const srcLen = srcBindPose.position.magnitude;\n const dstLen = dstBindPose.position.magnitude;\n return {\n dstNode: dstJoint,\n dstJointIndex: di,\n srcNode: srcJoint,\n srcBindRotInv: Quaternion.inverse(srcBindPose.rotation),\n dstBindRot: dstBindPose.rotation.clone(),\n srcBindPos: srcBindPose.position.clone(),\n dstBindPos: dstBindPose.position.clone(),\n translationScale: translationScale ?? (srcLen > 1e-6 ? dstLen / srcLen : 1),\n translationRotation,\n translationAxisLocks\n };\n}\n\nfunction createTranslationRetargetRemap(\n srcNode: SceneNode,\n dstNode: SceneNode,\n srcBindPos: Vector3,\n dstBindPos: Vector3,\n dstJointIndex: number,\n translationScale: number,\n translationRotation?: Quaternion,\n translationAxisLocks?: HumanoidRetargetAxisLocks\n): JointRetargetRemap {\n return {\n dstNode,\n dstJointIndex,\n srcNode,\n srcBindRotInv: Quaternion.identity(),\n dstBindRot: Quaternion.identity(),\n srcBindPos: srcBindPos.clone(),\n dstBindPos: dstBindPos.clone(),\n translationScale,\n translationRotation,\n translationAxisLocks\n };\n}\n\nfunction getBindPosition(skeleton: SkeletonRig, joint: SceneNode): Vector3 | null {\n const index = skeleton.joints.indexOf(joint);\n return index >= 0 ? skeleton.bindPose[index].position : null;\n}\n\nfunction getRigBindPoseForNode(skeleton: SkeletonRig, node: SceneNode): SkeletonBindPose {\n return (\n skeleton.getBindPoseForJoint(node) ??\n (node === skeleton.rootJoint\n ? skeleton.rootBindPose\n : {\n position: node.position,\n rotation: node.rotation,\n scale: node.scale\n })\n );\n}\n\nfunction getBindDistanceToAncestor(skeleton: SkeletonRig, joint: SceneNode, ancestor: SceneNode): number {\n let distance = 0;\n let node: SceneNode | null = joint;\n while (node && node !== ancestor) {\n const bindPosition = getBindPosition(skeleton, node);\n if (!bindPosition) {\n return 0;\n }\n distance += bindPosition.magnitude;\n node = node.parent;\n }\n return node === ancestor ? distance : 0;\n}\n\nfunction getHumanoidLegLength(skeleton: SkeletonRig, side: 'left' | 'right'): number {\n const mapping = skeleton.humanoidJointMapping;\n if (!mapping) {\n return 0;\n }\n const body = mapping.body;\n const hips = body[HumanoidBodyRig.Hips];\n const foot = side === 'left' ? body[HumanoidBodyRig.LeftFoot] : body[HumanoidBodyRig.RightFoot];\n const toes = side === 'left' ? body[HumanoidBodyRig.LeftToes] : body[HumanoidBodyRig.RightToes];\n return Math.max(\n getBindDistanceToAncestor(skeleton, foot, hips),\n getBindDistanceToAncestor(skeleton, toes, hips)\n );\n}\n\nfunction getHumanoidRootMotionScale(srcSkeleton: SkeletonRig, dstSkeleton: SkeletonRig): number {\n const srcLeftLeg = getHumanoidLegLength(srcSkeleton, 'left');\n const srcRightLeg = getHumanoidLegLength(srcSkeleton, 'right');\n const dstLeftLeg = getHumanoidLegLength(dstSkeleton, 'left');\n const dstRightLeg = getHumanoidLegLength(dstSkeleton, 'right');\n const srcLegLength = Math.max(srcLeftLeg, srcRightLeg);\n const dstLegLength = Math.max(dstLeftLeg, dstRightLeg);\n return srcLegLength > 1e-6 && dstLegLength > 1e-6 ? dstLegLength / srcLegLength : 1;\n}\n\nfunction findTranslationTrack(tracks: AnimationTrack[] | undefined): NodeTranslationTrack | null {\n return (tracks?.find((track) => track instanceof NodeTranslationTrack) ??\n null) as NodeTranslationTrack | null;\n}\n\nfunction applyTranslationAxisLocks(\n value: Vector3,\n bindValue: Vector3,\n locks: HumanoidRetargetAxisLocks | undefined\n) {\n if (locks?.x) {\n value.x = bindValue.x;\n }\n if (locks?.y) {\n value.y = bindValue.y;\n }\n if (locks?.z) {\n value.z = bindValue.z;\n }\n}\n\nfunction applyTranslationTangentAxisLocks(value: Vector3, locks: HumanoidRetargetAxisLocks | undefined) {\n if (locks?.x) {\n value.x = 0;\n }\n if (locks?.y) {\n value.y = 0;\n }\n if (locks?.z) {\n value.z = 0;\n }\n}\n\nfunction retargetRotation(qSrcAnim: Quaternion, remap: JointRetargetRemap, out: Quaternion): Quaternion {\n Quaternion.multiply(remap.srcBindRotInv, qSrcAnim, out);\n Quaternion.multiply(remap.dstBindRot, out, out);\n return out.inplaceNormalize();\n}\n\nfunction retargetRotationTangent(\n qSrcTangent: Quaternion,\n remap: JointRetargetRemap,\n out: Quaternion\n): Quaternion {\n Quaternion.multiply(remap.srcBindRotInv, qSrcTangent, out);\n Quaternion.multiply(remap.dstBindRot, out, out);\n return out;\n}\n\nfunction retargetTranslationValue(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\n out.subBy(remap.srcBindPos);\n out.scaleBy(remap.translationScale);\n if (remap.translationRotation) {\n remap.translationRotation.transform(out, out);\n }\n out.addBy(remap.dstBindPos);\n applyTranslationAxisLocks(out, remap.dstBindPos, remap.translationAxisLocks);\n return out;\n}\n\nfunction retargetTranslationTangent(srcValue: Vector3, remap: JointRetargetRemap, out: Vector3): Vector3 {\n out.setXYZ(srcValue.x, srcValue.y, srcValue.z);\n out.scaleBy(remap.translationScale);\n if (remap.translationRotation) {\n remap.translationRotation.transform(out, out);\n }\n applyTranslationTangentAxisLocks(out, remap.translationAxisLocks);\n return out;\n}\n\nfunction retargetRotationTrack(src: NodeRotationTrack, remap: JointRetargetRemap): NodeRotationTrack {\n const isCubic = src.interpolator.mode === 'cubicspline';\n const frameStride = isCubic ? 12 : 4;\n const numFrames = (src.interpolator.inputs as Float32Array).length;\n const srcOutputs = src.interpolator.outputs as Float32Array;\n const newOutputs = new Float32Array(srcOutputs.length);\n const t = isCubic ? 4 : 0;\n const q = new Quaternion();\n for (let f = 0; f < numFrames; f++) {\n const base = f * frameStride;\n q.setXYZW(\n srcOutputs[base + t],\n srcOutputs[base + t + 1],\n srcOutputs[base + t + 2],\n srcOutputs[base + t + 3]\n );\n retargetRotation(q, remap, q);\n if (isCubic) {\n // Cubic quaternion tangents live in the same component space, so apply the\n // same constant bind-pose transform without normalizing them.\n q.setXYZW(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2], srcOutputs[base + 3]);\n newOutputs.set(retargetRotationTangent(q, remap, q), base);\n newOutputs.set(\n retargetRotation(new Quaternion(srcOutputs.subarray(base + 4, base + 8)), remap, q),\n base + 4\n );\n q.setXYZW(srcOutputs[base + 8], srcOutputs[base + 9], srcOutputs[base + 10], srcOutputs[base + 11]);\n newOutputs.set(retargetRotationTangent(q, remap, q), base + 8);\n } else {\n newOutputs.set(q, base);\n }\n }\n return new NodeRotationTrack(\n new Interpolator(\n src.interpolator.mode,\n 'quat',\n new Float32Array(src.interpolator.inputs as Float32Array),\n newOutputs\n )\n );\n}\n\nfunction retargetEulerToRotationTrack(\n src: NodeEulerRotationTrack,\n remap: JointRetargetRemap\n): NodeRotationTrack {\n const srcInputs = src.interpolator.inputs as Float32Array;\n const srcOutputs = src.interpolator.outputs as Float32Array;\n const isCubic = src.interpolator.mode === 'cubicspline';\n const frameStride = isCubic ? 9 : 3;\n const t = isCubic ? 3 : 0;\n const numFrames = srcInputs.length;\n const newOutputs = new Float32Array(numFrames * 4);\n const q = new Quaternion();\n for (let f = 0; f < numFrames; f++) {\n const base = f * frameStride + t;\n q.fromEulerAngle(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\n retargetRotation(q, remap, q);\n newOutputs.set(q, f * 4);\n }\n return new NodeRotationTrack(\n new Interpolator(\n src.interpolator.mode === 'step' ? 'step' : 'linear',\n 'quat',\n new Float32Array(srcInputs),\n newOutputs\n )\n );\n}\n\nfunction retargetTranslationTrack(\n src: NodeTranslationTrack,\n remap: JointRetargetRemap\n): NodeTranslationTrack {\n const isCubic = src.interpolator.mode === 'cubicspline';\n const frameStride = isCubic ? 9 : 3;\n const numFrames = (src.interpolator.inputs as Float32Array).length;\n const srcOutputs = src.interpolator.outputs as Float32Array;\n const newOutputs = new Float32Array(srcOutputs.length);\n const t = isCubic ? 3 : 0;\n const v = new Vector3();\n for (let f = 0; f < numFrames; f++) {\n const base = f * frameStride;\n v.setXYZ(srcOutputs[base + t], srcOutputs[base + t + 1], srcOutputs[base + t + 2]);\n retargetTranslationValue(v, remap, v);\n if (isCubic) {\n v.setXYZ(srcOutputs[base], srcOutputs[base + 1], srcOutputs[base + 2]);\n newOutputs.set(retargetTranslationTangent(v, remap, v), base);\n v.setXYZ(srcOutputs[base + 3], srcOutputs[base + 4], srcOutputs[base + 5]);\n newOutputs.set(retargetTranslationValue(v, remap, v), base + 3);\n v.setXYZ(srcOutputs[base + 6], srcOutputs[base + 7], srcOutputs[base + 8]);\n newOutputs.set(retargetTranslationTangent(v, remap, v), base + 6);\n } else {\n newOutputs.set(v, base);\n }\n }\n return new NodeTranslationTrack(\n new Interpolator(\n src.interpolator.mode,\n 'vec3',\n new Float32Array(src.interpolator.inputs as Float32Array),\n newOutputs\n )\n );\n}\n\nfunction createConstantTranslationTrack(value: Vector3): NodeTranslationTrack {\n return new NodeTranslationTrack(\n new Interpolator('step', 'vec3', new Float32Array([0]), new Float32Array([value.x, value.y, value.z]))\n );\n}\n\nfunction findRotationTrack(\n tracks: AnimationTrack[] | undefined\n): NodeRotationTrack | NodeEulerRotationTrack | null {\n return (tracks?.find(\n (track) => track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack\n ) ?? null) as NodeRotationTrack | NodeEulerRotationTrack | null;\n}\n\nfunction collectTrackTimes(track: AnimationTrack | null, times: Set<number>) {\n if (track instanceof NodeRotationTrack || track instanceof NodeEulerRotationTrack) {\n for (const time of track.interpolator.inputs as Float32Array) {\n times.add(time);\n }\n }\n}\n\nfunction sampleRotationTrack(\n track: NodeRotationTrack | NodeEulerRotationTrack | null,\n time: number,\n fallback: Quaternion,\n out: Quaternion\n): Quaternion {\n if (!track) {\n out.set(fallback);\n return out;\n }\n const state = track.calculateState({}, time);\n out.set(state);\n return out;\n}\n\nfunction bakeHumanoidRotationTracks(\n sourceClip: AnimationClip,\n srcSkeleton: SkeletonRig,\n dstSkeleton: SkeletonRig,\n srcRootRotation: Quaternion,\n dstRootRotation: Quaternion,\n dstClip: AnimationClip,\n remaps: JointRetargetRemap[]\n) {\n const rotationTracksByRemap = new Map<\n JointRetargetRemap,\n NodeRotationTrack | NodeEulerRotationTrack | null\n >();\n const times = new Set<number>([0, sourceClip.timeDuration]);\n const remapsByDstNode = new Map<object, JointRetargetRemap>();\n const srcJointSet = new Set(srcSkeleton.joints);\n const dstJointSet = new Set(dstSkeleton.joints);\n const srcBindRotByNode = new Map<SceneNode, Quaternion>();\n const dstBindRotByNode = new Map<SceneNode, Quaternion>();\n const srcRotationTrackByNode = new Map<SceneNode, NodeRotationTrack | NodeEulerRotationTrack | null>();\n\n for (let i = 0; i < srcSkeleton.joints.length; i++) {\n const joint = srcSkeleton.joints[i];\n srcBindRotByNode.set(joint, srcSkeleton.bindPose[i].rotation);\n const track = findRotationTrack(sourceClip.tracks.get(joint));\n srcRotationTrackByNode.set(joint, track);\n collectTrackTimes(track, times);\n }\n for (let i = 0; i < dstSkeleton.joints.length; i++) {\n dstBindRotByNode.set(dstSkeleton.joints[i], dstSkeleton.bindPose[i].rotation);\n }\n for (const remap of remaps) {\n const track = findRotationTrack(sourceClip.tracks.get(remap.srcNode));\n rotationTracksByRemap.set(remap, track);\n remapsByDstNode.set(remap.dstNode, remap);\n }\n const inputs = new Float32Array([...times].sort((a, b) => a - b));\n const srcBindWorldRots = new Map<SceneNode, Quaternion>();\n const dstBindWorldRots = new Map<SceneNode, Quaternion>();\n const srcAnimWorldRots = new Map<SceneNode, Quaternion>();\n const dstAnimWorldRots = new Map<SceneNode, Quaternion>();\n const outputsByRemap = new Map<JointRetargetRemap, Float32Array>();\n const tmpLocalRot = new Quaternion();\n const tmpWorldDelta = new Quaternion();\n const tmpParentInv = new Quaternion();\n\n for (const remap of remaps) {\n outputsByRemap.set(remap, new Float32Array(inputs.length * 4));\n }\n\n function getSrcBindWorldRot(node: SceneNode): Quaternion {\n let rot = srcBindWorldRots.get(node);\n if (!rot) {\n rot = (srcBindRotByNode.get(node) ?? Quaternion.identity()).clone();\n const parent = node.parent;\n if (parent && srcJointSet.has(parent)) {\n Quaternion.multiply(getSrcBindWorldRot(parent), rot, rot);\n } else {\n Quaternion.multiply(srcRootRotation, rot, rot);\n }\n srcBindWorldRots.set(node, rot);\n }\n return rot;\n }\n\n function getDstBindWorldRot(node: SceneNode): Quaternion {\n let rot = dstBindWorldRots.get(node);\n if (!rot) {\n rot = (dstBindRotByNode.get(node) ?? Quaternion.identity()).clone();\n const parent = node.parent;\n if (parent && dstJointSet.has(parent)) {\n Quaternion.multiply(getDstBindWorldRot(parent), rot, rot);\n } else {\n Quaternion.multiply(dstRootRotation, rot, rot);\n }\n dstBindWorldRots.set(node, rot);\n }\n return rot;\n }\n\n function getSrcAnimWorldRot(node: SceneNode, time: number): Quaternion {\n let rot = srcAnimWorldRots.get(node);\n if (!rot) {\n rot = new Quaternion();\n srcAnimWorldRots.set(node, rot);\n }\n const parent = node.parent;\n const parentWorldRot = parent && srcJointSet.has(parent) ? getSrcAnimWorldRot(parent, time) : null;\n sampleRotationTrack(\n srcRotationTrackByNode.get(node) ?? null,\n time,\n srcBindRotByNode.get(node) ?? Quaternion.identity(),\n tmpLocalRot\n );\n if (parentWorldRot) {\n Quaternion.multiply(parentWorldRot, tmpLocalRot, rot);\n } else {\n Quaternion.multiply(srcRootRotation, tmpLocalRot, rot);\n }\n return rot;\n }\n\n function getDstAnimWorldRot(remap: JointRetargetRemap, time: number): Quaternion {\n let rot = dstAnimWorldRots.get(remap.dstNode);\n if (!rot) {\n rot = new Quaternion();\n dstAnimWorldRots.set(remap.dstNode, rot);\n }\n const srcBindWorldRot = getSrcBindWorldRot(remap.srcNode);\n const srcAnimWorldRot = getSrcAnimWorldRot(remap.srcNode, time);\n Quaternion.multiply(srcAnimWorldRot, Quaternion.inverse(srcBindWorldRot, tmpWorldDelta), tmpWorldDelta);\n Quaternion.multiply(tmpWorldDelta, getDstBindWorldRot(remap.dstNode), rot);\n return rot;\n }\n\n function getDstParentAnimWorldRot(node: SceneNode, time: number): Quaternion | null {\n const parent = node.parent;\n if (!parent || !dstJointSet.has(parent)) {\n return dstRootRotation;\n }\n const mappedParent = remapsByDstNode.get(parent);\n if (mappedParent) {\n return getDstAnimWorldRot(mappedParent, time);\n }\n let rot = dstAnimWorldRots.get(parent);\n if (!rot) {\n rot = (dstBindRotByNode.get(parent) ?? Quaternion.identity()).clone();\n const parentWorldRot = getDstParentAnimWorldRot(parent, time);\n if (parentWorldRot) {\n Quaternion.multiply(parentWorldRot, rot, rot);\n }\n dstAnimWorldRots.set(parent, rot);\n }\n return rot;\n }\n\n for (let i = 0; i < inputs.length; i++) {\n const time = inputs[i];\n srcAnimWorldRots.clear();\n dstAnimWorldRots.clear();\n for (const remap of remaps) {\n const dstAnimWorldRot = getDstAnimWorldRot(remap, time);\n const parentWorldRot = getDstParentAnimWorldRot(remap.dstNode, time);\n if (parentWorldRot) {\n Quaternion.multiply(Quaternion.inverse(parentWorldRot, tmpParentInv), dstAnimWorldRot, tmpLocalRot);\n } else {\n tmpLocalRot.set(dstAnimWorldRot);\n }\n tmpLocalRot.inplaceNormalize();\n outputsByRemap.get(remap)!.set(tmpLocalRot, i * 4);\n }\n }\n\n for (const remap of remaps) {\n if (!rotationTracksByRemap.get(remap)) {\n continue;\n }\n const outputs = new Float32Array(outputsByRemap.get(remap)!);\n const track = new NodeRotationTrack(\n new Interpolator('linear', 'quat', new Float32Array(inputs), outputs)\n );\n track.name = 'rotation';\n track.target = remap.dstNode.persistentId;\n track.jointIndex = remap.dstJointIndex;\n dstClip.addTrack(remap.dstNode, track);\n }\n}\n\n/**\n * Animation set\n *\n * Manages a collection of named animation clips for a model and orchestrates:\n * - Playback state (time, loops, speed, weights, fade-in/out).\n * - Blending across multiple tracks targeting the same property via weighted averages.\n * - Skeleton usage and application for clips that drive skeletal animation.\n * - Active track registration and cleanup as clips start/stop.\n *\n * Usage:\n * - Create or retrieve `AnimationClip`s by name.\n * - Start playback with `playAnimation(name, options)`.\n * - Advance animation with `update(deltaSeconds)`.\n * - Optionally adjust weight while playing with `setAnimationWeight(name, weight)`.\n *\n * Lifetime:\n * - Disposing the set releases references to the model, clips, and clears active state.\n *\n * @public\n */\nexport class AnimationSet extends Disposable implements IDisposable {\n /** @internal */\n private _model: SceneNode;\n /** @internal */\n private _animations: Partial<Record<string, AnimationClip>>;\n /** @internal */\n private _skeletons: DRef<SkinBinding>[];\n /** @internal */\n private _rigs: DRef<SkeletonRig>[];\n /** @internal */\n private readonly _activeTracks: Map<object, Map<unknown, AnimationTrack[]>>;\n /** @internal */\n private readonly _activeSkinBindings: Map<SkinBinding, number>;\n /** @internal */\n private readonly _activeRigs: Map<SkeletonRig, number>;\n /** @internal */\n private readonly _activeAnimations: Map<\n AnimationClip,\n {\n currentTime: number;\n repeat: number;\n repeatCounter: number;\n weight: number;\n speedRatio: number;\n firstFrame: boolean;\n fadeIn: number;\n fadeOut: number;\n fadeOutStart: number;\n animateTime: number;\n }\n >;\n /**\n * Create an AnimationSet controlling the provided model.\n *\n * @param model - The SceneNode (model root) controlled by this animation set.\n */\n constructor(model: SceneNode) {\n super();\n this._model = model;\n this._animations = {};\n this._activeTracks = new Map();\n this._activeSkinBindings = new Map();\n this._activeRigs = new Map();\n this._activeAnimations = new Map();\n this._skeletons = [];\n this._rigs = [];\n }\n /**\n * The model (SceneNode) controlled by this animation set.\n */\n get model() {\n return this._model;\n }\n /**\n * Number of animation clips registered in this set.\n */\n get numAnimations() {\n return Object.getOwnPropertyNames(this._animations).length;\n }\n /**\n * The skeletons used by animations in this set.\n */\n get skeletons() {\n return this._skeletons;\n }\n /**\n * The shared rigs used by animations in this set.\n */\n get rigs() {\n return this._rigs;\n }\n /**\n * Per-skin bindings used by skinned meshes in this set.\n */\n get skinBindings() {\n return this._skeletons;\n }\n private resolveRigByAnimationBindingId(id: string): SkeletonRig | null {\n return this._model.findSkeletonRigById(id) ?? this._model.findSkinBindingById(id)?.rig ?? null;\n }\n private resolveClipRig(clip: AnimationClip): SkeletonRig | null {\n let rig: SkeletonRig | null = null;\n for (const id of clip.skeletons) {\n const nextRig = this.resolveRigByAnimationBindingId(id);\n if (!nextRig) {\n continue;\n }\n if (!rig) {\n rig = nextRig;\n } else if (rig !== nextRig) {\n return null;\n }\n }\n return rig;\n }\n /**\n * Retrieve an animation clip by name.\n *\n * @param name - Name of the animation.\n * @returns The clip if present; otherwise null.\n */\n get(name: string) {\n return this._animations[name] ?? null;\n }\n /**\n * Create and register a new animation clip.\n *\n * @param name - Unique name for the animation clip.\n * @param embedded - Whether the clip is embedded/owned (implementation-specific). Default false.\n * @returns The created clip, or null if the name is empty or not unique.\n */\n createAnimation(name: string, embedded = false) {\n if (!name || this._animations[name]) {\n console.error('Animation must have unique name');\n return null;\n } else {\n const animation = new AnimationClip(name, this, embedded);\n this._animations[name] = animation;\n this._model.scene?.queueUpdateNode(this._model);\n return animation;\n }\n }\n /**\n * Delete and dispose an animation clip by name.\n *\n * - If the animation is currently playing, it is first stopped (immediately).\n *\n * @param name - Name of the animation to remove.\n */\n deleteAnimation(name: string) {\n const animation = this._animations[name];\n if (animation) {\n this.stopAnimation(name);\n delete this._animations[name];\n animation.dispose();\n }\n }\n /**\n * Get the list of all registered animation names.\n *\n * @returns An array of clip names.\n */\n getAnimationNames() {\n return Object.keys(this._animations);\n }\n /**\n * Advance and apply active animations.\n *\n * Responsibilities per call:\n * - Update time cursor for each active clip (respecting speedRatio and looping).\n * - Enforce repeat limits and apply fade-out termination if configured.\n * - For each animated target, blend active tracks (weighted by clip weight × fade-in × fade-out)\n * and apply the resulting state to the target.\n * - Apply shared rig modifiers once, then update skin binding palettes.\n *\n * @param deltaInSeconds - Time step in seconds since last update.\n */\n update(deltaInSeconds: number) {\n this._activeAnimations.forEach((v, k) => {\n if (v.fadeOut > 0 && v.fadeOutStart < 0) {\n v.fadeOutStart = v.animateTime;\n }\n // Update animation time\n if (v.firstFrame) {\n v.firstFrame = false;\n } else {\n const timeAdvance = deltaInSeconds * v.speedRatio;\n v.currentTime += timeAdvance;\n v.animateTime += timeAdvance;\n if (k.timeDuration > 0) {\n if (v.currentTime > k.timeDuration) {\n v.repeatCounter += Math.max(1, Math.floor(v.currentTime / k.timeDuration));\n v.currentTime %= k.timeDuration;\n } else if (v.currentTime < 0) {\n v.repeatCounter += Math.max(1, Math.ceil(-v.currentTime / k.timeDuration));\n v.currentTime = ((v.currentTime % k.timeDuration) + k.timeDuration) % k.timeDuration;\n }\n }\n if (v.repeat !== 0 && v.repeatCounter >= v.repeat) {\n this.stopAnimation(k.name);\n } else if (v.fadeOut > 0) {\n if (v.animateTime - v.fadeOutStart >= v.fadeOut) {\n this.stopAnimation(k.name);\n }\n }\n }\n });\n // Update tracks\n this._activeTracks.forEach((v, k) => {\n v.forEach((alltracks) => {\n // Only deal with tracks which have not been removed\n const tracks = alltracks.filter(\n (track) => track.animation && this.isPlayingAnimation(track.animation.name)\n );\n if (tracks.length > 0) {\n const weights = tracks.map((track) => {\n const info = this._activeAnimations.get(track.animation!)!;\n const weight = info.weight;\n const fadeIn = info.fadeIn === 0 ? 1 : Math.min(1, info.animateTime / info.fadeIn);\n let fadeOut = 1;\n if (info.fadeOut !== 0) {\n fadeOut = 1 - (info.animateTime - info.fadeOutStart) / info.fadeOut;\n }\n return weight * fadeIn * fadeOut;\n });\n const states = tracks.map((track) => {\n const info = this._activeAnimations.get(track.animation!)!;\n const t = (info.currentTime / track.animation!.timeDuration) * track.getDuration();\n return track.calculateState(k, t);\n });\n const state = weightedAverage(weights, states, (a, b, t) => {\n return tracks[0].mixState(a, b, t);\n });\n tracks[0].applyState(k, state);\n }\n });\n });\n // Update rigs once before computing per-skin palettes.\n this._rigs.forEach((v) => {\n v.get()?.apply(deltaInSeconds);\n });\n this._skeletons.forEach((v) => {\n v.get()?.apply();\n });\n }\n /**\n * Check whether an animation is currently playing.\n *\n * @param name - Optional animation name. If omitted, returns true if any animation is playing.\n * @returns True if playing; otherwise false.\n */\n isPlayingAnimation(name?: string) {\n if (name) {\n const animation = this._animations[name];\n return !!animation && this._activeAnimations.has(animation);\n }\n return this._activeAnimations.size > 0;\n }\n /**\n * Get an animation clip by name.\n *\n * Alias of `get(name)` returning a nullable type.\n *\n * @param name - Name of the animation.\n * @returns The clip if present; otherwise null.\n */\n getAnimationClip(name: string) {\n return this._animations[name] ?? null;\n }\n /**\n * Set the runtime blend weight for a currently playing animation.\n *\n * Has no effect if the clip is not active.\n *\n * @param name - Name of the playing animation.\n * @param weight - New weight value used during blending.\n */\n setAnimationWeight(name: string, weight: number) {\n const ani = this._animations[name];\n if (!ani) {\n console.error(`Animation ${name} not exists`);\n return;\n }\n const info = this._activeAnimations.get(ani);\n if (info) {\n info.weight = weight;\n }\n }\n /**\n * Start (or update) playback of an animation clip.\n *\n * Behavior:\n * - If the clip is already playing, stops it first.\n * - Otherwise initializes playback state (repeat counter, speed, weight, initial time).\n * - Registers clip tracks and skeletons into the active sets for blending and application.\n *\n * @param name - Name of the animation to play.\n * @param options - Playback options (repeat, speedRatio, fadeIn).\n */\n playAnimation(name: string, options?: PlayAnimationOptions) {\n const ani = this._animations[name];\n if (!ani) {\n console.error(`Animation ${name} not exists`);\n return;\n }\n if (this.isPlayingAnimation(name)) {\n this.stopAnimation(name);\n }\n const fadeIn = Math.max(options?.fadeIn ?? 0, 0);\n const repeat = options?.repeat ?? 0;\n const speedRatio = options?.speedRatio ?? 1;\n const weight = options?.weight ?? ani.weight ?? 1;\n this._activeAnimations.set(ani, {\n repeat,\n weight,\n speedRatio,\n fadeIn,\n fadeOut: 0,\n repeatCounter: 0,\n currentTime: speedRatio < 0 ? ani.timeDuration : 0,\n animateTime: 0,\n fadeOutStart: 0,\n firstFrame: true\n });\n ani.tracks?.forEach((v, k) => {\n let nodeTracks = this._activeTracks.get(k);\n if (!nodeTracks) {\n nodeTracks = new Map();\n this._activeTracks.set(k, nodeTracks);\n }\n for (const track of v) {\n const blendId = track.getBlendId();\n let blendedTracks = nodeTracks.get(blendId);\n if (!blendedTracks) {\n blendedTracks = [];\n nodeTracks.set(blendId, blendedTracks);\n }\n blendedTracks.push(track);\n }\n });\n ani.skeletons?.forEach((v, k) => {\n const rig = this.model.findSkeletonRigById(k);\n if (rig) {\n const refcount = this._activeRigs.get(rig);\n this._activeRigs.set(rig, refcount ? refcount + 1 : 1);\n rig.playing = true;\n return;\n }\n const binding = this.model.findSkinBindingById(k);\n if (binding) {\n const refcount = this._activeSkinBindings.get(binding);\n this._activeSkinBindings.set(binding, refcount ? refcount + 1 : 1);\n binding.playing = true;\n const rigRefcount = this._activeRigs.get(binding.rig);\n this._activeRigs.set(binding.rig, rigRefcount ? rigRefcount + 1 : 1);\n binding.rig.playing = true;\n }\n });\n }\n /**\n * Stop playback of an animation clip.\n *\n * Behavior:\n * - If `options.fadeOut > 0`, marks the clip for fade-out; actual removal occurs after fade completes.\n * - If `fadeOut` is 0 or omitted, immediately:\n * - Removes the clip from active animations.\n * - Unregisters its tracks from active track maps.\n * - Decrements skeleton reference counts; resets and removes skeletons when refcount reaches 0.\n *\n * @param name - Name of the animation to stop.\n * @param options - Optional fade-out configuration.\n */\n stopAnimation(name: string, options?: StopAnimationOptions) {\n const ani = this._animations[name];\n if (!ani) {\n console.error(`Animation ${name} not exists`);\n return;\n }\n const info = this._activeAnimations.get(ani);\n if (info) {\n const fadeOut = Math.max(options?.fadeOut ?? 0, 0);\n if (fadeOut !== 0) {\n info.fadeOut = fadeOut;\n info.fadeOutStart = -1;\n } else {\n this._activeAnimations.delete(ani);\n this._activeTracks.forEach((v) => {\n v.forEach((tracks, id) => {\n v.set(\n id,\n tracks.filter((track) => track.animation !== ani)\n );\n });\n });\n ani.skeletons?.forEach((v, k) => {\n const rig = this.model.findSkeletonRigById(k);\n if (rig) {\n const refcount = this._activeRigs.get(rig)!;\n if (refcount === 1) {\n rig.reset();\n this._activeRigs.delete(rig);\n } else {\n this._activeRigs.set(rig, refcount - 1);\n }\n return;\n }\n const binding = this.model.findSkinBindingById(k);\n if (binding) {\n const refcount = this._activeSkinBindings.get(binding)!;\n if (refcount === 1) {\n binding.reset();\n this._activeSkinBindings.delete(binding);\n } else {\n this._activeSkinBindings.set(binding, refcount - 1);\n }\n const rigRefcount = this._activeRigs.get(binding.rig)!;\n if (rigRefcount === 1) {\n binding.rig.reset();\n this._activeRigs.delete(binding.rig);\n } else {\n this._activeRigs.set(binding.rig, rigRefcount - 1);\n }\n }\n });\n }\n }\n }\n /**\n * Create a skeletal-only masked clip from an existing clip in this set.\n *\n * The generated clip is a regular `AnimationClip`: it contains cloned node transform tracks\n * for the selected rig joints and can be played/blended through the normal animation system.\n * Non-skeletal tracks are skipped by default.\n *\n * @param sourceName - Name of the source clip.\n * @param targetName - Name of the generated clip.\n * @param options - Humanoid semantic or joint-name based mask options.\n * @returns The generated clip, or null on failure.\n */\n createSkeletalMaskedAnimation(\n sourceName: string,\n targetName: string,\n options: SkeletalAnimationMaskOptions\n ): AnimationClip | null {\n const sourceClip = this.get(sourceName);\n if (!sourceClip) {\n console.error(`createSkeletalMaskedAnimation: animation '${sourceName}' not found`);\n return null;\n }\n const rig = this.resolveClipRig(sourceClip);\n if (!rig) {\n console.error(`createSkeletalMaskedAnimation: source animation must resolve to exactly one rig`);\n return null;\n }\n return createSkeletalMaskedAnimationClip(this, sourceClip, targetName, rig, options);\n }\n /**\n * Copy a humanoid animation clip from another AnimationSet into this one via humanoid rig mapping.\n *\n * Prerequisites:\n * - Both source and destination skeletons must have a non-null `humanoidJointMapping`.\n * - Joints are matched by shared `HumanoidBodyRig` / `HumanoidHandRig` keys instead of joint names.\n * - The source clip must exist in `sourceSet` and must be driven by exactly one skeleton.\n *\n * @param sourceSet - The AnimationSet to copy from.\n * @param animationName - Name of the clip to copy.\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\n * @returns The newly created AnimationClip, or null on failure.\n */\n copyHumanoidAnimationFrom(\n sourceSet: AnimationSet,\n animationName: string,\n options?: CopyHumanoidAnimationOptions\n ): AnimationClip | null;\n copyHumanoidAnimationFrom(\n sourceSet: AnimationSet,\n animationName: string,\n targetName?: string,\n options?: CopyHumanoidAnimationOptions\n ): AnimationClip | null;\n copyHumanoidAnimationFrom(\n sourceSet: AnimationSet,\n animationName: string,\n targetNameOrOptions?: string | CopyHumanoidAnimationOptions,\n copyOptions?: CopyHumanoidAnimationOptions\n ): AnimationClip | null {\n const options =\n typeof targetNameOrOptions === 'string' ? (copyOptions ?? {}) : (targetNameOrOptions ?? {});\n const destName =\n typeof targetNameOrOptions === 'string' ? targetNameOrOptions : (options.targetName ?? animationName);\n const rootMotion = options.rootMotion ?? 'scaled';\n const jointTranslations = options.jointTranslations ?? 'skip';\n const sourceClip = sourceSet.get(animationName);\n if (!sourceClip) {\n console.error(`copyHumanoidAnimationFrom: animation '${animationName}' not found in source set`);\n return null;\n }\n if (this._animations[destName]) {\n console.error(`copyHumanoidAnimationFrom: animation '${destName}' already exists in target set`);\n return null;\n }\n\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\n if (!srcSkeleton) {\n console.error(\n `copyHumanoidAnimationFrom: source animation clip must resolve to exactly one humanoid rig`\n );\n return null;\n }\n\n // Check that source skeleton has humanoid mapping\n const srcHumanoidMapping = srcSkeleton.humanoidJointMapping;\n if (!srcHumanoidMapping) {\n console.error(`copyHumanoidAnimationFrom: source skeleton does not have a humanoid joint mapping`);\n return null;\n }\n\n const nodeMap = new Map<object, SceneNode>();\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\n\n // Find a destination skeleton that has a humanoid mapping and share at least the body rig keys\n let srcJointsFiltered: SceneNode[] = [];\n let dstJointsFiltered: SceneNode[] = [];\n\n const dstSkeleton = this._rigs\n .map((ref) => ref.get())\n .find((sk) => {\n if (!sk) {\n return false;\n }\n // Check that destination skeleton has humanoid mapping\n const dstHumanoidMapping = sk.humanoidJointMapping;\n if (!dstHumanoidMapping) {\n return false;\n }\n\n // Collect matched (srcJoint, dstJoint) pairs via shared humanoid rig keys\n const srcMatched: SceneNode[] = [];\n const dstMatched: SceneNode[] = [];\n\n // Match body rig joints\n for (const key of Object.keys(srcHumanoidMapping.body) as (keyof typeof srcHumanoidMapping.body)[]) {\n const srcJoint = srcHumanoidMapping.body[key];\n const dstJoint = dstHumanoidMapping.body[key];\n if (srcJoint && dstJoint) {\n srcMatched.push(srcJoint);\n dstMatched.push(dstJoint);\n }\n }\n\n // Match left hand rig joints only when both sides define them; skip silently if either is absent\n if (srcHumanoidMapping.leftHand && dstHumanoidMapping.leftHand) {\n for (const key of Object.keys(\n srcHumanoidMapping.leftHand\n ) as (keyof typeof srcHumanoidMapping.leftHand)[]) {\n const srcJoint = srcHumanoidMapping.leftHand[key];\n const dstJoint = dstHumanoidMapping.leftHand[key];\n if (srcJoint && dstJoint) {\n srcMatched.push(srcJoint);\n dstMatched.push(dstJoint);\n }\n }\n }\n\n // Match right hand rig joints only when both sides define them; skip silently if either is absent\n if (srcHumanoidMapping.rightHand && dstHumanoidMapping.rightHand) {\n for (const key of Object.keys(\n srcHumanoidMapping.rightHand\n ) as (keyof typeof srcHumanoidMapping.rightHand)[]) {\n const srcJoint = srcHumanoidMapping.rightHand[key];\n const dstJoint = dstHumanoidMapping.rightHand[key];\n if (srcJoint && dstJoint) {\n srcMatched.push(srcJoint);\n dstMatched.push(dstJoint);\n }\n }\n }\n\n if (srcMatched.length === 0) {\n return false;\n }\n\n srcJointsFiltered = srcMatched;\n dstJointsFiltered = dstMatched;\n return true;\n });\n\n if (!dstSkeleton) {\n console.error(\n `copyHumanoidAnimationFrom: no matching humanoid skeleton in target set for '${srcSkeletonId}'`\n );\n return null;\n }\n\n // Compute the world-space rotation of the parent chain above a motion node,\n // walking ALL ancestor nodes up to (but not including) the model root.\n // This must include non-joint nodes such as \"Armature\" in Mixamo rigs, which\n // carry a 90° X rotation that is NOT captured by humanoidRootRotation (which\n // only traverses nodes inside the skeleton joints list).\n function computeParentChainRotation(\n node: SceneNode,\n modelRoot: SceneNode,\n skeleton: SkeletonRig\n ): Quaternion {\n const result = Quaternion.identity();\n const jointSet = new Set(skeleton.joints);\n let p = node.parent;\n while (p && p !== modelRoot) {\n if (!jointSet.has(p)) {\n Quaternion.multiply(p.rotation, result, result);\n }\n p = p.parent;\n }\n return result;\n }\n\n const srcHipsNode = srcSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\n const dstHipsNode = dstSkeleton.humanoidJointMapping!.body[HumanoidBodyRig.Hips];\n const srcRootNode = srcSkeleton.rootJoint ?? srcHipsNode;\n const dstRootNode = dstSkeleton.rootJoint ?? dstHipsNode;\n const srcRootRot = computeParentChainRotation(srcRootNode, sourceSet.model, srcSkeleton);\n const dstRootRot = computeParentChainRotation(dstRootNode, this._model, dstSkeleton);\n const srcRootTranslationTrack = findTranslationTrack(sourceClip.tracks.get(srcRootNode));\n const srcFallbackHipsTranslationTrack =\n !srcRootTranslationTrack && srcRootNode !== srcHipsNode\n ? findTranslationTrack(sourceClip.tracks.get(srcHipsNode))\n : null;\n const srcMotionTrack = srcRootTranslationTrack ?? srcFallbackHipsTranslationTrack;\n const srcMotionNode = srcRootTranslationTrack\n ? srcRootNode\n : srcFallbackHipsTranslationTrack\n ? srcHipsNode\n : null;\n const srcMotionParentRot = srcMotionNode\n ? computeParentChainRotation(srcMotionNode, sourceSet.model, srcSkeleton)\n : srcRootRot;\n const rootTranslationRotation = Quaternion.multiply(Quaternion.inverse(dstRootRot), srcMotionParentRot);\n const rootTranslationScale =\n rootMotion === 'scaled'\n ? typeof options.rootMotionScale === 'number'\n ? options.rootMotionScale\n : options.rootMotionScale === 'none'\n ? 1\n : getHumanoidRootMotionScale(srcSkeleton, dstSkeleton)\n : 1;\n const jointRemaps: JointRetargetRemap[] = [];\n const mappedSrcNodes = new Set<SceneNode>();\n const mappedDstNodes = new Set<SceneNode>();\n // Build remap for matched joint pairs\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\n const srcJoint = srcJointsFiltered[fi];\n const dstJoint = dstJointsFiltered[fi];\n if (mappedSrcNodes.has(srcJoint) || mappedDstNodes.has(dstJoint)) {\n continue;\n }\n mappedSrcNodes.add(srcJoint);\n mappedDstNodes.add(dstJoint);\n nodeMap.set(srcJoint, dstJoint);\n const remap = createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint);\n jointRemaps.push(remap);\n jointRemapBySrcNode.set(srcJoint, remap);\n }\n\n const dstClip = this.createAnimation(destName);\n if (!dstClip) {\n return null;\n }\n dstClip.timeDuration = sourceClip.timeDuration;\n dstClip.weight = sourceClip.weight;\n dstClip.autoPlay = sourceClip.autoPlay;\n\n // Register destination skeleton\n dstClip.addSkeleton(dstSkeleton.persistentId);\n\n bakeHumanoidRotationTracks(\n sourceClip,\n srcSkeleton,\n dstSkeleton,\n srcRootRot,\n dstRootRot,\n dstClip,\n jointRemaps\n );\n\n if (rootMotion !== 'none') {\n const dstRootBindPose = getRigBindPoseForNode(dstSkeleton, dstRootNode);\n let dstRootTrack: NodeTranslationTrack | null = null;\n if (rootMotion === 'locked') {\n dstRootTrack = createConstantTranslationTrack(dstRootBindPose.position);\n } else if (srcMotionTrack && srcMotionNode) {\n const srcMotionBindPose = getRigBindPoseForNode(srcSkeleton, srcMotionNode);\n const rootRemap = createTranslationRetargetRemap(\n srcMotionNode,\n dstRootNode,\n srcMotionBindPose.position,\n dstRootBindPose.position,\n dstSkeleton.joints.indexOf(dstRootNode),\n rootTranslationScale,\n rootTranslationRotation,\n options.lockRootMotionAxes\n );\n dstRootTrack = retargetTranslationTrack(srcMotionTrack, rootRemap);\n }\n if (dstRootTrack) {\n dstRootTrack.name = srcMotionTrack?.name ?? 'translation';\n dstRootTrack.target = dstRootNode.persistentId;\n dstRootTrack.jointIndex = dstSkeleton.joints.indexOf(dstRootNode);\n dstClip.addTrack(dstRootNode, dstRootTrack);\n }\n }\n\n for (const srcNode of srcJointsFiltered) {\n const srcTracks = sourceClip.tracks.get(srcNode);\n if (!srcTracks) {\n // Not every humanoid joint must have a track; skip silently\n continue;\n }\n const dstNode = nodeMap.get(srcNode)!;\n const remap = jointRemapBySrcNode.get(srcNode)!;\n\n for (const srcTrack of srcTracks) {\n let dstTrack: AnimationTrack;\n if (srcTrack instanceof NodeRotationTrack) {\n continue;\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\n continue;\n } else if (srcTrack instanceof NodeTranslationTrack) {\n if (srcNode === srcRootNode || srcTrack === srcMotionTrack || jointTranslations !== 'preserve') {\n continue;\n }\n dstTrack = retargetTranslationTrack(srcTrack, remap);\n } else if (srcTrack instanceof NodeScaleTrack) {\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\n } else {\n console.warn(\n `copyHumanoidAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`\n );\n continue;\n }\n\n dstTrack.name = srcTrack.name;\n dstTrack.target = dstNode.persistentId;\n dstTrack.jointIndex = remap.dstJointIndex;\n dstClip.addTrack(dstNode, dstTrack);\n }\n }\n\n return dstClip;\n }\n /**\n * Copy an animation clip from another AnimationSet into this one.\n *\n * Prerequisites:\n * - Both sets must reference skeletons with identical joint names and counts.\n * - The source clip must exist in `sourceSet`.\n *\n * @param sourceSet - The AnimationSet to copy from.\n * @param animationName - Name of the clip to copy.\n * @param targetName - Name for the new clip in this set. Defaults to `animationName`.\n * @param excludeJoint - Optional predicate; joints whose name returns true are excluded from\n * skeleton structure matching.\n * @returns The newly created AnimationClip, or null on failure.\n *\n * @deprecated Use AnimationSet.copyHumanoidAnimationFrom instead.\n */\n copyAnimationFrom(\n sourceSet: AnimationSet,\n animationName: string,\n targetName?: string,\n excludeJoint?: (jointName: string) => boolean\n ): AnimationClip | null {\n const destName = targetName ?? animationName;\n const sourceClip = sourceSet.get(animationName);\n if (!sourceClip) {\n console.error(`copyAnimationFrom: animation '${animationName}' not found in source set`);\n return null;\n }\n if (this._animations[destName]) {\n console.error(`copyAnimationFrom: animation '${destName}' already exists in target set`);\n return null;\n }\n\n const srcSkeletonId = [...sourceClip.skeletons][0] ?? '';\n const srcSkeleton = sourceSet.resolveClipRig(sourceClip);\n if (!srcSkeleton) {\n console.error(`copyAnimationFrom: source animation clip must resolve to exactly one rig`);\n return null;\n }\n const nodeMap = new Map<object, SceneNode>();\n const jointRemapBySrcNode = new Map<object, JointRetargetRemap>();\n\n const jointsFiltered = srcSkeleton.joints.filter((j) => !excludeJoint?.(j.name));\n const srcRootNode = findRootJoint(jointsFiltered);\n if (!srcRootNode) {\n console.error(`copyAnimationFrom: cannot determine the root joint for source skeleton`);\n return null;\n }\n // Build filtered joint lists for matching (exclude joints rejected by filterJoint)\n const srcJointsFiltered = sortJoints(srcRootNode, jointsFiltered);\n if (!srcJointsFiltered) {\n console.error(`copyAnimationFrom: invalid source skeleton structure`);\n return null;\n }\n let dstJointsFiltered: SceneNode[] = [];\n const dstSkeleton = this._rigs\n .map((ref) => ref.get())\n .find((sk) => {\n if (!sk) {\n return false;\n }\n const jointsFiltered = sk.joints.filter((j) => !excludeJoint?.(j.name));\n if (jointsFiltered.length !== srcJointsFiltered.length) {\n return false;\n }\n const rootNode = findRootJoint(jointsFiltered);\n if (!rootNode) {\n return false;\n }\n const sortedJointsFiltered = sortJoints(rootNode, jointsFiltered);\n if (\n sortedJointsFiltered &&\n srcJointsFiltered.every((j, i) => j.name === sortedJointsFiltered[i].name)\n ) {\n dstJointsFiltered = sortedJointsFiltered;\n return true;\n }\n return false;\n });\n if (!dstJointsFiltered || !dstSkeleton) {\n console.error(`copyAnimationFrom: no matching skeleton in target set for '${srcSkeletonId}'`);\n return null;\n }\n // Build remap only for joints that pass the filter\n for (let fi = 0; fi < srcJointsFiltered.length; fi++) {\n const srcJoint = srcJointsFiltered[fi];\n const dstJoint = dstJointsFiltered[fi];\n nodeMap.set(srcJoint, dstJoint);\n jointRemapBySrcNode.set(\n srcJoint,\n createJointRetargetRemap(srcSkeleton, dstSkeleton, srcJoint, dstJoint)\n );\n }\n\n const dstClip = this.createAnimation(destName);\n if (!dstClip) {\n return null;\n }\n dstClip.timeDuration = sourceClip.timeDuration;\n dstClip.weight = sourceClip.weight;\n dstClip.autoPlay = sourceClip.autoPlay;\n\n // Register destination skeleton\n dstClip.addSkeleton(dstSkeleton.persistentId);\n\n for (const srcNode of srcJointsFiltered) {\n const srcTracks = sourceClip.tracks.get(srcNode);\n if (!srcTracks) {\n console.error(`copyAnimationFrom: no track for joint: ${srcNode.name}`);\n return null;\n }\n const dstNode = nodeMap.get(srcNode)!;\n const remap = jointRemapBySrcNode.get(srcNode)!;\n\n for (const srcTrack of srcTracks) {\n let dstTrack: AnimationTrack;\n if (srcTrack instanceof NodeRotationTrack) {\n dstTrack = retargetRotationTrack(srcTrack, remap);\n } else if (srcTrack instanceof NodeEulerRotationTrack) {\n dstTrack = retargetEulerToRotationTrack(srcTrack, remap);\n } else if (srcTrack instanceof NodeTranslationTrack) {\n dstTrack = retargetTranslationTrack(srcTrack, remap);\n } else if (srcTrack instanceof NodeScaleTrack) {\n dstTrack = new NodeScaleTrack(cloneInterpolator(srcTrack.interpolator));\n } else {\n console.warn(`copyAnimationFrom: unsupported track type '${srcTrack.constructor.name}', skipping`);\n continue;\n }\n\n dstTrack.name = srcTrack.name;\n dstTrack.target = dstNode.persistentId;\n dstTrack.jointIndex = remap.dstJointIndex;\n dstClip.addTrack(dstNode, dstTrack);\n }\n }\n\n return dstClip;\n\n function findRootJoint(joints: SceneNode[]) {\n let root: Nullable<SceneNode> = null;\n for (const joint of joints) {\n if (!root) {\n root = joint;\n }\n while (!root!.isParentOf(joint)) {\n root = root!.parent;\n }\n if (!root) {\n break;\n }\n }\n if (!root || !joints.includes(root)) {\n return null;\n }\n return root;\n }\n\n function sortJoints(root: SceneNode, joints: SceneNode[]): Nullable<SceneNode[]> {\n const ordered: SceneNode[] = [];\n const visited = new Set<SceneNode>();\n function visit(joint: SceneNode) {\n if (visited.has(joint)) {\n return true;\n }\n if (!joints.includes(joint)) {\n return false;\n }\n if (joint !== root) {\n visit(joint.parent!);\n }\n visited.add(joint);\n ordered.push(joint);\n return true;\n }\n for (const joint of joints) {\n if (!visit(joint)) {\n return null;\n }\n }\n return ordered;\n }\n }\n\n /**\n * Reset all skeleton modifiers\n */\n resetSkeletonModifiers() {\n for (const sk of this._skeletons) {\n for (const modifier of sk.get()!.modifiers) {\n modifier.reset();\n }\n }\n }\n\n /**\n * Dispose the animation set and release owned resources.\n *\n * - Disposes the weak reference to the model.\n * - Disposes all registered animation clips.\n * - Clears active animations, tracks, and skeleton references.\n */\n protected onDispose() {\n super.onDispose();\n for (const k in this._animations) {\n this._animations[k]!.dispose();\n }\n this._animations = {};\n this._activeAnimations.clear();\n this._activeSkinBindings.clear();\n this._activeRigs.clear();\n this._activeTracks.clear();\n }\n}\n"],"names":["cloneInterpolator","src","Interpolator","mode","target","inputs","Float32Array","outputs","createJointRetargetRemap","srcSkeleton","dstSkeleton","srcJoint","dstJoint","translationRotation","translationScale","translationAxisLocks","si","joints","indexOf","di","srcBindPose","bindPose","dstBindPose","srcLen","position","magnitude","dstLen","dstNode","dstJointIndex","srcNode","srcBindRotInv","Quaternion","inverse","rotation","dstBindRot","clone","srcBindPos","dstBindPos","createTranslationRetargetRemap","identity","getBindPosition","skeleton","joint","index","getRigBindPoseForNode","node","getBindPoseForJoint","rootJoint","rootBindPose","scale","getBindDistanceToAncestor","ancestor","distance","bindPosition","parent","getHumanoidLegLength","side","mapping","humanoidJointMapping","body","hips","HumanoidBodyRig","Hips","foot","LeftFoot","RightFoot","toes","LeftToes","RightToes","Math","max","getHumanoidRootMotionScale","srcLeftLeg","srcRightLeg","dstLeftLeg","dstRightLeg","srcLegLength","dstLegLength","findTranslationTrack","tracks","find","track","NodeTranslationTrack","applyTranslationAxisLocks","value","bindValue","locks","x","y","z","applyTranslationTangentAxisLocks","retargetRotation","qSrcAnim","remap","out","multiply","inplaceNormalize","retargetRotationTangent","qSrcTangent","retargetTranslationValue","srcValue","setXYZ","subBy","scaleBy","transform","addBy","retargetTranslationTangent","retargetRotationTrack","isCubic","interpolator","frameStride","numFrames","length","srcOutputs","newOutputs","t","q","f","base","setXYZW","set","subarray","NodeRotationTrack","retargetEulerToRotationTrack","srcInputs","fromEulerAngle","retargetTranslationTrack","v","Vector3","createConstantTranslationTrack","findRotationTrack","NodeEulerRotationTrack","collectTrackTimes","times","time","add","sampleRotationTrack","fallback","state","calculateState","bakeHumanoidRotationTracks","sourceClip","srcRootRotation","dstRootRotation","dstClip","remaps","rotationTracksByRemap","Map","Set","timeDuration","remapsByDstNode","srcJointSet","dstJointSet","srcBindRotByNode","dstBindRotByNode","srcRotationTrackByNode","i","get","sort","a","b","srcBindWorldRots","dstBindWorldRots","srcAnimWorldRots","dstAnimWorldRots","outputsByRemap","tmpLocalRot","tmpWorldDelta","tmpParentInv","getSrcBindWorldRot","rot","has","getDstBindWorldRot","getSrcAnimWorldRot","parentWorldRot","getDstAnimWorldRot","srcBindWorldRot","srcAnimWorldRot","getDstParentAnimWorldRot","mappedParent","clear","dstAnimWorldRot","name","persistentId","jointIndex","addTrack","AnimationSet","Disposable","model","_model","_animations","_activeTracks","_activeSkinBindings","_activeRigs","_activeAnimations","_skeletons","_rigs","numAnimations","Object","getOwnPropertyNames","skeletons","rigs","skinBindings","resolveRigByAnimationBindingId","id","findSkeletonRigById","findSkinBindingById","rig","resolveClipRig","clip","nextRig","createAnimation","embedded","console","error","animation","AnimationClip","scene","queueUpdateNode","deleteAnimation","stopAnimation","dispose","getAnimationNames","keys","update","deltaInSeconds","forEach","k","fadeOut","fadeOutStart","animateTime","firstFrame","timeAdvance","speedRatio","currentTime","repeatCounter","floor","ceil","repeat","alltracks","filter","isPlayingAnimation","weights","map","info","weight","fadeIn","min","states","getDuration","weightedAverage","mixState","applyState","apply","size","getAnimationClip","setAnimationWeight","ani","playAnimation","options","nodeTracks","blendId","getBlendId","blendedTracks","push","refcount","playing","binding","rigRefcount","delete","reset","createSkeletalMaskedAnimation","sourceName","targetName","createSkeletalMaskedAnimationClip","copyHumanoidAnimationFrom","sourceSet","animationName","targetNameOrOptions","copyOptions","destName","rootMotion","jointTranslations","srcSkeletonId","srcHumanoidMapping","nodeMap","jointRemapBySrcNode","srcJointsFiltered","dstJointsFiltered","ref","sk","dstHumanoidMapping","srcMatched","dstMatched","key","leftHand","rightHand","computeParentChainRotation","modelRoot","result","jointSet","p","srcHipsNode","dstHipsNode","srcRootNode","dstRootNode","srcRootRot","dstRootRot","srcRootTranslationTrack","srcFallbackHipsTranslationTrack","srcMotionTrack","srcMotionNode","srcMotionParentRot","rootTranslationRotation","rootTranslationScale","rootMotionScale","jointRemaps","mappedSrcNodes","mappedDstNodes","fi","autoPlay","addSkeleton","dstRootBindPose","dstRootTrack","srcMotionBindPose","rootRemap","lockRootMotionAxes","srcTracks","srcTrack","dstTrack","NodeScaleTrack","warn","copyAnimationFrom","excludeJoint","jointsFiltered","j","findRootJoint","sortJoints","rootNode","sortedJointsFiltered","every","root","isParentOf","includes","ordered","visited","visit","resetSkeletonModifiers","modifier","modifiers","onDispose"],"mappings":"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"}
@@ -1,29 +1,29 @@
1
1
  import { SkeletonModifier } from './skeleton_modifier.js';
2
2
 
3
- /**
4
- * Post-processor wrapper for joint dynamics systems.
5
- *
6
- * Integrates joint-based physics simulation into the skeleton post-processing pipeline.
7
- * The joint dynamics system is updated each frame and results are blended with the base animation.
8
- *
9
- * @public
3
+ /**
4
+ * Post-processor wrapper for joint dynamics systems.
5
+ *
6
+ * Integrates joint-based physics simulation into the skeleton post-processing pipeline.
7
+ * The joint dynamics system is updated each frame and results are blended with the base animation.
8
+ *
9
+ * @public
10
10
  */ class JointDynamicsModifier extends SkeletonModifier {
11
11
  _jointDynamicsSystem;
12
- /**
13
- * Create a joint dynamics post-processor.
14
- *
15
- * @param jointDynamicsSystem - The joint dynamics system to integrate
12
+ /**
13
+ * Create a joint dynamics post-processor.
14
+ *
15
+ * @param jointDynamicsSystem - The joint dynamics system to integrate
16
16
  */ constructor(jointDynamicsSystem){
17
17
  super();
18
18
  this._jointDynamicsSystem = jointDynamicsSystem;
19
19
  }
20
- /**
21
- * Get the joint dynamics system.
20
+ /**
21
+ * Get the joint dynamics system.
22
22
  */ get jointDynamicsSystem() {
23
23
  return this._jointDynamicsSystem;
24
24
  }
25
- /**
26
- * Apply spring physics to skeleton joints.
25
+ /**
26
+ * Apply spring physics to skeleton joints.
27
27
  */ apply(_skeleton, deltaTime) {
28
28
  if (!this._enabled || this.weight <= 0) {
29
29
  return;
@@ -31,14 +31,14 @@ import { SkeletonModifier } from './skeleton_modifier.js';
31
31
  // Update spring physics simulation
32
32
  this._jointDynamicsSystem.update(deltaTime);
33
33
  }
34
- /**
35
- * Reset the spring system to initial state.
34
+ /**
35
+ * Reset the spring system to initial state.
36
36
  */ reset() {
37
37
  this._jointDynamicsSystem.resetChains();
38
38
  this._jointDynamicsSystem.controller.reset();
39
39
  }
40
- /**
41
- * @deprecated Use {@link JointDynamicsModifier.reset}. Kept as a compatibility alias for teleport handling.
40
+ /**
41
+ * @deprecated Use {@link JointDynamicsModifier.reset}. Kept as a compatibility alias for teleport handling.
42
42
  */ warp() {
43
43
  this._jointDynamicsSystem.controller.reset();
44
44
  }