Nantaizi Lake Blender scene
This generator combines the source OSM building, water and height tags with the detailed osm2streets GeoJSON road layers.
Outputs
../outputs/nantaizi-lake-innovation-valley/nantaizi_lake_innovation_valley.blend../outputs/nantaizi-lake-innovation-valley/nantaizi_lake_innovation_valley.png../outputs/nantaizi-lake-innovation-valley/nantaizi_lake_innovation_valley_cesium.glb../outputs/nantaizi-lake-innovation-valley/nantaizi_lake_innovation_valley_cesium.json../outputs/nantaizi-lake-innovation-valley/nantaizi_cesium_preview.html
Regenerate
/Applications/Blender.app/Contents/MacOS/Blender \
--background \
--factory-startup \
--python blender/generate_nantaizi.py -- \
--osm "/Users/que01/Desktop/南台子湖创新谷OSM.osm" \
--geojson "/Users/que01/osm2streets-qgis-workflow/outputs/nantaizi-lake-innovation-valley/osm2streets_web_out" \
--output "/Users/que01/osm2streets-qgis-workflow/outputs/nantaizi-lake-innovation-valley/nantaizi_lake_innovation_valley.blend" \
--render "/Users/que01/osm2streets-qgis-workflow/outputs/nantaizi-lake-innovation-valley/nantaizi_lake_innovation_valley.png"
The OSM file contains distant subway relation members. The generator uses the
explicit OSM bounds element to keep the scene limited to the park.
Vegetation is read from the OSM export: natural=tree nodes become individual
trees, natural=tree_row ways become evenly spaced rows using their height,
landuse=grass becomes green ground, and natural=scrub becomes low shrub
volumes. amenity=fountain nodes become low-poly fountain basins and water
sprays. No trees or fountains are inferred from open ground.
The renderer adds procedural presentation detail without changing OSM massing:
rounded layered crowns and tapered trunks for trees, window bands and roof
equipment for office buildings, and clerestory windows, skylights and roof
equipment for building=industrial footprints.
Ordinary building=yes footprints below 30 meters are rendered as three-floor
park offices at 11.4 meters plus a small roof unit. Explicit high-rises and all
building=industrial heights remain sourced from OSM. White plaster, gray
corrugated iron, grass and bark use 1K CC0 textures downloaded from Poly Haven.
The images used by the scene are packed into the generated .blend; source and
license details are recorded in assets/textures/polyhaven/SOURCES.md.
OSM ways 117753521 and 117753535 are explicitly rendered as three-floor
white offices because the surveyed site use differs from their current
building=industrial tags.
Export for Cesium
/Applications/Blender.app/Contents/MacOS/Blender \
--background \
--python blender/export_cesium.py
The GLB uses a local east-north-up meter frame centered on the OSM bounds. Its companion JSON records the WGS84 anchor used by the preview page. The export script applies mesh modifiers, creates UVs, converts Blender-only materials to glTF-compatible PBR materials, and embeds the used texture images in the GLB. For the Cesium preview, use this script rather than Blender's manual glTF export: it preserves the local ENU placement metadata and bakes/overrides the building display materials so the web preview stays close to Blender's clean material-preview look.
You can export directly from Blender for a quick material sanity check, but the
manual GLB will not create/update nantaizi_lake_innovation_valley_cesium.json
and therefore will not be positioned automatically by
nantaizi_cesium_preview.html.
Serve the output directory over HTTP before opening the preview because web
browsers do not allow the page to fetch GLB/JSON files from file://:
cd outputs/nantaizi-lake-innovation-valley
python3 -m http.server 8765
Then open http://localhost:8765/nantaizi_cesium_preview.html.
Blender MCP
The current machine has the blosm add-on but no Blender MCP add-on or Codex
MCP server configuration. An MCP workflow requires both sides and a Codex
restart after adding the server. The generator remains useful with MCP because
it creates a stable base scene that can then be edited interactively.