@aura3d/animation 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/AnimationClipEvents.d.ts +55 -0
  2. package/dist/AnimationClipEvents.d.ts.map +1 -1
  3. package/dist/AnimationClipEvents.js +136 -0
  4. package/dist/AnimationClipEvents.js.map +1 -1
  5. package/dist/AnimationClipRegistry.d.ts +9 -3
  6. package/dist/AnimationClipRegistry.d.ts.map +1 -1
  7. package/dist/AnimationClipRegistry.js +52 -5
  8. package/dist/AnimationClipRegistry.js.map +1 -1
  9. package/dist/AnimationController.d.ts +6 -6
  10. package/dist/AnimationController.d.ts.map +1 -1
  11. package/dist/AnimationController.js +3 -3
  12. package/dist/AnimationController.js.map +1 -1
  13. package/dist/AnimationMixer.d.ts +10 -0
  14. package/dist/AnimationMixer.d.ts.map +1 -1
  15. package/dist/AnimationMixer.js +35 -0
  16. package/dist/AnimationMixer.js.map +1 -1
  17. package/dist/AnimationStateGraph.d.ts +14 -5
  18. package/dist/AnimationStateGraph.d.ts.map +1 -1
  19. package/dist/AnimationStateGraph.js +25 -2
  20. package/dist/AnimationStateGraph.js.map +1 -1
  21. package/dist/AnimationStateMachine.d.ts +26 -0
  22. package/dist/AnimationStateMachine.d.ts.map +1 -1
  23. package/dist/AnimationStateMachine.js +32 -0
  24. package/dist/AnimationStateMachine.js.map +1 -1
  25. package/dist/Bone.d.ts +4 -0
  26. package/dist/Bone.d.ts.map +1 -1
  27. package/dist/Bone.js +3 -0
  28. package/dist/Bone.js.map +1 -1
  29. package/dist/FighterAnimationAdapter.d.ts +49 -0
  30. package/dist/FighterAnimationAdapter.d.ts.map +1 -0
  31. package/dist/FighterAnimationAdapter.js +71 -0
  32. package/dist/FighterAnimationAdapter.js.map +1 -0
  33. package/dist/FootIk.d.ts +77 -0
  34. package/dist/FootIk.d.ts.map +1 -0
  35. package/dist/FootIk.js +153 -0
  36. package/dist/FootIk.js.map +1 -0
  37. package/dist/HumanoidBoneInference.d.ts +61 -0
  38. package/dist/HumanoidBoneInference.d.ts.map +1 -0
  39. package/dist/HumanoidBoneInference.js +239 -0
  40. package/dist/HumanoidBoneInference.js.map +1 -0
  41. package/dist/HumanoidRetargeting.d.ts +48 -4
  42. package/dist/HumanoidRetargeting.d.ts.map +1 -1
  43. package/dist/HumanoidRetargeting.js +149 -14
  44. package/dist/HumanoidRetargeting.js.map +1 -1
  45. package/dist/IK.d.ts +5 -0
  46. package/dist/IK.d.ts.map +1 -1
  47. package/dist/IK.js +9 -0
  48. package/dist/IK.js.map +1 -1
  49. package/dist/Inertialization.d.ts +65 -0
  50. package/dist/Inertialization.d.ts.map +1 -0
  51. package/dist/Inertialization.js +211 -0
  52. package/dist/Inertialization.js.map +1 -0
  53. package/dist/LocomotionController.d.ts +5 -0
  54. package/dist/LocomotionController.d.ts.map +1 -1
  55. package/dist/LocomotionController.js +3 -0
  56. package/dist/LocomotionController.js.map +1 -1
  57. package/dist/LocomotionKit.d.ts +52 -0
  58. package/dist/LocomotionKit.d.ts.map +1 -0
  59. package/dist/LocomotionKit.js +38 -0
  60. package/dist/LocomotionKit.js.map +1 -0
  61. package/dist/MotionQuality.d.ts +3 -3
  62. package/dist/MotionQuality.d.ts.map +1 -1
  63. package/dist/MotionQuality.js +2 -2
  64. package/dist/MotionQuality.js.map +1 -1
  65. package/dist/RigQuality.d.ts +31 -0
  66. package/dist/RigQuality.d.ts.map +1 -0
  67. package/dist/RigQuality.js +70 -0
  68. package/dist/RigQuality.js.map +1 -0
  69. package/dist/SecondaryAnimationFixtures.d.ts.map +1 -1
  70. package/dist/SecondaryAnimationFixtures.js +1 -3
  71. package/dist/SecondaryAnimationFixtures.js.map +1 -1
  72. package/dist/Skeleton.d.ts +16 -1
  73. package/dist/Skeleton.d.ts.map +1 -1
  74. package/dist/Skeleton.js +42 -0
  75. package/dist/Skeleton.js.map +1 -1
  76. package/dist/SpringBones.d.ts +60 -0
  77. package/dist/SpringBones.d.ts.map +1 -0
  78. package/dist/SpringBones.js +173 -0
  79. package/dist/SpringBones.js.map +1 -0
  80. package/dist/browser-index.d.ts +12 -3
  81. package/dist/browser-index.d.ts.map +1 -1
  82. package/dist/browser-index.js +11 -2
  83. package/dist/browser-index.js.map +1 -1
  84. package/dist/index.d.ts +11 -3
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +10 -2
  87. package/dist/index.js.map +1 -1
  88. package/dist/library/performanceStateGraph.d.ts +42 -0
  89. package/dist/library/performanceStateGraph.d.ts.map +1 -0
  90. package/dist/library/performanceStateGraph.js +101 -0
  91. package/dist/library/performanceStateGraph.js.map +1 -0
  92. package/dist/library/standardHumanoidClips.d.ts +27 -0
  93. package/dist/library/standardHumanoidClips.d.ts.map +1 -0
  94. package/dist/library/standardHumanoidClips.js +357 -0
  95. package/dist/library/standardHumanoidClips.js.map +1 -0
  96. package/package.json +3 -3
  97. package/src/AnimationClipEvents.ts +181 -0
  98. package/src/AnimationClipRegistry.ts +65 -9
  99. package/src/AnimationController.ts +11 -11
  100. package/src/AnimationMixer.ts +36 -0
  101. package/src/AnimationStateGraph.ts +34 -5
  102. package/src/AnimationStateMachine.ts +48 -0
  103. package/src/Bone.ts +5 -0
  104. package/src/FighterAnimationAdapter.ts +124 -0
  105. package/src/FootIk.ts +251 -0
  106. package/src/HumanoidBoneInference.ts +323 -0
  107. package/src/HumanoidRetargeting.ts +180 -19
  108. package/src/IK.ts +10 -0
  109. package/src/Inertialization.ts +269 -0
  110. package/src/LocomotionController.ts +6 -0
  111. package/src/LocomotionKit.ts +89 -0
  112. package/src/MotionQuality.ts +5 -5
  113. package/src/RigQuality.ts +101 -0
  114. package/src/SecondaryAnimationFixtures.ts +1 -3
  115. package/src/Skeleton.ts +45 -1
  116. package/src/SpringBones.ts +243 -0
  117. package/src/browser-index.ts +13 -4
  118. package/src/index.ts +12 -4
  119. package/src/library/performanceStateGraph.ts +117 -0
  120. package/src/library/standardHumanoidClips.ts +442 -0
  121. package/src/Retargeting.ts +0 -29
