@helix3/helix-cli 0.1.7-helix3.39 → 0.1.7-helix3.41

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.
@@ -66,7 +66,7 @@ export interface ImportCharacterResult {
66
66
  unmapped: string[];
67
67
  dropped: string[];
68
68
  };
69
- conform: Pick<ConformResult, 'mode' | 'verticesProcessed' | 'jointsRebuilt'>;
69
+ conform: Pick<ConformResult, 'mode' | 'unitScale' | 'restAimed' | 'verticesProcessed' | 'jointsRebuilt'>;
70
70
  /** Aggregated over the per-level encodes (each LOD may use a different codec).
71
71
  * With `ktx2: false` the encoder is 'skipped', modes is empty and before/after are 0. */
72
72
  ktx2: {
@@ -17,6 +17,7 @@ const esm_1 = require("./esm");
17
17
  const meshyToHelixMap_1 = require("./meshyToHelixMap");
18
18
  const retarget_1 = require("./stages/retarget");
19
19
  const conform_1 = require("./stages/conform");
20
+ const sanitizeMaterials_1 = require("./stages/sanitizeMaterials");
20
21
  const canonicalSkeleton_1 = require("./canonicalSkeleton");
21
22
  const retargetClip_1 = require("./stages/retargetClip");
22
23
  const simplifyMesh_1 = require("./stages/simplifyMesh");
@@ -179,7 +180,12 @@ async function importCharacter(opts) {
179
180
  };
180
181
  const conf = (0, conform_1.conformToHelixRest)(body, canon, conformMap);
181
182
  log(`conform: ${(0, node_path_1.basename)(opts.body)} [mode: ${conf.mode}]`);
182
- log(` ${conf.mode === 'embed' ? 'embedded canonical skeleton into' : 're-posed'} ${conf.verticesProcessed} verts · ${conf.jointsRebuilt} canonical joints`);
183
+ if (conf.unitScale !== 1)
184
+ log(` ⚠ unit-normalized: source joint worlds scaled by ${conf.unitScale} to match the mesh's units (cm-scale rig)`);
185
+ log(` ${conf.mode === 'embed' ? 'embedded canonical skeleton into' : 're-posed'} ${conf.verticesProcessed} verts · ${conf.jointsRebuilt} canonical joints · ${conf.restAimed} rests aimed at source segments`);
186
+ const san = (0, sanitizeMaterials_1.sanitizeBakedEmissive)(body);
187
+ if (san.emissiveStripped > 0)
188
+ log(` stripped baked emissive on ${san.emissiveStripped} material(s)${san.metallicZeroed > 0 ? ` · metallic → 0 on ${san.metallicZeroed}` : ''}`);
183
189
  // 3. Package (the engine package-cli flow). The conformed doc is serialized once so each LOD level
184
190
  // decimates a fresh copy, exactly like package-cli re-reading its --body input per level.
185
191
  const conformedBytes = await io.writeBinary(body);
@@ -291,7 +297,7 @@ async function importCharacter(opts) {
291
297
  lodTris: sceneTris(out),
292
298
  textureSizes,
293
299
  retarget: { renamed: Object.keys(ret.renamed).length, unmapped: ret.unmapped, dropped: ret.dropped },
294
- conform: { mode: conf.mode, verticesProcessed: conf.verticesProcessed, jointsRebuilt: conf.jointsRebuilt },
300
+ conform: { mode: conf.mode, unitScale: conf.unitScale, restAimed: conf.restAimed, verticesProcessed: conf.verticesProcessed, jointsRebuilt: conf.jointsRebuilt },
295
301
  ktx2: { encoder, modes, before: ktxBefore, after: ktxAfter },
296
302
  clip,
297
303
  };
@@ -1 +1 @@
1
- {"version":3,"file":"importCharacter.js","sourceRoot":"","sources":["../../src/character/importCharacter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"importCharacter.js","sourceRoot":"","sources":["../../src/character/importCharacter.ts"],"names":[],"mappings":"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"}
@@ -27,3 +27,10 @@ export declare function normalize3(a: Vec3): [number, number, number];
27
27
  * direction/pose/position difference.
28
28
  */
29
29
  export declare function frameFromAxis(axis: Vec3, pos: Vec3): number[];
30
+ /**
31
+ * Minimal (shortest-arc) rotation taking direction `from` onto direction `to`, as a column-major 4x4
32
+ * with zero translation. Unlike frameFromAxis pairs, it adds NO roll about the target axis — the roll
33
+ * DOF a bone direction can't express stays untouched. Antiparallel inputs get a π turn about an
34
+ * arbitrary perpendicular axis.
35
+ */
36
+ export declare function shortestArc4(from: Vec3, to: Vec3): number[];
@@ -10,6 +10,7 @@ exports.transformDir = transformDir;
10
10
  exports.rigidize = rigidize;
11
11
  exports.normalize3 = normalize3;
12
12
  exports.frameFromAxis = frameFromAxis;
13
+ exports.shortestArc4 = shortestArc4;
13
14
  /** Column-major 4x4 multiply (glTF convention): out = a * b. */
14
15
  function mul4(a, b) {
15
16
  const out = new Array(16);
@@ -100,4 +101,28 @@ function frameFromAxis(axis, pos) {
100
101
  const z = (0, exports.cross3)(x, y);
101
102
  return [x[0], x[1], x[2], 0, y[0], y[1], y[2], 0, z[0], z[1], z[2], 0, pos[0], pos[1], pos[2], 1];
102
103
  }
104
+ /**
105
+ * Minimal (shortest-arc) rotation taking direction `from` onto direction `to`, as a column-major 4x4
106
+ * with zero translation. Unlike frameFromAxis pairs, it adds NO roll about the target axis — the roll
107
+ * DOF a bone direction can't express stays untouched. Antiparallel inputs get a π turn about an
108
+ * arbitrary perpendicular axis.
109
+ */
110
+ function shortestArc4(from, to) {
111
+ const f = normalize3(from), t = normalize3(to);
112
+ const c = (0, exports.dot3)(f, t);
113
+ if (c < -1 + 1e-9) {
114
+ const ref = Math.abs(f[0]) < 0.9 ? [1, 0, 0] : [0, 1, 0];
115
+ const [ax, ay, az] = normalize3((0, exports.cross3)(f, ref));
116
+ return [2 * ax * ax - 1, 2 * ax * ay, 2 * ax * az, 0, 2 * ax * ay, 2 * ay * ay - 1, 2 * ay * az, 0, 2 * ax * az, 2 * ay * az, 2 * az * az - 1, 0, 0, 0, 0, 1];
117
+ }
118
+ // Rodrigues with a = f×t (|a| = sinθ): R = I + [a]× + [a]ײ/(1+c), which collapses to the form below.
119
+ const [ax, ay, az] = (0, exports.cross3)(f, t);
120
+ const k = 1 / (1 + c);
121
+ return [
122
+ ax * ax * k + c, ax * ay * k + az, ax * az * k - ay, 0,
123
+ ax * ay * k - az, ay * ay * k + c, ay * az * k + ax, 0,
124
+ ax * az * k + ay, ay * az * k - ax, az * az * k + c, 0,
125
+ 0, 0, 0, 1,
126
+ ];
127
+ }
103
128
  //# sourceMappingURL=mat4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mat4.js","sourceRoot":"","sources":["../../src/character/mat4.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mat4.js","sourceRoot":"","sources":["../../src/character/mat4.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@ export interface CanonicalSkeleton {
24
24
  export declare function extractCanonicalSkeleton(document: Document): CanonicalSkeleton;
25
25
  export interface ConformResult {
26
26
  mode: 'embed' | 'repose';
27
+ /** Uniform scale baked onto the source joint worlds before fitting (1 = rig already matched the mesh's units; 0.01 = cm rig snapped to a meter mesh). */
28
+ unitScale: number;
29
+ /** 'embed' only: mapped bones whose rest orientation was re-aimed onto the source's segment direction (0 in 'repose'). */
30
+ restAimed: number;
27
31
  verticesProcessed: number;
28
32
  jointsRebuilt: number;
29
33
  /** warrior joint name -> helix joint that received its weights (via map, or nearest mapped ancestor) */
@@ -42,10 +46,10 @@ export interface ConformOptions {
42
46
  * Retargets a source character onto `helix-humanoid@1` so the PLATFORM's shared clips drive it.
43
47
  *
44
48
  * 'embed' (default, the better retarget): the source mesh is left byte-for-byte unchanged and the
45
- * canonical 68-bone skeleton is fitted INTO it (canonical bone orientations at the source's joint
46
- * positions, §fitSkeletonToWarrior). Clips — authored as local rotations relative to the canonical rest
47
- * — produce the correct WORLD-space motion regardless of the source's bone-axis convention, because the
48
- * mesh rides the bones in world space (we never route the mesh through mismatched local frames). Output
49
+ * canonical 68-bone skeleton is fitted INTO it (segment-aimed canonical orientations at the source's
50
+ * joint positions, §fitSkeletonToWarrior). Clips — authored as local rotations relative to the canonical
51
+ * rest — produce the correct WORLD-space motion regardless of the source's bone-axis convention or bind
52
+ * pose, because the aimed rests subtract the source-bind-vs-canonical direction delta at the IBM. Output
49
53
  * IBMs = inverse(fitted world), so LBS at rest reproduces the pristine source bind pose.
50
54
  *
51
55
  * 'repose' re-poses the mesh onto the canonical rest via frame-based rest-pose correction (kept for
@@ -44,21 +44,85 @@ function extractCanonicalSkeleton(document) {
44
44
  return { nodes, jointNames, worldByName, skeletonRootName: rootNode.getName() };
45
45
  }
46
46
  /**
47
- * Fits the canonical skeleton onto a source character's proportions: KEEPS every canonical bone's local
48
- * REST ROTATION (so target clips apply natively) but sets each bone's WORLD POSITION to the source's
49
- * corresponding joint directly for mapped bones, and for unmapped in-betweens (spine_02/04, neck_02,
50
- * twists, fingers) by scaling their canonical offset-from-parent by the enclosing mapped segment's
51
- * scale. The result is a rig with canonical orientations at the source's own joint positions, so the
52
- * source mesh binds to it UNCHANGED (no shape distortion the whole point vs. re-posing the mesh).
47
+ * Fits the canonical skeleton onto a source character's proportions. Positions: mapped bones sit at the
48
+ * source's joint worlds; unmapped in-betweens (spine_02/04, neck_02, twists) interpolate along their
49
+ * enclosing mapped span at their canonical fraction (extrapolating by parent-segment scale overshoots —
50
+ * a 3× lower spine threw spine_02 past spine_03, a zigzag lever every clip then rotates); bones with no
51
+ * mapped span (fingers) scale their canonical offset by the parent segment. Orientations: canonical
52
+ * local rest rotations, EXCEPT mapped bones with a mapped continuation, whose rest is re-aimed by the
53
+ * shortest arc from the canonical segment direction onto the source's. The IBM (inverse of rest) then
54
+ * subtracts the source-bind-vs-canonical direction delta ONCE — a shared canonical clip lands every
55
+ * segment in the same world direction as the stock body instead of carrying the bind delta into every
56
+ * pose (Meshy binding arms ~19° flatter than MetaHuman read as hands-behind-the-back in every clip).
57
+ * Shortest-arc adds no roll: the twist DOF a segment direction can't express stays canonical. The
58
+ * source mesh still binds UNCHANGED — rest render is pristine (M·IBM = I) whatever rest we choose.
53
59
  */
54
60
  function fitSkeletonToWarrior(canon, directPos) {
55
61
  const canonPos = (n) => posOf(canon.worldByName.get(n));
62
+ // Canonical topology lookups.
63
+ const parentOf = new Map();
64
+ const childrenOf = new Map();
65
+ for (const def of canon.nodes) {
66
+ parentOf.set(def.name, def.parent);
67
+ if (def.parent !== null) {
68
+ const arr = childrenOf.get(def.parent);
69
+ if (arr === undefined)
70
+ childrenOf.set(def.parent, [def.name]);
71
+ else
72
+ arr.push(def.name);
73
+ }
74
+ }
75
+ const mappedBelow = (name) => {
76
+ const out = [];
77
+ for (const c of childrenOf.get(name) ?? []) {
78
+ if (directPos.has(c))
79
+ out.push(c);
80
+ else
81
+ out.push(...mappedBelow(c));
82
+ }
83
+ return out;
84
+ };
85
+ const nearestMappedAncestor = (name) => {
86
+ for (let p = parentOf.get(name) ?? null; p !== null; p = parentOf.get(p) ?? null)
87
+ if (directPos.has(p))
88
+ return p;
89
+ return null;
90
+ };
91
+ // Aim anchor per mapped bone: the nearest mapped descendant that best CONTINUES the chain (max
92
+ // alignment with the bone's canonical incoming direction — picks spine_01 over the thighs for pelvis).
93
+ const aimAnchor = new Map();
94
+ for (const def of canon.nodes) {
95
+ if (!directPos.has(def.name))
96
+ continue;
97
+ const cands = mappedBelow(def.name);
98
+ if (cands.length === 0)
99
+ continue;
100
+ const parent = def.parent;
101
+ const inDir = parent !== null ? (0, mat4_1.normalize3)((0, mat4_1.sub3)(canonPos(def.name), canonPos(parent))) : [0, 1, 0];
102
+ let best = cands[0], bestDot = -Infinity;
103
+ for (const c of cands) {
104
+ const d = (0, mat4_1.dot3)((0, mat4_1.normalize3)((0, mat4_1.sub3)(canonPos(c), canonPos(def.name))), inDir);
105
+ if (d > bestDot) {
106
+ bestDot = d;
107
+ best = c;
108
+ }
109
+ }
110
+ aimAnchor.set(def.name, best);
111
+ }
56
112
  // Pass 1 — desired world position per bone (canon.nodes is DFS, parent before child).
113
+ // HIP-HEIGHT RE-REFERENCE: clips drive the pelvis's LOCAL translation with values authored for the
114
+ // canonical hip height, so a source whose pelvis rests higher/lower loses that delta under every clip
115
+ // and its feet sink into / float off the ground by exactly it. Shift the delta into the ROOT's rest
116
+ // translation (no clip writes root — the pipeline strips non-pelvis position tracks): the pelvis rest
117
+ // local becomes canonical by construction, worlds are unchanged (rest render pristine), and under
118
+ // clips the pelvis rides at root Δ + clip value — the source's own height, feet planted like stock.
119
+ const rootDelta = directPos.has('pelvis') ? (0, mat4_1.sub3)(directPos.get('pelvis'), canonPos('pelvis')) : [0, 0, 0];
57
120
  const desired = new Map();
58
121
  const scaleBy = new Map();
59
122
  for (const def of canon.nodes) {
60
123
  if (def.parent === null) {
61
- desired.set(def.name, canonPos(def.name));
124
+ const c = canonPos(def.name);
125
+ desired.set(def.name, [c[0] + rootDelta[0], c[1] + rootDelta[1], c[2] + rootDelta[2]]);
62
126
  scaleBy.set(def.name, 1);
63
127
  continue;
64
128
  }
@@ -69,53 +133,93 @@ function fitSkeletonToWarrior(canon, directPos) {
69
133
  desired.set(def.name, dp);
70
134
  const cl = vlen(canonOff);
71
135
  scaleBy.set(def.name, cl > 1e-6 ? vlen((0, mat4_1.sub3)(dp, pPos)) / cl : (scaleBy.get(def.parent) ?? 1));
136
+ continue;
72
137
  }
73
- else {
74
- const s = scaleBy.get(def.parent) ?? 1;
75
- desired.set(def.name, [pPos[0] + canonOff[0] * s, pPos[1] + canonOff[1] * s, pPos[2] + canonOff[2] * s]);
76
- scaleBy.set(def.name, s);
138
+ // Unmapped: interpolate on the mapped span around it (ancestor A -> nearest mapped descendant, or
139
+ // A's own continuation anchor for off-chain bones like twists), at the canonical fraction with the
140
+ // canonical perpendicular offset rotated/scaled into the source segment.
141
+ const A = nearestMappedAncestor(def.name);
142
+ const B = A !== null ? (mappedBelow(def.name)
143
+ .reduce((acc, c) => {
144
+ if (acc === null)
145
+ return c;
146
+ const ref = (0, mat4_1.normalize3)((0, mat4_1.sub3)(canonPos(def.name), canonPos(A)));
147
+ return (0, mat4_1.dot3)((0, mat4_1.normalize3)((0, mat4_1.sub3)(canonPos(c), canonPos(A))), ref) > (0, mat4_1.dot3)((0, mat4_1.normalize3)((0, mat4_1.sub3)(canonPos(acc), canonPos(A))), ref) ? c : acc;
148
+ }, null) ?? aimAnchor.get(A) ?? null) : null;
149
+ if (A !== null && B !== null) {
150
+ const segC = (0, mat4_1.sub3)(canonPos(B), canonPos(A));
151
+ const segS = (0, mat4_1.sub3)(directPos.get(B), directPos.get(A));
152
+ const lC = vlen(segC), lS = vlen(segS);
153
+ if (lC > 1e-6 && lS > 1e-6) {
154
+ const u = (0, mat4_1.sub3)(canonPos(def.name), canonPos(A));
155
+ const t = (0, mat4_1.dot3)(u, segC) / (lC * lC);
156
+ const perp = [u[0] - segC[0] * t, u[1] - segC[1] * t, u[2] - segC[2] * t];
157
+ const s = lS / lC;
158
+ const [px, py, pz] = (0, mat4_1.transformDir)((0, mat4_1.shortestArc4)(segC, segS), perp);
159
+ const a = directPos.get(A);
160
+ desired.set(def.name, [a[0] + segS[0] * t + px * s, a[1] + segS[1] * t + py * s, a[2] + segS[2] * t + pz * s]);
161
+ scaleBy.set(def.name, s);
162
+ continue;
163
+ }
77
164
  }
165
+ const s = scaleBy.get(def.parent) ?? 1;
166
+ desired.set(def.name, [pPos[0] + canonOff[0] * s, pPos[1] + canonOff[1] * s, pPos[2] + canonOff[2] * s]);
167
+ scaleBy.set(def.name, s);
78
168
  }
79
- // Pass 2 — rebuild local matrices = canonical local ROTATION + fitted local TRANSLATION; recompute world.
80
- // Exception CLAVICLE rest-correction: the source's shoulder mesh is authored for its own clavicle
81
- // direction (Meshy is ~horizontal; MetaHuman droops ~9°). Keeping the canonical clavicle rest binds the
82
- // shoulder to the wrong reference, so a SHARED canonical clip drives the animated shoulder ~9° too
83
- // horizontal (a shrug). Fix: rebase ONLY the two clavicle bones' rest ORIENTATION to point along the
84
- // SOURCE clavicle direction. The IBM (inverse of this rest) then re-references the clip the ~9° gap
85
- // between the clip's canonical clavicle pose and this source-aligned rest becomes the corrective pull,
86
- // so the animated shoulder matches the stock body. Children keep canonical local rotation and ride the
87
- // correction. Positions/proportions untouched (lt kept); rest render stays pristine (M·IBM = I).
88
- const ORIGIN = [0, 0, 0];
89
- const CLAVICLE_CHILD = { clavicle_l: 'upperarm_l', clavicle_r: 'upperarm_r' };
169
+ // Pass 2 — rebuild local matrices = local ROTATION + fitted local TRANSLATION; recompute world.
170
+ // Mapped bones with an anchor: segment-aimed from the CANONICAL rest world, so corrections stay
171
+ // absolute and never compound down the chain (net effect on the anchor child's local translation:
172
+ // lt = s · lt_canonical identical clip rotations reproduce the stock body's segment directions at
173
+ // the source's lengths). Mapped bones WITHOUT an anchor: their segment tells us nothing, so keep the
174
+ // ABSOLUTE canonical rest world rotation heads are authored level and toes ground-flat no matter how
175
+ // the source's neck/foot segments tilt; riding the parent's aim would counter-tilt them under clips.
176
+ // Exception HANDS: a bound hand continues its forearm, so they DO ride the forearm's aim. Unmapped
177
+ // bones (twists, fingers unweighted helpers) ride their parent via canonical locals.
178
+ const RIDE_PARENT_AIM = new Set(['hand_l', 'hand_r']);
179
+ // FEET are never aimed despite having an anchor (the toe ball): soles are authored ground-flat no
180
+ // matter how steeply the source's ankle->toe bone runs (high ankles, chunky shoes), and aiming the
181
+ // foot makes every clip pitch the sole by that bone-vs-canonical delta — toes lift off the floor.
182
+ // Absolute canonical rest keeps the authored sole flat under clips, like the head/toe-ball priors.
183
+ const AIM_SKIP = new Set(['foot_l', 'foot_r']);
184
+ let restAimed = 0;
90
185
  const world = new Map();
91
186
  const nodes = [];
92
187
  for (const def of canon.nodes) {
93
188
  const parentWorld = def.parent !== null ? world.get(def.parent) : IDENTITY;
94
189
  const worldOff = def.parent !== null ? (0, mat4_1.sub3)(desired.get(def.name), desired.get(def.parent)) : desired.get(def.name);
95
- const lt = def.parent !== null ? applyRotT(parentWorld, worldOff) : worldOff; // into parent's (canonical) frame
190
+ const lt = def.parent !== null ? applyRotT(parentWorld, worldOff) : worldOff; // into parent's fitted frame
96
191
  let rot = (0, mat4_1.rigidize)(def.local); // default: canonical local orientation
97
- const clavChild = CLAVICLE_CHILD[def.name];
98
- if (clavChild !== undefined && directPos.has(def.name) && directPos.has(clavChild)) {
99
- const srcDir = (0, mat4_1.normalize3)((0, mat4_1.sub3)(directPos.get(clavChild), directPos.get(def.name))); // warrior clavicle dir
100
- const canonDir = (0, mat4_1.normalize3)((0, mat4_1.sub3)(canonPos(clavChild), canonPos(def.name))); // canonical clavicle dir
101
- const O = (0, mat4_1.mul4)((0, mat4_1.frameFromAxis)(canonDir, ORIGIN), (0, mat4_1.invert4)((0, mat4_1.frameFromAxis)(srcDir, ORIGIN))); // world src->canon
102
- const worldRotDes = (0, mat4_1.mul4)((0, mat4_1.invert4)(O), (0, mat4_1.rigidize)(canon.worldByName.get(def.name))); // canon->src rest world
103
- rot = (0, mat4_1.mul4)((0, mat4_1.invert4)((0, mat4_1.rigidize)(parentWorld)), worldRotDes); // back to local
192
+ if (directPos.has(def.name)) {
193
+ const anchor = AIM_SKIP.has(def.name) ? undefined : aimAnchor.get(def.name);
194
+ let arc = null;
195
+ if (anchor !== undefined) {
196
+ const srcDir = (0, mat4_1.sub3)(directPos.get(anchor), directPos.get(def.name));
197
+ const canonDir = (0, mat4_1.sub3)(canonPos(anchor), canonPos(def.name));
198
+ if (vlen(srcDir) > 1e-6 && vlen(canonDir) > 1e-6) {
199
+ arc = (0, mat4_1.shortestArc4)(canonDir, srcDir);
200
+ restAimed++;
201
+ }
202
+ }
203
+ if (arc !== null || !RIDE_PARENT_AIM.has(def.name)) {
204
+ const canonWorldRot = (0, mat4_1.rigidize)(canon.worldByName.get(def.name));
205
+ const worldRotDes = arc !== null ? (0, mat4_1.mul4)(arc, canonWorldRot) : canonWorldRot;
206
+ rot = (0, mat4_1.mul4)((0, mat4_1.invert4)((0, mat4_1.rigidize)(parentWorld)), worldRotDes);
207
+ }
104
208
  }
105
209
  const local = [rot[0], rot[1], rot[2], 0, rot[4], rot[5], rot[6], 0, rot[8], rot[9], rot[10], 0, lt[0], lt[1], lt[2], 1];
106
210
  nodes.push({ name: def.name, local, parent: def.parent });
107
211
  world.set(def.name, (0, mat4_1.mul4)(parentWorld, local));
108
212
  }
109
- return { nodes, jointNames: canon.jointNames, worldByName: world, skeletonRootName: canon.skeletonRootName };
213
+ return { skeleton: { nodes, jointNames: canon.jointNames, worldByName: world, skeletonRootName: canon.skeletonRootName }, restAimed };
110
214
  }
111
215
  /**
112
216
  * Retargets a source character onto `helix-humanoid@1` so the PLATFORM's shared clips drive it.
113
217
  *
114
218
  * 'embed' (default, the better retarget): the source mesh is left byte-for-byte unchanged and the
115
- * canonical 68-bone skeleton is fitted INTO it (canonical bone orientations at the source's joint
116
- * positions, §fitSkeletonToWarrior). Clips — authored as local rotations relative to the canonical rest
117
- * — produce the correct WORLD-space motion regardless of the source's bone-axis convention, because the
118
- * mesh rides the bones in world space (we never route the mesh through mismatched local frames). Output
219
+ * canonical 68-bone skeleton is fitted INTO it (segment-aimed canonical orientations at the source's
220
+ * joint positions, §fitSkeletonToWarrior). Clips — authored as local rotations relative to the canonical
221
+ * rest — produce the correct WORLD-space motion regardless of the source's bone-axis convention or bind
222
+ * pose, because the aimed rests subtract the source-bind-vs-canonical direction delta at the IBM. Output
119
223
  * IBMs = inverse(fitted world), so LBS at rest reproduces the pristine source bind pose.
120
224
  *
121
225
  * 'repose' re-poses the mesh onto the canonical rest via frame-based rest-pose correction (kept for
@@ -152,13 +256,44 @@ function conformToHelixRest(warrior, canon, boneMap, opts = {}) {
152
256
  const childIdxs = wjoints.map(() => []);
153
257
  parentIdx.forEach((p, i) => { if (p >= 0)
154
258
  childIdxs[p].push(i); });
155
- const Tsrc = wjoints.map((j) => posOf(j.getWorldMatrix()));
259
+ // UNIT NORMALIZATION. Meshy rig exports have shipped in two conventions: cm bones under an Armature
260
+ // scaled 0.01 (joint worlds land in meters), and — later exports — cm bones at scene scale 1 (joint
261
+ // worlds ARE cm). glTF ignores a skinned mesh node's own transform, so the VERTEX data defines the
262
+ // model's true unit space; a rig fitted at cm positions still binds pristinely (bone·IBM = I at rest,
263
+ // any uniform scale cancels) and passes every static check, then explodes the instant meter-space
264
+ // platform clips drive it. Snap the joint worlds to the vertex data's decade before fitting.
265
+ const rawTsrc = wjoints.map((j) => posOf(j.getWorldMatrix()));
266
+ let meshMinY = Infinity, meshMaxY = -Infinity;
267
+ for (const node of root.listNodes()) {
268
+ if (node.getSkin() !== wskin || node.getMesh() === null)
269
+ continue;
270
+ for (const prim of node.getMesh().listPrimitives()) {
271
+ const pos = prim.getAttribute('POSITION');
272
+ if (pos === null)
273
+ continue;
274
+ const mn = [], mx = [];
275
+ pos.getMin(mn);
276
+ pos.getMax(mx);
277
+ meshMinY = Math.min(meshMinY, mn[1]);
278
+ meshMaxY = Math.max(meshMaxY, mx[1]);
279
+ }
280
+ }
281
+ let jointMinY = Infinity, jointMaxY = -Infinity;
282
+ for (const p of rawTsrc) {
283
+ jointMinY = Math.min(jointMinY, p[1]);
284
+ jointMaxY = Math.max(jointMaxY, p[1]);
285
+ }
286
+ const meshSpanY = meshMaxY - meshMinY, skelSpanY = jointMaxY - jointMinY;
287
+ const decade = meshSpanY > 1e-6 && skelSpanY > 1e-6 ? 10 ** Math.round(Math.log10(skelSpanY / meshSpanY)) : 1;
288
+ const unitScale = 1 / decade;
289
+ const Tsrc = unitScale === 1 ? rawTsrc : rawTsrc.map((p) => [p[0] * unitScale, p[1] * unitScale, p[2] * unitScale]);
156
290
  // The rig the mesh binds to. 'embed': canonical orientations at the source's joint positions
157
291
  // (proportions preserved). 'repose': the pristine canonical rest.
158
292
  const directPos = new Map();
159
293
  wjoints.forEach((j, i) => { const m = boneMap.map[j.getName()]; if (m !== undefined)
160
294
  directPos.set(m, Tsrc[i]); });
161
- const rig = mode === 'embed' ? fitSkeletonToWarrior(canon, directPos) : canon;
295
+ const fit = mode === 'embed' ? fitSkeletonToWarrior(canon, directPos) : null;
296
+ const rig = fit !== null ? fit.skeleton : canon;
162
297
  const Tdst = (helix) => posOf(rig.worldByName.get(helix));
163
298
  // 'repose' only: per-warrior-joint frame-based delta D_i = frameDst·frameSrc⁻¹ (both frames from
164
299
  // GEOMETRY, so the bone-axis CONVENTION cancels). Unused in 'embed' (mesh is not re-posed).
@@ -265,7 +400,20 @@ function conformToHelixRest(warrior, canon, boneMap, opts = {}) {
265
400
  if (def.parent !== null)
266
401
  created.get(def.parent).addChild(created.get(def.name));
267
402
  const skeletonRoot = created.get(rig.skeletonRootName);
268
- root.listScenes()[0].addChild(skeletonRoot);
403
+ // The hip-height delta cannot live on the root bone itself: every platform clip carries a constant
404
+ // root translation track pinned to the origin, so the mixer would null it each frame. Hoist it onto
405
+ // a wrapper above the root — nothing animates that node (PropertyBinding resolves tracks by bone
406
+ // name), so the delta survives while the clip harmlessly re-pins the root's now-zero local.
407
+ const rootLocal = skeletonRoot.getTranslation();
408
+ if (Math.hypot(rootLocal[0], rootLocal[1], rootLocal[2]) > 1e-9) {
409
+ const wrapper = warrior.createNode('root_offset').setTranslation([rootLocal[0], rootLocal[1], rootLocal[2]]);
410
+ skeletonRoot.setTranslation([0, 0, 0]);
411
+ wrapper.addChild(skeletonRoot);
412
+ root.listScenes()[0].addChild(wrapper);
413
+ }
414
+ else {
415
+ root.listScenes()[0].addChild(skeletonRoot);
416
+ }
269
417
  const newIbm = new Float32Array(rig.jointNames.length * 16);
270
418
  rig.jointNames.forEach((name, i) => newIbm.set((0, mat4_1.invert4)(rig.worldByName.get(name)), i * 16));
271
419
  const newIbmAcc = warrior.createAccessor().setType('MAT4').setArray(newIbm).setBuffer(buffer);
@@ -287,6 +435,6 @@ function conformToHelixRest(warrior, canon, boneMap, opts = {}) {
287
435
  const topOld = (() => { let cur = wjoints[0]; for (let p = parentNode(cur); p !== null; p = parentNode(cur))
288
436
  cur = p; return cur; })();
289
437
  topOld.dispose();
290
- return { mode, verticesProcessed, jointsRebuilt: rig.jointNames.length, weightTargets };
438
+ return { mode, unitScale, restAimed: fit?.restAimed ?? 0, verticesProcessed, jointsRebuilt: rig.jointNames.length, weightTargets };
291
439
  }
292
440
  //# sourceMappingURL=conform.js.map