Verify the marquee emissive balance and close the facade-realism pass
Full build / Import + headless tests (push) Successful in 43s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-03 16:15:38 +01:00
1 parent 2b07913481
commit 8c2761427f
2 files changed
+28 -7

No files matched your search

+7 -7
View File
@@ -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` → - [ ] 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 retopo/UV assist → atlas → `audit`), and document the exact commands in
`docs/asset-tooling.md`. `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), 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 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. 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 (Ashlar field: `limestone_ashlar` tile, reference-anchored on the facade photo, 768 px over
photo, 768 px over ~4.6 m of wall = ~167 px/m, promoted via the picks pipeline; facade ~4.6 m of wall = ~167 px/m, promoted via the picks pipeline, warm-shifted tint behind
field + tint warm-shift live behind `VENUE_SPECS`, recapture committed and the day board `VENUE_SPECS`. Banner cloth: warm self-light registered with `_marquee_emissive` (0.14 base;
rebuilt. Banner cloth now carries a warm self-light registered with `_marquee_emissive` 0.28 night / 0.028 day). Marquee sign face + bulbs: warm-incandescent already in the prop
(0.14 base energy; 0.28 at night, 0.028 by day), night capture promoted and the night PALETTE, now test-verified to brighten at night via `_marquee_emissive`. Day and night
board rebuilt. Still open: marquee/canopy material pass.) captures promoted, both three-up boards rebuilt.)
- [ ] Upgrade the facade from flat material bands to photoreal detail: either texture-projected - [ ] 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 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. provenance), then verify texel density, tiling and the night look.
+21
View File
@@ -212,6 +212,27 @@ func test_street_lamps_and_marquee_built() -> bool:
root.free() root.free()
return a and b and TestUtils.check(night_on, "lamps brighten at night") and TestUtils.check(day_off, "lamps dim in daylight") 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: func test_asset_textures_present_and_pow2() -> bool:
var required := [ var required := [
"res://assets/textures/brick_facade.png", "res://assets/textures/brick_facade.png",