Generate multi-model anchored concepts, drop old Comedy Store refs, and trim the concept gallery
Full build / Import + headless tests (push) Successful in 41s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 17:49:48 +01:00
1 parent 87e1c9e7a5
commit 988d431da8
40 files changed
+110 -329

No files matched your search

+20 -81
View File
@@ -1,6 +1,13 @@
# 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`.
These are AI-generated example frames 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`.
Concepts are organised per venue in the two subfolders below. The older top-level single-frame
concepts were removed on 2026-11-03 in favour of the per-venue boards, which carry photo-anchored
generations with a `.refgen.json` provenance sidecar each (source photo, licence, model).
## Real-world Hollywood block
@@ -10,37 +17,10 @@ The map-optimization references for the El Capitan Entertainment Centre block
facts and game mapping are documented in
[`../../hollywood-boulevard-map.md`](../../hollywood-boulevard-map.md).
## Concept list
### Hollywood Entrance
![hollywood entrance morning](hollywood_entrance_morning.png)
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
![hollywood entrance golden hour](hollywood_entrance_golden_hour.png)
strong back light and rim light on people, marquee bulbs reading even in daylight
### Hollywood Entrance Rain Night
![hollywood entrance rain night](hollywood_entrance_rain_night.png)
dark scene lit by practical lights only (marquee, sodium lamps), wet glossy ground with reflections, fog
### Boulevard Skyline
![boulevard skyline day](boulevard_skyline_day.png)
deep layered skyline with real towers and haze, palms lining the road, red curb paint, believable asphalt
### Boulevard Skyline Dusk
![boulevard skyline dusk](boulevard_skyline_dusk.png)
purple/orange gradient sky, neon signs, lit windows, car light trails
### The Joke Shop — Sunset Strip
## The Joke Shop — Sunset Strip
The current Joke Shop map is based on The Comedy Store at 8433 Sunset Blvd.
The real-site mapping, simplifications and reference photographs are in
The real-site mapping and simplifications are in
[`../../joke-shop-map.md`](../../joke-shop-map.md); the frames are in
[`joke_shop/README.md`](joke_shop/README.md).
@@ -48,56 +28,15 @@ The real-site mapping, simplifications and reference photographs are in
![Joke Shop entrance at night](joke_shop/joke_shop_entrance_night.png)
### Legacy Joke Shop Alley (pre-map optimization)
## Cross-cutting targets
![joke shop alley evening](joke_shop_alley_evening.png)
narrow brick alley, one warm wall lantern as key light, deep shadows, people in dark jackets
For comparison with locally generated realism runs (`docs/screens/realism/`, gitignored):
![joke shop door closeup](joke_shop_door_closeup.png)
close material detail: brick, mortar, aged wood door, brass
These two frames describe the old alley layout and are retained for comparison;
they are no longer the target for the Joke Shop map.
### Studio Stage Door Night
![studio stage door night](studio_stage_door_night.png)
granite facade, a bright bulb canopy as the main light, a glossy black car, stanchions and a barrier
### Sidewalk Material Closeup
![sidewalk material closeup](sidewalk_material_closeup.png)
paver joints, stains, granite curb, aggregate asphalt and a tree grate at grazing light
### Entrance Steps Podium
![entrance steps podium](entrance_steps_podium.png)
granite steps, handrails, glass doors, the check-in podium
### Crowd Barrier Line
![crowd barrier line](crowd_barrier_line.png)
steel barriers, a red carpet, a crowd with depth-of-field haze
### Responder Arrival Wide
![responder arrival wide](responder_arrival_wide.png)
fire engine, turnout gear, red/blue light spill on wet pavement
### NPC Portrait Day
![npc portrait day](npc_portrait_day.png)
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 (generate a local run under `docs/screens/realism/`).
Cross-cutting targets, for comparison with locally generated realism runs:
- **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.
## Additional previews
![npc_portrait_day-v2.png](npc_portrait_day-v2.png)
- **Exposure.** The concepts keep the ground mid-grey; the game's sidewalk reads lighter, so it
overexposes against the reference.
- **Night means dark.** The night/dusk concepts are lit by practical lights only (marquee,
signage, street lamps), with wet pavement reflections.
- **Depth.** The concepts show a layered skyline fading into haze; the v2 skyline strips supply
this at the boulevard boundary.
- **Geometry and foliage.** The facades have plinths, cornices and deep window reveals, and the
trees and shrubs are organic; the venue-realism passes close these gaps incrementally.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

@@ -44,3 +44,15 @@ mild — treat this as the overcast target, not a decay reference.
## Across the boulevard
![Ovation Hollywood frontage across the boulevard](hollywood_boulevard_across_street.png)
## Facade — local-reference anchored, two models
![El Capitan facade anchored on a local research frame, Gemini](el_capitan_facade_gemini_day.png)
![El Capitan facade anchored on a local research frame, GPT image](el_capitan_facade_gpt_day.png)
Both frames are anchored on the same local-only research photo
(`tmp/research/elcapitan/01.jpg`, gitignored) with `--reference-unchecked`, one with
`google/gemini-2.5-flash-image` and one with `openai/gpt-5-image-mini`. Provenance and model are
in each frame's `.refgen.json` sidecar. Local reference only; the photo never enters the repo and
these frames are art direction, not assets.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@@ -0,0 +1,12 @@
{
"concept": "el_capitan_facade_gemini_day",
"generated": "el_capitan_facade_gemini_day.png",
"model": "google/gemini-2.5-flash-image",
"reference": {
"file": "tmp/research/elcapitan/01.jpg",
"licence": "unchecked",
"page": "",
"licence_checked": false
},
"suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show."
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

@@ -0,0 +1,12 @@
{
"concept": "el_capitan_facade_gpt_day",
"generated": "el_capitan_facade_gpt_day.png",
"model": "openai/gpt-5-image-mini",
"reference": {
"file": "tmp/research/elcapitan/01.jpg",
"licence": "unchecked",
"page": "",
"licence_checked": false
},
"suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show."
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

+15 -9
View File
@@ -10,12 +10,9 @@ game textures. The geometry mapping and source links are in
![The black comedy club under its signature canopy, anchored on the hillside block photo](joke_shop_entrance_day-v2.png)
Generated with `generate --reference`, anchored on the licence-cleared
[`comedy-store-hillside-canopy-day-pd-2006-12-29.jpg`](../../refs/joke-shop/comedy-store-hillside-canopy-day-pd-2006-12-29.jpg)
board photo (public domain); provenance in
[`joke_shop_entrance_day-v2.refgen.json`](joke_shop_entrance_day-v2.refgen.json).
The frontage photo itself triggers the model's image-recitation filter, so the
hillside block frame anchors the facade; shape follows the frontage photo.
Generated with `generate --reference`, anchored on a Comedy Store board photo that has since
been removed from the committed refs (the block now uses the local-only `tmp/research/comedy-store/`
set); provenance in [`joke_shop_entrance_day-v2.refgen.json`](joke_shop_entrance_day-v2.refgen.json).
## Entrance — day
@@ -29,6 +26,15 @@ hillside block frame anchors the facade; shape follows the frontage photo.
![The club seen from across Sunset Boulevard](joke_shop_across_street.png)
The older top-level concepts `joke_shop_alley_evening.png` and
`joke_shop_door_closeup.png` are kept as a record of the pre-map-optimization
alley design. They no longer describe the current Joke Shop map.
## Facade — local-reference anchored, two models
![Comedy Store facade anchored on a local research frame, Gemini](comedy_store_facade_gemini_day.png)
![Comedy Store facade anchored on a local research frame, GPT image](comedy_store_facade_gpt_day.png)
Both frames are anchored on the same local-only research photo
(`tmp/research/comedy-store/01.jpg`, gitignored) with `--reference-unchecked`, one with
`google/gemini-2.5-flash-image` and one with `openai/gpt-5-image-mini`. Provenance and model are
in each frame's `.refgen.json` sidecar. Local reference only; the photo never enters the repo and
these frames are art direction, not assets.
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

@@ -0,0 +1,12 @@
{
"concept": "comedy_store_facade_gemini_day",
"generated": "comedy_store_facade_gemini_day.png",
"model": "google/gemini-2.5-flash-image",
"reference": {
"file": "tmp/research/comedy-store/01.jpg",
"licence": "unchecked",
"page": "",
"licence_checked": false
},
"suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show."
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@@ -0,0 +1,12 @@
{
"concept": "comedy_store_facade_gpt_day",
"generated": "comedy_store_facade_gpt_day.png",
"model": "openai/gpt-5-image-mini",
"reference": {
"file": "tmp/research/comedy-store/01.jpg",
"licence": "unchecked",
"page": "",
"licence_checked": false
},
"suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show."
}
@@ -3,10 +3,11 @@
"generated": "joke_shop_entrance_day-v2.png",
"model": "google/gemini-2.5-flash-image",
"reference": {
"file": "docs/screens/refs/joke-shop/comedy-store-hillside-canopy-day-pd-2006-12-29.jpg",
"file": "tmp/research/comedy-store/01.jpg (local-only; original board photo removed 2026-11-03)",
"licence": "Public domain",
"page": "https://commons.wikimedia.org/wiki/File:ComedyStore_01.jpg",
"licence_checked": true
"licence_checked": true,
"removed_from_refs": true
},
"suffix": "Use the attached reference photograph as the fixed source of geometry and composition: keep the building's proportions, column rhythm, band heights, signage placement and camera angle exactly as photographed. Only restage lighting, weather, people and surface condition where the prompt asks for it. Do not invent extra storeys, wings or ornaments that the photo does not show."
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB