diff --git a/TODO.md b/TODO.md index 7c01f47..2fdb3a1 100644 --- a/TODO.md +++ b/TODO.md @@ -816,14 +816,17 @@ blocked rig can no longer block the whole release. ### Silhouette and face gate (owner) -- [ ] Re-run the silhouette gate at gameplay distance and in portrait against the current - `npc_casual`, front / three-quarter / profile. This is a new gate: ADR-0018 removed the - proportion warp, so source proportions are now accepted by definition. -- [ ] Face-fidelity comparison. The Quaternius head is low-poly (≈6.2k tris for the whole body); - the 0.9.7 library has a sculpted realistic face. Capture both heads and let the owner pick: - (a) full swap, (b) Quaternius for crowd roles with the procedural library for named roles, - or (c) add head subdivision/hair cards to the Quaternius head. -- [ ] Apply the chosen face path within 24,000 tris / 24,000 glTF vertices and re-run the gate. +- [x] Re-run the silhouette gate at gameplay distance and in portrait against the current + `npc_casual`, front / three-quarter / profile. ADR-0018 removed the proportion warp, so + source proportions are accepted by definition (head 13.4 % of height, measured by + `npc_proportions`). +- [x] Face-fidelity comparison sheet: [`docs/screens/npc-face-gate/`](../../docs/screens/npc-face-gate/README.md) + captures the Quaternius base, the procedural + MakeHuman head and a procedural crowd variant + at front / three-quarter / profile / 8 m. The page records the three options (full swap, + crowd only, add head detail) and recommends the full swap. +- [ ] **Owner decision:** pick (a) full swap, (b) crowd only or (c) add head detail from + `docs/screens/npc-face-gate/README.md`, then apply it within 24,000 tris / 24,000 glTF + vertices and re-run the gate. - [ ] Record the decision and its consequence in `MEMORY.md`, `docs/npc-model-sourcing.md` and (if it changes the contract) a new ADR. Do not silently lower character fidelity. diff --git a/docs/screens/npc-face-gate/README.md b/docs/screens/npc-face-gate/README.md new file mode 100644 index 0000000..1670fba --- /dev/null +++ b/docs/screens/npc-face-gate/README.md @@ -0,0 +1,61 @@ +# NPC face and silhouette gate — Quaternius pilot (2026-11-05) + +This page is the owner decision point for +[ADR-0017](../../adr/0017-quaternius-npc-base.md) + [ADR-0018](../../adr/0018-quaternius-stage2-runtime-rig.md) +stage 2. It answers one question: **which head ships?** + +`npc_casual` is now the CC0 Quaternius `Casual_Hoodie` base baked to the project contract +(arm-down rest, five tint slots, 62-joint rig at source proportions). The procedural library with +the MakeHuman head is unchanged and still ships for the other eleven characters. + +## The sheet + +![face gate sheet](sheet_face_gate.jpg) + +Rows: the Quaternius base, the procedural library with the MakeHuman head, and a procedural crowd +variant. Columns: front, three-quarter, profile, and the crowd-distance silhouette the player +actually sees from 8 m. + +Source frames: `godot --path . --script res://src/test/capture_npc_baseline.gd -- --out=res://tmp/npc-gate`. + +## What the sheet shows + +| | Head height / body | Face read at portrait | Crowd-distance read | +| --- | --- | --- | --- | +| Quaternius base | 0.134 | clean low-poly brows, nose, jaw, layered hair | slim, upright, clearly a person | +| procedural + MakeHuman head | ~0.20 | oversized head, soft nose, beard slab reads as a bar | bobblehead proportions | +| procedural crowd variant | ~0.20 | oversized head, flat cheeks | bobblehead proportions | + +Measured (`python3 -m pytest tools/tests/test_npc_proportions.py -q`, +`python3 tools/npc_proportions.py`): + +- `npc_casual` (Quaternius): head 13.4 % of height, arm-down rest, 6,206 tris, 12,988 glTF + vertices, texel density 73–74 px/m on the 256² maps. +- The procedural library: head 16–22 % of height (the stylized band in + `tools/npc_proportions.GUIDE`). + +The Quaternius head is *smaller and more realistic* than the stylized library head, which is +exactly the trade the owner has to accept or reject. The vision judge that reviewed the earlier +head rework reads the Quaternius face as the cleaner silhouette of the three at both distances. + +## The three options + +1. **Full swap.** Every character rebaked onto the Quaternius base in `0.9.10`; the procedural + library and the MakeHuman head retire to the tested fallback. Consistent look, real anatomy, + no further head work. +2. **Crowd only.** Quaternius for the anonymous crowd roles, procedural + MakeHuman for the named + roles the player talks to. Keeps two art styles in one frame. +3. **Add head detail.** Keep the Quaternius body and author a higher-detail head (subdivision and + hair cards) inside the 24,000-triangle / 24,000-vertex budget. Most work; the current head + already reads well at gameplay distance. + +## Recommendation + +Option 1. The Quaternius head beats the MakeHuman head at portrait distance in this sheet, and it +costs no further authoring; the budget headroom (6.2k of 24k triangles) stays available for the +hands and gear that the review still flags as weak. + +## Recorded decision + +Status: **awaiting owner sign-off.** Until then `npc_casual` ships as the pilot base and the other +eleven characters stay procedural. diff --git a/docs/screens/npc-face-gate/sheet_face_gate.jpg b/docs/screens/npc-face-gate/sheet_face_gate.jpg new file mode 100644 index 0000000..93ab4d6 Binary files /dev/null and b/docs/screens/npc-face-gate/sheet_face_gate.jpg differ