diff --git a/AGENTS.md b/AGENTS.md index 16d2951..41751ba 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,8 +28,8 @@ The project should be developed in small, reviewable steps. Agents must keep pla `TODO.md` is the priority source. The active order is: -1. unversioned development tracks (currently 3D model re-evaluation, character development and - local map development); +1. unversioned development tracks (currently 3D model and local map re-evaluation, and + character development); 2. versioned release milestones, in version order; 3. future/unversioned candidates and deferred work. diff --git a/MEMORY.md b/MEMORY.md index 4c3e5b3..45b95f3 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -17,7 +17,7 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o `openai/gpt-5-image-mini` frame (`.refgen.json` records `unchecked`). Gotcha: DDG photo 07.jpg was titled "Ramada hotel" but is actually an interior stage shot — Gemini refused it with a text-only message; the hotel/parking ramp reference is still missing from the local set. The - map-recreation plan is tracked in `TODO.md` §Local map development → Comedy Store map recreation. + map-recreation plan is tracked in `TODO.md` §3D model re-evaluation → K. Comedy Store map recreation. - **Jimmy Kimmel Live = starting point (2026-11-03):** the building is the game's starting point: the Hollywood first shift and the late-night TV Studio arrival both begin at the El Capitan Entertainment Centre housing the Kimmel stage/studio. Four photo-anchored entrance @@ -115,12 +115,13 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o `.agents/skills` behind project trust, so the trust prompt must be accepted before the skills load. -- **Priority order (2026-11-03):** `TODO.md` now leads with the unversioned **Character - development** and **Local map development** tracks, then the versioned 0.10.0 release - candidate and later releases. Do not attach a placeholder version to an unversioned track; - assign one only when its scope enters a release. Character development is generator-first - (ADR-0015); local map development evaluates OSM/3D data, licensed reference imagery, - AI-assisted composition and development-only Gaussian splatting. +- **Priority order (2026-11-03):** `TODO.md` now leads with the unversioned **3D model and + local map re-evaluation** track, then **Character development**, then the versioned 0.10.0 + release candidate and later releases. Local map workstreams are H–M inside the same 3D + track. Do not attach a placeholder + version to an unversioned track; assign one only when its scope enters a release. Character + development is generator-first (ADR-0015); the map work evaluates OSM/3D data, licensed + reference imagery, AI-assisted composition and development-only Gaussian splatting. - **Commit/build discipline (2026-11-03):** commit each coherent verified change as it lands, not only at milestone end, and push shareable commits. Every major, minor and patch version requires a `CHANGELOG.md` entry, a local `tools/build_releases.sh` build and artifact/checksum diff --git a/README.md b/README.md index b81d4a7..ba136d2 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ The central design goal is simple: The active planning order lives in [`TODO.md`](TODO.md) and [`AGENTS.md`](AGENTS.md): -1. **Character development** — crowd, age, build, hair and outfit variety on the owned procedural library, keeping the frozen NPC contract. Source evaluation and the licence decision are in [`docs/npc-model-sourcing.md`](docs/npc-model-sourcing.md). -2. **Local map development** — licensed OpenStreetMap/3D data, reference-derived photoreal facades, AI-assisted composition and a Gaussian-splatting development evaluation. +1. **3D model and local map re-evaluation** — score every shipped asset, then evaluate licensed OpenStreetMap/3D data, reference-derived photoreal facades, AI-assisted composition and a Gaussian-splatting development evaluation. +2. **Character development** — crowd, age, build, hair and outfit variety on the owned procedural library, keeping the frozen NPC contract. Source evaluation and the licence decision are in [`docs/npc-model-sourcing.md`](docs/npc-model-sourcing.md). 3. **Versioned release hardening** — the 0.10.0 release candidate and later semantic versions follow the unversioned development tracks. Versions are assigned only when a track's scope is accepted into a release. Every major, minor and patch version requires a changelog entry, a local release build and artifact verification before tagging. diff --git a/TODO.md b/TODO.md index bc70523..d43e454 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,7 @@ Work is grouped by theme. Each item should be small enough to complete and verify on its own; see `AGENTS.md` for the workflow and `MEMORY.md` for the decisions behind these plans. -**Priority order:** 3D model re-evaluation → character development → local map development → +**Priority order:** 3D model and local map re-evaluation → character development → versioned release milestones (0.10.0) → future/deferred work. See `AGENTS.md` §Priority and Versioning and §Local Blender skills. @@ -212,9 +212,6 @@ and never ship a generated or downloaded image without provenance. used; the public-domain frames cover the same evidence. (`docs/screens/refs/joke-shop/`.) **Removed 2026-11-03:** the committed Comedy Store photo board was replaced by the local-only `tmp/research/comedy-store/` research set (owner override; see §3D model re-evaluation → A). -- [ ] Find more pictures from the Comedy Store, the Sunset Boulevard block, collect at least five additional shots for reference; do not care about licensing, these images are only stored locally for reference and inference during development. Find pictures from the neighboring hotel building and the street surroundings. -- [ ] Fill the Joke Shop gaps: better visual representation of actual facade, parking lot to the side, neighboring hotel parking ramp and building, night canopy/sign, entrance recess, south-side neighbours, buildings across the street, hillside behind the building, hill detail. - house detail, neighbouring buildings, and any relevant street-level context. - [x] TV Studio: no separate board — the venue is the same El Capitan Entertainment Centre block as the Hollywood day shift, restaged for a late-night arrival. The Hollywood board covers both venues and the premiere-staging photo is the arrival evidence; the reuse is now stated in @@ -224,11 +221,6 @@ and never ship a generated or downloaded image without provenance. Walk of Fame terrazzo band, star close-up, and a night street-lighting context frame (cropped to remove people and a plate). The board now has nine photos. (CC BY-SA night frame is redistributed unmodified for study only; the review is recorded in the sidecar.) -- [ ] Remaining Hollywood gap: a licensed **night photograph of the hero facade and blade sign** - (the night frame on the board is a different block, near Vine), plus a sidewalk-level shot of - the steps/door recess and the east retail neighbour. For the committed board the licence gate - stays (no unlicensed Street View or scraped social media); local-only copies of the same - viewpoints go through section A instead. - [ ] Generate one concept board per venue with `tools/scene_concepts.py generate` (palette, facade rhythm, lighting), keep raw output gitignored, commit only the selected board, and record the model, prompt and spend in the sidecar. @@ -267,6 +259,193 @@ and never ship a generated or downloaded image without provenance. `docs/architecture.md` and `AGENTS.md` with the skill routes and the new gates. - [ ] Record accepted limits and deferred rebuilds in `docs/known-limitations.md` and `MEMORY.md`. +**Local map workstreams (H–M).** Build a local, data-backed map pipeline that can replace or +supplement the stylized venue geometry with licensed OpenStreetMap footprints, 3D building +massing, reference-derived photoreal facades and AI-assisted composition. This remains part of +the same unversioned track, not a release gate. The shared reference/provenance gates in A/F +still apply; the map pipeline has its own exit in M. + +*Local-map skill route: `environment-artist`, `archviz`, `hard-surface`, `geometry-nodes`, +`procedural-modeling`, `vegetation-artist`, `set-dressing`, `lighting`, `materials`, +`texture-workflow`, `lookdev`, `scene-assembly`, `qa-review`.* + +### H. Local map data, licensing and scope + +- [ ] Define the first target block and whether the result replaces, supplements or only informs + the current stylized venue specs (`docs/hollywood-boulevard-map.md`, + `docs/joke-shop-map.md`). +- [ ] Audit OpenStreetMap's ODbL attribution/share-alike obligations and decide whether derived + geometry ships, stays development-only, or needs a separate data layer. +- [ ] Choose an offline OSM extract workflow (Overpass/Geofabrik) and pin the extract date and + query so the map build is reproducible. +- [ ] Evaluate licence-compatible 3D building datasets (OSM Buildings, Overture, CityGML/LOD1–2 + or local authority data); record coverage, accuracy, format and redistribution terms. +- [ ] Add a provenance sidecar for every map source and derived asset, including source URL, + licence, capture/extract date and attribution text. + +### I. Local map reference imagery + +**Recent-photo research (2026-11-03):** Commons geosearch around 34.10118/-118.34009 (500 m) plus +category/date sorting shows usable imagery from the last 12 months: Dolby Theatre billboards +(2026-09-30, CC0, 6 frames), Dolby street level and a fresh Walk of Fame star (2026-07-17, CC0), +a Michael Jackson impersonator at the El Capitan frontage (2026-02-25, CC BY-SA 4.0), the Celia +Cruz Square marker and a 2025-09-28 star series (CC0), and a Thunderbolts premiere (2025-04-28, +CC BY-SA 2.0). No recent frame shoots the El Capitan facade straight-on in daylight; the best +facade evidence is still the 2009 CC BY frame. The 8 downloaded candidates are in +`tmp/research/elcapitan-2026/` (gitignored) with `meta.json`; nothing was committed. + +- [x] Wire `tools/refboard.py` (standalone, stdlib-only): `search --source search|geo|category` + lists candidates with ISO date, age-in-months and a commit/review/skip licence gate + (`--allow-ccbysa` after a recorded review); `fetch` downloads usable rows into `tmp/` with + spaced requests and writes `meta.json`; `rows` emits SIDECAR + README table rows from the + manifest. Six recent CC0 photos of the block were re-fetched into + `tmp/research/elcapitan-2026-tool/`. Tests in `tools/test_refboard.py` (licence gate, recent + filter, review-row exclusion, row emission). +- [ ] Add a `--max-age-months` filter (default 12) and a `--must-reuse` mode that matches the + folder's existing sidecar entries so a refresh only reports what changed. +- [ ] Research-diff step: keep the last-12-months board as the "current reality" evidence and the + older photos as the geometry evidence, labelled per photo; no sidecar date field needs to + change, only the purpose column. +- [ ] Write a reference shot list per block: facade materials, windows, signage, rooflines, + street furniture, curb cuts and lighting. +- [ ] Download and catalogue **committed** reference images from Wikimedia Commons, local/own + photography or other clearly licensed sources; record author, licence and attribution with + the §F sidecar template. Local-only research that ignores licence limits (DuckDuckGo, + street-view frames, neighbours, across-street buildings) is collected under §A into + `tmp/research/` and is never committed. +- [ ] Separate development-only references from shipped textures; commit only images with clear + redistribution rights and keep the rest under `tmp/` or the ignored reference folders. +- [ ] Build the per-block real-photo board under `docs/screens/refs//` using the sidecar + template from the 3D review §E, and link it from the venue map documents. +- [ ] Define the photoreal target and a material-derivation workflow (albedo/normal/roughness, + AO, weathering) that matches the existing Compatibility renderer (`texture-workflow`, + `materials`, `lookdev`), with the recent 2026 street frames as the current-reality reference + and the 2009 facade frame as the geometry reference. + +- [ ] Remaining Hollywood gap: a licensed **night photograph of the hero facade and blade sign** + (the night frame on the board is a different block, near Vine), plus a sidewalk-level shot of + the steps/door recess and the east retail neighbour. For the committed board the licence gate + stays (no unlicensed Street View or scraped social media); local-only copies of the same + viewpoints go through section A instead. + +### J. Local map geometry and AI-assisted composing + +- [ ] Prototype OSM footprint import into Blender at game scale and orientation, then compare it + against the current venue footprint/collider layout. +- [ ] Import 3D building massing for the target block, clean the topology and assign LOD bands; + do not import unbounded city-scale meshes into the runtime (`scene-assembly`, + `asset-optimization`, `lod-pipeline`). +- [ ] Build a reusable photoreal facade kit (window bays, cornices, storefronts, awnings, signage) + with `environment-artist`/`hard-surface`/`geometry-nodes` so buildings share materials and + stay inside the venue triangle/material budgets. +- [ ] Run the assisted Blender pipeline end to end on the first block (OSM import → `inspect` → + retopo/UV assist → atlas → `audit`), and document the exact commands in + `docs/asset-tooling.md`. +- [x] Joke Shop building-appearance pass: `dark_stucco` tile (1024 px) promoted via the picks + pipeline and wired into `_build_comedy_store_building`, replacing the grey paver tile so the + hall reads as flat matte charcoal instead of masonry; photo-anchored day concept generated + from the hillside PD frame (the branded frontage photo trips the model's image-recitation + filter — recorded in the concept README); day capture promoted and the three-up board rebuilt. + Test asserts the hall wall carries `dark_stucco`. +- [x] Building-appearance realism pass, measured against the reference set: bring the masonic + facade's material response (limestone value/roughness, joint lines, weathering streaks), + the banner/canopy and marquee materials, and the night emissive balance to the level of the + 2009 facade photo and the 2026 street frames; capture before/after and record each delta. + (Ashlar field: `limestone_ashlar` tile, reference-anchored on the facade photo, 768 px over + ~4.6 m of wall = ~167 px/m, promoted via the picks pipeline, warm-shifted tint behind + `VENUE_SPECS`. Banner cloth: warm self-light registered with `_marquee_emissive` (0.14 base; + 0.28 night / 0.028 day). Marquee sign face + bulbs: warm-incandescent already in the prop + PALETTE, now test-verified to brighten at night via `_marquee_emissive`. Day and night + captures promoted, both three-up boards rebuilt.) +- [ ] Upgrade the facade from flat material bands to photoreal detail: either texture-projected + detail (Path B below) or AI-generated material tiles derived from the facade photo (with + provenance), then verify texel density, tiling and the night look. +- [ ] Integrate the result behind `WorldBuilder.VENUE_SPECS` with colliders, navigation obstacles, + occlusion and the existing day/night materials. + +### K. Comedy Store map recreation + +*Plan (2026-11-03): rebuild the Joke Shop venue geometry from the new local-only reference set +(`tmp/research/comedy-store/`, gitignored) and the four photo-anchored scene pairs now in +`docs/screens/concepts/joke_shop/`. Evidence wins for shape; the concepts win for material/mood. +Nothing is committed until the licence gate on any promoted reference and the map-budget tests +pass. The current `_build_comedy_store_building()` stays as the fallback.* + +- [ ] Extract the real proportions from the local frames (facade width/height, canopy depth and + slope, blade-sign diameter and pole height, red curtain bay count, entrance recess, kerb + setback, hillside rise) and reconcile them against the current 27 m / 8.4 m / 12.2 m spec + in `WorldBuilder.VENUE_SPECS["joke_shop"]` and `docs/joke-shop-map.md`. +- [ ] Rank the shape-language gaps between the current procedural building and the four scene + pairs: canopy fascia depth, blade-sign shape/position, curtain-bay rhythm, entrance recess, + hillside silhouette and the neighbouring hotel/parking mass. Write the top-five fix list + with measurements. +- [ ] Rebuild the canopy + blade sign as library props or procedural geometry through the assisted + pipeline (`blender_assets.py inspect` → scripted edits → `audit`/`fit`), keeping the 4,000 + prop-triangle budget; verify against the street/strip concept pairs before committing. +- [ ] Add the neighbouring hotel/parking ramp as a low-detail blocker mass (no interior) so the + block silhouette matches the hotel reference frame, inside the venue mesh budget. +- [ ] Re-work the facade field from flat boxes to the reference's actual banding: black stucco + field (`dark_stucco`), deep canopy shadow, fascia band, red curtain bays and the recessed + entrance, using the four concept pairs for value/mood targets. +- [ ] Re-run the map-budget, navigation, collider and day/night capture gates after the rebuild + (`godot --headless --path . --script res://src/test/test_runner.gd`, + `tools/check_screenshots.sh`), and refresh the Joke Shop three-up board and + `docs/joke-shop-map.md`. +- [ ] Update `docs/development-status.md`, `docs/asset-tooling.md` and `CHANGELOG.md` when the + rebuild lands; record any accepted deviations from the reference. + +### L. Generated location imagery + +*Skill route: `lookdev`, `lighting`, `environment-artist`, `texture-workflow`; tooling: +`tools/scene_concepts.py`, `tools/asset_pipeline.py`, `tools/screen_designs.py`.* + +**Tool plan for reference-anchored generation (plan first, implement after this section's review):** + +- [x] Add `scene_concepts.py generate --reference `: attach a licence-cleared real photo + as a source image to the OpenRouter image request (multimodal chat endpoint with a base64 + data URL), with a prompt suffix that preserves the photographed facade geometry. Record the + reference file, its licence and page in the `.refgen.json` provenance sidecar next to the + generated frame. +- [x] Extend `generate_textures.generate_image()` with an optional `reference_path` argument + (base64 data URL of the photo); existing call signatures unchanged, and the path is gated by + `scene_concepts._reference_source` requiring a refs-board `SIDECAR.md` row (or an explicit + `--reference-unchecked`). Verified live on the El Capitan day concept anchored on the CC BY + 2.0 2009 facade photo; tests in `ReferenceGateTests`. +- [x] Add a sidecar-driven variant pass: `scene_concepts.py anchor --reference + --treatments day,night,weathered` generates same-framing variants with treatment clauses, + one `.refgen.json` provenance sidecar per frame. Verified live on the facade photo (night + + overcast frames committed; the weathered treatment reads as mild overcast — noted on the + board). Tests in `AnchorTests`. +- [-] Generate facade, street and signage concept frames for the target block + (`scene_concepts.py generate --reference ...`), commit only the selected frames, and record + model, prompt, spend **and source photo** in the block sidecar. (First frame done: + `hollywood_boulevard_entrance_day-v2`, anchored on the facade photo; remaining framings + pending.) +- [ ] Derive palette, lighting and material targets from the real-photo board and the generated + concepts, and record the deltas the facade kit has to close. +- [ ] Generate signage, awning and poster texture candidates with `asset_pipeline.py`; run the + role audit and the `CREDITS.md` provenance check before anything is used in the kit. +- [ ] Compare generated concepts against the licensed photos: where they disagree, the photos win + for shape and the generated board only informs colour, mood and detail density. Human review + stays the acceptance gate, and AI output is never treated as licensed map data. + +### M. Local map QA and exit + +- [ ] Compare the data-backed block against the existing screenshots and map documentation; keep + the stylized fallback available. +- [ ] Run the venue triangle/mesh budget, navigation and collider checks, plus day/night capture + comparisons. +- [ ] Capture day/night gallery frames of the new block and add before/after rows to `README.md` + and the venue map documents. +- [ ] Re-run `tools/check_screenshots.sh` after the map swap so the 21-shot gallery reflects the + new geometry, and refresh the `docs/screens/refs/` three-up sheets. +- [ ] Update `docs/architecture.md`, the venue map documents, `docs/asset-tooling.md`, + `docs/development-status.md` and `CHANGELOG.md` when the pipeline ships or a source is + rejected. +- [ ] Exit: one local block is reconstructed from licensed data with reference-derived photoreal + facades, passes performance/navigation/visual QA and has complete provenance; or the + pipeline is rejected with the findings recorded. + ## Character development Goal: break the eight-character clone effect with four licence-cleared crowd-variety looks while @@ -374,187 +553,6 @@ must inherit the reviewed face/hand/gear baseline instead of multiplying whateve yes, prototype the local MPFB/MakeHuman pipeline outside the repo and commit only the final CC0-derived assets with provenance. -## Local map development - -Goal: build a local, data-backed map pipeline that can replace or supplement the stylized venue -geometry with licensed OpenStreetMap footprints, 3D building massing, reference-derived photoreal -facades and AI-assisted composition. This is an unversioned development track, not a release gate. - -*Skill route: `environment-artist`, `archviz`, `hard-surface`, `geometry-nodes`, -`procedural-modeling`, `vegetation-artist`, `set-dressing`, `lighting`, `materials`, -`texture-workflow`, `lookdev`, `scene-assembly`, `qa-review`.* - -### Data, licensing and scope - -- [ ] Define the first target block and whether the result replaces, supplements or only informs - the current stylized venue specs (`docs/hollywood-boulevard-map.md`, - `docs/joke-shop-map.md`). -- [ ] Audit OpenStreetMap's ODbL attribution/share-alike obligations and decide whether derived - geometry ships, stays development-only, or needs a separate data layer. -- [ ] Choose an offline OSM extract workflow (Overpass/Geofabrik) and pin the extract date and - query so the map build is reproducible. -- [ ] Evaluate licence-compatible 3D building datasets (OSM Buildings, Overture, CityGML/LOD1–2 - or local authority data); record coverage, accuracy, format and redistribution terms. -- [ ] Add a provenance sidecar for every map source and derived asset, including source URL, - licence, capture/extract date and attribution text. - -### Reference imagery - -**Recent-photo research (2026-11-03):** Commons geosearch around 34.10118/-118.34009 (500 m) plus -category/date sorting shows usable imagery from the last 12 months: Dolby Theatre billboards -(2026-09-30, CC0, 6 frames), Dolby street level and a fresh Walk of Fame star (2026-07-17, CC0), -a Michael Jackson impersonator at the El Capitan frontage (2026-02-25, CC BY-SA 4.0), the Celia -Cruz Square marker and a 2025-09-28 star series (CC0), and a Thunderbolts premiere (2025-04-28, -CC BY-SA 2.0). No recent frame shoots the El Capitan facade straight-on in daylight; the best -facade evidence is still the 2009 CC BY frame. The 8 downloaded candidates are in -`tmp/research/elcapitan-2026/` (gitignored) with `meta.json`; nothing was committed. - -- [x] Wire `tools/refboard.py` (standalone, stdlib-only): `search --source search|geo|category` - lists candidates with ISO date, age-in-months and a commit/review/skip licence gate - (`--allow-ccbysa` after a recorded review); `fetch` downloads usable rows into `tmp/` with - spaced requests and writes `meta.json`; `rows` emits SIDECAR + README table rows from the - manifest. Six recent CC0 photos of the block were re-fetched into - `tmp/research/elcapitan-2026-tool/`. Tests in `tools/test_refboard.py` (licence gate, recent - filter, review-row exclusion, row emission). -- [ ] Add a `--max-age-months` filter (default 12) and a `--must-reuse` mode that matches the - folder's existing sidecar entries so a refresh only reports what changed. -- [ ] Research-diff step: keep the last-12-months board as the "current reality" evidence and the - older photos as the geometry evidence, labelled per photo; no sidecar date field needs to - change, only the purpose column. -- [ ] Write a reference shot list per block: facade materials, windows, signage, rooflines, - street furniture, curb cuts and lighting. -- [ ] Download and catalogue **committed** reference images from Wikimedia Commons, local/own - photography or other clearly licensed sources; record author, licence and attribution with - the §F sidecar template. Local-only research that ignores licence limits (DuckDuckGo, - street-view frames, neighbours, across-street buildings) is collected under §A into - `tmp/research/` and is never committed. -- [ ] Separate development-only references from shipped textures; commit only images with clear - redistribution rights and keep the rest under `tmp/` or the ignored reference folders. -- [ ] Build the per-block real-photo board under `docs/screens/refs//` using the sidecar - template from the 3D review §E, and link it from the venue map documents. -- [ ] Define the photoreal target and a material-derivation workflow (albedo/normal/roughness, - AO, weathering) that matches the existing Compatibility renderer (`texture-workflow`, - `materials`, `lookdev`), with the recent 2026 street frames as the current-reality reference - and the 2009 facade frame as the geometry reference. - -### Geometry and AI-assisted composing - -- [ ] Prototype OSM footprint import into Blender at game scale and orientation, then compare it - against the current venue footprint/collider layout. -- [ ] Import 3D building massing for the target block, clean the topology and assign LOD bands; - do not import unbounded city-scale meshes into the runtime (`scene-assembly`, - `asset-optimization`, `lod-pipeline`). -- [ ] Build a reusable photoreal facade kit (window bays, cornices, storefronts, awnings, signage) - with `environment-artist`/`hard-surface`/`geometry-nodes` so buildings share materials and - stay inside the venue triangle/material budgets. -- [ ] Run the assisted Blender pipeline end to end on the first block (OSM import → `inspect` → - retopo/UV assist → atlas → `audit`), and document the exact commands in - `docs/asset-tooling.md`. -- [x] Joke Shop building-appearance pass: `dark_stucco` tile (1024 px) promoted via the picks - pipeline and wired into `_build_comedy_store_building`, replacing the grey paver tile so the - hall reads as flat matte charcoal instead of masonry; photo-anchored day concept generated - from the hillside PD frame (the branded frontage photo trips the model's image-recitation - filter — recorded in the concept README); day capture promoted and the three-up board rebuilt. - Test asserts the hall wall carries `dark_stucco`. -- [x] Building-appearance realism pass, measured against the reference set: bring the masonic - facade's material response (limestone value/roughness, joint lines, weathering streaks), - the banner/canopy and marquee materials, and the night emissive balance to the level of the - 2009 facade photo and the 2026 street frames; capture before/after and record each delta. - (Ashlar field: `limestone_ashlar` tile, reference-anchored on the facade photo, 768 px over - ~4.6 m of wall = ~167 px/m, promoted via the picks pipeline, warm-shifted tint behind - `VENUE_SPECS`. Banner cloth: warm self-light registered with `_marquee_emissive` (0.14 base; - 0.28 night / 0.028 day). Marquee sign face + bulbs: warm-incandescent already in the prop - PALETTE, now test-verified to brighten at night via `_marquee_emissive`. Day and night - captures promoted, both three-up boards rebuilt.) -- [ ] Upgrade the facade from flat material bands to photoreal detail: either texture-projected - detail (Path B below) or AI-generated material tiles derived from the facade photo (with - provenance), then verify texel density, tiling and the night look. -- [ ] Integrate the result behind `WorldBuilder.VENUE_SPECS` with colliders, navigation obstacles, - occlusion and the existing day/night materials. - -### Comedy Store map recreation - -*Plan (2026-11-03): rebuild the Joke Shop venue geometry from the new local-only reference set -(`tmp/research/comedy-store/`, gitignored) and the four photo-anchored scene pairs now in -`docs/screens/concepts/joke_shop/`. Evidence wins for shape; the concepts win for material/mood. -Nothing is committed until the licence gate on any promoted reference and the map-budget tests -pass. The current `_build_comedy_store_building()` stays as the fallback.* - -- [ ] Extract the real proportions from the local frames (facade width/height, canopy depth and - slope, blade-sign diameter and pole height, red curtain bay count, entrance recess, kerb - setback, hillside rise) and reconcile them against the current 27 m / 8.4 m / 12.2 m spec - in `WorldBuilder.VENUE_SPECS["joke_shop"]` and `docs/joke-shop-map.md`. -- [ ] Rank the shape-language gaps between the current procedural building and the four scene - pairs: canopy fascia depth, blade-sign shape/position, curtain-bay rhythm, entrance recess, - hillside silhouette and the neighbouring hotel/parking mass. Write the top-five fix list - with measurements. -- [ ] Rebuild the canopy + blade sign as library props or procedural geometry through the assisted - pipeline (`blender_assets.py inspect` → scripted edits → `audit`/`fit`), keeping the 4,000 - prop-triangle budget; verify against the street/strip concept pairs before committing. -- [ ] Add the neighbouring hotel/parking ramp as a low-detail blocker mass (no interior) so the - block silhouette matches the hotel reference frame, inside the venue mesh budget. -- [ ] Re-work the facade field from flat boxes to the reference's actual banding: black stucco - field (`dark_stucco`), deep canopy shadow, fascia band, red curtain bays and the recessed - entrance, using the four concept pairs for value/mood targets. -- [ ] Re-run the map-budget, navigation, collider and day/night capture gates after the rebuild - (`godot --headless --path . --script res://src/test/test_runner.gd`, - `tools/check_screenshots.sh`), and refresh the Joke Shop three-up board and - `docs/joke-shop-map.md`. -- [ ] Update `docs/development-status.md`, `docs/asset-tooling.md` and `CHANGELOG.md` when the - rebuild lands; record any accepted deviations from the reference. - -### Generated location imagery - -*Skill route: `lookdev`, `lighting`, `environment-artist`, `texture-workflow`; tooling: -`tools/scene_concepts.py`, `tools/asset_pipeline.py`, `tools/screen_designs.py`.* - -**Tool plan for reference-anchored generation (plan first, implement after this section's review):** - -- [x] Add `scene_concepts.py generate --reference `: attach a licence-cleared real photo - as a source image to the OpenRouter image request (multimodal chat endpoint with a base64 - data URL), with a prompt suffix that preserves the photographed facade geometry. Record the - reference file, its licence and page in the `.refgen.json` provenance sidecar next to the - generated frame. -- [x] Extend `generate_textures.generate_image()` with an optional `reference_path` argument - (base64 data URL of the photo); existing call signatures unchanged, and the path is gated by - `scene_concepts._reference_source` requiring a refs-board `SIDECAR.md` row (or an explicit - `--reference-unchecked`). Verified live on the El Capitan day concept anchored on the CC BY - 2.0 2009 facade photo; tests in `ReferenceGateTests`. -- [x] Add a sidecar-driven variant pass: `scene_concepts.py anchor --reference - --treatments day,night,weathered` generates same-framing variants with treatment clauses, - one `.refgen.json` provenance sidecar per frame. Verified live on the facade photo (night + - overcast frames committed; the weathered treatment reads as mild overcast — noted on the - board). Tests in `AnchorTests`. -- [-] Generate facade, street and signage concept frames for the target block - (`scene_concepts.py generate --reference ...`), commit only the selected frames, and record - model, prompt, spend **and source photo** in the block sidecar. (First frame done: - `hollywood_boulevard_entrance_day-v2`, anchored on the facade photo; remaining framings - pending.) -- [ ] Derive palette, lighting and material targets from the real-photo board and the generated - concepts, and record the deltas the facade kit has to close. -- [ ] Generate signage, awning and poster texture candidates with `asset_pipeline.py`; run the - role audit and the `CREDITS.md` provenance check before anything is used in the kit. -- [ ] Compare generated concepts against the licensed photos: where they disagree, the photos win - for shape and the generated board only informs colour, mood and detail density. Human review - stays the acceptance gate, and AI output is never treated as licensed map data. - -### QA and exit - -- [ ] Compare the data-backed block against the existing screenshots and map documentation; keep - the stylized fallback available. -- [ ] Run the venue triangle/mesh budget, navigation and collider checks, plus day/night capture - comparisons. -- [ ] Capture day/night gallery frames of the new block and add before/after rows to `README.md` - and the venue map documents. -- [ ] Re-run `tools/check_screenshots.sh` after the map swap so the 21-shot gallery reflects the - new geometry, and refresh the `docs/screens/refs/` three-up sheets. -- [ ] Update `docs/architecture.md`, the venue map documents, `docs/asset-tooling.md`, - `docs/development-status.md` and `CHANGELOG.md` when the pipeline ships or a source is - rejected. -- [ ] Exit: one local block is reconstructed from licensed data with reference-derived photoreal - facades, passes performance/navigation/visual QA and has complete provenance; or the - pipeline is rejected with the findings recorded. - ## Maintenance and documentation hygiene Unversioned housekeeping that keeps the planning sources trustworthy. Do these when they block a @@ -640,9 +638,8 @@ baseline; 0.10.0-rc.1 is the current candidate source, with release approvals st | Area | Current baseline | Remaining gap | Risk | Milestone | | --- | --- | --- | --- | --- | -| 3D model re-evaluation | 8 characters, 18 gear, 20+6 props audited against budgets/proportions; no skill-guided scorecard yet | Scorecard, ranked P0/P1 fixes, texel/weight/collider measurements and accept decisions | Unmeasured drift stays in the shipped library | Unversioned | +| 3D model and local map re-evaluation | 8 characters, 18 gear, 20+6 props and stylized venues audited against budgets/proportions; no skill-guided scorecard yet | Asset scorecard/repairs plus OSM/3D data, photoreal references, AI-assisted composition and map QA | Unmeasured drift, licensing/provenance or performance failure | Unversioned | | Character development | 8-variant library; source/licence review and Quaternius/MakeHuman evaluation complete | Four crowd variants, role pools, gear fit and runtime integration | Repetition remains or external assets break the contract | Unversioned | -| Local map development | Stylized venue geometry and reference maps | OSM/3D data, photoreal references, AI-assisted composition and splat evaluation | Licensing/provenance or performance failure | Unversioned | | Content and balance | 3 venues with validated 12+ event matrices, recovery events and contextual dialogue | External playtest evidence, balance/fairness pass, event-weight tuning and final content lock | Repetition or unfair outcomes survive into the release candidate | 0.10.0 | | Dialog/UI | Audited terminology, copy, button states, focus/navigation, modal close, long strings and all 21 screen captures | Keep the capture/compare/judge gate current as content changes | Low; the remaining risk is drift after new UI is added | Complete (0.9.3) | | Animation/presentation | Procedural pose layers, portrait captures, reduced hem clipping, 8,000/8,000 NPC cap | Thorough NPC silhouette/face/gear/pose/LOD optimization before visual QA | Close-up jank reduces perceived quality | Complete (0.9.4) | @@ -655,8 +652,8 @@ baseline; 0.10.0-rc.1 is the current candidate source, with release approvals st | Documentation | Architecture/ADR/status/roadmap ownership established | Final README/changelog/status/TODO/smoke-checklist sign-off and known-limitations page | Docs drift at launch | 0.9.6 / 0.10.0 | | Future 0.x | Stable 0.x feature set | Live replay, more venues, VO/music, image-to-mesh props and seasonal content | Scope creep before release | Unscheduled | -**Current priority:** the unversioned **3D model re-evaluation** runs first because its findings -gate the crowd-variant roster; **Character development** and **Local map development** follow. +**Current priority:** the unversioned **3D model and local map re-evaluation** runs first because its findings +gate the crowd-variant roster; **Character development** follows. The **0.10.0 release candidate** is the next versioned release; content lock, external playtest, balance, save migration and release/legal sign-off remain tracked there. The source version is 0.10.0-rc.1; the v0.9.6 release is published. Earlier map/NPC/UI/texture/integration passes are diff --git a/docs/README.md b/docs/README.md index f037388..40b188b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,8 +4,8 @@ This folder holds the project documentation, visual references and generated QA ## Current priorities -1. [Character development](../TODO.md#character-development) — crowd, age, build, hair and outfit variety; generator-first, with the frozen NPC contract. -2. [Local map development](../TODO.md#local-map-development) — OpenStreetMap/3D data, licensed reference imagery, photoreal facades, AI-assisted composition and Gaussian-splatting evaluation. +1. [3D model and local map re-evaluation](../TODO.md#3d-model-re-evaluation) — asset scorecard and fixes, plus OpenStreetMap/3D data, licensed reference imagery, photoreal facades, AI-assisted composition and map/Gaussian-splatting evaluation. +2. [Character development](../TODO.md#character-development) — crowd, age, build, hair and outfit variety; generator-first, with the frozen NPC contract. 3. [0.10.0 release candidate](../TODO.md#milestone-0100--release-candidate) — versioned release hardening after the unversioned development tracks. ## Start here diff --git a/docs/architecture.md b/docs/architecture.md index ad3c315..17b347d 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -175,8 +175,8 @@ Evidence and detailed contracts live in [`blender-assets.md`](blender-assets.md) ### Local map development tooling (planned) The current venues are hand-authored procedural reconstructions in -`src/game/world_builder.gd`. The **Local map development** track in -[`TODO.md`](../TODO.md#local-map-development) is unversioned and planned: it will +`src/game/world_builder.gd`. The local map workstreams (**H–M**) in +[`TODO.md`](../TODO.md#3d-model-re-evaluation) are unversioned and planned: they will test whether licensed data and reference photography can replace or supplement the stylized geometry without moving map data, AI composition or splat rendering into the runtime. diff --git a/docs/asset-tooling.md b/docs/asset-tooling.md index 555cbbb..df65c40 100644 --- a/docs/asset-tooling.md +++ b/docs/asset-tooling.md @@ -278,8 +278,8 @@ python3 tools/blender_assets.py texels --only npc_coat ## Local map development (planned) -The **Local map development** track in [`TODO.md`](../TODO.md#local-map-development) -is not implemented yet; there are no map-generation commands to run. The planned +The local map workstreams (**H–M**) in [`TODO.md`](../TODO.md#3d-model-re-evaluation) +are not implemented yet; there are no map-generation commands to run. The planned pipeline will evaluate: - offline OpenStreetMap extracts for footprints and licence-compatible 3D building diff --git a/docs/development-status.md b/docs/development-status.md index c0b0e2c..78198c3 100644 --- a/docs/development-status.md +++ b/docs/development-status.md @@ -1,8 +1,8 @@ # Development Status -Current planning priorities are the unversioned **3D model re-evaluation**, **Character -development** and **Local map development** tracks in [`TODO.md`](../TODO.md); none is part of the -implemented list below yet. The re-evaluation scores the existing characters, gear, props and +Current planning priorities are the unversioned **3D model and local map re-evaluation** and +**Character development** tracks in [`TODO.md`](../TODO.md); none is part of the implemented list +below yet. The re-evaluation scores the existing characters, gear, props and venues against the locally installed Blender skill guidance before the roster expands. The 0.10.0 release candidate remains the next versioned release. diff --git a/docs/screens/refs/README.md b/docs/screens/refs/README.md index 320b8cd..8fb9537 100644 --- a/docs/screens/refs/README.md +++ b/docs/screens/refs/README.md @@ -24,7 +24,7 @@ docs/screens/refs/ tv-studio/ # studio entrance reference set README.md SIDECAR.md - blocks// # local map-development blocks (TODO: Local map development) + blocks// # local map blocks (TODO: 3D model re-evaluation → H–M) README.md SIDECAR.md ```