Skip to content

Rig: teach the retargeter a bone-naming convention it does not know yet #115

Description

@nirholas

The ask

Pick a humanoid rig convention that three.ws does not understand yet and teach it to the retargeter. This is the highest-leverage self-contained contribution in the project, and it is genuinely open-ended: there is no fixed list of remaining conventions, because new authoring tools keep inventing new bone names.

Why it matters

three.ws plays one library of pre-baked clips on any humanoid avatar a user uploads, by rewriting every rig to one canonical skeleton first. A convention we understand animates. A convention we do not understand falls back to a default body, and the user sees someone else's character instead of theirs. The whole feature is that map.

How to find a gap

// scratch.mjs
import { canonicalizeBoneName } from './src/glb-canonicalize.js';
for (const n of ['your_rig_bone_1', 'your_rig_bone_2']) {
	console.log(n, '->', canonicalizeBoneName(n));
}

null means that bone would be dropped. If most of a rig comes back null, you have found a real gap and a real contribution.

The best source of candidates is a rig you actually own. Export a character from whatever tool you use, run its joint names through the function above, and see what falls out. If you upload it to Rig Doctor, the Unrecognised joints panel gives you the same list without writing any code.

Conventions confirmed missing at the time of writing, if you would rather not hunt: Xsens MVN's vertebra-named spine (L5, L3, T12, T8), and MediaPipe's foot joints (left_heel, left_foot_index). Both are motion-capture pipelines whose output people do bring to us.

What a complete contribution looks like

  1. Mapping entries in the EXTRA_ALIASES block of src/glb-canonicalize.js, with a comment explaining the convention and anything you deliberately did not map.
  2. Tests in tests/glb-canonicalize.test.js, covering both sides.
  3. A fingerprint in CONVENTIONS in src/rig-report.js, with a test, so Rig Doctor names the convention on sight.
  4. A row in the conventions table in docs/rig-doctor.md.

The MikuMikuDance support added on 2026-08-21 does all four and is the reference diff. The full walkthrough is in Your first contribution.

Two rules that will save you a review round

  • Never cross sides. A left bone mapped to a right canonical name tears the avatar apart in motion.
  • Do not map bones that are not chain joints. IK targets, twist bones, constraint-driven control rigs, and metacarpal scaffolding are deliberately left unmapped. The header comment in glb-canonicalize.js explains why in detail. Read it before you widen a match.

Say which convention you are taking in a comment so two people do not do the same one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: rigSkeletons, bone mapping, retargetingenhancementNew feature or requesthelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions