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).
42 lines
3.1 KiB
Markdown
42 lines
3.1 KiB
Markdown
# 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.
|