diff --git a/MEMORY.md b/MEMORY.md index dcba78b..0d6e86a 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -82,6 +82,13 @@ canonical implemented-features list in `docs/development-status.md`. reduction. The canonical base is only 3,199 verts / 6,206 tris, far under the 24,000 cap, so there is no budget reason to decimate before the silhouette gate. Do not reuse the old 7,000-triangle or MPFB decimation targets. +- **Quaternius runtime rig (2026-11-05, owner, ADR-0018 option 2):** the Stage 1 proportion warp + failed the silhouette gate (arm ×1.63 / leg ×0.74 / torso ×1.61; vision judge: paddle hands, + lost forearms, stretched shins). The owner chose to **adopt the Quaternius 62-joint rig at + runtime** instead of warping: `NpcAvatar` maps the Quaternius joint names, gear attach points + are re-derived from the Quaternius skeleton (hip ≈0.87, shoulder ≈0.148/1.39, wrist ≈0.99, + knee ≈0.52), the mesh keeps source LOD (arm-down rest pose baked), and Idle/Walk play directly + on the 62-joint rig (no retarget). - **Engine baseline:** Godot 4.7.2 stable (official editor `~/.local/bin/godot`). The system's `godot-runner` cannot load arbitrary project paths (compiled without path overrides); use the official editor binary. diff --git a/TODO.md b/TODO.md index b44d0a7..c479021 100644 --- a/TODO.md +++ b/TODO.md @@ -82,15 +82,14 @@ baseline sheet. 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. - **Blocked** on the ADR-0018 decision (option 1 vs 2 rest positions / rig); the arm-down - rest pose is already baked and verified, but Idle/Walk/seated verification needs the - chosen rest positions first. + (Direction set: ADR-0018 option 2 — 62-joint runtime. The mesh stays at source LOD; + arm-down rest pose already baked. Idle/Walk play directly on the 62-joint rig.) - [ ] Retarget Idle and Walk from the 24 Quaternius clips to the contract rig; discard combat, gun and sword clips. Verify looping, foot contact and frame rate in Godot. - **Blocked** on ADR-0018 (retarget target changes with option 1 vs 2). + (Direction set: no retarget needed — the clips are authored for the 62-joint rig; only + verify looping/foot contact in Godot.) - [ ] Map the five slots, unwrap per slot, bake 256² AO/albedo/normal/ORM maps and check texel density before any roster build. - **Blocked** on ADR-0018 (the mesh is not finalised until the rest positions/rig are chosen). ### 3. Silhouette gate diff --git a/docs/adr/0018-quaternius-stage2-runtime-rig.md b/docs/adr/0018-quaternius-stage2-runtime-rig.md index 81ee9da..67b25a6 100644 --- a/docs/adr/0018-quaternius-stage2-runtime-rig.md +++ b/docs/adr/0018-quaternius-stage2-runtime-rig.md @@ -1,6 +1,6 @@ # ADR-0018: Quaternius Stage 2 — adopt source proportions at runtime -- **Status:** Proposed +- **Status:** Accepted (2026-11-05, owner chose option 2) - **Date:** 2026-11-05 - **Supersedes:** ADR-0017 decision 2 (Stage 1 keeps the 13-core contract) @@ -29,23 +29,18 @@ rejection conditions. ## Decision -Stop the Stage 1 rollout. Adopt the **Quaternius source proportions** as the runtime character -scale, rather than warping them to the old contract numbers. Two sub-options are open and must -be chosen by the owner: +Stop the Stage 1 rollout and **adopt the Quaternius 62-joint rig at runtime** (owner chose +option 2). The mesh is not proportion-warped: it keeps its source LOD (3,199 welded verts / +6,206 tris) and only the arm-down rest pose is baked. -1. **Keep the 13-core bone names, change their rest positions to the Quaternius joints.** - The contract armature keeps 14 bones, but the rest positions and gear attach points are - re-derived from the Quaternius skeleton (hip ≈0.87, shoulder ≈0.148/1.39, wrist ≈0.99, - knee ≈0.52). `NpcAvatar`'s bone count and pose composition stay; gear offsets and the - contract tests are re-baked. This is the smallest runtime change that keeps the Quaternius - silhouette. -2. **Adopt the 62-joint rig at runtime.** Ship the Quaternius skeleton (including the optional - 30 finger + 2 foot bones) and retarget Idle/Walk onto it. `NpcAvatar` bone mapping, gear - attach points and the pose composition change together. Largest change, closest to the - source. +- `NpcAvatar` maps the Quaternius joint names instead of the 13-core names. +- Gear attach points are re-derived from the Quaternius skeleton (hip ≈0.87, shoulder ≈0.148/1.39, + wrist ≈0.99, knee ≈0.52). +- The Quaternius Idle and Walk clips are used directly — they are authored for the 62-joint rig, + so no retargeting pass is needed. Combat/gun/sword clips stay unused. -Whichever is chosen, the mesh is **not** proportion-warped: it keeps its source LOD (3,199 welded -verts / 6,206 tris) and only the arm-down rest pose is baked. +Option 1 (keep the 13-core names with Quaternius rest positions) is rejected in favour of the +full source rig. ## Consequences @@ -60,8 +55,8 @@ verts / 6,206 tris) and only the arm-down rest pose is baked. - The runtime contract numbers (hip 0.62, shoulder 0.27, hand 0.78) change; every gear attach point, `npc_proportions` guide, fit measurement and pose-composition constant must be re-derived and re-tested. -- Option 2 additionally rewrites `NpcAvatar`'s bone mapping and animation retarget, which is a - larger, riskier change than the mesh swap. +- `NpcAvatar`'s bone mapping and pose composition are rewritten for the 62-joint rig, a larger + change than the mesh swap. - The 12-variant rollout and the 12×6 baseline are still blocked until the new rest positions and gear fit are owner-approved. @@ -75,6 +70,6 @@ verts / 6,206 tris) and only the arm-down rest pose is baked. ## Open question -Choose option 1 (13-core names, Quaternius rest positions) or option 2 (62-joint runtime). -Recommendation: **option 1** first — it preserves the silhouette, keeps `NpcAvatar`'s bone count -and pose composition, and only re-derives gear offsets and contract tests. +Resolved: option 2 (62-joint runtime) is the owner's choice. The first implementation step is +the `NpcAvatar` bone-map + gear-attach re-derivation, then the slot/AO bake and the 12-variant +rollout. diff --git a/docs/npc-model-sourcing.md b/docs/npc-model-sourcing.md index 348e64a..ac4049e 100644 --- a/docs/npc-model-sourcing.md +++ b/docs/npc-model-sourcing.md @@ -198,9 +198,10 @@ deltoid + hand) — both are the gate's rejection conditions. 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. -[ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md) records the Stage 2 decision: adopt the -Quaternius source proportions at runtime (option 1: keep the 13-core names with Quaternius rest -positions; option 2: ship the 62-joint rig), pending the owner's choice. +[ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md) records the Stage 2 decision (accepted +2026-11-05, owner chose option 2): adopt the **Quaternius 62-joint rig at runtime**, keep the +mesh at source LOD, re-derive gear attach points from the Quaternius skeleton, and use the +Quaternius Idle/Walk clips directly (no retarget). ## Contract mismatch