docs(site): the road fans past the sidewalk where the centreline curves

Found the mechanism behind the 2 m disagreement. street_mesh.py builds the road across -10.5..+10.5 m
and the north sidewalk +10.5..+15.8 m, so along the straight the two bands meet exactly at the gutter.
The strips are generated along a curved centreline, and the fan-out at the bend pushes the road's outer
edge to -13.8 m while the sidewalk occupies -17.3..-11.8 m - a 2 m overlap where the road surface is
366 cm and the sidewalk 158 cm.

That is the surface a downward trace at the player's Y kept finding, and the reason the scene read as
the road hovering above the pavement.

The fix is a clamp in strip() so a row's outer offset cannot pass the nominal gutter, or trimming the
road's ends - one function, then re-export, re-import and the 14 s probe confirms it. Recorded in
MEMORY.md and TODO.md. The demo reads correctly meanwhile because both objects stand on the sidewalk.
This commit is contained in:
zwitschi committed 2026-11-09 19:10:34 +01:00
1 parent 4f9e92d975
commit 4132dc77e3
2 files changed
+11 -2

No files matched your search

+7
View File
@@ -573,3 +573,10 @@ Sidewalk_North verts at y = +11.9..+12.0, z = 1.51..1.59 m
So the road is the south band at ~0.9 m and the north sidewalk is at ~1.55 m, exactly a kerb above it. **The source geometry is correct and consistent.**
In the engine at the player's position (UE Y -1150 cm, i.e. the north sidewalk band) the trace reports `Road_Hollywood` at **366 cm** - the road is neither in that Y band nor at that height in the source. So the mismatch is introduced on the way in: either the FBX export's Y mirror documented in `export_site_fbx.py`, or the importer's transform. Until that is settled, no screenshot reflects the source, and a visual signoff would be approving a defect.
## 2026-11-09 — Why the road appears 2 m above the sidewalk at the same XY
- `street_mesh.py` builds the road across **SOUTH_GUTTER -10.5 .. NORTH_GUTTER +10.5 m** and the north sidewalk **+10.5 .. +15.8 m**, so on the straight the two bands meet exactly at the gutter.
- 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.