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).