fix(street): taper sidewalk upstand to flush at the building edge
The sidewalk stood the full 0.15 m kerb height above the DEM at *both* edges, so the outer (building-side) lip was a 15.8 cm ledge where the walk route crossed from Terrain_DEM onto Sidewalk_South. sidewalk_z now tapers the upstand from full at the road-side edge to zero at the building-side edge (a ~3-4 % ramp, walkable and visually negligible). Pre-check: south max step 20.5 -> 13.4 cm, north 15.1 -> 7.2 cm (the residual 13.4 cm is the crossing-ramp gradient, tracked separately). Street and site rebuilt, site re-imported (7/7 meshes, collision flags intact), DemoMap rebuilt; packaged -qaselftest still PASS. README step table updated.
This commit is contained in:
1 parent
115612e7e8
commit
eab89bae47
21 files changed
+61
-36
No files matched your search
+11
-5
@@ -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,13 +108,16 @@ 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.47 … +3.06 | 13.4 cm |
|
||||
| North sidewalk | 279 | 0 | +0.07 … +3.76 | 7.2 cm |
|
||||
| Crossing at 130 m | 26 | 0 | +1.14 … +1.80 | 9.0 cm |
|
||||
|
||||
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.
|
||||
- ~~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. The remaining 13.4 cm max step on the south route is the
|
||||
crossing-ramp gradient below, not the outer edge.
|
||||
- **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.
|
||||
|
||||
This is a pre-check, not the `0.1.0` release check: the release check is traversal in the engine.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -218,13 +218,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)
|
||||
|
||||
Reference in new issue
Block a user