diff --git a/Docs/qa/0.1.4-facade-qa.md b/Docs/qa/0.1.4-facade-qa.md deleted file mode 100644 index 7a7cf0c..0000000 --- a/Docs/qa/0.1.4-facade-qa.md +++ /dev/null @@ -1,81 +0,0 @@ -# QA review — `0.1.4` façade work - -Checklist gate for the façade module kit, the replacement materials and the corrected blockout frame. Written per the `qa-review` skill: budgets, the screenshots that carry the claim, defects by severity, and an explicit verdict. - -Date: 2026-11-09 · Branch: `facades-0.1.4` · Build under test: packaged `GigLineQA`, Development, UE 5.8.4, Vulkan SM5. - -## Result: SHIP WITH NOTES - -The geometry, placement and budgets are verified by measurement. The **visual** half of this review is **not** complete: nobody has looked at the rendered set since the kit went on, so the reference-match verdict is pending a human. The notes at the end are what that review has to confirm. - -## Budgets - -| Asset group | Count | Triangles | Texture | Notes | -| --- | --: | --: | --- | --- | -| Hero façade | 148 parts, 1 mesh | 3 044 | none (graph materials) | was 1 892 before the Ionic detail | -| Façade kit | 16 meshes | 12 tris each = 192 | none | boxes; complex-as-simple collision | -| Kit instances in `DemoMap` | 625 actors | ~7 500 | shared materials | 8 buildings | -| Frontage buildings | 6 meshes | blockout volumes | 8 × 512² maps | `M_FacadeStone`, `M_Stucco`, … | -| North buildings | 2 meshes | blockout volumes | shared | TCL, Tussaud's | -| Site meshes | 7 | 55 k tris (terrain-dominated) | shared | terrain/road/sidewalks/kerbs/crossing | - -Texture set: `T_StoneAshlar`, `T_Stucco`, `T_Asphalt`, `T_Concrete`, each `_BC` + `_R` at 512², deterministic and regenerable. - -## Evidence - -Behaviour, packaged build (`-qaselftest`): - -``` -walk moved 761 cm in 2 s -> PASS (Z 456 -> 456) -transect 1456 samples, 0 holes -> PASS -wall probe 0/35 blocking hits inside 21 m -> PASS -facade probe 0/9 directions without a blocking wall -> PASS -RESULT walk=1 reset=1 pause=1 unpause=1 -> PASS -``` - -Geometry and placement, probed from the live map: - -- Frontage spans match the verified block: 6922 −24276..−17700, 6902 −17749..−14591, **hero −14644..−12028 between them**, theatre −12082..−8210, 6822 −7854..−7252, 6806 −6608..−3307, 6800 −3320..−1437. North: TCL −22889..−18442, Tussaud's −27071..−22799. -- Kit placed from world bounds (`get_actor_bounds`), e.g. theatre pieces at −12082..−8694, inside the theatre's own span. -- Kit module **4.96 m**, storey **3.10 m**, door **2.45 m**, window **1.60 × 1.85 m**. -- Kit topology: 16 pieces, **all manifold**, no loose vertices, 12 tris each. -- Asset hygiene: `/Game/Hollywood/Kit` holds exactly 16 `SM_` meshes and no leftover auto-imported materials. - -Screenshots: the committed set in [`Screenshots/`](../Screenshots/README.md), all 14 re-rendered for this state — hero shots 8–10 and demo views 11–14 carry the change. - -## Defects - -### Blockers - -None outstanding. Two were found and fixed during this cycle: - -- **Wrong frame (fixed).** The `0.1.2` blockout was regenerated without `--origin`, shifting the whole frontage ≈119 m in X and 2.4 m in Y and dropping the hero out of the 6902/6838 gap. Regenerated with `--origin 34.101545,-118.338718` (affine residual 0.0 cm); spans re-verified against [`Geo/verification/2026-11-06-el-capitan-block.md`](../Geo/verification/2026-11-06-el-capitan-block.md). -- **Kit placed 12 km away (fixed).** `ue_apply_facade_kit` used the static-mesh bounding box, which is building-line-local. Now uses `get_actor_bounds()` (world space). - -### Majors - -- **Window bays were inside the solid wall (fixed).** The first piece modelled the whole bay at +Y, so every window sat inside the blockout volume and was invisible. The surround now projects 3 cm with glazing 6 cm behind its face. -- **Kit had no materials (fixed).** Pieces kept the grey `M_Kit_*` material the FBX import creates, so the glazing was not glass and the shopfronts were not stone. Assembly now assigns `M_FacadeGlass` to glazing, `M_FacadeStone` to surrounds, `M_FacadeStoneShadow` to doors and `M_FacadeBanner` to fascias. - -### Minors - -- Kit pieces are boxes: no reveals, sills or mouldings beyond the kit's own bands. Acceptable at this patch's fidelity; the kit is the vocabulary, not the detail. -- `M_Kit_*` materials are deleted at import rather than reused, so the kit's Blender materials carry no shading intent — the Unreal set is authoritative. Documented, not silent. -- Actor labels for kit pieces are unique per building but long (`Kit_elcapitantheatre_window_3_2`). - -### Notes (polish, not required for `v0.1.4`) - -- Hero fluting, and the motto band/medallions as geometry, are still pending. -- The El Capitan Theatre has no marquee or blade sign yet — the features that make it read as itself. -- Cornice dentil spacing, abacus and plinth dimensions remain recorded assumptions. - -## Not verified here - -- **Reference match.** Needs a human comparing `Screenshots/demo/*` against `Art/reference/hollywood/`. The vision pre-check is demonstrably unreliable on this content (it rejected shots the owner has since approved), so it was not used as evidence. -- **Silhouette and shading at street level** — the same review covers it. - -## Next actions - -1. Owner review of the 14 demo/review shots; record approval in `Screenshots/README.md`. -2. Then the remaining `0.1.4` modelling: theatre marquee + blade sign, hero fluting/motto band, blockout cleaning pass. -3. `CHANGELOG.md` entry and `v0.1.4` tag once (1) is signed off. diff --git a/Docs/reviews/0.1.4-review.md b/Docs/reviews/0.1.4-review.md index 0e33c9c..20f4e04 100644 --- a/Docs/reviews/0.1.4-review.md +++ b/Docs/reviews/0.1.4-review.md @@ -1,8 +1,8 @@ # `0.1.4` façade review — signoff -Four demo-map captures from the `facades-0.1.4` branch, after the module kit, the textured materials and the theatre marquee went in. Tick each row you accept; anything not ticked is still open. Mechanical checks (blank/size/tone) already pass via `python3 Tools/visual_loop.py --verify`. +Four demo-map captures from the `facades-0.1.4` branch, after the module kit, the textured materials and the theatre marquee went in. **All seven items signed off 2026-11-09** (owner review of the local renders). -Reference photographs to compare against: `Art/reference/hollywood/` and `Art/reference/el-capitan-*` (local, not committed). Regenerate the set with `Tools/render_screenshots.sh --verify`. +Reference photographs to compare against: `Art/reference/hollywood/` and `Art/reference/el-capitan-*` (local, not committed). Regenerate the set with `Tools/render_screenshots.sh --verify`; measure it with `python3 Tools/visual_loop.py --compare --iteration 5`. ## Signoff @@ -40,4 +40,41 @@ Expected: TCL Chinese Theatre and Madame Tussaud's across Hollywood Blvd, full h --- -**Notes for the decision:** every defect found in this cycle that survived more than one render was a placement error, not a shading one (a 119 m frame shift, a kit 12 km off, a marquee mirrored across the street). Placement is now probed rather than eyeballed, so the remaining risk in these four images is _likeness_, not correctness. The low edge ratios are partly structural — a wide block view compared with a tight façade crop always scores low — so weigh the images, not the scores. +## Appendix — what was checked, and what was broken + +### Verified + +- **Behaviour**, packaged build, `-qaselftest`: walk 761 cm in 2 s (Z steady 456), reset 0 cm, pause/unpause, seam transect 1456 samples / **0 holes**, wall probe **0/35**, façade occlusion probe **0/9** — all PASS. Run twice: the harness is time-based and one loaded run reported a false failure (`walk 246 cm`, `pause FAIL`), an immediate re-run passed — re-run before believing a single FAIL. +- **Placement**, probed from the live map against `Geo/verification/2026-11-06-el-capitan-block.md`: 6922 −24276…−17700, 6902 −17749…−14591, **hero −14644…−12028 between them**, theatre −12082…−8210, 6822 / 6806 / 6800 −7854…−1437, TCL −22889…−18442, Tussaud's −27071…−22799. Blockout affine residual **0.0 cm**. +- **Budgets**: hero 148 parts / 3 044 tris · kit 16 meshes × 12 tris · 625 kit actors ≈ 7 500 tris · 8 × 512² textures (196 KB) · 67 tool tests pass. +- **Topology**: every kit piece manifold, no loose geometry. + +### Defects found this cycle + +Every one of these rendered convincingly; the placement ones were caught by coordinate probes, not by looking. + +| Sev | Defect | Root cause | +| --- | --- | --- | +| Blocker | Frontage shifted ≈119 m X / 2.4 m Y, hero outside its gap | Blockout regenerated without `--origin` | +| Blocker | Kit placed ~12 km from its buildings | Used mesh-local bbox; actors carry the offset | +| Blocker | Marquee on the far side of the boulevard | Blender +Y is Unreal −Y | +| Major | Marquee canopy 5 cm above the pavement | Absolute Z; pavement is 4.56 m above datum | +| Major | Window bays invisible, inside the solid wall | Piece modelled entirely at +Y | +| Major | Glazing wasn't glass | Grey `M_Kit_*` from the FBX import, never overridden | +| Major | Hero windows floated 1.44 m in front of the wall | Wrong Y in the builder | +| Major | Parapet medallions were discs on the coping | Built with the Z-axis cylinder helper | +| Major | Hero had no usable collision | Complex-only; traces use simple | +| Minor | "No smoothing group information" on every import | `mesh_smooth_type="OFF"` in six exporters | +| Minor | `save_map()` returned False silently | LFS `.umap` read-only, importer never chmod'd | +| Minor | North-buildings import silently no-op | Missing `import sys` | +| Minor | Kit folder held 24 assets (8 orphan materials) | No stale-asset sweep | +| Minor | Edge-density metric counted PIL's border ring | `FIND_EDGES` leaves a 128 ring | +| Minor | QA wall probe grazed the theatre wall | Scan row 1 cm from the building line | + +### Limitations worth knowing + +- Kit pieces are boxes; dentil spacing, abacus and plinth dimensions are recorded assumptions, not measurements. +- Textures are generated, not authored — no decals, signage text or weathering. +- The vision pre-check stays advisory: it has rejected shots the owner approved. +- The low edge ratios in the metrics are partly structural — a wide block view against a tight façade crop always scores low. Weigh the images, not the scores. +- Performance has not been re-measured since `0.1.0`; the 625 kit actors are unmeasured (tracked in `TODO.md` under `0.1.5`).