@@ -15,8 +15,8 @@ export interface AnimationMotionQualityReport {
15
15
  readonly poseDiversityScore: number;
16
16
  readonly healthy: boolean;
17
17
  }
18
- export interface CartoonAnimationMotionQualityReport extends AnimationMotionQualityReport {
19
- readonly kind: "cartoon-animation-motion-quality";
18
+ export interface AnimationAnimationMotionQualityReport extends AnimationMotionQualityReport {
19
+ readonly kind: "animation-animation-motion-quality";
20
20
  readonly staticPoseRejected: boolean;
21
21
  readonly issues: readonly string[];
22
22
  }
@@ -38,5 +38,5 @@ export declare class AnimationMotionQualityTracker {
38
38
  reset(): void;
39
39
  }
40
40
  export declare function summarizeAnimationMotion(samples: readonly AnimationMotionSample[], options?: Pick<AnimationMotionQualityOptions, "minimumSamples" | "minimumTimeRangeSeconds" | "minimumPoseDiversityScore">): AnimationMotionQualityReport;
41
- export declare function summarizeCartoonAnimationMotion(samples: readonly AnimationMotionSample[], options?: Pick<AnimationMotionQualityOptions, "minimumSamples" | "minimumTimeRangeSeconds" | "minimumPoseDiversityScore">): CartoonAnimationMotionQualityReport;
41
+ export declare function summarizeAnimationAnimationMotion(samples: readonly AnimationMotionSample[], options?: Pick<AnimationMotionQualityOptions, "minimumSamples" | "minimumTimeRangeSeconds" | "minimumPoseDiversityScore">): AnimationAnimationMotionQualityReport;
42
42
  //# sourceMappingURL=MotionQuality.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MotionQuality.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/MotionQuality.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,mCAAoC,SAAQ,4BAA4B;IACvF,QAAQ,CAAC,IAAI,EAAE,kCAAkC,CAAC;IAClD,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CAC7C;AAED,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,OAAO,GAAE,6BAAkC;IAOvD,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,4BAA4B;IASnE,MAAM,IAAI,4BAA4B;IAQtC,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,gBAAgB,GAAG,yBAAyB,GAAG,2BAA2B,CAAM,GAC5H,4BAA4B,CAgC9B;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,gBAAgB,GAAG,yBAAyB,GAAG,2BAA2B,CAAM,GAC5H,mCAAmC,CAerC"}
1
+ {"version":3,"file":"MotionQuality.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/MotionQuality.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,qCAAsC,SAAQ,4BAA4B;IACzF,QAAQ,CAAC,IAAI,EAAE,oCAAoC,CAAC;IACpD,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;CAC7C;AAED,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE3C,OAAO,GAAE,6BAAkC;IAOvD,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,4BAA4B;IASnE,MAAM,IAAI,4BAA4B;IAQtC,KAAK,IAAI,IAAI;CAGd;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,gBAAgB,GAAG,yBAAyB,GAAG,2BAA2B,CAAM,GAC5H,4BAA4B,CAgC9B;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,OAAO,GAAE,IAAI,CAAC,6BAA6B,EAAE,gBAAgB,GAAG,yBAAyB,GAAG,2BAA2B,CAAM,GAC5H,qCAAqC,CAevC"}
@@ -61,7 +61,7 @@ export function summarizeAnimationMotion(samples, options = {}) {
61
61
  && (activeTrackFrames > 0 || activeSkinningFrames > 0 || animatedSubjectFrames > 0)
62
62
  };
63
63
  }
