From a2ae9e03c3e549db922790d9bd0607c9d64f191d Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Thu, 5 Nov 2026 21:01:26 +0100 Subject: [PATCH] Bake the rest pose, warp to the contract, and record the failing silhouette gate --- TODO.md | 7 ++++++- docs/npc-model-sourcing.md | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 2365702..b710b10 100644 --- a/TODO.md +++ b/TODO.md @@ -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 diff --git a/docs/npc-model-sourcing.md b/docs/npc-model-sourcing.md index bb5f99e..65ed5ae 100644 --- a/docs/npc-model-sourcing.md +++ b/docs/npc-model-sourcing.md @@ -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