Files
zwitschi 1ee32215b0
Full build / Import + headless tests (push) Successful in 38s
Full build / Full desktop build + optional release (push) Skipped
Detail the NPC avatars and finish the realism follow-ups
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).
2026-11-01 17:46:25 +01:00
..

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.