What is wrong
Reallusion Character Creator 3 and 4 export a numbered spine chain: CC_Base_Spine01, CC_Base_Spine02. Most of the CC skeleton already maps in src/glb-canonicalize.js, but those two spine joints do not.
import { canonicalizeBoneName } from './src/glb-canonicalize.js';
canonicalizeBoneName('CC_Base_L_Upperarm'); // 'LeftArm' works
canonicalizeBoneName('CC_Base_Hip'); // 'Hips' works
canonicalizeBoneName('CC_Base_Spine01'); // null <-- the gap
canonicalizeBoneName('CC_Base_Spine02'); // null <-- the gap
A dropped spine chain does not kill the whole performance the way a dropped limb does, but it costs the torso: the upper body rides rigidly on the hips instead of following the clip.
What to change
File: src/glb-canonicalize.js, the EXTRA_ALIASES block. The centre and torso table there is where this belongs.
The canonical chain is Hips to Spine to Spine1 to Spine2 to Neck to Head. Decide which canonical link each CC spine joint should drive and write down your reasoning in the code comment, the way the neighbouring entries do.
Read the note above the Unreal alias table first. Its spine_01/02/03 chain is deliberately omitted because the separator-stripped form collides with a Mixamo de-duplication suffix, and the header comment explains what that collision does. Make sure your change does not walk into the same problem. That is the interesting part of this issue.
How to prove it worked
Add cases to tests/glb-canonicalize.test.js beside the other per-convention blocks, then:
npx vitest run tests/glb-canonicalize.test.js # about 1 second
npm test # before you open the PR
Include a case asserting the existing Unreal spine_02 behaviour still resolves the way it does today. That is the regression this change could plausibly cause, and the reason to write the test before the fix.
Reference
The MikuMikuDance support added on 2026-08-21 is the same shape of change end to end. The full walkthrough is in Your first contribution.
Comment here to claim it.
What is wrong
Reallusion Character Creator 3 and 4 export a numbered spine chain:
CC_Base_Spine01,CC_Base_Spine02. Most of the CC skeleton already maps insrc/glb-canonicalize.js, but those two spine joints do not.A dropped spine chain does not kill the whole performance the way a dropped limb does, but it costs the torso: the upper body rides rigidly on the hips instead of following the clip.
What to change
File:
src/glb-canonicalize.js, theEXTRA_ALIASESblock. The centre and torso table there is where this belongs.The canonical chain is
HipstoSpinetoSpine1toSpine2toNecktoHead. Decide which canonical link each CC spine joint should drive and write down your reasoning in the code comment, the way the neighbouring entries do.Read the note above the Unreal alias table first. Its
spine_01/02/03chain is deliberately omitted because the separator-stripped form collides with a Mixamo de-duplication suffix, and the header comment explains what that collision does. Make sure your change does not walk into the same problem. That is the interesting part of this issue.How to prove it worked
Add cases to
tests/glb-canonicalize.test.jsbeside the other per-convention blocks, then:Include a case asserting the existing Unreal
spine_02behaviour still resolves the way it does today. That is the regression this change could plausibly cause, and the reason to write the test before the fix.Reference
The MikuMikuDance support added on 2026-08-21 is the same shape of change end to end. The full walkthrough is in Your first contribution.
Comment here to claim it.