fix(screenshots): level the elevation cameras for straight verticals

archviz rule: an elevation must not lean. hero-facade-front looked up ~4 deg from
4.2 m at a 7.6 m target (columns converged); demo-spawn-view and demo-street-level
were pitched too. All three now sit at the target's height, so pitch and roll are
zero by construction and the verticals stay parallel.

Screenshots re-rendered. A pixel-based verticality check is useless here (banners
and windows break naive edge matching), so the guarantee is geometric and is
recorded that way in the README and MEMORY.
This commit is contained in:
zwitschi committed 2026-11-08 18:48:02 +01:00
1 parent e86f183c53
commit 749147f3e9
18 files changed
+51 -33

No files matched your search

Binary file not shown.
Binary file not shown.
+12
View File
@@ -495,3 +495,15 @@ Scope: facts and traps that cost time to establish. Planned work lives in [TODO.
`v0.1.2` cut after the merge.
- Assumptions recorded rather than hidden: dentil spacing, base and abacus
dimensions are not resolvable in our reference photography.
## 2026-11-09 — elevation cameras levelled (straight verticals)
- archviz MUST: an elevation must not lean. `hero-facade-front` looked up ~4° from
4.2 m at a 7.6 m target; `demo-spawn-view` and `demo-street-level` were pitched
too. All three now put the camera at the target's height, so
`FindLookAtRotation` yields pitch 0 and roll 0 and verticals are parallel by
construction.
- Do not try to *measure* verticality from the rendered PNG with a naive edge
scan: banners, windows and the parapet produce different edge sets at different
heights and the pairwise match is meaningless (it reported a 418 px "drift").
Verify it geometrically in the camera list instead.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+9 -3
View File
@@ -236,7 +236,11 @@ try:
# the plinth, which is what "portal detail" means here.
("hero-portals", unreal.Vector(hero_x + 100, -2250, 170), unreal.Vector(hero_x + 100, hero_y, 230)),
# straight on from the north sidewalk; the building body spans Y -1443..+250
("hero-facade-front", unreal.Vector(hero_x + 200, -3200, 420), unreal.Vector(hero_x, hero_y + 400, 760)),
# Level horizon: camera height == target height, so the elevation's
# verticals stay parallel. The old shot looked up ~4 deg from 4.2 m at a
# 7.6 m target, which converged the columns — the one thing an
# architectural elevation must not do (archviz: "straight verticals").
("hero-facade-front", unreal.Vector(hero_x + 200, -3200, 760), unreal.Vector(hero_x, hero_y + 400, 760)),
# oblique from the north-west, reading the colonnade in depth
("hero-facade-oblique", unreal.Vector(hero_x - 2200, -3400, 620), unreal.Vector(hero_x + 300, hero_y, 700)),
]
@@ -276,12 +280,14 @@ try:
demo_shots = [
# 14 m back so the 14.5 m elevation fits: at 2 m the camera sees only
# the colonnade's underside.
("demo-spawn-view", unreal.Vector(-13336, -3100, 420), unreal.Vector(-13336, 1300, 620)),
# Level horizon for the same reason: a block elevation is read by its
# verticals, and a pitched camera makes them lean.
("demo-spawn-view", unreal.Vector(-13336, -3100, 620), unreal.Vector(-13336, 1300, 620)),
# Street level, from the north sidewalk: the old camera sat at Y -400,
# inside the facade body (which spans Y -1457..-200), so it looked at
# the unlit back face. Y -2600 is on the sidewalk in front of the lit
# elevation.
("demo-street-level", unreal.Vector(-13420, -1650, 170), unreal.Vector(-13336, 1300, 400)),
("demo-street-level", unreal.Vector(-13420, -1650, 170), unreal.Vector(-13336, 1300, 170)),
# The designated mid-block crossing. Street arc length runs from the
# west end (s=0 at X -27966 cm), so s=130.1 m is UE X -14956, not the
# -24291 the old camera used (that is the s=36.6 crossing). Camera sits