Files
security-game/docs/npc-visual-review.md
T
zwitschi d5e180e50c
Full build / Import + headless tests (push) Successful in 45s
Full build / Full desktop build + optional release (push) Skipped
Raise the back gear to shoulder-blade height and compact the review page
2026-11-06 18:35:02 +01:00

98 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
![NPC roster full body](blender_previews/sheet_npc_roster_0.9.9.jpg)
## 2. Front and profile per role
![NPC roster front and profile](blender_previews/sheet_npc_roster_views_0.9.9.jpg)
## 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.
![NPC roster poses](blender_previews/sheet_npc_roster_poses_0.9.9.jpg)
## 4. Crowd distance (8 m)
![NPC roster at crowd distance](blender_previews/sheet_npc_roster_crowd_0.9.9.jpg)
## 5. Gear on the character
Every piece worn by a real avatar through the runtime attach path — the sheet to judge row 4 by.
![Gear on the character](blender_previews/sheet_npc_gear_on_character.jpg)
## 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).