feat(facades): 0.1.5 — hero detail, scene audit, material orphaning fixed (#32)
Merged PR #32: 0.1.5 — hero detail, scene audit, material orphaning fixed Co-authored-by: Zwitschi <zwitschi82@gmail.com>
This commit was merged in pull request #32.
This commit is contained in:
1 parent
743a290ac9
commit
73aca9db80
50 files changed
+1326
-88
No files matched your search
@@ -436,3 +436,90 @@ Scope: facts and traps that cost time to establish. Planned work lives in [TODO.
|
||||
scope is cut deliberately and recorded in `CHANGELOG.md`, never the frame rate.
|
||||
Walkability outranks realism in one direction: a block the player falls through is
|
||||
not a demo.
|
||||
|
||||
## 2026-11-09 — 0.1.5 start: retail reference + kit layout maths
|
||||
|
||||
- Commons holds exactly **one** usable reference for the retail run:
|
||||
`Art/reference/retail-neighbours/01-lee-drug-and-neighbor.jpg` (Gb321, CC BY-SA
|
||||
4.0, 1920×953) — 6800 Lee Drug **and** its neighbour at street level, shopfronts
|
||||
and parapets visible (vision pre-check: yes). Nothing for 6822 or 6806–6820, so
|
||||
those two façades still have no reference and stay blocked.
|
||||
- **Kit layout was wrong for tall/wide buildings**, not just ugly: bays were
|
||||
`round(width / 496)`, so 6922 (65.8 m wide, 37.1 m tall) got **13 bays** — a
|
||||
window every 4.96 m across the whole frontage — and the storey count came out at
|
||||
11 × 310 cm = 34.1 m against a 35.7 m window zone, leaving bare wall under the
|
||||
cornice. Fixed: `MAX_BAYS = 9` (module widens instead of subdividing), and the
|
||||
storey spread is derived from the available height (`usable / storeys`) so the top
|
||||
band always lands inside the building. Result: 6922 9 × 11, theatre 8 × 6,
|
||||
6806 7 × 3, 6800 4 × 3, TCL 9 × 5.
|
||||
|
||||
## 2026-11-09 — hero fluting + motto band; and a silent placement divergence
|
||||
|
||||
- Fluting: 20 grooves per column as thin shadow-tone cylinders set into the shaft
|
||||
(120 pieces) rather than boolean cuts — the eye reads them in silhouette and
|
||||
grazing light, booleans would cost far more for that. Motto band is now a real
|
||||
recess: surround 6 cm proud, panel 12 cm behind (was an 8 cm dark stripe).
|
||||
Hero 148 parts/3 044 tris -> 271/5 492, still 14.50 m.
|
||||
- **The real find:** `ue_hero_facade_import.py` had its own hero position
|
||||
`(-12024.5, -1450, 0)` — the pre-`0.1.0` value, before the frontage placement fix
|
||||
moved the hero to `(-13336, +1307)`. Running the importer on its own therefore
|
||||
teleported the hero **13 m east and onto the north side of the boulevard**, and
|
||||
nothing complained: a displaced building still renders. The only symptom was the
|
||||
reference score dropping 0.69 -> 0.56 with the 3x3 composition correlation
|
||||
flipping +0.54 -> -0.08.
|
||||
- Fix: `Tools/ue_placement.py` is now the single source of truth (hero position,
|
||||
verified frontage spans, `span_error`/`describe_span_failure`). Both
|
||||
`ue_hero_facade_import.py` and `ue_build_demo_map.py` import it, the import asserts
|
||||
the staged span and logs `PLACEMENT ERROR` when it does not match, and tests assert
|
||||
the stale literal cannot come back. Spawn-view score back to **0.72** (best yet).
|
||||
- Lesson to keep: **duplicated placement constants drift silently.** The metric that
|
||||
caught it was the composition correlation, not a visual review.
|
||||
|
||||
## 2026-11-09 — 1440p re-measured with the kit: 363 fps, ~12% cost
|
||||
|
||||
- 2560×1440, Epic preset, TSR, VSync off, no frame generation: **2.76 ms average
|
||||
(363 fps)**, p50 2.73, p95 3.17, p99 3.64, max 4.62 — against `0.1.0`'s 2.42 ms
|
||||
(414 fps). The 625 kit actors + 8 generated textures cost about **12 %** and leave
|
||||
~6× the 60 fps floor.
|
||||
- **Variance trap confirmed a third time:** runs reporting ~105 fps (9.5 ms) were
|
||||
two overlapping game instances — an earlier launch had not exited. `pgrep -af
|
||||
Binaries/Linux/GigLine` should show one wrapper + one binary; 363 fps reproduced
|
||||
twice on a clean run. Always count instances before believing a perf number.
|
||||
- Series committed at `Docs/perf/0.1.5-kit-walk-frametimes.csv`; comparison table in
|
||||
`Docs/release-checks.md`.
|
||||
|
||||
## 2026-11-09 — 604 unmaterialed actors: material rebuild was delete+recreate
|
||||
|
||||
- The "blockout cleaning pass" turned out to need **material and placement hygiene,
|
||||
not more geometry**. `Tools/ue_audit_scene.py` (new) found **604 of 620 mesh actors
|
||||
with no material**: kit pieces and theatre trim all untextured.
|
||||
- **Cause:** `ensure_material` in `ue_build_demo_map.py` deleted and recreated each
|
||||
`/Game/Hollywood/Site/M_*` asset every run ("so a look change cannot be masked by a
|
||||
stale asset"). That orphane every reference: actors staged by other tools pointed at
|
||||
deleted assets and fell back to the default material. The map looked only *slightly*
|
||||
flat — no error, no warning.
|
||||
- **Fix:** update the material **in place** — load it, `MaterialEditingLibrary.
|
||||
delete_all_material_expressions(mat)`, rebuild the graph, recompile, save. Note
|
||||
`Material.expressions` is protected from Python; use the library's deleter.
|
||||
- **Ordering rule now documented and enforced:** the demo builder rebuilds materials,
|
||||
so kit and theatre staging must run *after* it. `render_screenshots.sh` now runs
|
||||
demo map → kit assembly → theatre trim → scene audit → shot cameras → capture, and
|
||||
**fails on a non-zero audit count**.
|
||||
- Second find: 53 duplicated kit labels (both shop piers of a bay shared one name).
|
||||
- Scene audit after the fixes: **0 failures** (all materialed, all spans verified, no
|
||||
duplicate labels). Packaged QA still PASS; spawn-view reference score 0.72.
|
||||
|
||||
## 2026-11-09 — v0.1.5 released
|
||||
|
||||
- All actionable `0.1.5` work is done: hero fluting + recessed motto band, kit layout
|
||||
for wide/tall buildings, placement single-source-of-truth, 1440p re-measure
|
||||
(363 fps), and the material/placement hygiene that the "blockout cleaning" task
|
||||
actually needed (604 unmaterialed actors, 53 duplicate labels) with a new scene
|
||||
audit gate.
|
||||
- Only item carried forward is the **retail frontage (6822 / 6806–6820 / 6800)**,
|
||||
blocked because Commons holds no usable reference for two of the three buildings
|
||||
and substituting the theatre's photographs would misattribute the façades. It now
|
||||
lives in a `0.1.6` Retail frontage patch.
|
||||
- Precedent applied again: tag when the stated scope is done, carry blocked scope
|
||||
into the next patch rather than letting a release wait indefinitely on missing
|
||||
reference photography.
|
||||
Reference in new issue
Block a user