fix(site): slice the road too - the 2 m lid was a convex hull, not geometry

The road was never mis-modelled: a 279 m strip imports with ONE auto-generated convex hull, and a
convex hull's top is the strip's maximum height. A downward trace therefore landed at 366 cm - a flat
lid about 2 m above the visible road, which sits at roughly 152 cm there. That single fact explains
every failed sidewalk fix, the 'road above its own sidewalk' reading, and why the player always ended
up on Road_Hollywood.

Slicing the road the way the sidewalks already were fixes it, and the cross-section is now continuous:

  Terrain_DEM       154
  Sidewalk_North_07 158
  Road_Hollywood_07 158   (was 366)

Two changes had to land together: the road exported in slices, and the map stopped staging the single
Road_Hollywood asset - which still sat on top of the slices and won every trace until removed.

All 23 captures regenerated; the player and the car both stand on a continuous ground plane.
This commit is contained in:
zwitschi committed 2026-11-09 19:15:10 +01:00
1 parent 4132dc77e3
commit 1b4b46e957
131 files changed
+224 -160

No files matched your search

+14
View File
@@ -580,3 +580,17 @@ In the engine at the player's position (UE Y -1150 cm, i.e. the north sidewalk b
- The strips are generated along a **curved** centreline (`strip()` places vertices along each row's normal). Where the centreline bends, the fan-out pushes the road's outer edge past its nominal band: the imported road's Y spans **-13.8 .. +10.5 m** while the sidewalk occupies **-17.3 .. -11.8 m**, so they overlap by about 2 m near the west end.
- In that overlap the road surface is at **366 cm** and the sidewalk at **158 cm** - which is why a trace at the player's Y kept finding the road, and why the scene read as the road floating above the pavement.
- **Fix belongs in the strip builder:** clamp each row's outer offsets to the nominal gutter so the road cannot fan past the sidewalk, or shorten the road strip at the ends. Both are one-function changes in `strip()` / `main()`; the demo currently reads correctly because the player and car stand on the sidewalk.
## 2026-11-09 — The 2 m lid was a convex hull, not geometry
- **A 279 m road strip imports with ONE auto-generated convex hull**, and a convex hull's top is the strip's **maximum** height. A downward trace anywhere on the road therefore landed on that hull at **366 cm** - a flat lid ~2 m above the visible surface, which is at about 152 cm there. The road's vertices were never wrong.
- **Slicing the road fixed it** exactly as it had for the sidewalks: after adding `Road_Hollywood` to `SEGMENTED`, the cross-section is continuous -
```
Terrain_DEM 154
Sidewalk_North_07 158
Road_Hollywood_07 158 (was 366)
```
- **Two things had to change together:** the road had to be exported in slices, _and_ the map had to stop staging the single `Road_Hollywood` asset, which still sat on top of the slices and won every trace.
- General lesson: a long walkable mesh needs slicing in the source, because Unreal's simple collision is a convex hull of the whole mesh - the per-slice hull is the only way its collision follows its surface.