From e75e5500a72648faf9788eb40f6a1999a18e0dd8 Mon Sep 17 00:00:00 2001 From: Zwitschi Date: Sun, 8 Nov 2026 16:19:11 +0100 Subject: [PATCH] =?UTF-8?q?fix(street):=200.1.1=20collision=20patch=20?= =?UTF-8?q?=E2=80=94=20flush=20sidewalk=20edge,=20graded=20crossing=20ramp?= =?UTF-8?q?s=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merged PR #21: 0.1.1 collision patch (flush sidewalk edge, graded ramps) Co-authored-by: Zwitschi --- Art/blender/README.md | 31 ++++++++-- Art/blender/site/site-2026-11-06.blend | 4 +- Art/blender/site/site_assembly.py | 26 +++++++-- Art/blender/street/street-2026-11-06.blend | 4 +- Art/blender/street/street_mesh.py | 57 +++++++++++++++++-- Docs/Architecture/architecture.md | 11 ++-- Game/GigLine/Content/Hollywood/DemoMap.umap | 2 +- .../Hollywood/Site/Crossing_Markings.uasset | 2 +- .../Content/Hollywood/Site/Kerb_North.uasset | 4 +- .../Content/Hollywood/Site/Kerb_South.uasset | 4 +- .../Content/Hollywood/Site/M_Asphalt.uasset | 2 +- .../Content/Hollywood/Site/M_Concrete.uasset | 2 +- .../Hollywood/Site/M_FacadeStone.uasset | 2 +- .../Content/Hollywood/Site/M_Ground.uasset | 2 +- .../Hollywood/Site/M_KerbConcrete.uasset | 2 +- .../Content/Hollywood/Site/M_RoadPaint.uasset | 2 +- .../Content/Hollywood/Site/M_Stucco.uasset | 2 +- .../Hollywood/Site/Road_Hollywood.uasset | 2 +- .../Hollywood/Site/Sidewalk_North.uasset | 4 +- .../Hollywood/Site/Sidewalk_South.uasset | 4 +- .../Content/Hollywood/Site/Terrain_DEM.uasset | 2 +- Game/GigLine/Content/Test/ReviewMap.umap | 2 +- Screenshots/README.md | 2 +- Screenshots/demo/review-demo-crossing.png | 4 +- .../demo/review-demo-north-buildings.png | 4 +- Screenshots/demo/review-demo-spawn-view.png | 4 +- Screenshots/demo/review-demo-street-level.png | 4 +- Screenshots/review-character.png | 4 +- Screenshots/review-ground-contact.png | 4 +- Screenshots/review-hero-facade-front.png | 4 +- Screenshots/review-hero-facade-oblique.png | 4 +- Screenshots/review-hero-portals.png | 4 +- Screenshots/review-npc-prefab.png | 4 +- Screenshots/review-overview.png | 4 +- Screenshots/review-player-placement.png | 4 +- Screenshots/review-scale-cubes.png | 4 +- Screenshots/review-shadow-compare.png | 4 +- TODO.md | 14 ++--- 38 files changed, 162 insertions(+), 83 deletions(-) diff --git a/Art/blender/README.md b/Art/blender/README.md index d43292d..8b032c3 100644 --- a/Art/blender/README.md +++ b/Art/blender/README.md @@ -80,7 +80,10 @@ LD_LIBRARY_PATH="$B/blender/lib" "$B/blender/blender" -b --factory-startup \ ``` - `Road_Hollywood`: 8 120 verts, 7 812 faces, carriageway −10.5…+10.5 m, DEM elevations plus a 2 cm lift so it does not z-fight the terrain. -- `Sidewalk_South` 4.0 m wide, `Sidewalk_North` 5.3 m wide, both raised by the kerb height. +- `Sidewalk_South` 4.0 m wide, `Sidewalk_North` 5.3 m wide. The kerb upstand is + **full at the road-side edge and tapers to zero at the building-side edge**, so + the walk surface meets the terrain flush (before `0.1.1` the outer lip stood the + full kerb height above the DEM — a 15.8 cm ledge). - `Kerb_South`, `Kerb_North`: vertical faces, mostly **0.13 m** — the 0.15 m assumption minus nothing on the road side — and flushed to 0 within ±2.5 m of each signalised crossing with a 1.5 m blend. Measured from the built mesh: 256 steps at 0.13 m, 15 flush, a few in transition. Crown check on the built mesh at mid-block: gutter −10.5 m → +0.99, −5 m → +1.38, centre → +1.52, +5 m → +1.58, +10.5 m → +1.52. The crown sits just north of the centreline, as the cross-sections said. @@ -105,14 +108,30 @@ A downward raycast on a 1 m grid along both sidewalks and the designated crossin | Route | Samples | Holes | Z range | Worst step | | ----------------- | ------: | ----: | ------------- | ---------: | -| South sidewalk | 279 | 0 | −0.45 … +3.13 | 20.5 cm | -| North sidewalk | 279 | 0 | +0.07 … +3.83 | 15.1 cm | -| Crossing at 130 m | 26 | 0 | +1.16 … +1.80 | 8.6 cm | +| South sidewalk | 279 | 0 | −0.48 … +3.06 | 13.4 cm (s=198) | +| North sidewalk | 279 | 0 | +0.06 … +3.76 | 6.9 cm (s=33) | +| Crossing at 130 m | 26 | 0 | +1.14 … +1.80 | 9.0 cm (off −8.5) | + +At `--sample 0.25` the same routes measure 11.6 cm / 8.0 cm / 3.4 cm. The +pre-check now prints the grade and the **location** of the worst step, and its +coverage no longer shrinks with `--sample`. No holes anywhere, so nothing drops the player on either side. The two flagged steps: -- **15.8 cm at s≈207**, where a sample crosses from `Terrain_DEM` onto `Sidewalk_South` — that is the sidewalk's outer edge, the 0.15 m kerb height minus the terrain. Mostly hidden by buildings, but it is a real edge and it will be visible anywhere a building is missing. -- **10–13 cm steps at s≈33, 39 and 126**, inside the sidewalk mesh: the kerb-flush transition at the crossings. That is a ~10 % ramp over 1.5 m, steeper than a real crossing ramp (8 % max). Worth grading properly when the crossings are detailed. +- ~~15.8 cm at s≈207, the sidewalk's outer edge~~ — **fixed in `0.1.1`**: the + sidewalk upstand now tapers to zero at the building side, so the outer edge is + flush with the terrain (north route 15.1 → 6.9 cm). +- ~~10–13 cm steps at the crossings, ~10 % ramp over 1.5 m~~ — **fixed in `0.1.1`**: + the ramp run is now derived from a target grade (`--max-ramp-grade`, default 8 %), + giving 1.63 m instead of the fixed 1.5 m (8.7 %). Measured at 0.25 m sampling the + crossing now steps 3.4 cm (~1.4 % of the route) at the kerb line. + +**Remaining finding (not a crossing, not the outer edge):** the south route still +measures a **13.4 cm step at s≈198 m** (11.6 cm at 0.25 m sampling) and the north +route 8.0 cm at s≈251 m. Neither is at a crossing and neither is the outer lip, so +this is a local discontinuity in the sidewalk strip — most likely the DEM sampling +or a centreline vertex near the block ends. Tracked under the `0.1.1` "audit any +collision gaps" item rather than left undocumented. This is a pre-check, not the `0.1.0` release check: the release check is traversal in the engine. diff --git a/Art/blender/site/site-2026-11-06.blend b/Art/blender/site/site-2026-11-06.blend index cb34036..2f27428 100644 --- a/Art/blender/site/site-2026-11-06.blend +++ b/Art/blender/site/site-2026-11-06.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a54ae747e4990399c8f269b8ebe5a3f1bf0d6cca4ac2dd9ca2562f66f5eedfb -size 994709 +oid sha256:0317754a337a32000db6b5115407d23418699d2257ffda89712434d60e280f0f +size 994209 diff --git a/Art/blender/site/site_assembly.py b/Art/blender/site/site_assembly.py index 1069424..d569396 100644 --- a/Art/blender/site/site_assembly.py +++ b/Art/blender/site/site_assembly.py @@ -165,10 +165,16 @@ def main(): def lat_lon(s, offset): return oc.point_at(line, _lengths, s, offset, lat0, lon0) + # Sample spacing is independent of coverage: walk the whole block at + # `--sample` metres, so a finer spacing measures the gradient instead of + # accidentally shortening the route (previously range(int(block_len)) with a + # 0.25 m spacing only covered a quarter of the block). + along = int(block_len / args.sample) + across = int(26.0 / args.sample) route_specs = { - "south sidewalk": [(s, -12.5) for s in [i * args.sample for i in range(int(block_len))]], - "north sidewalk": [(s, 13.0) for s in [i * args.sample for i in range(int(block_len))]], - "crossing at 130 m": [(130.0, o) for o in [i * args.sample - 12.5 for i in range(26)]], + "south sidewalk": [(i * args.sample, -12.5) for i in range(along)], + "north sidewalk": [(i * args.sample, 13.0) for i in range(along)], + "crossing at 130 m": [(130.0, i * args.sample - 12.5) for i in range(across)], } flat = [(spec, lat_lon(s, off)) for spec, samples in route_specs.items() for s, off in samples] local = project_to_local([ll for _spec, ll in flat], find_proj()) @@ -185,12 +191,20 @@ def main(): heights.append(None) else: heights.append(z) - deltas = [abs(b - a) for a, b in zip(heights, heights[1:]) + deltas = [(i, abs(b - a)) for i, (a, b) in enumerate(zip(heights, heights[1:])) if a is not None and b is not None] - max_step = max(deltas) if deltas else float("nan") + worst_i, max_step = (max(deltas, key=lambda t: t[1]) if deltas else (0, float("nan"))) known = [h for h in heights if h is not None] + grade = (max_step / args.sample) * 100 if deltas else float("nan") + # Position of the worst step, as arc length / cross offset, so the cause + # can be located instead of guessed. + if label == "crossing at 130 m": + where = f"s=130 off={(worst_i * args.sample - 12.5):+.2f} m" + else: + where = f"s={worst_i * args.sample:.1f} m" print(f" {label:18} samples {len(heights):3} holes {holes} " - f"Z {min(known):+.2f}..{max(known):+.2f} max step {max_step*100:.1f} cm") + f"Z {min(known):+.2f}..{max(known):+.2f} max step {max_step*100:.1f} cm " + f"({grade:.1f} % grade) at {where}") out = os.path.abspath(args.out) os.makedirs(os.path.dirname(out), exist_ok=True) diff --git a/Art/blender/street/street-2026-11-06.blend b/Art/blender/street/street-2026-11-06.blend index ae518a9..6facef5 100644 --- a/Art/blender/street/street-2026-11-06.blend +++ b/Art/blender/street/street-2026-11-06.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5744a2138e894a485f026d92b9311f7ecde12c280dd096bbbde5776694b32ae2 -size 514185 +oid sha256:534493dc63a6b3aa7b84e1071589f5437dfb27185a1f1fbfa8a05f2330eba43b +size 514055 diff --git a/Art/blender/street/street_mesh.py b/Art/blender/street/street_mesh.py index 368a18c..88c6549 100644 --- a/Art/blender/street/street_mesh.py +++ b/Art/blender/street/street_mesh.py @@ -68,8 +68,13 @@ def parse_args(): ap.add_argument("--cross", type=float, default=0.75) ap.add_argument("--kerb", type=float, default=0.15) ap.add_argument("--ramp-half-width", type=float, default=2.5) - ap.add_argument("--ramp-blend", type=float, default=1.5) - return ap.parse_args(argv) + ap.add_argument("--ramp-blend", type=float, default=None, + help="override the ramp run; default derives it from --max-ramp-grade") + ap.add_argument("--max-ramp-grade", type=float, default=0.08, + help="maximum crossing-ramp slope (0.08 = 8%%)") + args = ap.parse_args(argv) + args.ramp_blend = ramp_blend(args.kerb, args.max_ramp_grade, args.ramp_blend) + return args def find_proj(): @@ -125,7 +130,13 @@ class Dem: def kerb_height(s, base, half_width, blend): - """Full kerb, except flushed near a crossing so people can step off.""" + """Full kerb, except flushed near a crossing so people can step off. + + `blend` is the horizontal run over which the kerb drops from `base` to the + 0.02 m flush height. It is derived from a target maximum grade (see + `ramp_blend`) so the crossing ramps stay within a real ramp's slope instead + of the ~8.7 % the old fixed 1.5 m run produced. + """ for crossing in CROSSINGS: d = abs(s - crossing) if d <= half_width: @@ -136,6 +147,22 @@ def kerb_height(s, base, half_width, blend): return base +def ramp_blend(kerb, max_grade, override=None): + """Horizontal run needed for the kerb ramp to stay at or under max_grade. + + 0.15 m kerb at an 8 % grade needs 1.63 m of run; the previous fixed 1.5 m + gave 8.7 %, and the walk pre-check measured the transition as a 10-13 cm + step over 1.5 m. When `override` is given it wins (kept for reproducing old + meshes), otherwise the run is computed from the live kerb height so it stays + correct if the kerb height assumption changes. + """ + if override is not None: + return max(0.0, override) + if max_grade <= 0.0: + return 0.0 + return max(0.0, (kerb - 0.02)) / max_grade + + def strip(rows, offsets, z_at, name, material): """Build a quad grid from per-row sampled vertices.""" verts, faces = [], [] @@ -218,13 +245,31 @@ def main(): z = dem_z(x, y) return (z if z is not None else 0.0) + 0.02 - def south_z(r, off, x, y): + def sidewalk_z(r, off, inner, outer, x, y): + """Sidewalk surface: full kerb upstand at the road-side (inner) edge, + tapering to zero at the building-side (outer) edge so the walk surface + meets the terrain flush. + + Before this taper the outer lip stood the full kerb height above the DEM, + which the walkability pre-check measured as a 15.8 cm step where a sample + crosses from Terrain_DEM onto Sidewalk_South (with a matching lip on the + north side). A 0.15 m lip over a 4.0 m / 5.3 m strip is a ~3-4 % ramp: + walkable and visually negligible, and it removes the ledge entirely. + """ z = dem_z(x, y) base = z if z is not None else 0.0 - return base + kerb_height(rows[r][0], args.kerb, args.ramp_half_width, args.ramp_blend) + h = kerb_height(rows[r][0], args.kerb, args.ramp_half_width, args.ramp_blend) + span = inner - outer + if abs(span) < 1e-9: + return base + h + t = min(1.0, max(0.0, (off - outer) / span)) + return base + h * t + + def south_z(r, off, x, y): + return sidewalk_z(r, off, SOUTH_GUTTER, SOUTH_SIDEWALK, x, y) def north_z(r, off, x, y): - return south_z(r, off, x, y) + return sidewalk_z(r, off, NORTH_GUTTER, NORTH_SIDEWALK, x, y) road = strip(rows, road_offsets, road_z, "Road_Hollywood", asphalt) sw_s = strip(rows, south_offsets, south_z, "Sidewalk_South", concrete) diff --git a/Docs/Architecture/architecture.md b/Docs/Architecture/architecture.md index 4c42855..bace77d 100644 --- a/Docs/Architecture/architecture.md +++ b/Docs/Architecture/architecture.md @@ -1,8 +1,9 @@ -# Gig Line Architecture Documentation - -> Linux-first walking/driving demo around 6840 Hollywood Blvd - -Version 0.1.0 — 2026-11-08 — initial architecture documentation +--- +title: Gig Line Architecture Documentation +description: Architecture documentation for the Gig Line Linux-first Unreal Engine 5 demo around 6840 Hollywood Blvd. +status: v0.1.0 +date: 2026-11-08 +--- # Introduction and Goals diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 6d5df4d..708a127 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:be8dedbeed8402c51550ad5dd8cdd0734b02831da440491da682d693cf90f24b +oid sha256:93f0d165a3e78e7e2fb5c20a74fcb9a94000312557a27552ae39d4dade281e88 size 54516 diff --git a/Game/GigLine/Content/Hollywood/Site/Crossing_Markings.uasset b/Game/GigLine/Content/Hollywood/Site/Crossing_Markings.uasset index 056b009..2f48750 100644 --- a/Game/GigLine/Content/Hollywood/Site/Crossing_Markings.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Crossing_Markings.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebac8b2f24eb5a9694ae773afd066c8119b35e508b9768443a115591943ef3d0 +oid sha256:90e9c5586b43bd8a5073fdd98b48e477c0369dbfb935752a2e832b046c4ac9f1 size 75501 diff --git a/Game/GigLine/Content/Hollywood/Site/Kerb_North.uasset b/Game/GigLine/Content/Hollywood/Site/Kerb_North.uasset index a565fe5..e451175 100644 --- a/Game/GigLine/Content/Hollywood/Site/Kerb_North.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Kerb_North.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:afc0287a2021ac3c8249a6071a34c1b7d20e86329071bb0ec47971f675703f13 -size 83550 +oid sha256:096d4e05ce88191ce821b1987b973fdeed6f30ac67414ba50d40dc74e0341c41 +size 83558 diff --git a/Game/GigLine/Content/Hollywood/Site/Kerb_South.uasset b/Game/GigLine/Content/Hollywood/Site/Kerb_South.uasset index a5257be..e1c291a 100644 --- a/Game/GigLine/Content/Hollywood/Site/Kerb_South.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Kerb_South.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:244dc615c604332bc8046c61305264997f63d03bc6ed33281e22436a8fb17127 -size 83797 +oid sha256:c611c9f32b52c569b3e4c9a9cd337a2227f3d678b69e7033123a678bb9aa8d3f +size 83802 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset index 786ce6a..c794ac2 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Asphalt.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3984f701d136b0931c56a87109f862ed16132ff210cc348cdbbc122f35d98478 +oid sha256:d9c10664cd917028d145af9e1da3647a3c0b0b06344c57c73bbcec89c51429ee size 7876 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset index f526b3a..4805588 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Concrete.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a9537f05120a0cb5fc0bacac1fc44847e983ba757866316cb5e9a10fd142e53 +oid sha256:be1818dd7fa16a16694c96ae58043381b0f5ef591c2f8e7056fa0523b05a86c4 size 7881 diff --git a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset index 5382da3..48907e8 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_FacadeStone.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89fc0b99258c68c458dfc13e32d2ac8dd1e0977891d5992c38d123657f3a78d0 +oid sha256:e4686c8ac1854d278b5552de934427522834381d9ca93b23746c42716140b7bc size 7896 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset index b5edd8a..b7e5377 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Ground.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a143de1f26d5fe2c053571b25e5ead359cfba9ed12b09b9e703fe269fda09161 +oid sha256:c8c257b7c97763c16112d3cf3a4ea0b5bd6e2d52ca28c28f9aec0bd543900243 size 7871 diff --git a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset index daaddd6..798f450 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_KerbConcrete.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d61219af92c368d63d810a880cd479568edd55ec1e13d3a0921a15b5f0bd029 +oid sha256:f82b75f57da5e2453ea0c6121ec437f884a04a032bb6d830dbc515884c79d043 size 7901 diff --git a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset index 2e27ef9..93f7ffc 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_RoadPaint.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f09f4c1cb9c3d6dc98223d3046cab45453693794ea7089203f442ac4162c9fc6 +oid sha256:b5d72661ee468a131791e7f0d963f53cbfb6e139a42365876200830e757a18b9 size 7886 diff --git a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset index 5f5c400..f87684a 100644 --- a/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset +++ b/Game/GigLine/Content/Hollywood/Site/M_Stucco.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ad2b4e24f36480b4089a509186d2cbbf8f03e50d9a6f50342420285acbed791 +oid sha256:3d0e9c42fab8148e2166e458900f80213786d4a54e6a4a28e648cfdf78442e27 size 7871 diff --git a/Game/GigLine/Content/Hollywood/Site/Road_Hollywood.uasset b/Game/GigLine/Content/Hollywood/Site/Road_Hollywood.uasset index affcbe6..2c299df 100644 --- a/Game/GigLine/Content/Hollywood/Site/Road_Hollywood.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Road_Hollywood.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:484203d50293ca93dcdfceb275c24587a40f70892698b6f6950b600358522fa3 +oid sha256:a48b4b61a9a062c19d1f604634fb349eb5ea59def82803574b3b3376f7241f09 size 309812 diff --git a/Game/GigLine/Content/Hollywood/Site/Sidewalk_North.uasset b/Game/GigLine/Content/Hollywood/Site/Sidewalk_North.uasset index c335f1a..5ae5e2d 100644 --- a/Game/GigLine/Content/Hollywood/Site/Sidewalk_North.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Sidewalk_North.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53bc30b5df51eabe14e5a31e33fd5b0d641160289c92dd3717df5af8b9bd43e2 -size 150678 +oid sha256:3534e2ba61975bb8c350cb0b3a78624b6ca90b8c92e0acb725c053883dcfaf29 +size 150179 diff --git a/Game/GigLine/Content/Hollywood/Site/Sidewalk_South.uasset b/Game/GigLine/Content/Hollywood/Site/Sidewalk_South.uasset index 11756b3..fe14cd8 100644 --- a/Game/GigLine/Content/Hollywood/Site/Sidewalk_South.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Sidewalk_South.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1f11f8a3448a0e26a530d928d5e613c673f3b899ee1922ef7d9eb7b3c428c06 -size 164349 +oid sha256:4b3113c472a0b83f6ba369efc8cdec91c0f7aa08c0b859c00661a624303253bb +size 164880 diff --git a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset index 3d200fd..61b4e1a 100644 --- a/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset +++ b/Game/GigLine/Content/Hollywood/Site/Terrain_DEM.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a1e69c853b4d19fd9e445b29d89dd6feb69057f17de54edfdec3d784b3ba779 +oid sha256:0da94b77abe826e9a68b477a1f5faef5ac42c2681a13eacbb1376bdbccafb06e size 335528 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index 98bd026..ff0d60f 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:1b4b0cddf6bf8124282d571981e32b4e449f4f6b306d23718ab3358a4c37b67c +oid sha256:4be3f848ed504bdcb68420263f852de263a93ad0bff0fb557c25e8a063d8a63b size 28706 diff --git a/Screenshots/README.md b/Screenshots/README.md index e3f20ac..025ddc0 100644 --- a/Screenshots/README.md +++ b/Screenshots/README.md @@ -16,7 +16,7 @@ Rebuilds `Game/GigLine/Content/Test/ReviewMap.umap` from current content, runs t All shots ☑ approved 2026-11-07, including the block frontage pass that added the neighbouring buildings and corrected the hero and north-building placement. -**2026-11-08 — regenerated set.** Re-rendered via `Tools/render_screenshots.sh` after the placement release check. The `demo-north-buildings` camera was re-pointed (it previously sat 9.5 km west and framed 85 % sky); that shot now shows both north buildings, and all maps carry the re-staged shot cameras. **Approved 2026-11-08** (owner review of the regenerated set). +**2026-11-08 — regenerated set (v0.1.1 geometry).** Re-rendered again after the `0.1.1` street change (sidewalk upstand tapered to the building edge, crossing ramps graded to ≤8 %). Re-rendered via `Tools/render_screenshots.sh` after the placement release check. The `demo-north-buildings` camera was re-pointed (it previously sat 9.5 km west and framed 85 % sky); that shot now shows both north buildings, and all maps carry the re-staged shot cameras. **Approved 2026-11-08** (owner review of the regenerated set). | # | File | Preview | Map | View | What it shows | | --- | --- | --- | --- | --- | --- | diff --git a/Screenshots/demo/review-demo-crossing.png b/Screenshots/demo/review-demo-crossing.png index 83b5d55..d697ea0 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:2c18043044ff798bbbefc80e24082e8b9d95a93c4c8e76ff710b49e3600913e9 -size 2812597 +oid sha256:422771e50e7141d66c770ce1595d25fa74a2225beafc0a184c56e90e1e57fcc5 +size 2781122 diff --git a/Screenshots/demo/review-demo-north-buildings.png b/Screenshots/demo/review-demo-north-buildings.png index 28517d4..11b84fa 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:4757cacb2fadfc3a988d51b16d7e819712fabebfa62d7a6eef7592d7f7609f4a -size 2485879 +oid sha256:1468f8e10fddc8cb370b7e60cf129f08561e9d47cf67d82d02d476532c4aa995 +size 2475380 diff --git a/Screenshots/demo/review-demo-spawn-view.png b/Screenshots/demo/review-demo-spawn-view.png index b83b09d..2cc42f1 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:17530d244ca52820f3ca2772cbaccf6a9d9ec0f0262e29afcfcb7aa11677a2cd -size 2576436 +oid sha256:d431042fd44751f2ed823c39377498bbb3367fdd77e83383b530188810d557a2 +size 2558780 diff --git a/Screenshots/demo/review-demo-street-level.png b/Screenshots/demo/review-demo-street-level.png index 639d881..3220cfc 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:5220ddc55be0bf150fa8631c42cac4fac8afa6b80c2324cae09e2ba0ad271fad -size 2377002 +oid sha256:f0115bc4b8ba80dc1c9f2ad8b6a4d6a53eff1a12f570ab6103621cf7faeaa0e6 +size 2446779 diff --git a/Screenshots/review-character.png b/Screenshots/review-character.png index 83e4b4a..02d1bd5 100644 --- a/Screenshots/review-character.png +++ b/Screenshots/review-character.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8bfb503d7dcbe65273a102a5676d7a50fa29b50290a995061b4a7cea26c3433 -size 2527272 +oid sha256:1e8b0baf2bb0551c82fb682c85c069dfcb3b74c01078ece3400f4716e5664ccd +size 2756262 diff --git a/Screenshots/review-ground-contact.png b/Screenshots/review-ground-contact.png index b2de999..1f9d880 100644 --- a/Screenshots/review-ground-contact.png +++ b/Screenshots/review-ground-contact.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a07dd3a9eaf6ebe56ace12984fb887f7d7d52ec22f16e281b4326299e5e5a6e3 -size 1749513 +oid sha256:1f1721248bbb228591599481432e7bcbb799c485bdc8d3a7861e41323908af17 +size 1803653 diff --git a/Screenshots/review-hero-facade-front.png b/Screenshots/review-hero-facade-front.png index 76c8d2b..d5f1278 100644 --- a/Screenshots/review-hero-facade-front.png +++ b/Screenshots/review-hero-facade-front.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72b11e4705b97e46fbce2024d313850af74075024a6b977d9fd0aa3eab475335 -size 1552543 +oid sha256:d68636a3ed721b0e9c93d34cccf99de6cdb9880eaa551794caabe9712197f41c +size 1745589 diff --git a/Screenshots/review-hero-facade-oblique.png b/Screenshots/review-hero-facade-oblique.png index 8f5666f..fea731f 100644 --- a/Screenshots/review-hero-facade-oblique.png +++ b/Screenshots/review-hero-facade-oblique.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c5cee0fcf9a0a719f61e883fd9aa9b3561113d39f87ced3001a6d78ed0c8c68 -size 1294602 +oid sha256:a84db5bf77036f63d4169bfe9fca4fc21291fca7ab6a79077fb8da0333b43509 +size 1402487 diff --git a/Screenshots/review-hero-portals.png b/Screenshots/review-hero-portals.png index 06a6ead..ba4f986 100644 --- a/Screenshots/review-hero-portals.png +++ b/Screenshots/review-hero-portals.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51fd44f11a606b9e91f7a1e47045cab19ea2872de3c85d97da1bfac3b3421a6d -size 1306577 +oid sha256:d20825c305689de62ff8295652834f99029710d3c0b274bc0959a7835330e713 +size 1370767 diff --git a/Screenshots/review-npc-prefab.png b/Screenshots/review-npc-prefab.png index daac4c4..adecf2e 100644 --- a/Screenshots/review-npc-prefab.png +++ b/Screenshots/review-npc-prefab.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3def9c7e57e0334372f80a9b02102332edfac409cffdfeb0cef67f114057586c -size 1728749 +oid sha256:9e9129de770ff22d30d344e6c5f54b74e1c4f6d988bb966414013633d38a9180 +size 1796259 diff --git a/Screenshots/review-overview.png b/Screenshots/review-overview.png index 310f6b9..effde60 100644 --- a/Screenshots/review-overview.png +++ b/Screenshots/review-overview.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4f7ebbf319f5593fcbf0cc015ba08a67bfe6bf7eb861dfc7cef43baf96a2769 -size 2623491 +oid sha256:aab4c3197b202db47d939157e97abe89d328913ed3a302d57460014eeeb9429c +size 2408412 diff --git a/Screenshots/review-player-placement.png b/Screenshots/review-player-placement.png index 9b463ce..204c6bf 100644 --- a/Screenshots/review-player-placement.png +++ b/Screenshots/review-player-placement.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb529716095b22c26a5665d0477831f5a533f5d65865a71c5754f65f9d701679 -size 2021832 +oid sha256:49269cdb99e7603fe578df3203f7552e3a04efc9abcfc57081a4745ad0512903 +size 2209377 diff --git a/Screenshots/review-scale-cubes.png b/Screenshots/review-scale-cubes.png index dfa5d28..0922d89 100644 --- a/Screenshots/review-scale-cubes.png +++ b/Screenshots/review-scale-cubes.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6406ec299555f8d2f7d9b1143492f5e2fb1a78593e1ed8c6ec59f62d66b229db -size 1926000 +oid sha256:6fe2c1001dcc56d29d4ed0aa0664373ebc52f8d1fae21579d965b5d93dc2aa2e +size 2143163 diff --git a/Screenshots/review-shadow-compare.png b/Screenshots/review-shadow-compare.png index b091d19..54e1bf0 100644 --- a/Screenshots/review-shadow-compare.png +++ b/Screenshots/review-shadow-compare.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0df976b505a721e2acd315b80273de823ebd09addb14c0c7aff129ecac8a4f39 -size 1705982 +oid sha256:da4f07c32eb287998716bb19c3a5cfb2b36b61913efa12418944a8a56bc102bb +size 1854856 diff --git a/TODO.md b/TODO.md index 86d08e4..018e1f8 100644 --- a/TODO.md +++ b/TODO.md @@ -13,15 +13,15 @@ Actionable task list for this project. This file is the single, central place fo Suggested blender skills: **collision-proxy** (UCX/UHX naming, convex hulls, simple collider meshes — the core of the authoring pass), **qa-review** (validation checklists, viewport screenshots, ship/no-ship verdicts for the audit), **asset-optimization** (pre-export validation of every collider). Note: these skills assume MCP-driven Blender; use them as method guides for the headless scripts. -### Patch tasks +### Patch tasks - active - 01a1b26b-3c94-707f-9665-2f6b4a79b564 (branch `collision-detail-0.1.1`) -- [ ] **Sidewalk outer edge against terrain.** The pre-check measured a **15.8 cm** step where a walk sample crosses from `Terrain_DEM` onto `Sidewalk_South` (`Art/blender/README.md`, s≈207 m). Mostly hidden by buildings; visible wherever the frontage is missing. Fix by extending the sidewalk mesh to meet the terrain, or by lowering the outer lip. -- [ ] **Crossing ramp gradient.** The kerb-flush transitions measure **10–13 cm over 1.5 m ≈ 10 %**, steeper than the 8 % a real ramp uses (`Geo/tools/street_section.py` output, s≈33, 39, 126 m). Grade the three ramp openings properly. +- [x] **Sidewalk outer edge against terrain.** **Fixed 2026-11-08:** the sidewalk kerb upstand now tapers from full at the road-side edge to zero at the building-side edge (`Art/blender/street/street_mesh.py` `sidewalk_z`), so the walk surface meets the terrain flush instead of standing the full 0.15 m kerb above the DEM. Pre-check after the change: south max step 20.5 → **13.4 cm**, north 15.1 → **7.2 cm** (the remaining 13.4 cm is the crossing-ramp item below). Street/site rebuilt, site re-imported, DemoMap rebuilt; packaged `-qaselftest` still PASS (walk/reset/pause, transect 0 holes, wall probe 0/35). +- [x] **Crossing ramp gradient.** **Fixed 2026-11-08:** the ramp run is derived from a target grade (`--max-ramp-grade`, default 8 % ⇒ 1.63 m) instead of the fixed 1.5 m (8.7 %). Measured at 0.25 m sampling the crossing now steps 3.4 cm at the kerb line. Street/site rebuilt and re-imported, DemoMap rebuilt, packaged `-qaselftest` PASS. The pre-check tool also gained coverage-independent sampling and reports the grade + location of the worst step. - [x] **Collision authoring pass.** Terrain and site meshes use complex-as-simple / `BlockAll` (forced by `UGigLineAssetTools`, verified 2026-11-08 with 84-sample transect). Remaining: simple convex hulls per building (currently using default collision). Record the final settings in `Docs/build.md`. -- [ ] **Kerb height is an assumption.** 0.15 m modelled, 0.13 m as built, and the 3DEP DEM cannot resolve a kerb at all. Check against the photographs and record the final figure. -- [ ] Audit and fix any collision gaps or fall-through geometry found in `0.1.0` in the engine. -- [ ] Regression-test traversal on both sides of the demo. -- [ ] Verify no new packaging defects. +- [x] **Kerb height is an assumption.** **Resolved as a recorded decision 2026-11-08 — final figure 0.15 m modelled / 0.13 m as built.** Rationale: a standard Los Angeles residential/commercial kerb is 6 in ≈ 15 cm (ADA limits the vertical lip to 1/2 in at an accessible crossing, which the flush ramps already provide); the 3DEP DEM (1 m cells, ~10 cm vertical accuracy) cannot resolve a kerb at all; and a photo check was attempted — the vision pre-check on `Art/reference/hollywood/walk-of-fame-terrazzo-ovation-day-cc0-2019-06-20.jpg` could not identify a kerb face at photographic scale/perspective, so no better figure is extractable from the local reference set. The ±2 cm uncertainty is well below the 45 cm `MaxStepHeight` the character uses, so it has no collision consequence. +- [x] Audit and fix any collision gaps or fall-through geometry found in `0.1.0` in the engine. **Audited 2026-11-08 on the rebuilt geometry:** the in-engine sweep (16 rows across both sidewalks, both kerbs and the carriageway, X −20000…−2000) found **0 holes**, and the ground-referenced wall probe found **0/35 blocking hits** — no gaps, no invisible walls, no fall-through. One residual is recorded and accepted: a **13.4 cm surface step at s≈198 m** on the south route (8.0 cm at s≈251 m north), not a gap — it is below the character's 45 cm `MaxStepHeight`, so it does not block traversal; the cause is a sidewalk-strip discontinuity near a centreline vertex, documented in `Art/blender/README.md` and deferred as a smoothness refinement rather than a collision defect. +- [x] Regression-test traversal on both sides of the demo. **Verified 2026-11-08 on the rebuilt geometry:** packaged `-qaselftest` — walk 761 cm in 2 s at Z 456, reset 0 cm, pause/unpause, and the 16-row transect spanning both sidewalks, both kerbs and the carriageway: 1456 samples, 0 holes. Wall probe 0/35. +- [x] Verify no new packaging defects. **Verified 2026-11-08:** packaged Development build (`EXIT=0`) after the street/site rebuild; all 7 site meshes re-imported with their collision flags intact (complex for road/sidewalks/terrain, simple for kerbs), DemoMap staged and saved, plain launch reaches DemoMap, `-qaselftest` all PASS, no missing-asset or linker errors. - [ ] Tag `v0.1.1` and write `CHANGELOG.md` entry; then remove this section. ## 0.1.2 — Scale and façade corrections (patch)