Raise the back gear to shoulder-blade height and compact the review page
This commit is contained in:
1 parent
a36068aae7
commit
d5e180e50c
4 files changed
+62
-106
No files matched your search
@@ -959,6 +959,9 @@ contract.
|
|||||||
- [x] `docs/blender-assets.md` documents the 15-piece matrix and the hand-item fit table;
|
- [x] `docs/blender-assets.md` documents the 15-piece matrix and the hand-item fit table;
|
||||||
`architecture.md`, `asset-tooling.md` and the preview index were updated with the new counts.
|
`architecture.md`, `asset-tooling.md` and the preview index were updated with the new counts.
|
||||||
`CREDITS.md` still cites the upstream pack, which is unchanged.
|
`CREDITS.md` still cites the upstream pack, which is unchanged.
|
||||||
|
- [x] Owner feedback: the back gear hung at the waist. The `back` attach moved from y 1.10 to
|
||||||
|
1.26 (shoulder-blade height on the Quaternius torso); backpack, shoulder bag and SCBA tank
|
||||||
|
re-captured on the character sheet.
|
||||||
- [x] Re-measure `fit` for the back and chest gear on the slimmer torso: `backpack` inner x 0.150
|
- [x] Re-measure `fit` for the back and chest gear on the slimmer torso: `backpack` inner x 0.150
|
||||||
against a 0.190 clothing radius (straps cross the body, as intended), `shoulder_bag` x
|
against a 0.190 clothing radius (straps cross the body, as intended), `shoulder_bag` x
|
||||||
clearance +0.072, `scba_tank` inner x 0.150, `lanyard` radial clearance +0.012 on the chest.
|
clearance +0.072, `scba_tank` inner x 0.150, `lanyard` radial clearance +0.012 on the chest.
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 166 KiB |
+56
-105
@@ -1,146 +1,97 @@
|
|||||||
# NPC roster visual review — 0.9.9
|
# NPC roster visual review — 0.9.9
|
||||||
|
|
||||||
**Status: revised after owner feedback; awaiting a second signoff.** This page is the single
|
**Status: awaiting the owner verdict on row 4.** This is the review point for the Quaternius roster
|
||||||
review point for the Quaternius roster in
|
([ADR-0017](adr/0017-quaternius-npc-base.md), [ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md)).
|
||||||
[ADR-0017](adr/0017-quaternius-npc-base.md) and
|
Four sheets: the twelve roles, two studio views, the animation poses and the crowd distance.
|
||||||
[ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md). Every character name the game ships is
|
|
||||||
captured here at gameplay distance, in two studio views, and in the three animation poses the
|
|
||||||
runtime drives.
|
|
||||||
|
|
||||||
## What changed since the first review
|
## Where the roster stands
|
||||||
|
|
||||||
The first pass was signed off **with follow-ups** and rejected three checklist rows: faces at
|
The first pass was signed off **with follow-ups**; all of its findings traced to build defects and
|
||||||
portrait distance, hands and hand-held gear, and head gear on the skull. The body findings were
|
are fixed:
|
||||||
all build defects, not art. This revision covers what was fixed and what is still open.
|
|
||||||
|
|
||||||
| Owner finding | Cause | Status |
|
- **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
|
||||||
| `npc_guard` holes in the upper body | the build **deleted** the `Worker_Vest` material, and on the modular Worker the vest *is* the torso | fixed — the vest is the `cloth` slot, nothing is deleted |
|
Worker the vest *is* the torso and the hat *is* the crown. Nothing is deleted any more; both are
|
||||||
| `npc_firefighter`, `npc_crowd_d` broken shoulders | same, plus the deleted `Worker_Yellow` hat was the skull crown | fixed — the crown stays and takes the `hair` tint |
|
remapped, and the hoodie's brows, eyes and hair are transplanted onto the Worker head.
|
||||||
| one unibrow on `npc_guard`, `npc_vest`, `npc_crowd_d` | the Worker's `Eyebrows` is one bar across the face and its eye quads are oversized | fixed — the bar is cut, the hoodie's brows are transplanted 20 mm above the eye line |
|
- **Faces** had a unibrow, oversized eye quads and no mouth. They now have two brows, two eyes and
|
||||||
| Worker roles had **no visible eyes** | the Worker's own eye quads sit inside the head | fixed — the hoodie's eye pair is transplanted with a 4 mm forward offset |
|
an authored lip block on every base.
|
||||||
| arms intersecting the body on `npc_dress`, `npc_jacket`, `npc_crowd_a`, `npc_crowd_d` | the baked rest aimed the upper arm straight down, which fails on the narrow bases | reduced — the arm rests 7° out from vertical (mesh width 0.180 → 0.220 on `casual`, 0.228 → 0.262 on `hoodie`) |
|
- **Hats** are gone except the firefighter helmet (owner directive), and the performer's cone with
|
||||||
| head gear did not sit on the skull | gear is authored around the procedural head centre (1.62); the Quaternius head centre is 1.69 | **resolved by removal** — see below |
|
them; carried props ride the hands.
|
||||||
| performer cone swallowed the head | a 0.44 m cone authored for the old body | removed — the performer carries a baton and board in the hands |
|
- **Hand and back gear** were authored for the old body (wrist y 0.78 → 1.017, chest 1.30 → 1.38,
|
||||||
| faces had **no mouth at all** | none of the three upstream heads carries a mouth material | fixed — a small lip block is placed on the measured skin surface for every base (dark maroon, not tinted) |
|
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).
|
||||||
## Hats and head items
|
|
||||||
|
|
||||||
**The firefighter helmet is the only head gear in the roster.** Caps, hoods and the performer cone
|
|
||||||
were removed from the role table, the per-character gear list and the performer props, so no
|
|
||||||
character can hide its face behind a hat. That also retired the head-gear lift/scale compensation
|
|
||||||
the caps needed on the Quaternius head.
|
|
||||||
|
|
||||||
| Role | Head gear | Body / hand items |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| `npc_firefighter` | firefighter helmet | SCBA tank, flashlight |
|
|
||||||
| `npc_influencer` | none | sunglasses, shoulder bag, phone |
|
|
||||||
| `npc_tourist` | none | backpack, camera |
|
|
||||||
| `npc_authorized_guest` | none | lanyard |
|
|
||||||
| `npc_performer` | none | baton and board **in the hands** |
|
|
||||||
| `npc_protester` | none | pole and sign **in the hands** |
|
|
||||||
| every other role | none | role tint only |
|
|
||||||
|
|
||||||
## 1. Full-body roster (12 roles)
|
## 1. Full-body roster (12 roles)
|
||||||
|
|
||||||
One tile per shipped character, neutral studio, camera at 4.2 m.
|
|
||||||
|
|
||||||

