From 2ce2175d99177cf52dc91802db607642146f67cb Mon Sep 17 00:00:00 2001 From: Nicholas Butzke <137417822+DottsGit@users.noreply.github.com> Date: Sun, 26 Jul 2026 13:46:23 -0400 Subject: [PATCH] docs(skill): record what four non-library rigs taught the role resolver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Names lie and anatomy does not — the four VRoid imports each broke role resolution differently, and the lesson generalises: anything guessing anatomy from a bone name needs a structural fallback. Also lists what is shipping and which characters have chains that do not simulate. Co-Authored-By: Claude Opus 5 --- .claude/skills/character-pipeline/SKILL.md | 12 +++++++++ .../character-pipeline/references/rigging.md | 25 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/.claude/skills/character-pipeline/SKILL.md b/.claude/skills/character-pipeline/SKILL.md index 3bf2a7f..c698dbf 100644 --- a/.claude/skills/character-pipeline/SKILL.md +++ b/.claude/skills/character-pipeline/SKILL.md @@ -133,6 +133,18 @@ What "good" looks like on Taila, for calibration: | Solver cost | ~2.6 ms/character | 10 ms | | Stride vs. travel direction | < 10° (except a capped sidestep) | 90° | +## Characters currently shipping + +| Skin | Source | Meshes | Cloth chains | +|---|---|---|---| +| taila | rigged, Sketchfab CC-BY | 18 | 35 | +| kiyoko | VRoid, CC-BY | 13 | 20 | +| aria | VRoid, CC-BY | 15 | 15 | +| momo | VRoid, CC-BY | 5 | 9 | +| hikari | VRoid, CC-BY | 13 | 10 *(zero-length — do not simulate)* | +| miku | unrigged source, auto-rigged | 1 | 19 *(hair grown)* | +| mannequin | Quaternius CC0, from the animation library | 1 | 0 *(no costume)* | + ## Known-unsolved - **Peak cloth clipping** in a run, slide and dash sits at ~95 mm of thigh diff --git a/.claude/skills/character-pipeline/references/rigging.md b/.claude/skills/character-pipeline/references/rigging.md index e038859..87d330d 100644 --- a/.claude/skills/character-pipeline/references/rigging.md +++ b/.claude/skills/character-pipeline/references/rigging.md @@ -19,6 +19,31 @@ are `DEF-spine`, her head is `DEF-spine.006`, and she has **no bone with "neck" in its name at all** — unresolved, every lean, aim pitch and slide head-lift silently did nothing. +### Names lie. Anatomy does not. + +Four sources that were not authored against the library's spelling each broke +role resolution in a different way. All four fixes are in; the lesson is that +**anything guessing anatomy from a name needs a structural fallback.** + +- A bare `leg` is the SHIN on Mixamo (`LeftUpLeg` is the thigh) and the THIGH on + a rig whose shin is called `knee`. Same token, opposite bones, both common. So + `RigRoles` walks the leg upward from the foot and fills in whatever the names + could not, stepping over twist bones. +- Claims are granted **longest-stem first**. Taking the first role in + `LIMB_ORDER` that matched at all let shin's catch-all `"leg"` beat thigh's + exact `"upperleg"`, and the outcome depended on bone iteration order. +- Cosmetic and spring classes accept a **two-character positional suffix**: + `HairFL`, `HairFR`, `HairF_Top` tokenise to `hairfl` and matched nothing, so a + character imported with no hair chains at all. Two characters is short enough + that `forearm` and `earring` are still not swept in. +- VRoid spells legs `UpperLeg`/`LowerLeg`. Any CHECK that name-matches + `thigh`/`shin` will silently pass or silently fail on it — see + `verification.md`. + +If a new source fails with `could not identify these bones`, dump the joint names +first (`separation.md` has a no-Blender snippet) and decide whether it is a +missing stem or a case only anatomy can settle. + ## Rebuilding the hierarchy A Rigify DEF-rig exports its chain roots parented straight to the armature root,