diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 2b1a82e..9fb60f0 100644 --- a/Game/GigLine/Content/Hollywood/DemoMap.umap +++ b/Game/GigLine/Content/Hollywood/DemoMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ca76190a48710324d82892f5f56e423f123156f1b8e83740e37dbe3f7aa418d -size 958399 +oid sha256:1dadfbce54000421368ccbcb76cf04a8799c314f54c124bc7eb92fc23bbba754 +size 919659 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index 562ce47..0ae6bb6 100644 --- a/Game/GigLine/Content/Test/ReviewMap.umap +++ b/Game/GigLine/Content/Test/ReviewMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d7897fdd23c11963990f71530a4630f8e2067503498c5906b13e232a79819e7 +oid sha256:872bca7e7dd0fdb41b213f0fbcbba048041311e30db43b60bd4d5e24d6f1db29 size 28811 diff --git a/MEMORY.md b/MEMORY.md index 2df3716..0063b91 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -436,3 +436,19 @@ 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. diff --git a/Screenshots/demo/review-demo-crossing.png b/Screenshots/demo/review-demo-crossing.png index 6a19fc7..111f265 100644 --- a/Screenshots/demo/review-demo-crossing.png +++ b/Screenshots/demo/review-demo-crossing.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9cd5184c2c1f932e5262322c6ee21d9fae24f4af534ed6b641c11e0cd722952b -size 3079101 +oid sha256:11730e81d292ccba5357565a6315bd7f5b475ff4713813e22ea2dfd880e4c869 +size 3080043 diff --git a/Screenshots/demo/review-demo-north-buildings.png b/Screenshots/demo/review-demo-north-buildings.png index de0eca2..2fb99bc 100644 --- a/Screenshots/demo/review-demo-north-buildings.png +++ b/Screenshots/demo/review-demo-north-buildings.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:153b25b43f293ebf793fa8d0d685b0ef0be2a94267a03937180e4bcd602ed561 -size 2442501 +oid sha256:35b9ecf5f6fa1431777fc78f46ed7ab050e8d86da34a63024e741efc99b0557b +size 2419489 diff --git a/Screenshots/demo/review-demo-spawn-view.png b/Screenshots/demo/review-demo-spawn-view.png index da3f6bf..62dcc78 100644 --- a/Screenshots/demo/review-demo-spawn-view.png +++ b/Screenshots/demo/review-demo-spawn-view.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9feb51f299584f7c7e76e69bc1e05e381b9cad381e5b0375e3430c1ea5fcaac6 -size 2946077 +oid sha256:a40c52112be8d72b9d5f85b66434fed255399868b35d9c86f89c909b56dea794 +size 2949229 diff --git a/Screenshots/demo/review-demo-street-level.png b/Screenshots/demo/review-demo-street-level.png index 77452f8..045bd58 100644 --- a/Screenshots/demo/review-demo-street-level.png +++ b/Screenshots/demo/review-demo-street-level.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fdec8a67016806bbff3591f449bc16c19df35df2ae98cb18c38c15d0b91a6a5 -size 2865770 +oid sha256:33b9bd8fcb4a7aa2b6cc916688769590fb7e314e37d0ab81c0c24a565dec4e1f +size 2867127 diff --git a/TODO.md b/TODO.md index 00f551b..860b2cf 100644 --- a/TODO.md +++ b/TODO.md @@ -17,7 +17,7 @@ The `0.1.4` kit, materials and theatre trim are signed off; these are the geomet ### Patch tasks -- [ ] **Retail neighbours (6822 Budget, 6806–6820, 6800 Lee Drug) from their own references.** The 18-frame set is the El Capitan Theatre, so it cannot stand in for these façades. Fetch or shoot per-building references first, then model the shopfront line and upper storeys rather than relying on the kit alone. +- [A] **Retail neighbours (6822 Budget, 6806–6820, 6800 Lee Drug) from their own references.** **Started 2026-11-09.** Fetched the one usable reference Commons holds for this run — `Art/reference/retail-neighbours/01-lee-drug-and-neighbor.jpg` (Gb321, CC BY-SA 4.0, 1920×953) — which shows 6800 **and** its neighbour at street level; the vision pre-check confirmed shopfronts and parapets are visible. The 18-frame theatre set cannot stand in for these façades, and Commons has nothing else for 6822 or 6806–6820, so per-building references for those two remain the blocker. **Kit layout fixed while here:** bay count was `round(width / 4.96)`, which gave 6922 thirteen bays across 65.8 m (a window every 4.96 m on a 37 m block) and left bare wall under the cornice; bays are now capped at 9 with the module widened, and the storey spread fills the available height (6922 9 × 11, 6806 7 × 3, 6800 4 × 3, theatre 8 × 6). - [ ] **Hero façade: fluting and the motto band as geometry.** The colonnade is plain cylinders and the motto/medallions are flat panels; both are legible in the reference photography. - [ ] **Blosm blockout cleaning pass.** Roofs and facades remain untextured volumes and the `setupScript` styles stay unused; with the kit carrying the elevations, this is now cleanup rather than a second façade system. - [ ] **Re-measure 1440p performance** with 625 kit actors and 8 generated textures in the map. `0.1.0` measured 414 fps average, so there is headroom, but it has not been re-run since. diff --git a/Tools/ue_apply_facade_kit.py b/Tools/ue_apply_facade_kit.py index 5606b91..d3768a5 100644 --- a/Tools/ue_apply_facade_kit.py +++ b/Tools/ue_apply_facade_kit.py @@ -123,12 +123,28 @@ def apply_to_actor(actor, kit, materials=None, prefix=None): f"({width / 100:.1f} x {height / 100:.1f} m)") return 0 + # Bays: the kit module is one window bay (4.96 m). A very wide building gets a + # bay count that keeps the rhythm readable rather than one window per 4.96 m of + # frontage — 6922 is 65.8 m wide, which is 13 bays, giving a window every 4.96 m + # across a 37 m tall block: the rhythm reads as a wall of glass, not a building. + # Above MAX_BAYS the module is widened instead, so the bay count stays legible. + MAX_BAYS = 9 bays = max(1, int(round(width / BAY_CM))) + if bays > MAX_BAYS: + bays = MAX_BAYS bay_w = width / bays # actual bay width for this building # Street face: the frontage runs along X, and the street is at smaller Y. face_y = mn.y base_z = mn.z - storeys = max(1, int((height - SHOP_FLOOR_CM) // STOREY_CM)) + # Storeys never overrun the volume: cap the count so the top band (cornice + + # parapet, 145 cm) always lands inside the building. + storeys = max(1, int((height - SHOP_FLOOR_CM - 145.0) // STOREY_CM) + 1) + top_z = base_z + height + # Windows above the shopfront, spread over the available height rather than + # assumed to be exactly STOREY_CM apart, so a 37 m block does not leave a gap + # of bare wall under the cornice. + usable = max(0.0, (top_z - 145.0) - (base_z + SHOP_FLOOR_CM)) + storey_step = (usable / storeys) if storeys else STOREY_CM def kit_material(name): if materials is None: @@ -153,7 +169,7 @@ def apply_to_actor(actor, kit, materials=None, prefix=None): # upper storeys: window bays for storey in range(storeys): if "Kit_WindowBay" in kit: - z = base_z + SHOP_FLOOR_CM + STOREY_CM * storey + 65.0 + z = base_z + SHOP_FLOOR_CM + storey_step * storey + 65.0 if _spawn(kit["Kit_WindowBay"], unreal.Vector(cx, face_y, z), f"{prefix}window_{bay}_{storey}", kit_material("Kit_WindowBay")): placed += 1