From 8c2761427fa4f901fc44d75db03d844346dccfff Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Tue, 3 Nov 2026 16:15:38 +0100 Subject: [PATCH] Verify the marquee emissive balance and close the facade-realism pass --- TODO.md | 14 +++++++------- src/test/tests/test_world.gd | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/TODO.md b/TODO.md index 56aa24c..f56efd2 100644 --- a/TODO.md +++ b/TODO.md @@ -393,16 +393,16 @@ facade evidence is still the 2009 CC BY frame. The 8 downloaded candidates are i - [ ] 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`. -- [-] Building-appearance realism pass, measured against the reference set: bring the masonic +- [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 landed: `limestone_ashlar` tile generated reference-anchored from the facade - photo, 768 px over ~4.6 m of wall = ~167 px/m, promoted via the picks pipeline; facade - field + tint warm-shift live behind `VENUE_SPECS`, recapture committed and the day board - rebuilt. Banner cloth now carries a warm self-light registered with `_marquee_emissive` - (0.14 base energy; 0.28 at night, 0.028 by day), night capture promoted and the night - board rebuilt. Still open: marquee/canopy material pass.) + (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. diff --git a/src/test/tests/test_world.gd b/src/test/tests/test_world.gd index 073c666..fddfe47 100644 --- a/src/test/tests/test_world.gd +++ b/src/test/tests/test_world.gd @@ -212,6 +212,27 @@ func test_street_lamps_and_marquee_built() -> bool: root.free() return a and b and TestUtils.check(night_on, "lamps brighten at night") and TestUtils.check(day_off, "lamps dim in daylight") +func test_marquee_emissive_balanced_at_night() -> bool: + ## The marquee sign face and bulbs are registered with the day/night cycle: + ## they brighten after dark and fall back to a faint glow in daylight, so the + ## marquee reads as practical lighting instead of a black box. + var root := Node3D.new() + var builder := WorldBuilder.new(root) + builder.build() + var emissive := builder._marquee_emissive + var ok := emissive.size() >= 2 + builder.set_night_mode(true) + var night_energy := 0.0 + for mat in emissive: + night_energy += mat.emission_energy_multiplier + builder.set_night_mode(false) + var day_energy := 0.0 + for mat in emissive: + day_energy += mat.emission_energy_multiplier + root.free() + return ok and TestUtils.check(night_energy > day_energy, + "marquee emissive surfaces brighten at night") + func test_asset_textures_present_and_pow2() -> bool: var required := [ "res://assets/textures/brick_facade.png",