fix(pipeline): stand the character up before scaling; reach bones by role
Fixes the two root causes behind four of the seven reported breakages, and rejects the source that cannot be fixed. STAND UP FIRST. flatten_and_scale() now derives the up axis from the skeleton and rotates the model upright before measuring anything. Aria and Momo are correct: 1.75 m tall, 1.43 x 0.41 and 1.52 x 0.39 across, verified by render. The up vector is measured from the FEET to the HIPS, not from the hips to the head. The head is not a reliable landmark — the spine walk ends on the last non-cosmetic bone in the chain, which on a rig with a facial skeleton can sit BELOW the hips. Momo's did, so the first cut of this fix stood her neatly on her head: right size, right proportions, upside down. Feet cannot be mistaken. REACH BONES BY ROLE. SkinnedPlayerModel gained _role_bone(), and set_weapon uses it. Four characters could not hold a gun because one hardcoded lookup knew three spellings and their hands are called "Right wrist" and "J_Bip_R_Hand" — both resolved perfectly in the sidecar the whole time. HIKARI IS REJECTED. She now fails the gate: her feet and spine disagree about which way is up, so the stand-up correction cannot resolve her either, on top of zero-length cosmetic bones and a second armature that was smuggling its own clips into the export. That is not a tuning problem, it is a file that has been through two toolchains. De-registered and removed rather than shipped broken — which is what the gate is for. Six GLB skins remain, all passing. Smoke 0 failures, 11/11 movement tests. Still open, recorded in the skill: kiyoko faces backwards, miku's grown hair stretches under animation, the mannequin's rifle hold does not convince, and taila's front skirt clipping. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2b3e29dd30
commit
27c4117c25
@@ -52,8 +52,16 @@ That is exactly what makes the bug invisible: **the number you normalised always
|
||||
comes out right, whether or not it was the right number.** A check on "is the
|
||||
height 1.75" passes on all seven of these.
|
||||
|
||||
**Rule:** derive the up axis from the SKELETON (hips → head), not from a
|
||||
convention, and rotate the model upright before scaling anything.
|
||||
**Rule:** derive the up axis from the SKELETON, and rotate the model upright
|
||||
before scaling anything. `flatten_and_scale()` now does this.
|
||||
|
||||
**Measure it from the FEET to the HIPS, not from the hips to the head.** The head
|
||||
is not a reliable landmark: the spine walk ends on whatever the last non-cosmetic
|
||||
bone in the chain is, and on a rig with a facial skeleton that can be a bone
|
||||
sitting BELOW the hips. Momo's did, so the first version of this fix stood her
|
||||
neatly on her head — correct size, correct proportions, upside down. Feet cannot
|
||||
be mistaken; they are the bottom of a standing character on every rig, and
|
||||
`foot.L/R` have resolved on every source met so far.
|
||||
|
||||
**And compare it to WORLD up, not to the model's own proportions.** The obvious
|
||||
test — "is the spine the longest axis of the bounding box?" — catches nothing
|
||||
@@ -172,7 +180,25 @@ than judging by eye.
|
||||
|
||||
---
|
||||
|
||||
## 6. Known-unsolved, and honestly so
|
||||
## 6. Some sources are not salvageable, and the gate should say so
|
||||
|
||||
**Hit:** hikari. She failed every way at once — stretched and warped, tiny, far
|
||||
away, gun backwards. Her rig has been through at least two toolchains: her
|
||||
cosmetic bones are zero-length terminators, she carried a second armature with
|
||||
its own clips, and her feet and her spine disagree about which way is up, so the
|
||||
stand-up correction cannot resolve her either. She is now REJECTED by the gate
|
||||
and removed from the roster rather than shipped broken.
|
||||
|
||||
**Rule:** a source that fails several unrelated checks is not a tuning problem,
|
||||
it is a bad file. Spend the effort on finding a cleaner source, not on repairing
|
||||
this one — and make sure the gate blocks it, because the failure mode before this
|
||||
work was that everything passed and the breakage was only visible in game.
|
||||
|
||||
The vetting snippet in `separation.md` catches most of these before download:
|
||||
several meshes, 50+ joints, cosmetic bones present. Add a look for duplicate
|
||||
armatures and for bone chains whose bones are all at the same position.
|
||||
|
||||
## 7. Known-unsolved, and honestly so
|
||||
|
||||
Taila's legs still clip through the front of her skirt in a run, slide and dash
|
||||
(~95 mm). See `cloth-and-hair.md`. The solver sees the contact and pushes on it
|
||||
|
||||
Reference in New Issue
Block a user