Screenshots/README.md on this branch still used the path-only table, so a reviewer had to open six PNGs to judge a pass. Every shot now has its own section with the image embedded, its view, expected content and both verdicts, plus a status table at the top that links to them. The known-issues list becomes a table of issue -> version and item that owns it: pale hero stone, hero entrance doors, the bind-pose animation defect, unproven camera collision and the terrain-as-pavement strip all point at their TODO owner. Two stale entries removed: the theatre marquee exists (six trim actors staged) and 'materials not yet created' contradicted the scene conventions. AGENTS.md now says the README is updated with every visual change, that the image is embedded inline, and that approval ticks both the section and the table row. Also removed an orphan: review-demo-retail-frontage.png had been re-copied into this branch by the capture step although its geometry only exists on facade-retail-0.1.6.
Screenshots — demo-map visual review
Rendered captures of the demo map only — what a player sees when the demo runs. Generated by Tools/render_screenshots.sh; the PNGs are committed so a reviewer sees exactly what the build rendered.
The review staging map (/Game/Test/ReviewMap) is not part of this set: it exists to hold the camera list and the hero detail rig, and it is not what ships.
How to regenerate
Tools/render_screenshots.sh --verify
Stages the demo shot cameras, runs the game on /Game/Hollywood/DemoMap, copies the PNGs into Screenshots/demo/ and then runs Tools/visual_loop.py --verify to check that each shot still shows the content its expectation describes. About a minute.
Status at a glance
Every shot is embedded below, in order, so the whole review happens in this file.
| # | Shot | Verified | Approved |
|---|---|---|---|
| 1 | Spawn view | ☑ 2026-11-09 | ☑ 2026-11-09 |
| 2 | Street level | ☑ 2026-11-09 | ☑ 2026-11-09 |
| 3 | Crossing | ☑ 2026-11-09 | ☑ 2026-11-09 |
| 4 | North buildings | ☑ 2026-11-09 | ☑ 2026-11-09 |
| 5 | Third-person body | ☑ 2026-11-09 | ☐ pending |
Verified is what --verify reports: the frame is not blank, is the right size, and has tonal range. Approved is the owner's verdict, recorded here. Each shot also has an expectation in Tools/visual_targets.json describing the content it must show.
1. Spawn view
- File:
demo/review-demo-spawn-view.png - View: north sidewalk, 14 m back, level horizon
- Expected content: the whole south block — the neoclassical hero façade between its neighbouring buildings, both sidewalks and the road in the foreground
- Verified: ☑ 2026-11-09 · Approved: ☑ 2026-11-09
2. Street level
- File:
demo/review-demo-street-level.png - View: eye height, north side
- Expected content: the hero colonnade with the adjacent frontage buildings either side, shopfronts at pavement level
- Verified: ☑ 2026-11-09 · Approved: ☑ 2026-11-09
3. Crossing
- File:
demo/review-demo-crossing.png - View: from the north sidewalk along the crosswalk
- Expected content: the designated mid-block crossing (s=130 m, UE X −14956) — zebra bars on the asphalt, south frontage and colonnade behind
- Verified: ☑ 2026-11-09 · Approved: ☑ 2026-11-09
4. North buildings
- File:
demo/review-demo-north-buildings.png - View: across the Boulevard from the south side
- Expected content: the two north-side buildings (TCL Chinese Theatre, Madame Tussaud's), full height in frame
- Verified: ☑ 2026-11-09 · Approved: ☑ 2026-11-09
5. Third-person body
- File:
demo/review-demo-third-person.png - View: third-person boom, ~6 m behind the pawn, captured with
-thirdpersonso the pawn starts in the third-person rig - Expected content: the player's own visible body on the north sidewalk, seen from behind, with the hero façade across the street
- Verified: ☑ 2026-11-09 · Approved: ☐ pending
What this shot is evidence for, and what it is not:
- Implemented and visible: the pawn carries a visible skeletal body with the warm skin material, and a spring-arm camera with collision testing. The V toggle swaps first and third person; the shipped default stays first person and the review passes
-thirdperson. - Not working: the figure is in bind pose, arms out. The idle clip is bound and
PlayAnimationis called — the run logsGigLine: playing body clip Character_AnimHuman_rig_GigLine_Idle— so the call succeeds and the pose does not apply. Tracked inTODO.mdunder "Verify animation plays correctly on the imported rig" with that evidence. - Camera collision is implemented but unproven: the spawn point has open space behind it, so no shot exercises the arm shortening.
- The skin material needed
used_with_skeletal_mesh=True; without it Unreal silently substituted the default grey, which is what the first capture of this shot showed.
The iteration loop (uncommitted)
Tools/visual_loop.py measures each capture against its reference photograph and turns the deltas into modelling actions for the Blender skill packs:
python3 Tools/visual_loop.py --compare --iteration 3 # writes Art/reference/iterations/3/
That directory is gitignored: iterations stay uncommitted until a shot is confirmed, and only confirmed shots are promoted into Screenshots/demo/. The feedback file names the affected skill (blender-modeler, archviz, materials, lookdev, camera-cinematography) so the next modelling pass has a starting point rather than an opinion.
Note the comparison is only meaningful when the shot and the reference frame the same subject — a wide block view measured against a tight façade crop will always report low edge similarity.
Scene conventions
- Demo map (
/Game/Hollywood/DemoMap): fixed daytime — sun pitch −62 / yaw 120 (intensity 4, warm), sky light 2.6, sky atmosphere, height fog, fixed exposure. - Cameras: elevation shots sit at their target height (pitch 0, so verticals stay parallel) and use a 42–68° lens to fill the frame from across the street.
- Materials: every surface carries a look-developed material from
Tools/ue_build_demo_map.py— noise-blended base colour, masonry coursing, and a generated texture set (Tools/generate_facade_textures.py) sampled world-aligned. Explicit roughness and specular per surface type.
Known cosmetic issues
Every issue is tracked in TODO.md under the version that will fix it; an issue with no ticket is a bug in the plan, not a note.
| Issue | Where it is tracked | State |
|---|---|---|
| Hero stone renders pale — the material is a procedural graph and a generated texture set, not a measured surface | 0.9.0 → measured material library |
Open |
| Hero façade has no doors at street level left and right of the central bay, and the central-bay elements are not positioned as the photographs show | 0.9.0 → per-building models, hero façade |
Open |
Third-person body renders in bind pose: the clip is bound and PlayAnimation is called, but the pose does not apply |
0.2.0 → verify animation plays correctly |
Open (blocking 0.2.0) |
| Camera collision is implemented but never exercised against a wall | 0.2.0 → camera collision |
Open |
| Between kerb and building line the walkable surface is the terrain mesh, not a modelled pavement | 0.6.0 → visual polish |
Open |
Accepted by the owner, not a defect:
- Banners hang on the column line rather than flush to the wall — that is how they hang in the photographs.
Resolved and removed:
- "The El Capitan Theatre has no marquee or blade sign" —
Tools/ue_stage_theatre_trim.pystages all six trim actors; verified in/tmp/gigline/theatre-import.txt. - "Materials are not yet created in Blender or fully integrated" — contradicted by the scene conventions above.