|

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

|

|
||||||
|
|
||||||
## 3. Crowd distance (8 m)
|
## 3. Animation poses (idle / sit / walk contact)
|
||||||
|
|
||||||
The distance the player actually sees a passer-by from the sidewalk.
|
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. Animation poses (idle / sit / walk contact)
|
|
||||||
|
|
||||||
Six roles × three poses, driven by the real `_animate()` path with the FSM frozen. Check that arms
|
|
||||||
hang instead of holding an A-pose, the seated pose puts the forearms on the thighs with the shins
|
|
||||||
down, walk contact keeps contralateral opposition, and nothing pinches or detaches at the shoulder,
|
|
||||||
elbow, hip or knee.
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Signoff checklist
|
## 4. Crowd distance (8 m)
|
||||||
|
|
||||||
Tick a verdict per row. A rejected row becomes a concrete `TODO.md` task, not an opinion.
|

|
||||||
|
|
||||||
|
## 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 |
|
| # | Question | Verdict |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 1 | Do the twelve characters read as distinct people at 8 m? | x yes ☐ no |
|
| 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)? | x 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? | x yes ☐ no |
|
| 3 | Do the faces hold up at portrait distance — brows, eyes, mouth, hair? | ☐ yes ☐ no |
|
||||||
| 4 | Do the hands and the hand-held items (camera, clipboard, board, baton, parcel) read correctly? | ☐ yes x 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? | x 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? | x yes ☐ no |
|
| 6 | Are the role outfits believable for a Hollywood-boulevard shift? | ☐ yes ☐ no |
|
||||||
| 7 | Are the seeded tint palettes acceptable, or too pastel/saturated? | x yes ☐ no |
|
| 7 | Are the seeded tint palettes acceptable? | ☐ yes ☐ no |
|
||||||
| 8 | Do the seated and walking poses hold up? | x yes ☐ no |
|
| 8 | Do the seated and walking poses hold up? | ☐ yes ☐ no |
|
||||||
|
|
||||||
**Signoff:** ☐ approved as shipped ☐ approved with the follow-ups below ☐ rejected
|
**Signoff:** ☐ approved as shipped ☐ approved with follow-ups ☐ rejected
|
||||||
|
|
||||||
## Still open
|
## Still open
|
||||||
|
|
||||||
Recorded as tasks in `TODO.md` under **Owner review findings**:
|
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).
|
||||||
1. **Eyes have no whites.** Every base uses single-colour quads, so eyes read as dark rectangles at
|
3. **Roster variety is three meshes for twelve roles** — the modular part library is the fix.
|
||||||
portrait distance. A light sclera plus pupil on the `Eye` slot would finish the face.
|
4. **The wand and phone orientation** read poorly in the gear sheet; both may need re-authoring.
|
||||||
2. **Hands and hand-held gear — measured and re-fitted.** `fit` now measures hand gear against the
|
|
||||||
Quaternius wrist (y 1.017) and reports `size_vs_head`, which turned "reads oversized" into a
|
|
||||||
number. Only the `clipboard` was genuinely mis-authored (grip in the middle of the board); it now
|
|
||||||
grips the top edge. The delivery parcel and the confused-visitor tray became carried props in
|
|
||||||
the hands, and the `cap`/`hood` gear were retired with the hats, leaving a 15-piece set. The
|
|
||||||
per-item table is in [`blender-assets.md`](blender-assets.md#hand-item-fit-on-the-quaternius-rig).
|
|
||||||
After the owner's grip-height feedback every hand item drops into the palm (`HAND_ITEM_DROP`),
|
|
||||||
the carried role props drop 0.06 m and the lanyard attach rose from y 1.30 to 1.38. Each piece
|
|
||||||
is now also captured **worn by a real avatar**
|
|
||||||
([`sheet_npc_gear_on_character.jpg`](blender_previews/sheet_npc_gear_on_character.jpg)) — check
|
|
||||||
row 4 against that sheet. **Row 4 is the one still needing an owner verdict.**
|
|
||||||
3. **Arms still graze the torso on the `worker` base** — the 7° rest tilt cleared the `casual` base
|
|
||||||
but not this one.
|
|
||||||
4. **The `npc_vest` clipboard is oversized** on the shorter Quaternius arm.
|
|
||||||
5. **Roster variety is three meshes for twelve roles.** Tint and gear carry the difference; the
|
|
||||||
modular part library (hair, outfits) is the fix.
|
|
||||||
6. `npc_dress` and `npc_hoodie` have no coat or dress geometry — they are the `casual`/`hoodie`
|
|
||||||
bases with a matching tint.
|
|
||||||
|
|
||||||
## Measured facts
|
## Measured facts
|
||||||
|
|
||||||
| Metric | Value |
|
| Metric | Value |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| Characters | 12, all on the Quaternius 62-joint rig |
|
| Characters | 12, all on the Quaternius 62-joint rig |
|
||||||
| Triangles per character | 4,458 (worker, before the head transplant) … 6,424 (`casual`) |
|
| Triangles / glTF vertices | 6,218 … 6,436 / 13,012 … 13,459 |
|
||||||
| glTF vertices per character | 9,370 … 13,440 |
|
| Budget | 24,000 tris / 24,000 verts each |
|
||||||
| Budget | 24,000 tris / 24,000 verts per character |
|
| Tint slots | `skin`, `cloth`, `pants`, `hair`, `accessory` + fixed detail |
|
||||||
| Tint slots | `skin`, `cloth`, `pants`, `hair`, `accessory`, plus fixed detail |
|
| Texel density | 73–74 px/m on 256² maps |
|
||||||
| Texel density | 73–74 px/m on the 256² maps |
|
|
||||||
| Height | 1.82–1.88 m |
|
| Height | 1.82–1.88 m |
|
||||||
| 24-NPC frame budget | 174,976 tris, 0.85 ms average frame (budget 50 ms) |
|
| 24-NPC frame budget | 175,264 tris, 0.87 ms (budget 50 ms) |
|
||||||
| Gates | `inspect` clean, `audit` 12/12, `fit` OK, Godot 278/278, Python 167/167 |
|
| Gates | `audit` 12/12, `inspect` clean, `fit` OK, Godot 278/278, Python 167/167 |
|
||||||
|
|
||||||
## Reproducing the captures
|
## Reproducing
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
godot --path . --script res://src/test/capture_npc_baseline.gd -- --out=res://tmp/npc-signoff
|
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 \
|
godot --path . --script res://src/test/capture_npc_pose.gd -- --out=res://tmp/p --pose=idle
|
||||||
--out=res://tmp/npc-signoff-pose --pose=idle # repeat for sit and walk_contact
|
godot --path . --script res://src/test/capture_npc_gear.gd -- --out=res://tmp/npc-gear
|
||||||
```
|
```
|
||||||
|
|
||||||
## History
|
## History
|
||||||
|
|
||||||
The page previously carried the 0.9.4 **procedural library** baseline (eight hand-built characters,
|
This page replaced the 0.9.4 procedural-library baseline (eight hand-built characters, 13-core
|
||||||
the face/hand/neck fixes, the 13-core proportion audit). That mesh no longer ships; its comparison
|
proportion audit). Its comparison sheets stay in `blender_previews/` as records. Per-character
|
||||||
sheets stay in `blender_previews/` as records:
|
sources: [`npc-model-sourcing.md`](npc-model-sourcing.md); the face options that led to the full
|
||||||
`sheet_npc_baseline_compare-p1.jpg`, `-body.jpg`, `-torso.jpg`, `-face-detail.jpg`,
|
swap: [`screens/npc-face-gate/`](screens/npc-face-gate/README.md).
|
||||||
`sheet_npc_hands_compare.jpg`, `sheet_npc_hands_grip_compare.jpg`.
|
|
||||||
|
|
||||||
Per-character sources and build steps are in
|
|
||||||
[`npc-model-sourcing.md`](npc-model-sourcing.md); the face options that led to the full swap are in
|
|
||||||
[`screens/npc-face-gate/`](screens/npc-face-gate/README.md).
|
|
||||||
@@ -815,7 +815,9 @@ func _attach_gear(gear_name: String) -> bool:
|
|||||||
if _rig == null:
|
if _rig == null:
|
||||||
node.free()
|
node.free()
|
||||||
return false
|
return false
|
||||||
node.position = Vector3(0, 1.10, 0)
|
# Shoulder-blade height on the Quaternius rig. 1.10 was the procedural
|
||||||
|
# torso midpoint and hung the pack at the waist (owner report).
|
||||||
|
node.position = Vector3(0, 1.26, 0)
|
||||||
_rig.add_child(node)
|
_rig.add_child(node)
|
||||||
"chest":
|
"chest":
|
||||||
if _rig == null:
|
if _rig == null:
|
||||||
|
|||||||
Reference in new issue
Block a user