@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.
- package/dist/character/importCharacter.d.ts +1 -1
- package/dist/character/importCharacter.js +8 -2
- package/dist/character/importCharacter.js.map +1 -1
- package/dist/character/mat4.d.ts +7 -0
- package/dist/character/mat4.js +25 -0
- package/dist/character/mat4.js.map +1 -1
- package/dist/character/stages/conform.d.ts +8 -4
- package/dist/character/stages/conform.js +187 -39
- package/dist/character/stages/conform.js.map +1 -1
- package/dist/character/stages/sanitizeMaterials.d.ts +16 -0
- package/dist/character/stages/sanitizeMaterials.js +43 -0
- package/dist/character/stages/sanitizeMaterials.js.map +1 -0
- package/dist/character/testutil/syntheticRig.d.ts +12 -1
- package/dist/character/testutil/syntheticRig.js +88 -1
- package/dist/character/testutil/syntheticRig.js.map +1 -1
- package/dist/glb/glb-summary.d.ts +8 -0
- package/dist/glb/glb-summary.js +43 -0
- package/dist/glb/glb-summary.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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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"}
|
package/dist/character/mat4.d.ts
CHANGED
|
@@ -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[];
|
package/dist/character/mat4.js
CHANGED
|
@@ -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":";AAAA,oGAAoG;AACpG,gGAAgG;;;AAGhG,oBAUC;AAGD,0BAkBC;AAGD,wCAOC;AAGD,oCAGC;AAQD,4BASC;AAMD,gCAGC;AAUD,sCAOC;
|
|
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
|
|
46
|
-
* positions, §fitSkeletonToWarrior). Clips — authored as local rotations relative to the canonical
|
|
47
|
-
* — produce the correct WORLD-space motion regardless of the source's bone-axis convention
|
|
48
|
-
*
|
|
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:
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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 =
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
const
|
|
89
|
-
|
|
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
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
116
|
-
* positions, §fitSkeletonToWarrior). Clips — authored as local rotations relative to the canonical
|
|
117
|
-
* — produce the correct WORLD-space motion regardless of the source's bone-axis convention
|
|
118
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|