diff --git a/Screenshots/README.md b/Screenshots/README.md index 81ea83c..3e19943 100644 --- a/Screenshots/README.md +++ b/Screenshots/README.md @@ -12,27 +12,25 @@ 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. -> **WARNING — the current capture set is broken (2026-11-09).** All nine shots were judged `no` by the vision model, and shot 7 shows the scene itself wrong: a disassembled car floating over a blank surface with no street or buildings in frame. `--verify` still reports 9/9 because it only measures exposure and size. Treat every image in this file as stale until this is fixed; the cause is not yet identified. - ## Status at a glance -Every shot is embedded below, in order, so the whole review happens in this file. +**This is the only place approval state is recorded.** Every image below requires a fresh approval because all of them changed; a note in this table is the record, and the per-shot sections describe what a shot should show rather than whether it passed. -| # | Shot | Verified | Approved | +| # | Shot | Status | Note | | --- | --- | --- | --- | -| 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 | [Retail frontage](#5-retail-frontage) | ☑ 2026-11-09 | ☑ 2026-11-09 | -| 6 | [Third-person body](#6-third-person-body) | ☑ 2026-11-09 | ☑ 2026-11-09 | -| 7 | [Third-person front](#7-third-person-front) | ☑ 2026-11-09 | ☑ 2026-11-09 | -| 8 | [Third-person walk](#8-third-person-walk) | ☑ 2026-11-09 | ☑ 2026-11-09 | -| 9 | [Vehicle](#9-vehicle) | ☐ FAIL 2026-11-09 | ☐ pending | +| 1 | [spawn-view](#1-spawn-view) | ☐ pending | character and car float | +| 2 | [street-level](#2-street-level) | ☐ pending | character and car float | +| 3 | [crossing](#3-crossing) | ☐ pending | | +| 4 | [north-buildings](#4-north-buildings) | ☐ pending | | +| 5 | [retail-frontage](#5-retail-frontage) | ☐ pending | | +| 6 | [third-person](#6-third-person) | ☐ pending | character and car float | +| 7 | [third-person-front](#7-third-person-front) | ☐ pending | character and car float | +| 8 | [third-person-walk](#8-third-person-walk) | ☐ pending | character and car float | +| 9 | [vehicle](#9-vehicle) | ☐ pending | | +| 10 | [feet](#10-feet) | ☐ pending | | +| 11 | [wheel](#11-wheel) | ☐ 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`](../Tools/visual_targets.json) describing the content it must show. - ---- +**Status:** ☐ pending · ☑ approved · ☒ rejected. ## 1. Spawn view @@ -41,7 +39,6 @@ Every shot is embedded below, in order, so the whole review happens in this file - **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 --- @@ -52,7 +49,6 @@ Every shot is embedded below, in order, so the whole review happens in this file - **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 --- @@ -63,7 +59,6 @@ Every shot is embedded below, in order, so the whole review happens in this file - **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 --- @@ -74,7 +69,6 @@ Every shot is embedded below, in order, so the whole review happens in this file - **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 --- @@ -85,7 +79,6 @@ Every shot is embedded below, in order, so the whole review happens in this file - **File:** `demo/review-demo-retail-frontage.png` - **View:** north sidewalk, level horizon, 68° lens - **Expected content:** the retail run beside the hero — 6800 Lee Drug's bronze cornice, mural row and parapet next to 6806–6820's burgundy fascia, pilasters and window storey -- **Verified:** ☑ 2026-11-09 · **Approved:** ☑ 2026-11-09 Read this one against the reference photograph it was modelled from: `Art/reference/retail-neighbours/01-lee-drug-and-neighbor.jpg` (Gb321, CC BY-SA 4.0). @@ -106,7 +99,6 @@ Known gaps in this first pass, recorded rather than hidden: - **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:** ☑ 2026-11-09 What this shot is evidence for: @@ -130,7 +122,6 @@ Still open, tracked in `TODO.md`: - **File:** `demo/review-demo-third-person-front.png` - **View:** from the road, ~6 m in front of the pawn, looking back north. The pawn spawns facing +Y, so this is its front - **Expected content:** the clothed character from the front — navy tee, dark jeans, off-white shoes, dark hair — arms hanging at the sides with the hands by the hips -- **Verified:** ☑ 2026-11-09 · **Approved:** ☑ 2026-11-09 **Why the shot exists:** the third-person shot only ever shows the pawn's back, so a pose defect on the front — arms out, hands splayed, a face pointing the wrong way — was invisible in review. This angle is the check for it. @@ -149,12 +140,35 @@ What it shows: the arms hang down with a soft elbow bend, the hands sit at hip h - **File:** `demo/review-demo-third-person-walk.png` - **View:** tracking camera, 4.2 m to the pawn's right, captured while the pawn walks south - **Expected content:** the clothed body mid-stride in profile — legs apart, arms counter-swinging, navy tee and jeans -- **Verified:** ☑ 2026-11-09 · **Approved:** ☑ 2026-11-09 **Why the earlier attempts failed, twice:** the first was a harness problem (a fixed camera cannot catch a pawn at 4.5 m/s, and the call that enables walking ran before the pawn existed). The second was the clip itself: the walk cycle was authored on a **sine**, which is zero at both the start and the middle of the cycle, so the capture kept landing on the two frames where the legs pass together and the image read as a still. The clip now starts at maximum stride (cosine), so any frame near the start shows the stride. The cycle length, amplitudes and loop are unchanged. --- +## 9. Vehicle + +![Vehicle: the hot hatch staged on the road](demo/review-demo-vehicle.png) + +- **File:** `demo/review-demo-vehicle.png` +- **View:** from the road, ~7 m from the car, FOV 45 +- **Expected content:** the red hot hatch from `Art/blender/vehicle/hot hatch.blend` — body, tinted glazing, four wheels — resting on the surface + +## 10. Feet + +![Feet: ground-level view of the character's feet](demo/review-demo-feet.png) + +- **File:** `demo/review-demo-feet.png` +- **View:** at pavement height, looking along the ground at the character's feet +- **Expected content:** both shoes touching the pavement, shadow starting at the contact point + +## 11. Wheel + +![Wheel: ground-level view of the car's wheels](demo/review-demo-wheel.png) + +- **File:** `demo/review-demo-wheel.png` +- **View:** at pavement height, looking along the ground at the car's wheels +- **Expected content:** the tyres touching the surface, shadow at the contact point + ## 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: @@ -205,7 +219,7 @@ Resolved and removed from this list on 2026-11-09: Regenerated by `Tools/build_comparison_md.py`; everything between the markers is rewritten, so edit outside them. -- In-game captures: `Screenshots/demo/` (9 files) +- In-game captures: `Screenshots/demo/` (11 files) - Blender renders: `Screenshots/blender/` (22 files), made by `Tools/blender_screenshots.py` Left is what the engine draws, right is what Blender has. A gap between them is the import problem, not a taste problem: scale, material colour, missing parts and split systems all show up here before they show up in a review. @@ -215,6 +229,7 @@ Left is what the engine draws, right is what Blender has. A gap between them is | In-game | Blender | Shot | | --- | --- | --- | | | — | `review-demo-crossing.png` | +| | — | `review-demo-feet.png` | | | — | `review-demo-north-buildings.png` | | | — | `review-demo-retail-frontage.png` | | | — | `review-demo-spawn-view.png` | @@ -223,25 +238,10 @@ Left is what the engine draws, right is what Blender has. A gap between them is | | | `review-demo-third-person-walk.png` | | | | `review-demo-third-person.png` | | | | `review-demo-vehicle.png` | +| | — | `review-demo-wheel.png` | -4 of 9 in-game captures have a Blender counterpart; the rest are street and building shots whose meshes come from the Geo pipeline rather than a .blend. +4 of 11 in-game captures have a Blender counterpart; the rest are street and building shots whose meshes come from the Geo pipeline rather than a .blend. -### Signoff - -One row per in-game screen. `—` in Blender means there is nothing to compare against. - -| # | In-game screen | Blender counterpart | Verdict | Notes | -| --- | --- | --- | --- | --- | -| 1 | `review-demo-crossing.png` | — | ☐ | | -| 2 | `review-demo-north-buildings.png` | — | ☐ | | -| 3 | `review-demo-retail-frontage.png` | — | ☐ | | -| 4 | `review-demo-spawn-view.png` | — | ☐ | | -| 5 | `review-demo-street-level.png` | — | ☐ | | -| 6 | `review-demo-third-person-front.png` | `character-angle-035.png` | ☐ | | -| 7 | `review-demo-third-person-walk.png` | `character-angle-035.png` | ☐ | | -| 8 | `review-demo-third-person.png` | `character-angle-035.png` | ☐ | | -| 9 | `review-demo-vehicle.png` | `vehicle-angle-035.png` | ☐ | | - -Verdicts: ☐ pending · ☑ approved · ☒ rejected. The authoritative per-shot review stays in [README.md](README.md); this page exists to compare Blender against the engine. +Approval and issue notes are recorded only in the status table at the top of this file. diff --git a/Tools/build_comparison_md.py b/Tools/build_comparison_md.py index ad8e7cd..bcc6684 100644 --- a/Tools/build_comparison_md.py +++ b/Tools/build_comparison_md.py @@ -133,24 +133,7 @@ def build(): f"{matched} of {len(shots)} in-game captures have a Blender counterpart; the rest are", "street and building shots whose meshes come from the Geo pipeline rather than a .blend.", "", - "### Signoff", - "", - "One row per in-game screen. `—` in Blender means there is nothing to compare against.", - "", - "| # | In-game screen | Blender counterpart | Verdict | Notes |", - "| --- | --- | --- | --- | --- |", - ] - for index, shot in enumerate(shots, start=1): - match = paired[shot] - lines.append( - f"| {index} | `{shot}` | {f'`{match}`' if match else '—'} | ☐ | |") - if not shots: - lines.append("| — | — | — | ☐ | no captures |") - - lines += [ - "", - "Verdicts: ☐ pending · ☑ approved · ☒ rejected. The authoritative per-shot review stays", - "in [README.md](README.md); this page exists to compare Blender against the engine.", + "Approval and issue notes are recorded only in the status table at the top of this file.", "", ] block = "\n".join([BEGIN, ""] + lines + ["", END])