Dev bLog: Real Streets

Spent the day doing something I didn't expect to be doing when I woke up this morning. Real San Francisco elevation data is now running inside the engine.

Not a reference image. Not eyeballed geometry. Actual USGS lidar data of Russian Hill imported as a landscape into UE5. The street grid is literally imprinted in the terrain. You can see the blocks, the intersections, the hill cresting exactly where it crests in real life. Taylor Street is in there. The descent is in there.

The day started with Phase 0, reconnaissance. Installed the Cesium for Unreal plugin through the Fab marketplace, connected it to Cesium ion, and streamed Google Photorealistic 3D Tiles directly into an empty UE5 level. Set the georeference origin to Russian Hill, dropped the car in, and drove the actual streets of San Francisco in the engine for the first time. Filbert Street eastbound with Coit Tower dead ahead. Columbus Avenue widening out toward North Beach. The hard left at Chestnut. And then Taylor Street southbound from Vallejo, descending across Green and Union toward Filbert.

Driving those streets with the actual tuned car confirmed everything the level design documents predicted and revised a few things they got wrong. The Taylor descent is absolutely the hero corridor. The sightline from Vallejo looking south down the hill with the Bay in the distance is exactly the shot. The Columbus and Chestnut trigger intersection is tighter than expected, which is actually better for gameplay. The spillout streets at the end were flat and uninteresting, which means that section gets redesigned rather than copied from reality.

That reconnaissance phase was not ceremony. It answered real questions before a single piece of geometry was built.

After recon the work shifted to Phase 1, getting real elevation data into the engine properly. Installed QGIS and GDAL on Windows. Went to the USGS National Map Downloader and pulled four 1-meter resolution bare earth GeoTIFF tiles covering the Taylor Street corridor. Used the OSGeo4W Shell to merge all four tiles into a single file, ran gdalinfo to extract the precise elevation statistics, minimum -13.846 meters, maximum 115.039 meters, total vertical range of approximately 129 meters. Used gdal_translate to crop to the Taylor Street bounding box using exact UTM coordinates derived from the known latitude and longitude of Taylor and Vallejo, converted the result to a 16-bit grayscale PNG, then resampled to 1009 by 1009 pixels to match UE5's required landscape dimensions.

Calculated the Scale Z value using the correct formula. Max minus min divided by 512, multiplied by 100. That came out to 25.17. That number tells UE5 exactly how tall the terrain should be in real-world meters.

Imported the heightmap into UE5 Landscape mode with Scale X and Scale Y both at 100 and Scale Z at 25.17. The landscape appeared immediately. Switched to Lit mode, added a light, and Russian Hill was sitting there in the viewport. The street grid imprinted in the terrain from the lidar data. The hill peak clearly visible. The slope dramatic and real.

Dropped the car on the hill and drove it. Raw lidar is bumpy because every building footprint and curb is captured at one meter resolution with no road smoothing yet. But the grade is there and the car responds to it. You can feel Russian Hill under the wheels before a single road asset has been placed.

The reason all of this matters is simple. The Bullitt chase is famous because of those hills. The jumps at Green and Union, the way the car goes light at every crest on Taylor, the hard left at the bottom where the hubcap comes off. You cannot fake that with invented geometry. The grade has to be real or the physics don't deliver what the film promised.

Next step is laying road splines directly onto this terrain and using UE5 landscape deformation to carve the streets into the hill. That is when it starts looking like a game instead of a terrain editor experiment.

Next
Next

Dev bLog  Dynamic Stunt Camera System