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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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