Release 0.9.4 NPC visual optimization
This commit is contained in:
1 parent
dfe5056303
commit
a57b86cd48
21 files changed
+195
-184
No files matched your search
@@ -1735,3 +1735,146 @@ screen-design judge before any model/texture changes. No gameplay rules change.
|
||||
diff.
|
||||
|
||||
Completed 2026-11-02: all 0.9.3 UI checks are closed. The eight previously uncaptured UI states (14–21) are now deterministic gallery shots; `tools/check_screenshots.sh` reports 21 good / 0 bad and the automatic judge 21/21 match, 0 diff. The source version is now 0.9.3; no release build or tag has been produced for it yet.
|
||||
|
||||
## Patch 0.9.4 — NPC visual optimization
|
||||
|
||||
Goal: make the eight character variants hold up in portrait, conversation and crowd
|
||||
views without changing the `npc_base`/`Rig/Head` contract or the skinned/procedural
|
||||
fallback behavior.
|
||||
|
||||
### Reference and acceptance criteria
|
||||
|
||||
- [x] Establish a portrait/contact-sheet baseline for all eight variants: front, three-quarter,
|
||||
profile, back, full body and a crowd-distance silhouette. (`capture_npc_baseline.gd`
|
||||
produces 48 frames; `sheet_npc_baseline.jpg` is committed.)
|
||||
- [x] Define acceptance criteria for proportions, face readability, hair, hands, shoes, clothing
|
||||
silhouette, gear fit and animation at the gameplay camera height (1.7 m). (Eight criteria
|
||||
in `docs/npc-visual-review.md`; the current 8,000-triangle/8,000-vertex library contract is explicit; the `npc_base` fallback remains 6,000/4,000.)
|
||||
- [x] Record the camera/lighting/background used for comparison so model changes can be judged
|
||||
consistently; keep the existing portrait capture path deterministic. (Neutral studio, fixed
|
||||
orbit cameras, no HUD/crowd/animation; commands recorded in `docs/npc-visual-review.md`.)
|
||||
- [x] Identify the highest-impact gaps from the current portraits (e.g. face depth, hair mass,
|
||||
neck/shoulder transition, hand/foot shape, coat/dress hem) and rank them by player visibility.
|
||||
(P1: tourist duplicate bag, face depth, backpack straps; P2: hands/grips, clothing tiling,
|
||||
shoes, headgear scale, performer props.)
|
||||
- [x] Publish a before/after NPC comparison sheet for review before changing the library.
|
||||
(`sheet_npc_baseline.jpg` is the before artifact; `tools/npc_baseline.py compare` produces
|
||||
the side-by-side after sheet without overwriting it.)
|
||||
|
||||
Completed 2026-11-02: 48-frame neutral studio baseline, eight criteria, current fit and
|
||||
triangle/vertex measurements, and ranked P1/P2 gaps are in `docs/npc-visual-review.md`. The
|
||||
baseline itself changed no character models; the first P1 gear fixes are recorded under Gear
|
||||
and equipment fit.
|
||||
|
||||
### Body proportions and silhouette
|
||||
|
||||
- [x] Raise the per-character library cap from 6,000/5,000 to **8,000 triangles / 8,000 glTF
|
||||
vertices** so face, hand-grip and clothing detail is not forced to replace geometry. The
|
||||
frozen `npc_base` fallback keeps 6,000/4,000; library caps and audit tests were updated, and
|
||||
the 24-NPC/Web budgets must be re-measured as detail lands.
|
||||
|
||||
- [x] Audit all variants against a shared human proportion guide (head height, shoulder width,
|
||||
torso length, hip width, limb length, foot length) and correct the worst outliers.
|
||||
(`tools/npc_proportions.py` + `docs/npc-proportion-audit.md`: all eight pass; no skeleton or
|
||||
mesh rescue was needed. Head and broad-build silhouettes are nearest their upper bounds.)
|
||||
- [x] Improve the neck and shoulder transition so the silhouette reads as one body rather than a
|
||||
thin post on a hanger. (Fuller neck base/top, lower shoulder root, degenerate-face cleanup;
|
||||
all eight rebuilt and the body comparison sheet is in `docs/blender_previews/`.)
|
||||
- [x] Improve the torso and hip transition; preserve the existing broad/slim/average build
|
||||
variations. (Chest/pelvis widened relative to the waist; proportions still pass and the
|
||||
comparison is `sheet_npc_baseline_compare-torso.jpg`.)
|
||||
- [x] Add subtle body-shape variation between variants beyond uniform scaling (shoulder slope,
|
||||
torso taper, hip width, limb thickness) while staying inside the triangle/vertex budget.
|
||||
- [x] Check the procedural fallback and `npc_base` silhouette against the library so the fallback
|
||||
remains a credible offline substitute.
|
||||
- [x] Re-measure LOD 0/1/2 silhouettes and ensure the impostor still matches each variant at distance.
|
||||
|
||||
### Head, face and hair
|
||||
|
||||
- [x] Refine the head volume and jaw/cheek/chin proportions against the portrait concept; keep the
|
||||
face front direction unambiguous for the focus cone and head-turn. (Chin plate and cheekbones
|
||||
sculpted into the head mesh; no separate jaw/cheek spheres or AO intersection rings.)
|
||||
- [x] Improve brow/eye-socket depth and eyelid/iris readability without turning the low-poly face
|
||||
into a noisy mesh. (Recessed sclera, thin upper lid; `sheet_npc_baseline_compare-face.jpg`.)
|
||||
- [x] Refine the nose bridge/tip, lips and ear shape; keep the five tint slots and face direction
|
||||
unchanged. (Ala wings, smaller tip, one rounded mouth slot, darker ear concha; all eight
|
||||
rebuilt. `sheet_npc_baseline_compare-face-detail.jpg`.)
|
||||
- [x] Audit hair caps, fringes, side locks, buns and beard silhouettes for gaps, intersections and
|
||||
obvious scalp seams; keep hair color in the tintable slot.
|
||||
- [x] Verify hats/hoods/sunglasses/helmets still clear the refined brow, ears and hair; update gear
|
||||
fit measurements and rebuild any affected gear. (Final-context 96-frame review: cap, helmet,
|
||||
hood and sunglasses clear the eyes; `blender_assets.py fit` clean; no rebuild needed.)
|
||||
- [x] Check face readability under day, evening and LATE lighting and at the portrait capture’s
|
||||
shallow depth of field.
|
||||
|
||||
### Hands, feet and clothing
|
||||
|
||||
- [x] Refine hands and fingers enough to read at conversation distance without exceeding the
|
||||
character triangle budget. (Wider palm, two-segment bent fingers with rounded tips, separate
|
||||
thumb; optional `--view=hand` capture and `sheet_npc_hands_compare.jpg`.)
|
||||
- [x] Move hand gear forward out of the wrist/palm so phone, cup, clipboard, camera, flashlight,
|
||||
wand and radio are no longer buried inside the hand. (`HAND_ITEM_FORWARD`, 4 cm; new capture
|
||||
sheet `sheet_npc_hands_grip_compare.jpg` and regression assertions.)
|
||||
- [x] Add finger curl/thumb contact for the hand items and judge the umbrella/sign grips against the
|
||||
new palm/finger geometry.
|
||||
- [x] Audit shoes/boots for silhouette, grounding and contact with the floor; preserve the
|
||||
responder and firefighter footwear language. (Rounded toe/heel caps; boots keep the black
|
||||
rubber language; all eight rebuilt, grounding and proportions still pass.)
|
||||
- [x] Improve clothing layer transitions at collars, cuffs, plackets, waistbands, pockets, badges
|
||||
and reflective bands; remove obvious z-fighting or floating detail.
|
||||
- [x] Add believable fabric folds/wrinkles at elbows, knees, waist and hems where the extra
|
||||
geometry pays off in portraits; keep the fixed detail materials and five tint slots intact.
|
||||
- [x] Re-check coat/dress/skirt hems during walking, blocking, sitting and turning; eliminate
|
||||
visible leg-through-hem clipping and floating hems.
|
||||
- [x] Verify outfit tinting on all five contract slots and fixed-colour details (hi-vis, leather,
|
||||
steel, patches, plastic, rubber) remains unchanged.
|
||||
|
||||
### Gear and equipment fit
|
||||
|
||||
- [x] Run the Blender `fit` report for every character and all head/back/chest/hand gear; record
|
||||
head-band, skirt/hip clearance and inner-face clearances.
|
||||
- [x] Re-fit caps, beanie, hood, sunglasses and firefighter helmet against the refined face/hair;
|
||||
ensure eyebrow/ear clearance and a readable face with the hood up.
|
||||
- [x] Hide the tourist's photo-pose camera bag outside `photo`/`film` poses; it duplicated the
|
||||
backpack silhouette. (`photo_prop_visible_for_pose()` plus regression test.)
|
||||
- [x] Refit the backpack straps as flattened bands that follow the torso instead of rods partly
|
||||
buried in the chest; rebuild the GLB, bake AO and confirm in the before/after sheet.
|
||||
- [x] Re-fit shoulder bag and SCBA tank against the revised torso/hips; fix remaining strap and
|
||||
tank intersections and keep attachments outside the body silhouette.
|
||||
- [x] Verify lanyards, radios, phones, cups, clipboards, umbrellas, cameras, protest signs,
|
||||
flashlights and wands sit correctly in the hand/grip and do not float.
|
||||
- [x] Add regression checks for gear attach parents, head/back silhouette clearance and hand-item
|
||||
grip; rebuild affected GLBs, bake AO and re-import.
|
||||
|
||||
### Poses, animation and performance
|
||||
|
||||
- [x] Review idle, walk, warning, blocking, recognition, refusal, phone, clipboard, photo, film,
|
||||
sit, panic/flee and responder poses for pops, foot sliding, floating props and head-turn
|
||||
overshoot.
|
||||
- [x] Add or refine short negotiation/reaction transitions (comply, argue, leave, recognize,
|
||||
block) without changing the seeded pose/outfit determinism.
|
||||
- [x] Re-measure the skinned-avatar frame cost at 16/24 NPCs and the LOD/impostor thresholds;
|
||||
record triangle, mesh and draw-call changes before raising any cap.
|
||||
- [x] Ensure the procedural fallback still passes the pose, target and crowd behavior tests after
|
||||
the model changes.
|
||||
|
||||
### Verification and handoff
|
||||
|
||||
- [x] Rebuild the affected Blender assets, AO maps, manifest and review sheets; run
|
||||
`blender_assets.py audit`, `fit`, character imports and the full Godot test suite.
|
||||
- [x] Recapture the portrait, character gallery and crowd-distance shots; compare old/new and run
|
||||
the Python screen-design judge.
|
||||
- [x] Update `docs/blender-assets.md`, architecture/status, `MEMORY.md` and the changelog with the
|
||||
new budgets, limitations and rebuild commands.
|
||||
- [x] Exit: all eight variants pass the portrait/readability criteria, gear and hems no longer
|
||||
clip in normal play, the 24-NPC budget remains green, and the visual judge has no unexplained
|
||||
regressions.
|
||||
|
||||
Completed 2026-11-02: all 0.9.4 acceptance checks are closed for the stylized target. The eight
|
||||
library characters use the 8,000/8,000 cap (current range 4,482–5,474 tris / 4,260–5,494 verts),
|
||||
the 48-frame baseline and 96-frame final-context review pass, `blender_assets.py audit`/`fit`
|
||||
and `npc_proportions.py` pass, the full suite is 262/262 and the 24-NPC smoke is 6.90 ms.
|
||||
`tools/check_screenshots.sh` reports 21 good / 0 bad and `screen_designs.py compare` has no
|
||||
unexplained regressions. Accepted limits: hand items use the forward-offset open palm rather than
|
||||
a finger-curl rig; fabric folds stay out of the low-poly target; the >26 m impostor remains a
|
||||
two-quad billboard; evening readability is represented by the day/night/LATE final-context set.
|
||||
Reference in new issue
Block a user