Accept ADR-0018 option 2: adopt the Quaternius 62-joint rig at runtime
Full build / Import + headless tests (push) Successful in 48s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-05 21:39:38 +01:00
1 parent f5fa321a8f
commit e2f52fbfd1
4 files changed
+31 -29

No files matched your search

+7
View File
@@ -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 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 there is no budget reason to decimate before the silhouette gate. Do not reuse the old
7,000-triangle or MPFB decimation targets. 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 - **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 `godot-runner` cannot load arbitrary project paths (compiled without path overrides); use the
official editor binary. official editor binary.
+4 -5
View File
@@ -82,15 +82,14 @@ baseline sheet.
ADR) indicated; do not rebuild on the warped base.** ADR) indicated; do not rebuild on the warped base.**
- [ ] Skin the Quaternius mesh and verify Idle, Walk, seated and arm-down poses. The old - [ ] 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. 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 (Direction set: ADR-0018 option 2 — 62-joint runtime. The mesh stays at source LOD;
rest pose is already baked and verified, but Idle/Walk/seated verification needs the arm-down rest pose already baked. Idle/Walk play directly on the 62-joint rig.)
chosen rest positions first.
- [ ] Retarget Idle and Walk from the 24 Quaternius clips to the contract rig; discard - [ ] 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. 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 - [ ] Map the five slots, unwrap per slot, bake 256² AO/albedo/normal/ORM maps and check
texel density before any roster build. 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 ### 3. Silhouette gate
+16 -21
View File
@@ -1,6 +1,6 @@
# ADR-0018: Quaternius Stage 2 — adopt source proportions at runtime # 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 - **Date:** 2026-11-05
- **Supersedes:** ADR-0017 decision 2 (Stage 1 keeps the 13-core contract) - **Supersedes:** ADR-0017 decision 2 (Stage 1 keeps the 13-core contract)
@@ -29,23 +29,18 @@ rejection conditions.
## Decision ## Decision
Stop the Stage 1 rollout. Adopt the **Quaternius source proportions** as the runtime character Stop the Stage 1 rollout and **adopt the Quaternius 62-joint rig at runtime** (owner chose
scale, rather than warping them to the old contract numbers. Two sub-options are open and must option 2). The mesh is not proportion-warped: it keeps its source LOD (3,199 welded verts /
be chosen by the owner: 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.** - `NpcAvatar` maps the Quaternius joint names instead of the 13-core names.
The contract armature keeps 14 bones, but the rest positions and gear attach points are - Gear attach points are re-derived from the Quaternius skeleton (hip ≈0.87, shoulder ≈0.148/1.39,
re-derived from the Quaternius skeleton (hip ≈0.87, shoulder ≈0.148/1.39, wrist ≈0.99, wrist ≈0.99, knee ≈0.52).
knee ≈0.52). `NpcAvatar`'s bone count and pose composition stay; gear offsets and the - The Quaternius Idle and Walk clips are used directly — they are authored for the 62-joint rig,
contract tests are re-baked. This is the smallest runtime change that keeps the Quaternius so no retargeting pass is needed. Combat/gun/sword clips stay unused.
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.
Whichever is chosen, the mesh is **not** proportion-warped: it keeps its source LOD (3,199 welded Option 1 (keep the 13-core names with Quaternius rest positions) is rejected in favour of the
verts / 6,206 tris) and only the arm-down rest pose is baked. full source rig.
## Consequences ## 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 - 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 point, `npc_proportions` guide, fit measurement and pose-composition constant must be
re-derived and re-tested. re-derived and re-tested.
- Option 2 additionally rewrites `NpcAvatar`'s bone mapping and animation retarget, which is a - `NpcAvatar`'s bone mapping and pose composition are rewritten for the 62-joint rig, a larger
larger, riskier change than the mesh swap. change than the mesh swap.
- The 12-variant rollout and the 12×6 baseline are still blocked until the new rest positions - The 12-variant rollout and the 12×6 baseline are still blocked until the new rest positions
and gear fit are owner-approved. 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 ## Open question
Choose option 1 (13-core names, Quaternius rest positions) or option 2 (62-joint runtime). Resolved: option 2 (62-joint runtime) is the owner's choice. The first implementation step is
Recommendation: **option 1** first — it preserves the silhouette, keeps `NpcAvatar`'s bone count the `NpcAvatar` bone-map + gear-attach re-derivation, then the slot/AO bake and the 12-variant
and pose composition, and only re-derives gear offsets and contract tests. rollout.
+4 -3
View File
@@ -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 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. 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 [ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md) records the Stage 2 decision (accepted
Quaternius source proportions at runtime (option 1: keep the 13-core names with Quaternius rest 2026-11-05, owner chose option 2): adopt the **Quaternius 62-joint rig at runtime**, keep the
positions; option 2: ship the 62-joint rig), pending the owner's choice. 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 ## Contract mismatch