docs(review): embed every demo shot inline, record the rule in AGENTS
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.
This commit is contained in:
1 parent
05c1488c00
commit
304c1e9afd
3 files changed
+90
-29
No files matched your search
+88
-24
@@ -12,19 +12,83 @@ 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`](../Tools/visual_loop.py) `--verify` to check that each shot still shows the content its expectation describes. About a minute.
|
||||
|
||||
## The shot list
|
||||
## Status at a glance
|
||||
|
||||
Each shot has an **expectation** in [`Tools/visual_targets.json`](../Tools/visual_targets.json) — the content the capture must show — and a verification state produced by `--verify`: it fails if the frame is blank, the wrong size, or has no tonal range.
|
||||
Every shot is embedded below, in order, so the whole review happens in this file.
|
||||
|
||||
| # | File | View | Expected content | Verified | Approved |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 1 | `demo/review-demo-spawn-view.png` | north sidewalk | The whole south block: the neoclassical hero façade between its neighbours, both sidewalks and the road in the foreground | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 2 | `demo/review-demo-street-level.png` | eye height, north side | Street level: the hero colonnade with the adjacent frontage buildings either side, shopfronts at pavement level | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 3 | `demo/review-demo-crossing.png` | along the crosswalk | The designated mid-block crossing (s=130 m, UE X −14956): zebra bars on the asphalt, south frontage and colonnade behind | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 4 | `demo/review-demo-north-buildings.png` | across the Boulevard | The two north-side buildings (TCL Chinese Theatre, Madame Tussaud's) from the south side, full height in frame | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 5 | `demo/review-demo-third-person.png` | third-person boom, 6 m behind the pawn | The player's own visible body on the north sidewalk, seen from behind, with the hero façade across the street. Captured with `-thirdperson`, which starts the pawn in the third-person rig | ☑ 2026-11-09 | ☐ pending |
|
||||
| # | Shot | Verified | Approved |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | [Spawn view](#1-spawn-view) | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 2 | [Street level](#2-street-level) | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 3 | [Crossing](#3-crossing) | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 4 | [North buildings](#4-north-buildings) | ☑ 2026-11-09 | ☑ 2026-11-09 |
|
||||
| 5 | [Third-person body](#5-third-person-body) | ☑ 2026-11-09 | ☐ pending |
|
||||
|
||||
Approval is per shot, in the table above (owner review of the `0.1.4` set, recorded in [`Docs/reviews/0.1.4-review.md`](../Docs/reviews/0.1.4-review.md)). Add a row when a shot is added; remove the file in the same change when a shot is retired.
|
||||
**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`](../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 `-thirdperson` so 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 `PlayAnimation` is called — the run logs `GigLine: playing body clip Character_AnimHuman_rig_GigLine_Idle` — so the call succeeds and the pose does not apply. Tracked in `TODO.md` under "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)
|
||||
|
||||
@@ -41,26 +105,26 @@ Note the comparison is only meaningful when the shot and the reference frame the
|
||||
## 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–55° lens to fill the frame from across the street.
|
||||
- **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
|
||||
|
||||
- Hero façade renders pale: the stone material is a graph and a texture set, not a scanned surface (the `0.1.4` façade pass is in progress).
|
||||
- Banners sit on the column line rather than flush to the wall (they hang on the columns in the photographs, so this is acceptable).
|
||||
- Between kerb and building line the walkable surface is the terrain mesh, not a modelled pavement.
|
||||
- The El Capitan Theatre has no marquee or blade sign yet — the feature that makes it read as itself.
|
||||
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.
|
||||
|
||||
## 0.2.0 third-person body — what to look at
|
||||
| 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 |
|
||||
|
||||
Shot 5 is the review for the third-person rig. It is **not** a finished body: the figure is in bind pose, arms out.
|
||||
Accepted by the owner, not a defect:
|
||||
|
||||
What is implemented and visible:
|
||||
- Banners hang on the column line rather than flush to the wall — that is how they hang in the photographs.
|
||||
|
||||
- The pawn carries a visible skeletal body with the warm skin material (the material needed `used_with_skeletal_mesh=True`; without it Unreal silently substituted the default grey, which is what the first render showed).
|
||||
- A spring-arm camera with collision testing, and a **V** toggle between first and third person. The shipped default stays first person; the review passes `-thirdperson` so the shot is reproducible.
|
||||
Resolved and removed:
|
||||
|
||||
What is **not** working, with evidence:
|
||||
|
||||
- The idle clip is bound and `PlayAnimation` is called — the run logs `GigLine: playing body clip Character_AnimHuman_rig_GigLine_Idle` — but the body still renders in bind pose. The clip therefore is not deforming the mesh; that is the open defect, tracked in `TODO.md` under "Verify animation plays correctly on the imported rig".
|
||||
- The arms-down offsets are baked into the clips as a base on top of the A-pose bind (`BASE` in `Tools/character_anim_build.py`), so a correct playback should show arms down. Seeing them out is the same defect, not a missing offset.
|
||||
- "The El Capitan Theatre has no marquee or blade sign" — `Tools/ue_stage_theatre_trim.py` stages 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.
|
||||
Reference in new issue
Block a user