@aura3d/animation 2.0.0 → 2.0.1

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.
@@ -1,4 +1,4 @@
1
- import type { AnimationClipThreeCompat, ThreeCompatLoopMode } from "./AnimationClip";
1
+ import type { AnimationClipThreeCompat, ThreeCompatLoopMode } from "./AnimationClip.js";
2
2
  export declare class AnimationActionThreeCompat {
3
3
  readonly clip: AnimationClipThreeCompat;
4
4
  time: number;
@@ -1,6 +1,6 @@
1
- import type { AnimationMixerThreeCompat } from "./AnimationMixer";
2
- import type { MorphTargetMixerThreeCompat } from "./MorphTargetMixer";
3
- import type { SkinnedMeshThreeCompat } from "./SkinnedMesh";
1
+ import type { AnimationMixerThreeCompat } from "./AnimationMixer.js";
2
+ import type { MorphTargetMixerThreeCompat } from "./MorphTargetMixer.js";
3
+ import type { SkinnedMeshThreeCompat } from "./SkinnedMesh.js";
4
4
  export interface ThreeCompatAnimatedAssetDiagnostic {
5
5
  readonly id: string;
6
6
  readonly path: string;
@@ -1,5 +1,5 @@
1
- import { AnimationActionThreeCompat } from "./AnimationAction";
2
- import type { AnimationClipThreeCompat } from "./AnimationClip";
1
+ import { AnimationActionThreeCompat } from "./AnimationAction.js";
2
+ import type { AnimationClipThreeCompat } from "./AnimationClip.js";
3
3
  export declare class AnimationMixerThreeCompat {
4
4
  readonly actions: AnimationActionThreeCompat[];
5
5
  time: number;
@@ -1,4 +1,4 @@
1
- import type { SkeletonThreeCompat } from "./Skeleton";
1
+ import type { SkeletonThreeCompat } from "./Skeleton.js";
2
2
  export declare class SkinnedMeshThreeCompat {
3
3
  readonly skeleton: SkeletonThreeCompat;
4
4
  readonly geometry: unknown;
@@ -1,12 +1,12 @@
1
- export { AnimationClipThreeCompat } from "./AnimationClip";
2
- export type { ThreeCompatKeyframeTrack, ThreeCompatLoopMode } from "./AnimationClip";
3
- export { AnimationActionThreeCompat } from "./AnimationAction";
4
- export { AnimationMixerThreeCompat } from "./AnimationMixer";
5
- export { SkeletonThreeCompat } from "./Skeleton";
6
- export type { ThreeCompatBone } from "./Skeleton";
7
- export { SkinnedMeshThreeCompat } from "./SkinnedMesh";
8
- export { MorphTargetMixerThreeCompat } from "./MorphTargetMixer";
9
- export type { ThreeCompatMorphTargetWeight } from "./MorphTargetMixer";
10
- export { createThreeCompatAnimationDiagnostics, inspectThreeCompatAnimatedAssets, THREE_COMPAT_ANIMATED_GLTF_ASSETS } from "./AnimationDiagnostics";
11
- export type { ThreeCompatAnimatedAssetDiagnostic } from "./AnimationDiagnostics";
1
+ export { AnimationClipThreeCompat } from "./AnimationClip.js";
2
+ export type { ThreeCompatKeyframeTrack, ThreeCompatLoopMode } from "./AnimationClip.js";
3
+ export { AnimationActionThreeCompat } from "./AnimationAction.js";
4
+ export { AnimationMixerThreeCompat } from "./AnimationMixer.js";
5
+ export { SkeletonThreeCompat } from "./Skeleton.js";
6
+ export type { ThreeCompatBone } from "./Skeleton.js";
7
+ export { SkinnedMeshThreeCompat } from "./SkinnedMesh.js";
8
+ export { MorphTargetMixerThreeCompat } from "./MorphTargetMixer.js";
9
+ export type { ThreeCompatMorphTargetWeight } from "./MorphTargetMixer.js";
10
+ export { createThreeCompatAnimationDiagnostics, inspectThreeCompatAnimatedAssets, THREE_COMPAT_ANIMATED_GLTF_ASSETS } from "./AnimationDiagnostics.js";
11
+ export type { ThreeCompatAnimatedAssetDiagnostic } from "./AnimationDiagnostics.js";
12
12
  //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aura3d/animation",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -12,7 +12,7 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@aura3d/math": "2.0.0"
15
+ "@aura3d/math": "2.0.1"
16
16
  },
17
17
  "description": "Deterministic animation clips, mixers, root motion, skeleton palettes, blend trees, state machines, and scene/ECS animation bridges for Aura3D.",
18
18
  "keywords": [
@@ -1,58 +0,0 @@
1
- import type { Vec3 } from "./Keyframe.js";
2
- export interface MotionMatchingFixtureOptions {
3
- readonly currentPosition?: Vec3;
4
- readonly moveDirection?: Vec3;
5
- readonly facingDirection?: Vec3;
6
- readonly speed?: number;
7
- readonly elapsedSeconds?: number;
8
- readonly previousPoseId?: string;
9
- readonly seed?: number;
10
- }
11
- export interface MotionMatchingTrajectorySample {
12
- readonly time: number;
13
- readonly position: Vec3;
14
- readonly direction: Vec3;
15
- }
16
- export interface MotionMatchingPoseCandidate {
17
- readonly id: string;
18
- readonly clip: "idle" | "walk" | "run" | "strafe" | "turn" | "jump";
19
- readonly time: number;
20
- readonly tags: readonly string[];
21
- readonly rootVelocity: Vec3;
22
- readonly footLeft: Vec3;
23
- readonly footRight: Vec3;
24
- readonly trajectory: readonly MotionMatchingTrajectorySample[];
25
- }
26
- export interface MotionMatchingCandidateScore {
27
- readonly poseId: string;
28
- readonly clip: MotionMatchingPoseCandidate["clip"];
29
- readonly tags: readonly string[];
30
- readonly velocityCost: number;
31
- readonly facingCost: number;
32
- readonly trajectoryCost: number;
33
- readonly continuityCost: number;
34
- readonly totalCost: number;
35
- }
36
- export interface MotionMatchingFixtureSample {
37
- readonly id: "external-parity-old-branch-motion-matching-fixture";
38
- readonly source: "origin-master-motion-matching-system-adapted";
39
- readonly databasePoseCount: number;
40
- readonly candidateScores: readonly MotionMatchingCandidateScore[];
41
- readonly selectedPoseId: string;
42
- readonly selectedClip: MotionMatchingPoseCandidate["clip"];
43
- readonly selectedTags: readonly string[];
44
- readonly selectedTime: number;
45
- readonly transitioned: boolean;
46
- readonly blendWeight: number;
47
- readonly transitionDurationSeconds: number;
48
- readonly queryTrajectory: readonly MotionMatchingTrajectorySample[];
49
- readonly querySpeed: number;
50
- readonly queryFacingAlignment: number;
51
- readonly bestCost: number;
52
- readonly secondBestCost: number;
53
- readonly costMargin: number;
54
- readonly hash: string;
55
- readonly claimBoundary: string;
56
- }
57
- export declare function sampleMotionMatchingFixture(options?: MotionMatchingFixtureOptions): MotionMatchingFixtureSample;
58
- //# sourceMappingURL=MotionMatchingFixtures.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MotionMatchingFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/MotionMatchingFixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,8BAA8B,EAAE,CAAC;CAChE;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,oDAAoD,CAAC;IAClE,QAAQ,CAAC,MAAM,EAAE,8CAA8C,CAAC;IAChE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAClE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC3D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,SAAS,8BAA8B,EAAE,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID,wBAAgB,2BAA2B,CAAC,OAAO,GAAE,4BAAiC,GAAG,2BAA2B,CAiDnH"}
@@ -1,175 +0,0 @@
1
- const predictionTimes = [0.2, 0.45, 0.75];
2
- export function sampleMotionMatchingFixture(options = {}) {
3
- const seed = options.seed ?? 0x3d2025;
4
- if (!Number.isInteger(seed))
5
- throw new RangeError("Motion matching fixture seed must be an integer.");
6
- const currentPosition = vec3(options.currentPosition ?? [0, 0, 0], "currentPosition");
7
- const moveDirection = normalize(vec3(options.moveDirection ?? [1, 0, 0.18], "moveDirection"));
8
- const facingDirection = normalize(vec3(options.facingDirection ?? [1, 0, 0], "facingDirection"));
9
- const speed = clamp(finite(options.speed ?? 0.74, "speed"), 0, 1);
10
- const elapsedSeconds = Math.max(0, finite(options.elapsedSeconds ?? 0, "elapsedSeconds"));
11
- const maxSpeed = 6.2;
12
- const queryVelocity = scale(moveDirection, speed * maxSpeed);
13
- const queryTrajectory = predictionTimes.map((time) => ({
14
- time,
15
- position: roundVec3(add(currentPosition, scale(queryVelocity, time))),
16
- direction: roundVec3(normalize(lerpVec3(moveDirection, facingDirection, Math.min(1, time * 0.8))))
17
- }));
18
- const database = createMotionDatabase(seed);
19
- const previousPoseId = options.previousPoseId ?? database[0]?.id ?? "idle-0";
20
- const scored = database
21
- .map((candidate) => scoreCandidate(candidate, queryVelocity, facingDirection, queryTrajectory, previousPoseId))
22
- .sort((left, right) => left.totalCost - right.totalCost);
23
- const selected = scored[0];
24
- if (!selected)
25
- throw new Error("Motion matching fixture database is empty.");
26
- const selectedPose = database.find((candidate) => candidate.id === selected.poseId);
27
- if (!selectedPose)
28
- throw new Error("Motion matching fixture selected an unknown pose.");
29
- const secondBestCost = scored[1]?.totalCost ?? selected.totalCost;
30
- const transitioned = selected.poseId !== previousPoseId;
31
- const transitionDurationSeconds = 0.18;
32
- const blendWeight = transitioned ? clamp(elapsedSeconds / transitionDurationSeconds, 0, 1) : 1;
33
- return {
34
- id: "external-parity-old-branch-motion-matching-fixture",
35
- source: "origin-master-motion-matching-system-adapted",
36
- databasePoseCount: database.length,
37
- candidateScores: scored.slice(0, 6),
38
- selectedPoseId: selected.poseId,
39
- selectedClip: selected.clip,
40
- selectedTags: selected.tags,
41
- selectedTime: selectedPose.time,
42
- transitioned,
43
- blendWeight: Number(blendWeight.toFixed(4)),
44
- transitionDurationSeconds,
45
- queryTrajectory,
46
- querySpeed: Number(length(queryVelocity).toFixed(4)),
47
- queryFacingAlignment: Number(dot(moveDirection, facingDirection).toFixed(4)),
48
- bestCost: selected.totalCost,
49
- secondBestCost,
50
- costMargin: Number((secondBestCost - selected.totalCost).toFixed(5)),
51
- hash: hashMotionFixture(scored, queryTrajectory),
52
- claimBoundary: "Deterministic pose-database scoring, trajectory prediction, tag filtering, continuity cost, and transition telemetry adapted from the old motion-matching system; this is bounded runtime evidence, not a full animation database, inertialization, pose application, foot locking, or Unity/Unreal animation middleware parity."
53
- };
54
- }
55
- function createMotionDatabase(seed) {
56
- const clips = ["idle", "walk", "run", "strafe", "turn", "jump"];
57
- return clips.flatMap((clip, clipIndex) => {
58
- const speed = clip === "idle" ? 0 : clip === "walk" ? 2.1 : clip === "run" ? 5.8 : clip === "strafe" ? 3.2 : clip === "turn" ? 0.9 : 3.8;
59
- const angle = clip === "strafe" ? Math.PI / 2 : clip === "turn" ? 0.62 : seeded01(seed + clipIndex * 41) * 0.14 - 0.07;
60
- const direction = [Math.cos(angle), 0, Math.sin(angle)];
61
- return [0, 1, 2].map((poseIndex) => {
62
- const time = Number((poseIndex * 0.18 + seeded01(seed + clipIndex * 101 + poseIndex) * 0.04).toFixed(4));
63
- const phase = poseIndex / 3;
64
- return {
65
- id: `${clip}-${poseIndex}`,
66
- clip,
67
- time,
68
- tags: clip === "idle" ? ["idle"] : clip === "jump" ? ["action", "airborne"] : ["locomotion", clip],
69
- rootVelocity: roundVec3(scale(direction, speed * (0.92 + phase * 0.12))),
70
- footLeft: roundVec3([-0.16, Math.sin(phase * Math.PI * 2) * 0.08, 0.08]),
71
- footRight: roundVec3([0.16, Math.sin((phase + 0.5) * Math.PI * 2) * 0.08, -0.08]),
72
- trajectory: predictionTimes.map((predictionTime) => ({
73
- time: predictionTime,
74
- position: roundVec3(scale(direction, speed * predictionTime)),
75
- direction: roundVec3(direction)
76
- }))
77
- };
78
- });
79
- });
80
- }
81
- function scoreCandidate(candidate, queryVelocity, facingDirection, queryTrajectory, previousPoseId) {
82
- const velocityCost = distance(candidate.rootVelocity, queryVelocity);
83
- const facingCost = 1 - clamp(dot(normalize(candidate.trajectory[0]?.direction ?? [1, 0, 0]), facingDirection), -1, 1);
84
- const trajectoryCost = queryTrajectory.reduce((sum, query, index) => {
85
- const candidateSample = candidate.trajectory[index] ?? candidate.trajectory[candidate.trajectory.length - 1];
86
- return sum + distance(candidateSample.position, subtract(query.position, queryTrajectory[0]?.position ?? [0, 0, 0]));
87
- }, 0) / Math.max(1, queryTrajectory.length);
88
- const continuityCost = candidate.id === previousPoseId ? 0 : candidate.clip === previousPoseId.split("-")[0] ? 0.12 : 0.34;
89
- const totalCost = velocityCost * 0.46 + facingCost * 1.2 + trajectoryCost * 0.38 + continuityCost;
90
- return {
91
- poseId: candidate.id,
92
- clip: candidate.clip,
93
- tags: candidate.tags,
94
- velocityCost: Number(velocityCost.toFixed(5)),
95
- facingCost: Number(facingCost.toFixed(5)),
96
- trajectoryCost: Number(trajectoryCost.toFixed(5)),
97
- continuityCost: Number(continuityCost.toFixed(5)),
98
- totalCost: Number(totalCost.toFixed(5))
99
- };
100
- }
101
- function hashMotionFixture(scores, trajectory) {
102
- let hash = 0x811c9dc5;
103
- for (const score of scores) {
104
- for (const char of `${score.poseId}:${score.totalCost}:${score.velocityCost}`) {
105
- hash ^= char.charCodeAt(0);
106
- hash = Math.imul(hash, 0x01000193) >>> 0;
107
- }
108
- }
109
- for (const sample of trajectory) {
110
- for (const value of [sample.time, ...sample.position, ...sample.direction]) {
111
- const scaled = Math.round(value * 10_000);
112
- hash ^= scaled & 0xff;
113
- hash = Math.imul(hash, 0x01000193) >>> 0;
114
- hash ^= (scaled >>> 8) & 0xff;
115
- hash = Math.imul(hash, 0x01000193) >>> 0;
116
- }
117
- }
118
- return hash.toString(16).padStart(8, "0");
119
- }
120
- function vec3(value, label) {
121
- if (value.length !== 3 || value.some((entry) => !Number.isFinite(entry))) {
122
- throw new RangeError(`Motion matching fixture ${label} must contain three finite numbers.`);
123
- }
124
- return [value[0], value[1], value[2]];
125
- }
126
- function roundVec3(value) {
127
- return [Number(value[0].toFixed(4)), Number(value[1].toFixed(4)), Number(value[2].toFixed(4))];
128
- }
129
- function add(left, right) {
130
- return [left[0] + right[0], left[1] + right[1], left[2] + right[2]];
131
- }
132
- function subtract(left, right) {
133
- return [left[0] - right[0], left[1] - right[1], left[2] - right[2]];
134
- }
135
- function scale(value, scalar) {
136
- return [value[0] * scalar, value[1] * scalar, value[2] * scalar];
137
- }
138
- function lerpVec3(left, right, weight) {
139
- return [
140
- left[0] + (right[0] - left[0]) * weight,
141
- left[1] + (right[1] - left[1]) * weight,
142
- left[2] + (right[2] - left[2]) * weight
143
- ];
144
- }
145
- function dot(left, right) {
146
- return left[0] * right[0] + left[1] * right[1] + left[2] * right[2];
147
- }
148
- function length(value) {
149
- return Math.hypot(value[0], value[1], value[2]);
150
- }
151
- function distance(left, right) {
152
- return length(subtract(left, right));
153
- }
154
- function normalize(value) {
155
- const valueLength = length(value);
156
- if (valueLength <= 1e-6)
157
- return [1, 0, 0];
158
- return scale(value, 1 / valueLength);
159
- }
160
- function finite(value, label) {
161
- if (!Number.isFinite(value))
162
- throw new RangeError(`Motion matching fixture ${label} must be finite.`);
163
- return value;
164
- }
165
- function clamp(value, min, max) {
166
- return Math.max(min, Math.min(max, value));
167
- }
168
- function seeded01(seed) {
169
- let value = seed >>> 0;
170
- value ^= value << 13;
171
- value ^= value >>> 17;
172
- value ^= value << 5;
173
- return ((value >>> 0) % 10_000) / 10_000;
174
- }
175
- //# sourceMappingURL=MotionMatchingFixtures.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MotionMatchingFixtures.js","sourceRoot":"","sources":["../../../../packages/animation/src/MotionMatchingFixtures.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { Matrix4 } from "@aura3d/math";
2
- export interface RetargetBoneMap {
3
- readonly source: string;
4
- readonly target: string;
5
- readonly scale?: number;
6
- }
7
- export interface RetargetPoseInput {
8
- readonly sourcePose: ReadonlyMap<string, Matrix4>;
9
- readonly boneMap: readonly RetargetBoneMap[];
10
- }
11
- export declare function retargetPose(input: RetargetPoseInput): Map<string, Matrix4>;
12
- //# sourceMappingURL=Retargeting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Retargeting.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/Retargeting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CAC9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAe3E"}
@@ -1,19 +0,0 @@
1
- import { Matrix4 } from "@aura3d/math";
2
- export function retargetPose(input) {
3
- const output = new Map();
4
- for (const mapping of input.boneMap) {
5
- const source = input.sourcePose.get(mapping.source);
6
- if (!source)
7
- continue;
8
- const elements = [...source.elements];
9
- const scale = mapping.scale ?? 1;
10
- if (scale !== 1) {
11
- elements[12] *= scale;
12
- elements[13] *= scale;
13
- elements[14] *= scale;
14
- }
15
- output.set(mapping.target, new Matrix4(elements));
16
- }
17
- return output;
18
- }
19
- //# sourceMappingURL=Retargeting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Retargeting.js","sourceRoot":"","sources":["../../../../packages/animation/src/Retargeting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAavC,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;YACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;YACtB,QAAQ,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC;QACxB,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,QAA0C,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,55 +0,0 @@
1
- import type { Vec3 } from "./Keyframe";
2
- export interface SecondaryAnimationFixtureOptions {
3
- readonly stridePhase?: number;
4
- readonly rootHeight?: number;
5
- readonly velocity?: Vec3;
6
- readonly terrainSlope?: number;
7
- readonly deltaSeconds?: number;
8
- readonly seed?: number;
9
- }
10
- export interface FootIkSample {
11
- readonly side: "left" | "right";
12
- readonly sourceFoot: Vec3;
13
- readonly plantedFoot: Vec3;
14
- readonly groundNormal: Vec3;
15
- readonly grounded: boolean;
16
- readonly verticalCorrection: number;
17
- readonly targetError: number;
18
- }
19
- export interface SpringBoneSample {
20
- readonly chainName: "ponytail";
21
- readonly boneCount: number;
22
- readonly stiffness: number;
23
- readonly damping: number;
24
- readonly collisionRadius: number;
25
- readonly substeps: number;
26
- readonly gravity: Vec3;
27
- readonly wind: Vec3;
28
- readonly rootPosition: Vec3;
29
- readonly tipPosition: Vec3;
30
- readonly maxDisplacement: number;
31
- readonly collisionContacts: number;
32
- }
33
- export interface SecondaryAnimationFixture {
34
- readonly source: "origin-master-foot-ik-spring-bone-adapted";
35
- readonly footIk: {
36
- readonly feet: readonly FootIkSample[];
37
- readonly hipOffset: number;
38
- readonly averageTargetError: number;
39
- readonly groundedFeet: number;
40
- readonly terrainSlope: number;
41
- };
42
- readonly springBone: SpringBoneSample;
43
- readonly productionReadiness: {
44
- readonly footPlacementTelemetry: boolean;
45
- readonly hipAdjustmentTelemetry: boolean;
46
- readonly springChainTelemetry: boolean;
47
- readonly collisionTelemetry: boolean;
48
- readonly deterministicReplay: boolean;
49
- };
50
- readonly hash: string;
51
- readonly claimBoundary: string;
52
- readonly blockedClaims: readonly string[];
53
- }
54
- export declare function sampleSecondaryAnimationFixture(options?: SecondaryAnimationFixtureOptions): SecondaryAnimationFixture;
55
- //# sourceMappingURL=SecondaryAnimationFixtures.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,145 +0,0 @@
1
- export function sampleSecondaryAnimationFixture(options = {}) {
2
- const stridePhase = wrap01(options.stridePhase ?? 0.35);
3
- const rootHeight = clamp(options.rootHeight ?? 1.08, 0.4, 2.4);
4
- const velocity = options.velocity ?? [0.9, 0, 0.22];
5
- const terrainSlope = clamp(options.terrainSlope ?? 0.18, -0.7, 0.7);
6
- const deltaSeconds = clamp(options.deltaSeconds ?? 1 / 60, 1 / 240, 1 / 10);
7
- const seed = integerSeed(options.seed ?? 0x3d2025);
8
- const groundNormal = normalize([-terrainSlope, 1, 0.08]);
9
- const left = footSample("left", stridePhase, rootHeight, terrainSlope, groundNormal, velocity, seed);
10
- const right = footSample("right", wrap01(stridePhase + 0.5), rootHeight, terrainSlope, groundNormal, velocity, seed + 17);
11
- const feet = [left, right];
12
- const averageTargetError = round(feet.reduce((sum, foot) => sum + foot.targetError, 0) / feet.length);
13
- const hipOffset = round(-Math.max(...feet.map((foot) => Math.max(0, foot.verticalCorrection))) * 0.72);
14
- const springBone = springSample(rootHeight, velocity, deltaSeconds, seed);
15
- const fixture = {
16
- source: "origin-master-foot-ik-spring-bone-adapted",
17
- footIk: {
18
- feet,
19
- hipOffset,
20
- averageTargetError,
21
- groundedFeet: feet.filter((foot) => foot.grounded).length,
22
- terrainSlope: round(terrainSlope)
23
- },
24
- springBone,
25
- productionReadiness: {
26
- footPlacementTelemetry: feet.every((foot) => foot.grounded && foot.targetError <= 0.015),
27
- hipAdjustmentTelemetry: hipOffset < 0,
28
- springChainTelemetry: springBone.boneCount >= 4 && springBone.maxDisplacement > 0,
29
- collisionTelemetry: springBone.collisionContacts > 0,
30
- deterministicReplay: true
31
- },
32
- hash: "",
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
- blockedClaims: [
35
- "full-body IK solver parity",
36
- "runtime retargeting parity",
37
- "Unity Animation Rigging parity",
38
- "Unreal Control Rig parity"
39
- ]
40
- };
41
- return {
42
- ...fixture,
43
- hash: stableHash([
44
- fixture.footIk.groundedFeet,
45
- fixture.footIk.hipOffset,
46
- fixture.footIk.averageTargetError,
47
- fixture.springBone.maxDisplacement,
48
- fixture.springBone.collisionContacts,
49
- fixture.springBone.tipPosition.join(",")
50
- ].join("|"))
51
- };
52
- }
53
- function footSample(side, phase, rootHeight, terrainSlope, normal, velocity, seed) {
54
- const lateral = side === "left" ? -0.18 : 0.18;
55
- const stride = Math.sin(phase * Math.PI * 2) * 0.22 + velocity[0] * 0.06;
56
- const lift = Math.max(0, Math.sin(phase * Math.PI * 2)) * 0.08;
57
- const jitter = (noise(seed) - 0.5) * 0.01;
58
- const x = round(stride + jitter);
59
- const z = round(lateral + velocity[2] * 0.04);
60
- const sourceY = round(rootHeight - 1.05 + lift);
61
- const groundY = round(x * terrainSlope - Math.abs(lateral) * 0.04);
62
- const planted = [x, groundY + 0.035, z];
63
- const source = [x, sourceY, z];
64
- const verticalCorrection = round(sourceY - planted[1]);
65
- return {
66
- side,
67
- sourceFoot: source,
68
- plantedFoot: planted,
69
- groundNormal: normal,
70
- grounded: true,
71
- verticalCorrection,
72
- targetError: round(Math.abs(planted[1] - (groundY + 0.035)))
73
- };
74
- }
75
- function springSample(rootHeight, velocity, deltaSeconds, seed) {
76
- const stiffness = 0.62;
77
- const damping = 0.38;
78
- const collisionRadius = 0.08;
79
- const substeps = Math.max(1, Math.min(4, Math.ceil(deltaSeconds / (1 / 120))));
80
- const rootPosition = [0, round(rootHeight + 0.32), -0.08];
81
- const wind = [round(velocity[0] * 0.18 + noise(seed + 9) * 0.05), 0, round(0.1 + velocity[2] * 0.08)];
82
- const gravity = [0, -9.81, 0];
83
- const displacement = round(Math.hypot(wind[0], wind[2]) * (1 - damping) + 0.055);
84
- const rawTip = [
85
- round(rootPosition[0] + wind[0] * 0.38),
86
- round(rootPosition[1] - 0.42 - displacement * 0.35),
87
- round(rootPosition[2] + wind[2] * 0.42)
88
- ];
89
- const collisionFloor = rootHeight - 0.22;
90
- const collisionContacts = rawTip[1] < collisionFloor + collisionRadius ? 1 : 0;
91
- const tipPosition = collisionContacts > 0 ? [rawTip[0], round(collisionFloor + collisionRadius), rawTip[2]] : rawTip;
92
- return {
93
- chainName: "ponytail",
94
- boneCount: 5,
95
- stiffness,
96
- damping,
97
- collisionRadius,
98
- substeps,
99
- gravity,
100
- wind,
101
- rootPosition,
102
- tipPosition,
103
- maxDisplacement: round(distance(rootPosition, tipPosition)),
104
- collisionContacts
105
- };
106
- }
107
- function wrap01(value) {
108
- const wrapped = value - Math.floor(value);
109
- return Number.isFinite(wrapped) ? wrapped : 0;
110
- }
111
- function integerSeed(value) {
112
- if (!Number.isInteger(value))
113
- throw new Error("Secondary animation fixture seed must be an integer.");
114
- return value;
115
- }
116
- function normalize(value) {
117
- const length = Math.hypot(value[0], value[1], value[2]);
118
- if (length <= 1e-6)
119
- return [0, 1, 0];
120
- return [round(value[0] / length), round(value[1] / length), round(value[2] / length)];
121
- }
122
- function distance(left, right) {
123
- return Math.hypot(left[0] - right[0], left[1] - right[1], left[2] - right[2]);
124
- }
125
- function noise(seed) {
126
- let value = Math.imul(seed ^ 0x9e3779b9, 0x85ebca6b);
127
- value ^= value >>> 13;
128
- value = Math.imul(value, 0xc2b2ae35);
129
- return ((value ^ (value >>> 16)) >>> 0) / 0xffffffff;
130
- }
131
- function clamp(value, min, max) {
132
- return Math.max(min, Math.min(max, Number.isFinite(value) ? value : min));
133
- }
134
- function round(value) {
135
- return Number(value.toFixed(4));
136
- }
137
- function stableHash(value) {
138
- let hash = 0x811c9dc5;
139
- for (let index = 0; index < value.length; index += 1) {
140
- hash ^= value.charCodeAt(index);
141
- hash = Math.imul(hash, 0x01000193);
142
- }
143
- return (hash >>> 0).toString(16).padStart(8, "0");
144
- }
145
- //# sourceMappingURL=SecondaryAnimationFixtures.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SecondaryAnimationFixtures.js","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationFixtures.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- import type { Vec3 } from "./Keyframe";
2
- export interface SecondaryAnimationFixtureOptions {
3
- readonly stridePhase?: number;
4
- readonly rootHeight?: number;
5
- readonly velocity?: Vec3;
6
- readonly terrainSlope?: number;
7
- readonly deltaSeconds?: number;
8
- readonly seed?: number;
9
- }
10
- export interface FootIkSample {
11
- readonly side: "left" | "right";
12
- readonly sourceFoot: Vec3;
13
- readonly plantedFoot: Vec3;
14
- readonly groundNormal: Vec3;
15
- readonly grounded: boolean;
16
- readonly verticalCorrection: number;
17
- readonly targetError: number;
18
- }
19
- export interface SpringBoneSample {
20
- readonly chainName: "ponytail";
21
- readonly boneCount: number;
22
- readonly stiffness: number;
23
- readonly damping: number;
24
- readonly collisionRadius: number;
25
- readonly substeps: number;
26
- readonly gravity: Vec3;
27
- readonly wind: Vec3;
28
- readonly rootPosition: Vec3;
29
- readonly tipPosition: Vec3;
30
- readonly maxDisplacement: number;
31
- readonly collisionContacts: number;
32
- }
33
- export interface SecondaryAnimationFixture {
34
- readonly source: "origin-master-foot-ik-spring-bone-adapted";
35
- readonly footIk: {
36
- readonly feet: readonly FootIkSample[];
37
- readonly hipOffset: number;
38
- readonly averageTargetError: number;
39
- readonly groundedFeet: number;
40
- readonly terrainSlope: number;
41
- };
42
- readonly springBone: SpringBoneSample;
43
- readonly productionReadiness: {
44
- readonly footPlacementTelemetry: boolean;
45
- readonly hipAdjustmentTelemetry: boolean;
46
- readonly springChainTelemetry: boolean;
47
- readonly collisionTelemetry: boolean;
48
- readonly deterministicReplay: boolean;
49
- };
50
- readonly hash: string;
51
- readonly claimBoundary: string;
52
- readonly blockedClaims: readonly string[];
53
- }
54
- export declare function sampleSecondaryAnimationFixture(options?: SecondaryAnimationFixtureOptions): SecondaryAnimationFixture;
55
- //# sourceMappingURL=SecondaryAnimationSampling.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SecondaryAnimationSampling.d.ts","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationSampling.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"}
@@ -1,145 +0,0 @@
1
- export function sampleSecondaryAnimationFixture(options = {}) {
2
- const stridePhase = wrap01(options.stridePhase ?? 0.35);
3
- const rootHeight = clamp(options.rootHeight ?? 1.08, 0.4, 2.4);
4
- const velocity = options.velocity ?? [0.9, 0, 0.22];
5
- const terrainSlope = clamp(options.terrainSlope ?? 0.18, -0.7, 0.7);
6
- const deltaSeconds = clamp(options.deltaSeconds ?? 1 / 60, 1 / 240, 1 / 10);
7
- const seed = integerSeed(options.seed ?? 0x3d2025);
8
- const groundNormal = normalize([-terrainSlope, 1, 0.08]);
9
- const left = footSample("left", stridePhase, rootHeight, terrainSlope, groundNormal, velocity, seed);
10
- const right = footSample("right", wrap01(stridePhase + 0.5), rootHeight, terrainSlope, groundNormal, velocity, seed + 17);
11
- const feet = [left, right];
12
- const averageTargetError = round(feet.reduce((sum, foot) => sum + foot.targetError, 0) / feet.length);
13
- const hipOffset = round(-Math.max(...feet.map((foot) => Math.max(0, foot.verticalCorrection))) * 0.72);
14
- const springBone = springSample(rootHeight, velocity, deltaSeconds, seed);
15
- const fixture = {
16
- source: "origin-master-foot-ik-spring-bone-adapted",
17
- footIk: {
18
- feet,
19
- hipOffset,
20
- averageTargetError,
21
- groundedFeet: feet.filter((foot) => foot.grounded).length,
22
- terrainSlope: round(terrainSlope)
23
- },
24
- springBone,
25
- productionReadiness: {
26
- footPlacementTelemetry: feet.every((foot) => foot.grounded && foot.targetError <= 0.015),
27
- hipAdjustmentTelemetry: hipOffset < 0,
28
- springChainTelemetry: springBone.boneCount >= 4 && springBone.maxDisplacement > 0,
29
- collisionTelemetry: springBone.collisionContacts > 0,
30
- deterministicReplay: true
31
- },
32
- hash: "",
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
- blockedClaims: [
35
- "full-body IK solver parity",
36
- "runtime retargeting parity",
37
- "Unity Animation Rigging parity",
38
- "Unreal Control Rig parity"
39
- ]
40
- };
41
- return {
42
- ...fixture,
43
- hash: stableHash([
44
- fixture.footIk.groundedFeet,
45
- fixture.footIk.hipOffset,
46
- fixture.footIk.averageTargetError,
47
- fixture.springBone.maxDisplacement,
48
- fixture.springBone.collisionContacts,
49
- fixture.springBone.tipPosition.join(",")
50
- ].join("|"))
51
- };
52
- }
53
- function footSample(side, phase, rootHeight, terrainSlope, normal, velocity, seed) {
54
- const lateral = side === "left" ? -0.18 : 0.18;
55
- const stride = Math.sin(phase * Math.PI * 2) * 0.22 + velocity[0] * 0.06;
56
- const lift = Math.max(0, Math.sin(phase * Math.PI * 2)) * 0.08;
57
- const jitter = (noise(seed) - 0.5) * 0.01;
58
- const x = round(stride + jitter);
59
- const z = round(lateral + velocity[2] * 0.04);
60
- const sourceY = round(rootHeight - 1.05 + lift);
61
- const groundY = round(x * terrainSlope - Math.abs(lateral) * 0.04);
62
- const planted = [x, groundY + 0.035, z];
63
- const source = [x, sourceY, z];
64
- const verticalCorrection = round(sourceY - planted[1]);
65
- return {
66
- side,
67
- sourceFoot: source,
68
- plantedFoot: planted,
69
- groundNormal: normal,
70
- grounded: true,
71
- verticalCorrection,
72
- targetError: round(Math.abs(planted[1] - (groundY + 0.035)))
73
- };
74
- }
75
- function springSample(rootHeight, velocity, deltaSeconds, seed) {
76
- const stiffness = 0.62;
77
- const damping = 0.38;
78
- const collisionRadius = 0.08;
79
- const substeps = Math.max(1, Math.min(4, Math.ceil(deltaSeconds / (1 / 120))));
80
- const rootPosition = [0, round(rootHeight + 0.32), -0.08];
81
- const wind = [round(velocity[0] * 0.18 + noise(seed + 9) * 0.05), 0, round(0.1 + velocity[2] * 0.08)];
82
- const gravity = [0, -9.81, 0];
83
- const displacement = round(Math.hypot(wind[0], wind[2]) * (1 - damping) + 0.055);
84
- const rawTip = [
85
- round(rootPosition[0] + wind[0] * 0.38),
86
- round(rootPosition[1] - 0.42 - displacement * 0.35),
87
- round(rootPosition[2] + wind[2] * 0.42)
88
- ];
89
- const collisionFloor = rootHeight - 0.22;
90
- const collisionContacts = rawTip[1] < collisionFloor + collisionRadius ? 1 : 0;
91
- const tipPosition = collisionContacts > 0 ? [rawTip[0], round(collisionFloor + collisionRadius), rawTip[2]] : rawTip;
92
- return {
93
- chainName: "ponytail",
94
- boneCount: 5,
95
- stiffness,
96
- damping,
97
- collisionRadius,
98
- substeps,
99
- gravity,
100
- wind,
101
- rootPosition,
102
- tipPosition,
103
- maxDisplacement: round(distance(rootPosition, tipPosition)),
104
- collisionContacts
105
- };
106
- }
107
- function wrap01(value) {
108
- const wrapped = value - Math.floor(value);
109
- return Number.isFinite(wrapped) ? wrapped : 0;
110
- }
111
- function integerSeed(value) {
112
- if (!Number.isInteger(value))
113
- throw new Error("Secondary animation fixture seed must be an integer.");
114
- return value;
115
- }
116
- function normalize(value) {
117
- const length = Math.hypot(value[0], value[1], value[2]);
118
- if (length <= 1e-6)
119
- return [0, 1, 0];
120
- return [round(value[0] / length), round(value[1] / length), round(value[2] / length)];
121
- }
122
- function distance(left, right) {
123
- return Math.hypot(left[0] - right[0], left[1] - right[1], left[2] - right[2]);
124
- }
125
- function noise(seed) {
126
- let value = Math.imul(seed ^ 0x9e3779b9, 0x85ebca6b);
127
- value ^= value >>> 13;
128
- value = Math.imul(value, 0xc2b2ae35);
129
- return ((value ^ (value >>> 16)) >>> 0) / 0xffffffff;
130
- }
131
- function clamp(value, min, max) {
132
- return Math.max(min, Math.min(max, Number.isFinite(value) ? value : min));
133
- }
134
- function round(value) {
135
- return Number(value.toFixed(4));
136
- }
137
- function stableHash(value) {
138
- let hash = 0x811c9dc5;
139
- for (let index = 0; index < value.length; index += 1) {
140
- hash ^= value.charCodeAt(index);
141
- hash = Math.imul(hash, 0x01000193);
142
- }
143
- return (hash >>> 0).toString(16).padStart(8, "0");
144
- }
145
- //# sourceMappingURL=SecondaryAnimationSampling.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SecondaryAnimationSampling.js","sourceRoot":"","sources":["../../../../packages/animation/src/SecondaryAnimationSampling.ts"],"names":[],"mappings":"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"}