64
- export function summarizeCartoonAnimationMotion(samples, options = {}) {
64
+ export function summarizeAnimationAnimationMotion(samples, options = {}) {
65
65
  const base = summarizeAnimationMotion(samples, options);
66
66
  const issues = [
67
67
  base.sampleCount < (options.minimumSamples ?? 8) ? "not enough motion samples" : undefined,
@@ -71,7 +71,7 @@ export function summarizeCartoonAnimationMotion(samples, options = {}) {
71
71
  ].filter((issue) => Boolean(issue));
72
72
  return {
73
73
  ...base,
74
- kind: "cartoon-animation-motion-quality",
74
+ kind: "animation-animation-motion-quality",
75
75
  staticPoseRejected: issues.length > 0,
76
76
  issues,
77
77
  healthy: issues.length === 0
@@ -1 +1 @@
1
- {"version":3,"file":"MotionQuality.js","sourceRoot":"","sources":["../../../../packages/animation/src/MotionQuality.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MotionQuality.js","sourceRoot":"","sources":["../../../../packages/animation/src/MotionQuality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type HumanoidRigDefinition } from "./HumanoidRetargeting.js";
2
+ /**
3
+ * Body-acting suitability grade for an (inferred) humanoid rig.
4
+ *
5
+ * - **A** — full humanoid: spine/neck/head, both arms with forearms + hands, both legs with lower
6
+ * legs + feet. Safe for the full performance vocabulary (gesture, point, walk/run, foot work).
7
+ * - **B** — partial humanoid: enough of the body to act (spine/head + both arms or both legs) but
8
+ * missing limbs/extremities; the director should avoid the motions that need the missing chain.
9
+ * - **C** — mascot / sparse (~8 mappable nodes): a torso + head + stub arms; head/torso acting only,
10
+ * no real limb motion.
11
+ * - **D** — not suitable for body acting: no usable skeleton (root/props only).
12
+ */
13
+ export type RigGrade = "A" | "B" | "C" | "D";
14
+ export interface RigQualityReport {
15
+ readonly grade: RigGrade;
16
+ /** Human-readable justifications for the grade (what was present / missing). */
17
+ readonly reasons: string[];
18
+ readonly hasLegs: boolean;
19
+ readonly hasKnees: boolean;
20
+ readonly hasAnkles: boolean;
21
+ readonly hasFeet: boolean;
22
+ /** Count of canonical humanoid bones that resolve to a real node. */
23
+ readonly mappedBoneCount: number;
24
+ }
25
+ /**
26
+ * Grade a rig for body-acting suitability. Pure + deterministic — driven only by which canonical
27
+ * {@link HUMANOID_BONES} resolve to nodes, so it works on the output of `inferHumanoidRig` for any
28
+ * skeleton naming convention (Mixamo / Blender / UE / sparse mascot / rich humanoid).
29
+ */
30
+ export declare function gradeRig(rig: HumanoidRigDefinition): RigQualityReport;
31
+ //# sourceMappingURL=RigQuality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RigQuality.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/RigQuality.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAQD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,qBAAqB,GAAG,gBAAgB,CA0DrE"}
@@ -0,0 +1,70 @@
1
+ import { HUMANOID_BONES } from "./HumanoidRetargeting.js";
2
+ /** A bone counts as mapped when it resolves to a non-empty target node name. */
3
+ function isMapped(rig, bone) {
4
+ const binding = rig.bones[bone];
5
+ return Boolean(binding && typeof binding.name === "string" && binding.name.length > 0);
6
+ }
7
+ /**
8
+ * Grade a rig for body-acting suitability. Pure + deterministic — driven only by which canonical
9
+ * {@link HUMANOID_BONES} resolve to nodes, so it works on the output of `inferHumanoidRig` for any
10
+ * skeleton naming convention (Mixamo / Blender / UE / sparse mascot / rich humanoid).
11
+ */
12
+ export function gradeRig(rig) {
13
+ const has = (bone) => isMapped(rig, bone);
14
+ const mappedBoneCount = HUMANOID_BONES.reduce((n, bone) => (has(bone) ? n + 1 : n), 0);
15
+ // Limb-chain capability (mirrors FootIk's notion of a usable leg chain).
16
+ const hasLegs = (has("leftUpperLeg") || has("leftLowerLeg")) && (has("rightUpperLeg") || has("rightLowerLeg"));
17
+ const hasKnees = has("leftLowerLeg") && has("rightLowerLeg");
18
+ const hasAnkles = has("leftFoot") && has("rightFoot");
19
+ const hasFeet = hasAnkles; // foot node == ankle/foot joint in the canonical skeleton.
20
+ // Spine / head axis.
21
+ const hasSpine = has("spine") || has("chest") || has("upperChest");
22
+ const hasHead = has("head");
23
+ const hasNeck = has("neck");
24
+ // Arm chains.
25
+ const hasBothUpperArms = has("leftUpperArm") && has("rightUpperArm");
26
+ const hasBothForearms = has("leftLowerArm") && has("rightLowerArm");
27
+ const hasBothHands = has("leftHand") && has("rightHand");
28
+ const hasBothLowerLegs = has("leftLowerLeg") && has("rightLowerLeg");
29
+ const reasons = [];
30
+ reasons.push(`${mappedBoneCount} of ${HUMANOID_BONES.length} canonical humanoid bones mapped`);
31
+ // --- D: no usable skeleton --------------------------------------------------------------------
32
+ // Without a spine/head axis OR both upper arms there is nothing to act with.
33
+ if (mappedBoneCount < 5 || (!hasSpine && !hasHead) || (!hasBothUpperArms && !hasLegs)) {
34
+ reasons.push("not enough body structure to drive body acting (D)");
35
+ if (!hasSpine && !hasHead)
36
+ reasons.push("missing spine/head axis");
37
+ if (!hasBothUpperArms)
38
+ reasons.push("missing a pair of upper arms");
39
+ if (!hasLegs)
40
+ reasons.push("missing a usable pair of legs");
41
+ return { grade: "D", reasons, hasLegs, hasKnees, hasAnkles, hasFeet, mappedBoneCount };
42
+ }
43
+ // --- A: full humanoid -------------------------------------------------------------------------
44
+ const fullUpperBody = hasSpine && hasNeck && hasHead && hasBothUpperArms && hasBothForearms && hasBothHands;
45
+ const fullLowerBody = hasLegs && hasBothLowerLegs && hasFeet;
46
+ if (mappedBoneCount >= 18 && fullUpperBody && fullLowerBody) {
47
+ reasons.push("full humanoid: spine/neck/head + both arms (forearms+hands) + both legs (lower legs+feet) (A)");
48
+ return { grade: "A", reasons, hasLegs, hasKnees, hasAnkles, hasFeet, mappedBoneCount };
49
+ }
50
+ // --- B: partial humanoid ----------------------------------------------------------------------
51
+ // Enough body to act: a spine/head axis plus at least a full pair of arms OR a full pair of legs.
52
+ const usableArms = hasBothUpperArms && hasBothForearms;
53
+ const usableLegs = hasLegs && hasBothLowerLegs;
54
+ if ((hasSpine || hasHead) && (usableArms || usableLegs) && mappedBoneCount >= 10) {
55
+ reasons.push("partial humanoid: body acting possible but a limb chain or extremities are missing (B)");
56
+ if (!fullUpperBody)
57
+ reasons.push("incomplete upper body (forearms/hands/neck)");
58
+ if (!fullLowerBody)
59
+ reasons.push("incomplete lower body (lower legs/feet)");
60
+ return { grade: "B", reasons, hasLegs, hasKnees, hasAnkles, hasFeet, mappedBoneCount };
61
+ }
62
+ // --- C: mascot / sparse -----------------------------------------------------------------------
63
+ reasons.push("mascot/sparse rig: head + torso acting only, no real limb chains (C)");
64
+ if (!usableArms)
65
+ reasons.push("no usable forearm chain on both arms");
66
+ if (!usableLegs)
67
+ reasons.push("no usable lower-leg chain on both legs");
68
+ return { grade: "C", reasons, hasLegs, hasKnees, hasAnkles, hasFeet, mappedBoneCount };
69
+ }
70
+ //# sourceMappingURL=RigQuality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RigQuality.js","sourceRoot":"","sources":["../../../../packages/animation/src/RigQuality.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SecondaryAnimationFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationFixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,2CAA2C,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;QACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;QACzC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;QACzC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;QACvC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;KACvC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,gCAAqC,GAAG,yBAAyB,CAqDzH"}
1
+ {"version":3,"file":"SecondaryAnimationFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationFixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,2CAA2C,CAAC;IAC7D,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;QACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE;QAC5B,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;QACzC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;QACzC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;QACvC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;KACvC,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,gCAAqC,GAAG,yBAAyB,CAmDzH"}
@@ -30,12 +30,10 @@ export function sampleSecondaryAnimationFixture(options = {}) {
30
30
  deterministicReplay: true
31
31
  },
32
32
  hash: "",
33
- claimBoundary: "Secondary animation fixture adapts old foot-IK ground placement and spring-bone secondary motion into deterministic telemetry; it does not claim production foot locking, retargeting, full-body IK, cloth/hair simulation, Unity Animation Rigging parity, or Unreal Control Rig parity.",
33
+ claimBoundary: "Secondary animation fixture provides the deterministic FootIkSample/SpringBoneSample telemetry shapes and oracle values; the real runtimes now live in FootIk.ts (two-bone foot IK + foot-lock on solveTwoBoneIk + a ground query) and SpringBones.ts (integrated spring chain). The fixture still does not claim retargeting, general full-body IK, cloth/hair simulation, Unity Animation Rigging parity, or Unreal Control Rig parity.",
34
34
  blockedClaims: [
35
- "production foot locking parity",
36
35
  "full-body IK solver parity",
37
36
  "runtime retargeting parity",
38
- "production spring-bone collision parity",
39
37
  "Unity Animation Rigging parity",
40
38
  "Unreal Control Rig parity"
41
39
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"SecondaryAnimationFixtures.js","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationFixtures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SecondaryAnimationFixtures.js","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationFixtures.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,24 @@
1
1
  import { Bone, type BoneDescriptor } from "./Bone.js";
2
- import { type Mat4 } from "./Keyframe.js";
2
+ import { type Mat4, type Vec3 } from "./Keyframe.js";
3
3
  export declare class Skeleton {
4
4
  readonly bones: readonly Bone[];
5
5
  constructor(bones: readonly (Bone | BoneDescriptor)[]);
6
6
  worldMatrices(): readonly Mat4[];
7
7
  matrixPalette(): readonly Mat4[];
8
+ /** World-space positions (translation component of each bone's world matrix). */
9
+ boneWorldPositions(): readonly Vec3[];
10
+ /**
11
+ * Ordered descendant chain from a bone (by name or index), following the first child at each
12
+ * level. Returns bone indices root-first — the input to {@link createSpringChain} (use the
13
+ * matching {@link boneWorldPositions} as the rest pose). Members tagged `springChain` are honored;
14
+ * the walk stops at the first leaf or when a child is no longer part of the chain.
15
+ */
16
+ springChainIndices(root: string | number): readonly number[];
17
+ /**
18
+ * Write solved spring-chain world positions back onto the bones as local translations (relative
19
+ * to each bone's solved parent), so the deformed chain renders. `chainIndices` and `positions`
20
+ * are root-first and aligned.
21
+ */
22
+ writeSpringChainBack(chainIndices: readonly number[], positions: readonly Vec3[]): void;
8
23
  }
9
24
  //# sourceMappingURL=Skeleton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/Skeleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAExD,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;gBAEpB,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,cAAc,CAAC,EAAE;IAarD,aAAa,IAAI,SAAS,IAAI,EAAE;IAUhC,aAAa,IAAI,SAAS,IAAI,EAAE;CAIjC"}
1
+ {"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/Skeleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAgB,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAEnE,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;gBAEpB,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,cAAc,CAAC,EAAE;IAarD,aAAa,IAAI,SAAS,IAAI,EAAE;IAUhC,aAAa,IAAI,SAAS,IAAI,EAAE;IAKhC,iFAAiF;IACjF,kBAAkB,IAAI,SAAS,IAAI,EAAE;IAIrC;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE;IAgB5D;;;;OAIG;IACH,oBAAoB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI;CAWxF"}
package/dist/Skeleton.js CHANGED
@@ -27,5 +27,47 @@ export class Skeleton {
27
27
  const worlds = this.worldMatrices();
28
28
  return this.bones.map((bone, index) => multiplyMat4(worlds[index], bone.inverseBindMatrix));
29
29
  }
30
+ /** World-space positions (translation component of each bone's world matrix). */
31
+ boneWorldPositions() {
32
+ return this.worldMatrices().map((m) => [m[12], m[13], m[14]]);
33
+ }
34
+ /**
35
+ * Ordered descendant chain from a bone (by name or index), following the first child at each
36
+ * level. Returns bone indices root-first — the input to {@link createSpringChain} (use the
37
+ * matching {@link boneWorldPositions} as the rest pose). Members tagged `springChain` are honored;
38
+ * the walk stops at the first leaf or when a child is no longer part of the chain.
39
+ */
40
+ springChainIndices(root) {
41
+ const rootIndex = typeof root === "number" ? root : this.bones.findIndex((b) => b.name === root);
42
+ if (rootIndex < 0 || rootIndex >= this.bones.length) {
43
+ throw new Error(`Spring chain root ${String(root)} not found in skeleton.`);
44
+ }
45
+ const chain = [rootIndex];
46
+ let current = rootIndex;
47
+ for (;;) {
48
+ const childIndex = this.bones.findIndex((b, i) => i > current && b.parentIndex === current);
49
+ if (childIndex < 0)
50
+ break;
51
+ chain.push(childIndex);
52
+ current = childIndex;
53
+ }
54
+ return chain;
55
+ }
56
+ /**
57
+ * Write solved spring-chain world positions back onto the bones as local translations (relative
58
+ * to each bone's solved parent), so the deformed chain renders. `chainIndices` and `positions`
59
+ * are root-first and aligned.
60
+ */
61
+ writeSpringChainBack(chainIndices, positions) {
62
+ if (chainIndices.length !== positions.length) {
63
+ throw new Error("Spring chain indices and positions must align.");
64
+ }
65
+ for (let i = 1; i < chainIndices.length; i += 1) {
66
+ const boneIndex = chainIndices[i];
67
+ const parentPos = positions[i - 1];
68
+ const pos = positions[i];
69
+ this.bones[boneIndex].translation = [pos[0] - parentPos[0], pos[1] - parentPos[1], pos[2] - parentPos[2]];
70
+ }
71
+ }
30
72
  }
31
73
  //# sourceMappingURL=Skeleton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Skeleton.js","sourceRoot":"","sources":["../../../../packages/animation/src/Skeleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAuB,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;AAExD,MAAM,OAAO,QAAQ;IACV,KAAK,CAAkB;IAEhC,YAAY,KAAyC;QACnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,WAAW,CAAC;YAC9C,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,IAAI,6BAA6B,MAAM,GAAG,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IAED,aAAa;QACX,MAAM,QAAQ,GAAW,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrG,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,aAAa;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/F,CAAC;CACF"}
1
+ {"version":3,"file":"Skeleton.js","sourceRoot":"","sources":["../../../../packages/animation/src/Skeleton.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { Quat, Vec3 } from "./Keyframe.js";
2
+ export interface SpringCollider {
3
+ readonly kind: "sphere" | "capsule";
4
+ readonly center: Vec3;
5
+ /** Capsule second endpoint (ignored for spheres). */
6
+ readonly tail?: Vec3;
7
+ readonly radius: number;
8
+ }
9
+ export interface SpringChainOptions {
10
+ /** Rest-pose world positions of the chain, root first (index 0 is the kinematic root). */
11
+ readonly bones: readonly Vec3[];
12
+ /** Spring stiffness pulling each particle to its rest pose (default 40). */
13
+ readonly stiffness?: number;
14
+ /** Velocity damping (default 4). Higher = settles faster. */
15
+ readonly damping?: number;
16
+ /** Gravity acceleration (default [0,-9.81,0]). */
17
+ readonly gravity?: Vec3;
18
+ /** Optional colliders the chain is pushed out of. */
19
+ readonly colliders?: readonly SpringCollider[];
20
+ /** Integration substeps per `integrate` call (default 2) for stiffness stability. */
21
+ readonly substeps?: number;
22
+ /** Optional chain label (telemetry). */
23
+ readonly name?: string;
24
+ }
25
+ /** Root transform driving the chain each frame. */
26
+ export interface SpringRootTransform {
27
+ readonly position: Vec3;
28
+ /** Optional rotation so the rest offsets follow the character's facing. */
29
+ readonly rotation?: Quat;
30
+ }
31
+ export interface SpringChainTelemetry {
32
+ readonly name: string;
33
+ readonly boneCount: number;
34
+ readonly stiffness: number;
35
+ readonly damping: number;
36
+ readonly rootPosition: Vec3;
37
+ readonly tipPosition: Vec3;
38
+ /** Distance from root to tip (how far the chain swings out). */
39
+ readonly maxDisplacement: number;
40
+ /** Number of particles currently resolved against a collider this step. */
41
+ readonly collisionContacts: number;
42
+ /** Total kinetic energy (Σ½|v|²); used to verify damping decay. */
43
+ readonly kineticEnergy: number;
44
+ }
45
+ export interface SpringChain {
46
+ /** Advance the chain by `dt` seconds with the root at `rootTransform`. Deterministic. */
47
+ integrate(dt: number, rootTransform: SpringRootTransform): void;
48
+ /** Current solved world positions (index 0 is the root). */
49
+ positions(): readonly Vec3[];
50
+ /** Telemetry for tests/gates and matching the fixture oracle's invariants. */
51
+ telemetry(): SpringChainTelemetry;
52
+ /** Reset the chain to its rest pose at a root transform (zero velocity). */
53
+ reset(rootTransform?: SpringRootTransform): void;
54
+ }
55
+ /**
56
+ * Create a spring-bone chain. Bind it to a bone subtree (see {@link tagSpringChain}) and call
57
+ * {@link SpringChain.integrate} each frame; write {@link SpringChain.positions} back onto the bones.
58
+ */
59
+ export declare function createSpringChain(options: SpringChainOptions): SpringChain;
60
+ //# sourceMappingURL=SpringBones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpringBones.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/SpringBones.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,yFAAyF;IACzF,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChE,4DAA4D;IAC5D,SAAS,IAAI,SAAS,IAAI,EAAE,CAAC;IAC7B,8EAA8E;IAC9E,SAAS,IAAI,oBAAoB,CAAC;IAClC,4EAA4E;IAC5E,KAAK,CAAC,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAwG1E"}
@@ -0,0 +1,173 @@
1
+ // Spring bones: secondary dynamics for hair, cloth flaps, tails, and accessories. A chain of
2
+ // particles hangs off a kinematic root (driven by the character's animation). Each particle is
3
+ // pulled toward its rest pose by a spring, pulled down by gravity, damped, kept at its bone length
4
+ // by a distance constraint, and pushed out of optional sphere/capsule colliders. The result
5
+ // composes on top of any clip for free — it just reacts to how the root moves.
6
+ //
7
+ // Integration is semi-implicit (symplectic) Euler with a fixed timestep (subdivided into substeps
8
+ // for stiffness stability), so it is deterministic: the same root-motion stream and the same `dt`
9
+ // always produce the same chain. Pure: no `Date.now()` / `Math.random()`, no engine/render import.
10
+ //
11
+ // The deterministic `SpringBoneSample` / `springSample()` in SecondaryAnimationFixtures remain the
12
+ // telemetry oracle/data-shape; this runtime produces the same invariants via `telemetry()`.
13
+ /**
14
+ * Create a spring-bone chain. Bind it to a bone subtree (see {@link tagSpringChain}) and call
15
+ * {@link SpringChain.integrate} each frame; write {@link SpringChain.positions} back onto the bones.
16
+ */
17
+ export function createSpringChain(options) {
18
+ if (options.bones.length < 2) {
19
+ throw new Error("Spring chain requires at least a root and one child bone.");
20
+ }
21
+ const stiffness = options.stiffness ?? 40;
22
+ const damping = options.damping ?? 4;
23
+ const gravity = options.gravity ?? [0, -9.81, 0];
24
+ const colliders = options.colliders ?? [];
25
+ const substeps = Math.max(1, Math.floor(options.substeps ?? 2));
26
+ const name = options.name ?? "spring-chain";
27
+ // Rest offset of each particle relative to its parent, in the root's initial frame.
28
+ const restOffsets = options.bones.map((bone, i) => i === 0 ? [0, 0, 0] : sub(bone, options.bones[i - 1]));
29
+ const restLengths = restOffsets.map((o) => len(o));
30
+ const positions = options.bones.map((b) => [...b]);
31
+ const velocities = options.bones.map(() => [0, 0, 0]);
32
+ let contacts = 0;
33
+ function rotatedRestOffset(i, rotation) {
34
+ return rotation ? rotateVec3(restOffsets[i], rotation) : restOffsets[i];
35
+ }
36
+ function step(dt, root) {
37
+ contacts = 0;
38
+ // Root particle is kinematic.
39
+ positions[0] = [...root.position];
40
+ velocities[0] = [0, 0, 0];
41
+ for (let i = 1; i < positions.length; i += 1) {
42
+ const parent = positions[i - 1];
43
+ const rest = add(parent, rotatedRestOffset(i, root.rotation));
44
+ const p = positions[i];
45
+ const v = velocities[i];
46
+ // a = stiffness*(rest - p) + gravity - damping*v (semi-implicit: update v, then p)
47
+ const ax = stiffness * (rest[0] - p[0]) + gravity[0] - damping * v[0];
48
+ const ay = stiffness * (rest[1] - p[1]) + gravity[1] - damping * v[1];
49
+ const az = stiffness * (rest[2] - p[2]) + gravity[2] - damping * v[2];
50
+ const nv = [v[0] + ax * dt, v[1] + ay * dt, v[2] + az * dt];
51
+ let np = [p[0] + nv[0] * dt, p[1] + nv[1] * dt, p[2] + nv[2] * dt];
52
+ // Distance constraint: keep the bone length to the parent.
53
+ np = enforceLength(parent, np, restLengths[i]);
54
+ // Collider push-out.
55
+ for (const collider of colliders) {
56
+ const resolved = pushOut(np, collider);
57
+ if (resolved) {
58
+ np = resolved.position;
59
+ // Remove the inward velocity component so it doesn't tunnel back in.
60
+ const dot = nv[0] * resolved.normal[0] + nv[1] * resolved.normal[1] + nv[2] * resolved.normal[2];
61
+ if (dot < 0) {
62
+ nv[0] -= dot * resolved.normal[0];
63
+ nv[1] -= dot * resolved.normal[1];
64
+ nv[2] -= dot * resolved.normal[2];
65
+ }
66
+ contacts += 1;
67
+ }
68
+ }
69
+ // Recompute velocity from the constrained position so energy bookkeeping stays consistent.
70
+ velocities[i] = [(np[0] - p[0]) / dt, (np[1] - p[1]) / dt, (np[2] - p[2]) / dt];
71
+ positions[i] = np;
72
+ }
73
+ }
74
+ return {
75
+ integrate(dt, rootTransform) {
76
+ if (!Number.isFinite(dt) || dt <= 0)
77
+ throw new Error("Spring chain dt must be finite and positive.");
78
+ const sub = dt / substeps;
79
+ for (let s = 0; s < substeps; s += 1)
80
+ step(sub, rootTransform);
81
+ },
82
+ positions() {
83
+ return positions.map((p) => [...p]);
84
+ },
85
+ telemetry() {
86
+ const tip = positions[positions.length - 1];
87
+ const root = positions[0];
88
+ let ke = 0;
89
+ for (const v of velocities)
90
+ ke += 0.5 * (v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
91
+ return {
92
+ name,
93
+ boneCount: positions.length,
94
+ stiffness,
95
+ damping,
96
+ rootPosition: [...root],
97
+ tipPosition: [...tip],
98
+ maxDisplacement: dist(root, tip),
99
+ collisionContacts: contacts,
100
+ kineticEnergy: ke
101
+ };
102
+ },
103
+ reset(rootTransform) {
104
+ const rootPos = rootTransform?.position ?? options.bones[0];
105
+ const rotation = rootTransform?.rotation;
106
+ positions[0] = [...rootPos];
107
+ velocities[0] = [0, 0, 0];
108
+ for (let i = 1; i < positions.length; i += 1) {
109
+ positions[i] = add(positions[i - 1], rotatedRestOffset(i, rotation));
110
+ velocities[i] = [0, 0, 0];
111
+ }
112
+ }
113
+ };
114
+ }
115
+ function enforceLength(anchor, point, length) {
116
+ const d = sub(point, anchor);
117
+ const l = len(d);
118
+ if (l <= 1e-8)
119
+ return [anchor[0], anchor[1] + length, anchor[2]];
120
+ const s = length / l;
121
+ return [anchor[0] + d[0] * s, anchor[1] + d[1] * s, anchor[2] + d[2] * s];
122
+ }
123
+ function pushOut(point, collider) {
124
+ const closest = collider.kind === "capsule" && collider.tail
125
+ ? closestPointOnSegment(point, collider.center, collider.tail)
126
+ : collider.center;
127
+ const d = sub(point, closest);
128
+ const l = len(d);
129
+ if (l >= collider.radius)
130
+ return undefined;
131
+ const normal = l <= 1e-8 ? [0, 1, 0] : [d[0] / l, d[1] / l, d[2] / l];
132
+ return {
133
+ position: [closest[0] + normal[0] * collider.radius, closest[1] + normal[1] * collider.radius, closest[2] + normal[2] * collider.radius],
134
+ normal
135
+ };
136
+ }
137
+ function closestPointOnSegment(p, a, b) {
138
+ const ab = sub(b, a);
139
+ const t = clamp(dot(sub(p, a), ab) / Math.max(1e-8, dot(ab, ab)), 0, 1);
140
+ return [a[0] + ab[0] * t, a[1] + ab[1] * t, a[2] + ab[2] * t];
141
+ }
142
+ function add(a, b) {
143
+ return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
144
+ }
145
+ function sub(a, b) {
146
+ return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
147
+ }
148
+ function dot(a, b) {
149
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
150
+ }
151
+ function len(a) {
152
+ return Math.hypot(a[0], a[1], a[2]);
153
+ }
154
+ function dist(a, b) {
155
+ return len(sub(a, b));
156
+ }
157
+ function clamp(value, min, max) {
158
+ return Math.max(min, Math.min(max, value));
159
+ }
160
+ function rotateVec3(v, q) {
161
+ // v' = q * v * q⁻¹ (unit quaternion).
162
+ const [x, y, z, w] = q;
163
+ const ix = w * v[0] + y * v[2] - z * v[1];
164
+ const iy = w * v[1] + z * v[0] - x * v[2];
165
+ const iz = w * v[2] + x * v[1] - y * v[0];
166
+ const iw = -x * v[0] - y * v[1] - z * v[2];
167
+ return [
168
+ ix * w + iw * -x + iy * -z - iz * -y,
169
+ iy * w + iw * -y + iz * -x - ix * -z,
170
+ iz * w + iw * -z + ix * -y - iy * -x
171
+ ];
172
+ }
173
+ //# sourceMappingURL=SpringBones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpringBones.js","sourceRoot":"","sources":["../../../../packages/animation/src/SpringBones.ts"],"names":[],"mappings":"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"}