fix(street): 0.1.1 collision patch — flush sidewalk edge, graded crossing ramps (#21)

Merged PR #21: 0.1.1 collision patch (flush sidewalk edge, graded ramps)

Co-authored-by: Zwitschi <zwitschi82@gmail.com>
This commit was merged in pull request #21.
This commit is contained in:
zwitschi authored and zwitschi committed 2026-11-08 16:19:11 +01:00
1 parent 0dd4a55c87
commit e75e5500a7
38 files changed
+162 -83

No files matched your search

+25 -6
View File
@@ -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.