Blender library - Rebuild the face: sclera, iris and upper lid per eye, brow ridge, cheekbones, nose bridge and tip, ears with lobes, split upper/lower lips. - Give each hand four fingers plus a thumb and end every sleeve in a cuff ring. - Raise CHAR_MAX_VERTS 4000 -> 5000 (16 avatars still cost ~6.9 ms of a 50 ms frame), decimate the body to 26 %; characters are now 3,974-5,026 tris and 3,744-4,807 verts. Rebuild all 8 variants and re-bake their AO maps. Capture tooling - Add a `portrait` stage to capture_realism.gd: freeze one NPC, park the crowd out of frame, stand the subject on open sidewalk, turn it into the camera and put the guard on the sunlit side. New --portrait-type=N picks the role. - Add the npc_portrait_day concept and map the shot to it, so avatar detail is scored against a portrait instead of a wide street frame. Flashlight - Drop the fake additive beam (Materials.light_beam + the cone mesh): on GL Compatibility a first-person camera inside the cone renders it as a filled disc with a bright far ring. Keep the tight spot (14 deg, 20 m, energy 4.2) and its headless test; the visible shaft is now planned behind a Forward+ preset. Docs and task tracking - Move the finished realism follow-ups (ground exposure, flashlight, NPC detail, judge re-check) to DONE.md and expand TODO.md with step-by-step plans for NPC gear fit, venue geometry plus the committed gallery, and the Forward+ preset. - Record the decisions, gotchas and portrait recipe in MEMORY.md; update the Blender contract, the concept README and the capture section of README.md. - Refresh the gallery captures affected by the avatar rebuild. Checks: headless 228/228, Python 86/86, blender_assets audit exit 0, scene_concepts audit all GOOD, screen_designs compare 11 good / 0 bad, smoke_npc_budget OK, boot clean (only the known headless mesh warning).
Scene concepts: the realistic target look
These are AI-generated example frames (python3 tools/scene_concepts.py generate --group scene,
openai/gpt-5-image-mini, 1280×720) for the realism pass. They are art direction, not
assets. tools/scene_concepts.py realism pairs them with the in-game shots from
src/test/capture_realism.gd (see SHOTS in the tool). New generations never overwrite a
file here; they are saved as <name>-vN.png.
| Concept | Visual targets it sets |
|---|---|
hollywood_entrance_morning |
warm low sun, long soft shadows, brick with visible mortar and wear, stone plinth, potted topiary, haze that fades the far street to beige |
hollywood_entrance_golden_hour |
strong back light and rim light on people, marquee bulbs reading even in daylight |
hollywood_entrance_rain_night |
dark scene lit by practical lights only (marquee, sodium lamps), wet glossy ground with reflections, fog |
boulevard_skyline_day |
deep layered skyline with real towers and haze, palms lining the road, red curb paint, believable asphalt |
boulevard_skyline_dusk |
purple/orange gradient sky, neon signs, lit windows, car light trails |
joke_shop_alley_evening |
narrow brick alley, one warm wall lantern as key light, deep shadows, people in dark jackets |
joke_shop_door_closeup |
close material detail: brick, mortar, aged wood door, brass |
studio_stage_door_night |
granite facade, a bright bulb canopy as the main light, a glossy black car, stanchions and a barrier |
sidewalk_material_closeup |
paver joints, stains, granite curb, aggregate asphalt and a tree grate at grazing light |
entrance_steps_podium |
granite steps, handrails, glass doors, the check-in podium |
crowd_barrier_line |
steel barriers, a red carpet, a crowd with depth-of-field haze |
responder_arrival_wide |
fire engine, turnout gear, red/blue light spill on wet pavement |
npc_portrait_day |
close portrait of a pedestrian: skin with visible pores and stubble, fabric weave, shallow depth of field. The bar for an avatar close-up, not for the crowd shots |
The npc_portrait capture in capture_realism.gd is staged, not posed by the
crowd: it freezes one NPC on an open patch of sidewalk, parks the rest of the
crowd out of frame, turns the subject into the camera and stands the guard on the
sunlit side. It is the only shot where a face fills the frame, so it is the one to
eyeball after an avatar change (docs/screens/realism/2026-11-01-npc/).
Cross-cutting targets, for comparison with the 2026-11-01 captures in
docs/screens/realism/2026-11-01-v2/sheet.jpg:
- Exposure. The concepts keep the ground mid-grey. The game's sidewalk is close to white, so it is overexposed.
- Night means dark. The night/dusk concepts are lit by practical lights. The game's "Evening" phase is a bright pink-orange frame.
- Depth. The concepts show a layered skyline fading into haze. The new v2 skyline strips supply this; the old box skyline did not.
- Geometry and foliage. The facades have plinths, cornices and deep window reveals, and the trees and shrubs are organic. The game uses flat walls and blob trees.