Bake the rest pose, warp to the contract, and record the failing silhouette gate
Full build / Import + headless tests (push) Successful in 47s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-05 21:01:26 +01:00
1 parent cff3937c16
commit a2ae9e03c3
2 files changed
+34 -1

No files matched your search

+6 -1
View File
@@ -72,9 +72,14 @@ baseline sheet.
Head←Head, Shoulder←UpperArm (collar collapses), Elbow←LowerArm, Hand←Wrist,
Hip←UpperLeg, Knee←LowerLeg. Optional: 30 finger bones + Foot.L/R (toe); dropped: PT.L/R
pole targets. Quaternius hierarchy measured (Foot is a child of Root, not LowerLeg).
- [ ] Bake the rest pose and proportion warp to the contract hip, knee, shoulder, elbow,
- [x] Bake the rest pose and proportion warp to the contract hip, knee, shoulder, elbow,
wrist and head positions. Measure the warp at every joint and record the silhouette
deltas; do not accept a distorted deltoid or shortened arm.
Arm-down bake works (`warp_full.py`: pose-rotate UpperArm −90° + modifier-apply +
`armature_apply`). Warp deltas recorded in `docs/npc-model-sourcing.md`: arm ×1.63,
leg ×0.74, torso ×1.61, hip −0.249, shoulder +0.122. Vision-judged as distorted
(paddle hands, lost forearms, stretched shins). **Gate fails — Stage 2 (62-joint runtime
ADR) indicated; do not rebuild on the warped base.**
- [ ] Skin the Quaternius mesh and verify Idle, Walk, seated and arm-down poses. The old
MPFB/arm-retarget warps are not a reference; judge the Quaternius result directly.
- [ ] Retarget Idle and Walk from the 24 Quaternius clips to the contract rig; discard
+28
View File
@@ -170,6 +170,34 @@ Optional extras (allowed by the contract; kept if they survive within 24,000 ver
Dropped (never shipped): `PT.L/R` (pole targets carry no deforming weights), and the
`Root`/`Body`/collar-`Shoulder` collapse bones above.
## Rest-pose and proportion-warp measurement (2026-11-05)
The rest-pose bake (T-pose → arm-down) works: rotate the `UpperArm.L/R` pose bones −90° around
their local X, apply the Armature modifier to bake the deformation, then `armature_apply` to bake
it as the new rest pose (see `tmp/npc-research/warp_full.py`). The mesh deforms cleanly to the
arm-down pose (deformed bounds x ±0.221 vs the T-pose ±0.811).
The proportion warp to the contract positions is measured and it **distorts the silhouette**:
| Joint | Quaternius | Contract | Delta |
| --- | --- | --- | --- |
| Hips height | 0.869 | 0.62 | −0.249 (lower hip) |
| Head top | 1.614 | 1.82 | +0.206 (raise head) |
| Shoulder x | 0.148 | 0.27 | +0.122 (widen) |
| Arm (shoulder→wrist) | 0.402 | 0.60 | ×1.49 |
| Arm (shoulder→hand tip) | 0.429 | 0.70 | ×1.63 |
| Leg (hip→ankle) | 0.835 | 0.62 | ×0.74 |
| Torso (hip→head) | 0.745 | 1.20 | ×1.61 |
The vision judge reads the warped mesh as: paddle/claw hands (the 1.63× arm stretch blows the
hand out), forearms lost into the torso, stretched shins, and "long legs + short torso". The arm
must either stay short (a "shortened arm" vs the contract hand) or stretch 1.63× (a distorted
deltoid + hand) — both are the gate's rejection conditions.
**Finding:** the Stage 1 proportion warp cannot preserve the Quaternius silhouette at the
contract proportions; the gate fails and Stage 2 (a 62-joint runtime ADR) is indicated. Do not
start the 12-variant rebuild on the warped base.
## Contract mismatch
The expensive part is the rig and proportions, not the mesh. The source has a