110 lines
5.3 KiB
Markdown
110 lines
5.3 KiB
Markdown
# NPC roster visual review — 0.9.9 signoff
|
||
|
||
**Status: awaiting owner visual signoff.** This page is the single review point for the
|
||
Quaternius roster swap that shipped in 0.9.9
|
||
([ADR-0017](adr/0017-quaternius-npc-base.md), [ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md)).
|
||
Every character name the game ships is captured here at gameplay distance, in three studio views,
|
||
and in the three animation poses the runtime drives.
|
||
|
||
Until this page is signed off, the roster swap is reversible: the procedural library and the
|
||
MakeHuman head are still in the tree and still pass `audit`, `inspect`, `npc_proportions` and the
|
||
tests (`build --source procedural`).
|
||
|
||
## 1. Full-body roster (12 roles)
|
||
|
||
One tile per shipped character, neutral studio, camera at 4.2 m.
|
||
|
||

|
||
|
||
## 2. Front and profile per role
|
||
|
||
Front row set, then profile. Use this to judge the silhouette, the head size and the gear placement
|
||
without perspective hiding anything.
|
||
|
||

|
||
|
||
## 3. Animation poses (idle / sit / walk contact)
|
||
|
||
Six representative roles × three poses, driven by the real `_animate()` path with the FSM frozen.
|
||
Check: arms hang instead of holding an A-pose, the seated pose puts the forearms on the thighs and
|
||
keeps the shins down, the walk contact keeps limbs in contralateral opposition, and no limb
|
||
pinches or detaches at the shoulder, elbow, hip or knee.
|
||
|
||

|
||
|
||
## 4. Crowd distance (8 m)
|
||
|
||
The distance the player actually sees a passer-by from the sidewalk.
|
||
|
||

|
||
|
||
## Signoff checklist
|
||
|
||
Tick each row. Anything you reject is a concrete task rather than an opinion, so it can go
|
||
straight into `TODO.md`.
|
||
|
||
| # | Question | Verdict |
|
||
| --- | --- | --- |
|
||
| 1 | Do the twelve characters read as distinct people at 8 m? | ☐ yes ☐ no |
|
||
| 2 | Is the head size right for the body (no bobblehead, no pinhead)? | ☐ yes ☐ no |
|
||
| 3 | Do the faces hold up at portrait distance? | ☐ yes ☐ no |
|
||
| 4 | Do the hands and the hand-held gear (camera, cup, clipboard, sign) read correctly? | ☐ yes ☐ no |
|
||
| 5 | Does the head gear (cap, hood, sunglasses, firefighter helmet) sit on the skull? | ☐ yes ☐ no |
|
||
| 6 | Are the role outfits believable for a Hollywood-boulevard shift (tourist, delivery, guard, responder)? | ☐ yes ☐ no |
|
||
| 7 | Are the seeded tint palettes acceptable, or too pastel/saturated? | ☐ yes ☐ no |
|
||
| 8 | Do the seated and walking poses hold up? | ☐ yes ☐ no |
|
||
|
||
**Signoff:** ☐ approved as shipped ☐ approved with the follow-ups below ☐ rejected
|
||
|
||
## Issues visible in the captures
|
||
|
||
Found while building this page; none blocks the swap, all are queued in `TODO.md`:
|
||
|
||
1. **`npc_dress` wears the performer cone hat plus the protest sign** because the performer props
|
||
are procedural and scaled for the old body. The dress itself has no geometry anymore — the role
|
||
is the `casual` base with a dress tint.
|
||
2. **`npc_coat` and `npc_hoodie`** are the hoodie base with a coat/hood tint; the raised hood and
|
||
the long coat silhouette are gone.
|
||
3. **The `npc_vest` clipboard** reads oversized at 0.23 × 0.31 m on the shorter Quaternius arm.
|
||
4. **The firefighter helmet brim** is 1.55× the head width — realistic for the helmet, but it reads
|
||
as a wide-brim hat next to the small head.
|
||
5. **Skin and cloth read pale** on the `hoodie` and `worker` bases; the seeded palette was tuned
|
||
against the procedural library's darker cloth.
|
||
6. **Roster variety is three meshes for twelve roles.** Tint and gear carry the difference; the
|
||
modular part library is the fix.
|
||
|
||
## Measured facts for this build
|
||
|
||
| Metric | Value |
|
||
| --- | --- |
|
||
| Characters | 12, all on the Quaternius 62-joint rig |
|
||
| Triangles per character | 4,458 (`worker` minus vest) … 6,424 (`casual`) |
|
||
| glTF vertices per character | 9,370 … 13,440 |
|
||
| Budget | 24,000 tris / 24,000 verts per character |
|
||
| Tint slots | `skin`, `cloth`, `pants`, `hair`, `accessory`, plus fixed detail |
|
||
| Texel density | 73–74 px/m on the 256² maps |
|
||
| Height | 1.817–1.881 m |
|
||
| 24-NPC frame budget | 160,608 tris, 0.84 ms average frame (budget 50 ms) |
|
||
| Gates | `inspect` clean, `audit` 12/12, `fit` OK, Godot 278/278, Python 167/167 |
|
||
|
||
## Reproducing the captures
|
||
|
||
```sh
|
||
godot --path . --script res://src/test/capture_npc_baseline.gd -- --out=res://tmp/npc-signoff
|
||
godot --path . --script res://src/test/capture_npc_pose.gd -- --out=res://tmp/npc-signoff-pose \
|
||
--pose=idle # repeat for sit and walk_contact
|
||
```
|
||
|
||
## Superseded
|
||
|
||
This page previously carried the **0.9.4 procedural library** baseline (eight hand-built
|
||
characters, the face/hand/neck fixes, the 13-core proportion audit). That mesh no longer ships, so
|
||
the text is retired; the comparison sheets stay in `blender_previews/` as history:
|
||
`sheet_npc_baseline_compare-p1.jpg`, `-body.jpg`, `-torso.jpg`, `-face-detail.jpg`,
|
||
`sheet_npc_hands_compare.jpg`, `sheet_npc_hands_grip_compare.jpg`.
|
||
|
||
The current source evaluation and per-character build table live in
|
||
[`npc-model-sourcing.md#shipped-roster-099-owner-chose-the-full-swap`](npc-model-sourcing.md#shipped-roster-099-owner-chose-the-full-swap);
|
||
the face options that led to the full swap are in
|
||
[`screens/npc-face-gate/`](screens/npc-face-gate/README.md).
|