0.1.2 hero façade work, now including the AI detail-plate toolchain the owner asked for.
1. Colonnade proportion (measured)
Colonnade (columns 2.00–7.95 m + capitals) was 6.90 m of the 14.50 m elevation = 47.6 %, below the photographed 50–60 %, because entablature (3.40 m) + parapet (2.20 m) used 5.60 m. Thinned both to 3.00 m and 1.80 m (Tools/hero_facade_build.py) → colonnade 7.70 m = 53.1 %, envelope and motto band/medallions unchanged relative to the parapet.
2. New tool — Tools/facade_detail_concepts.py
Generates architectural detail plates from a local reference photograph through OpenRouter image models.
Eight spec-driven studies: door recess, entrance, column order, entablature/cornice, parapet/motto, window rhythm, street wall, banner.
--list is free and reports which studies have their reference present; --all / --only <names> generates.
Never overwrites (-v2, -v3 …), writes a .refgen.json sidecar per image (model, prompt, source photo, SHA-256).
Output lives under Art/reference/facade-details/ — gitignored, local only, never shipped, consistent with the reference-photography policy.
Stdlib only, HTTP 429/5xx back-off, refuses to write a sidecar containing the token.
3. Defect found and fixed from the measurement pass
Hero window panes floated 1.44 m in front of the wall (Y −1.98, while the mass front is Y −0.50 and the columns reach −1.02) — glazing sitting ahead of the colonnade instead of reading as openings behind it. Now WINDOW_Y = −0.56: on the wall plane, behind the columns, visibly dark in review-hero-facade-front.
4. Rebuilt and re-rendered
Hero → re-imported (SM_HeroFacade, bounds 2604 × 1257 × 1450 cm) → DemoMap rebuilt → full screenshot set re-rendered (all 14 PNGs in this PR).
Tests and docs
40 tool tests pass (11 new: study table, prompt assembly + anchor suffix, next-free naming, data-URL decoding for both response shapes and the refusal path, local-only output rule).
Tools/README.md inventory row; Screenshots/README.md known-issues records the window fix; MEMORY.md records the toolchain, the prompt-refusal gotcha and the LFS chmod u+w reminder.
Review
Hero shots 8–10 and the demo views 11–12 are the ones affected. Approval state in Screenshots/README.md is left pending.
## Summary
`0.1.2` hero façade work, now including the AI detail-plate toolchain the owner asked for.
### 1. Colonnade proportion (measured)
Colonnade (columns 2.00–7.95 m + capitals) was **6.90 m of the 14.50 m elevation = 47.6 %**, below the photographed **50–60 %**, because entablature (3.40 m) + parapet (2.20 m) used 5.60 m. Thinned both to **3.00 m** and **1.80 m** (`Tools/hero_facade_build.py`) → colonnade **7.70 m = 53.1 %**, envelope and motto band/medallions unchanged relative to the parapet.
### 2. New tool — `Tools/facade_detail_concepts.py`
Generates architectural detail plates from a local reference photograph through OpenRouter image models.
- Eight spec-driven studies: door recess, entrance, column order, entablature/cornice, parapet/motto, window rhythm, street wall, banner.
- `--list` is free and reports which studies have their reference present; `--all` / `--only <names>` generates.
- Never overwrites (`-v2`, `-v3` …), writes a `.refgen.json` sidecar per image (model, prompt, source photo, SHA-256).
- Output lives under `Art/reference/facade-details/` — **gitignored, local only, never shipped**, consistent with the reference-photography policy.
- Stdlib only, HTTP 429/5xx back-off, refuses to write a sidecar containing the token.
Generated locally (8 plates, ~2 MB each): `Art/reference/facade-details/*.png` + sidecars.
### 3. Defect found and fixed from the measurement pass
Hero **window panes floated 1.44 m in front of the wall** (Y −1.98, while the mass front is Y −0.50 and the columns reach −1.02) — glazing sitting ahead of the colonnade instead of reading as openings behind it. Now `WINDOW_Y = −0.56`: on the wall plane, behind the columns, visibly dark in `review-hero-facade-front`.
### 4. Rebuilt and re-rendered
Hero → re-imported (`SM_HeroFacade`, bounds 2604 × 1257 × 1450 cm) → DemoMap rebuilt → **full screenshot set re-rendered** (all 14 PNGs in this PR).
### Tests and docs
- **40 tool tests** pass (11 new: study table, prompt assembly + anchor suffix, next-free naming, data-URL decoding for both response shapes and the refusal path, local-only output rule).
- `Tools/README.md` inventory row; `Screenshots/README.md` known-issues records the window fix; `MEMORY.md` records the toolchain, the prompt-refusal gotcha and the LFS `chmod u+w` reminder.
### Review
Hero shots **8–10** and the demo views **11–12** are the ones affected. Approval state in `Screenshots/README.md` is left pending.
Measured from the built mesh, the colonnade (columns + capitals) was 6.90 m of the
14.50 m elevation = 47.6 %: the entablature (3.40 m) and parapet (2.20 m) were
using 5.60 m of the height. Thinned both to 3.00 m and 1.80 m in
hero_facade_build.py, which lifts the colonnade to 7.70 m = 53.1 % - inside the
50-60 % band - with the envelope, motto band and medallions unchanged relative to
the parapet.
Hero rebuilt, re-imported (bounds 2604 x 1257 x 1450 cm), DemoMap rebuilt and the
screenshot set re-rendered for review. Hero part report updated (columns 7.45 ->
8.25 m, entablature 3.40 -> 3.00 m).
TODO: colonnade item closed. MEMORY records the FBX-vs-blend --out gotcha.
Adds Tools/facade_detail_concepts.py: generates architectural detail plates from a
local reference photograph through OpenRouter's image models. Spec-driven (eight
studies: door recess, entrance, column order, entablature/cornice, parapet/motto,
window rhythm, street wall, banner), never overwrites (writes -vN), writes a
.refgen.json sidecar (model, prompt, source photo, SHA-256) per image, and keeps
all output under the gitignored Art/reference/facade-details/ - local only, never
shipped. Stdlib only; http 429/5xx back-off; refuses to write a sidecar containing
the token. 11 tests cover the study table, prompt assembly, next-free naming,
data-URL decoding (both response shapes plus a refusal) and the local-only rule.
Measurement pass on the plates: the hero window panes were at Y -1.98, i.e. 1.44 m
in FRONT of the wall (Y -0.50) and ahead of the column line, so the glazing floated
in the colonnade instead of reading as openings behind it. Moved to Y -0.56; hero
rebuilt, re-imported, DemoMap rebuilt, full screenshot set re-rendered.
Docs: Tools/README row, Screenshots README known-issues entry now records the fix.
Owner instruction: show the building, its entrance, the neighbouring buildings,
front-on, and drop the close-up detail framing.
- Studies replaced: door-recess / entrance-wide / column-order /
entablature-cornice / parapet-motto / window-rhythm / street-wall /
banner-detail -> building-front, building-entrance, building-with-neighbours,
building-street-front, building-front-oblique, theatre-front-with-neighbours.
- ANCHOR_SUFFIX now permits REFRAMING (step back, zoom out, widen the view) so the
whole building can fit, while the architecture stays fixed; previously it pinned
the camera angle to the reference, which forced cropped results.
- Prompts state 'exterior' explicitly (the entrance study otherwise produced an
interior) and require sky above the roofline and nothing cut off.
Vision pre-check on the regenerated set: building-entrance and building-street-front
read as full-elevation frontal plates; the studies anchored on the tightly cropped
2009 facade photo stay cropped, because the model will not invent the parapet and
sky the photograph does not contain. That limitation is recorded in the study table
comment - a full 6840 plate needs a full-elevation photograph we do not hold.
Tests: 40 pass (study table assertions unchanged).
Detail pass on the hero, all verified by measuring the built mesh:
- Column base moulding: a 1.36 m wide, 0.22 m tall cylinder at each shaft foot
(2.00-2.22 m). The shaft previously started straight off the square pedestal,
so the base never read in silhouette.
- Abacus: a 1.30 m square, 0.14 m thick slab over each capital. It takes the top
of the capital zone, so the colonnade still ends at 9.70 m and the 53.1 %
proportion is unchanged.
- Medallions fixed: they were built with the Z-axis cylinder helper, so the two
'discs' were pancakes lying flat on the parapet coping (1.1 x 1.1 x 0.02,
z 14.02-14.04). New disc_on_wall() helper rotates the cylinder 90 deg about X;
they now stand 1.1 m across on the parapet face (y -1.32..-1.28,
z 13.05..14.15).
Hero rebuilt (95 parts, 2420 tris, still 14.50 m), re-imported, DemoMap rebuilt,
screenshot set re-rendered. Part report records the new dims and their assumption
notes. Screenshots README notes the detail pass.
UE export hygiene (unreal-export skill checklist) plus a gameplay defect the new
probe caught:
- FBX export now uses mesh_smooth_type="FACE" (was OFF, which is why every import
logged "No smoothing group information was found"), and the round parts are
shaded with shade_smooth_by_angle(35 deg) before export, so columns and
medallions read round instead of faceted.
- SM_HeroFacade had complex-only collision, so capsule sweeps and line traces
passed through the wall: the player could walk through the hero facade.
auto_generate_collision was tried and rejected (coarse hulls bulged into the
street; the QA wall probe went 0/35 -> 2/35). It now uses UseComplexAsSimple,
saved on the asset, like the terrain.
- New -qaselftest facade occlusion probe: 40 m traces sideways from the road
centre at walking height, required only where a building is staged (explicit X
spans mirroring ue_build_demo_map). Result 0/9 -> PASS, alongside transect
0 holes and wall probe 0/35.
Docs: release-checks records the probe and both collision attempts; Tools/README
lists the new phase; MEMORY records the smoothing/collision lessons.
The bpy.ops.export_scene.fbx argument block was duplicated in six scripts (hero,
block frontage, north buildings, site, scale test, MPFB character) and all six
carried mesh_smooth_type="OFF", which drops smoothing groups and made every
Unreal import warn and every round part faceted.
Tools/fbx_export_preset.py now owns the presets:
- preset_kwargs(preset, selection, **overrides) is bpy-free and unit-tested;
- export_static()/export_character() are thin wrappers that import bpy lazily;
- ue_metric_v1 and ue_character_v1 keep the recorded scale contract
(FBX_SCALE_NONE, apply_unit_scale, -Y forward / Z up) and use FACE smoothing.
Callers switched: hero_facade_build, export_block_frontage, export_north_buildings,
scale_test_export, mpfb_character_export, Art/blender/site/export_site_fbx.
Verified by re-exporting every asset through the preset and re-importing all of
them: 0 smoothing warnings on site, frontage and north buildings; packaging and
-qaselftest all PASS (walk, transect 0 holes, wall probe 0/35, facade probe 0/9).
49 tool tests pass (9 new for the preset contract).
- Hero cornice finished: projecting corona over a 52-dentil course (0.18 x 0.30 x
0.22 m at 0.45 m centres) so the top of the order has a shadow line instead of
one flat box. Hero 3044 tris / 148 parts, still 14.50 m; rebuilt, re-imported,
DemoMap rebuilt, packaged -qaselftest all PASS, screenshots re-rendered.
- CHANGELOG: full 0.1.2 entry (added: concept generator, FBX preset, facade probe,
Ionic detail, tool tests; changed: 3.1 m storey height, 53.1% colonnade, smoothing
groups; fixed: floating windows, flat medallions, missing facade collision, the
three non-building heights).
- TODO: 0.1.2 section removed (goal stays in ROADMAP, whose status line is updated).
- MEMORY: release record incl. the recorded ornament assumptions.
zwitschi
changed title from fix(hero): lift the colonnade into the photographed 50-60% band to feat(hero): v0.1.2 — scale calibration, façade detail, export preset refactor2026-11-08 18:06:22 +01:00
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
0.1.2hero façade work, now including the AI detail-plate toolchain the owner asked for.1. Colonnade proportion (measured)
Colonnade (columns 2.00–7.95 m + capitals) was 6.90 m of the 14.50 m elevation = 47.6 %, below the photographed 50–60 %, because entablature (3.40 m) + parapet (2.20 m) used 5.60 m. Thinned both to 3.00 m and 1.80 m (
Tools/hero_facade_build.py) → colonnade 7.70 m = 53.1 %, envelope and motto band/medallions unchanged relative to the parapet.2. New tool —
Tools/facade_detail_concepts.pyGenerates architectural detail plates from a local reference photograph through OpenRouter image models.
--listis free and reports which studies have their reference present;--all/--only <names>generates.-v2,-v3…), writes a.refgen.jsonsidecar per image (model, prompt, source photo, SHA-256).Art/reference/facade-details/— gitignored, local only, never shipped, consistent with the reference-photography policy.Generated locally (8 plates, ~2 MB each):
Art/reference/facade-details/*.png+ sidecars.3. Defect found and fixed from the measurement pass
Hero window panes floated 1.44 m in front of the wall (Y −1.98, while the mass front is Y −0.50 and the columns reach −1.02) — glazing sitting ahead of the colonnade instead of reading as openings behind it. Now
WINDOW_Y = −0.56: on the wall plane, behind the columns, visibly dark inreview-hero-facade-front.4. Rebuilt and re-rendered
Hero → re-imported (
SM_HeroFacade, bounds 2604 × 1257 × 1450 cm) → DemoMap rebuilt → full screenshot set re-rendered (all 14 PNGs in this PR).Tests and docs
Tools/README.mdinventory row;Screenshots/README.mdknown-issues records the window fix;MEMORY.mdrecords the toolchain, the prompt-refusal gotcha and the LFSchmod u+wreminder.Review
Hero shots 8–10 and the demo views 11–12 are the ones affected. Approval state in
Screenshots/README.mdis left pending.fix(hero): lift the colonnade into the photographed 50-60% bandto feat(hero): v0.1.2 — scale calibration, façade detail, export preset refactor