98 lines
4.5 KiB
Markdown
98 lines
4.5 KiB
Markdown
# NPC roster visual review — 0.9.9
|
||
|
||
**Status: awaiting the owner verdict on row 4.** This is the review point for the Quaternius roster
|
||
([ADR-0017](adr/0017-quaternius-npc-base.md), [ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md)).
|
||
Four sheets: the twelve roles, two studio views, the animation poses and the crowd distance.
|
||
|
||
## Where the roster stands
|
||
|
||
The first pass was signed off **with follow-ups**; all of its findings traced to build defects and
|
||
are fixed:
|
||
|
||
- **Worker bodies** (`npc_guard`, `npc_vest`, `npc_firefighter`, `npc_crowd_d`) had holes in the
|
||
torso and an open crown because the build deleted the vest and hat materials — on the modular
|
||
Worker the vest *is* the torso and the hat *is* the crown. Nothing is deleted any more; both are
|
||
remapped, and the hoodie's brows, eyes and hair are transplanted onto the Worker head.
|
||
- **Faces** had a unibrow, oversized eye quads and no mouth. They now have two brows, two eyes and
|
||
an authored lip block on every base.
|
||
- **Hats** are gone except the firefighter helmet (owner directive), and the performer's cone with
|
||
them; carried props ride the hands.
|
||
- **Hand and back gear** were authored for the old body (wrist y 0.78 → 1.017, chest 1.30 → 1.38,
|
||
back 1.10 → 1.26). Every hand item now drops into the palm; the clipboard grips its top edge.
|
||
Per-item numbers: [`blender-assets.md`](blender-assets.md#hand-item-fit-on-the-quaternius-rig).
|
||
|
||
## 1. Full-body roster (12 roles)
|
||
|
||

|
||
|
||
## 2. Front and profile per role
|
||
|
||

|
||
|
||
## 3. Animation poses (idle / sit / walk contact)
|
||
|
||
Driven by the real `_animate()` path with the FSM frozen: arms hang, the seated pose puts the
|
||
forearms on the thighs with the shins down, walk contact keeps contralateral opposition.
|
||
|
||

|
||
|
||
## 4. Crowd distance (8 m)
|
||
|
||

|
||
|
||
## 5. Gear on the character
|
||
|
||
Every piece worn by a real avatar through the runtime attach path — the sheet to judge row 4 by.
|
||
|
||

|
||
|
||
## Signoff checklist
|
||
|
||
| # | 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? | ☐ yes ☐ no |
|
||
| 3 | Do the faces hold up at portrait distance — brows, eyes, mouth, hair? | ☐ yes ☐ no |
|
||
| 4 | Do the hands and hand-held items (camera, clipboard, board, baton, parcel) read correctly? | ☐ yes ☐ no |
|
||
| 5 | Is the firefighter helmet the only head gear, and does it sit correctly? | ☐ yes ☐ no |
|
||
| 6 | Are the role outfits believable for a Hollywood-boulevard shift? | ☐ yes ☐ no |
|
||
| 7 | Are the seeded tint palettes acceptable? | ☐ yes ☐ no |
|
||
| 8 | Do the seated and walking poses hold up? | ☐ yes ☐ no |
|
||
|
||
**Signoff:** ☐ approved as shipped ☐ approved with follow-ups ☐ rejected
|
||
|
||
## Still open
|
||
|
||
1. **Eyes have no whites** — single-colour quads on every base.
|
||
2. **Arms still graze the torso on the `worker` base** (accepted as tolerable for now).
|
||
3. **Roster variety is three meshes for twelve roles** — the modular part library is the fix.
|
||
4. **The wand and phone orientation** read poorly in the gear sheet; both may need re-authoring.
|
||
|
||
## Measured facts
|
||
|
||
| Metric | Value |
|
||
| --- | --- |
|
||
| Characters | 12, all on the Quaternius 62-joint rig |
|
||
| Triangles / glTF vertices | 6,218 … 6,436 / 13,012 … 13,459 |
|
||
| Budget | 24,000 tris / 24,000 verts each |
|
||
| Tint slots | `skin`, `cloth`, `pants`, `hair`, `accessory` + fixed detail |
|
||
| Texel density | 73–74 px/m on 256² maps |
|
||
| Height | 1.82–1.88 m |
|
||
| 24-NPC frame budget | 175,264 tris, 0.87 ms (budget 50 ms) |
|
||
| Gates | `audit` 12/12, `inspect` clean, `fit` OK, Godot 278/278, Python 167/167 |
|
||
|
||
## Reproducing
|
||
|
||
```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/p --pose=idle
|
||
godot --path . --script res://src/test/capture_npc_gear.gd -- --out=res://tmp/npc-gear
|
||
```
|
||
|
||
## History
|
||
|
||
This page replaced the 0.9.4 procedural-library baseline (eight hand-built characters, 13-core
|
||
proportion audit). Its comparison sheets stay in `blender_previews/` as records. Per-character
|
||
sources: [`npc-model-sourcing.md`](npc-model-sourcing.md); the face options that led to the full
|
||
swap: [`screens/npc-face-gate/`](screens/npc-face-gate/README.md).
|