01 The project

An OSM City Generator where real data drives every decision.

OSM data → Python ingest → Houdini HDA → Unity (C#) · co-authored with Claude Code

A data-driven procedural pipeline: real OpenStreetMap data flows through a Python ingestion layer into a Houdini HDA that generates game-ready geometry, then into Unity through a C# editor import tool. It isn't a random city generator. Road width, building height, and material assignment are all driven by semantic tags from real data, not by noise.

Project
OSM city generator
Real geospatial data to game-ready geometry, semantic-driven
Context
Production-pattern pipeline
Staged fetch, classify, generate, export, import. The HDA is the deliverable.
Stack
Houdini 21 · Unity 2022 LTS
OSMnx + Shapely ingest, FBX/USD export, C# editor tooling, AI facades via Nano Banana Pro
Walkthrough

The generator, running.

The point isn't the city. It's that every road width and building height traces back to a real-world tag, not a random seed.

02 My role

Sole builder across the whole pipeline.

I designed and built every layer: the Python OSM ingestion and rule-based classifier, the Houdini HDA that turns tagged data into geometry, the FBX/USD export, and the Unity C# editor tool that imports it. Co-authored with Claude Code, with the judgment to know when its output was wrong.

03 The problem

The hard part isn't making a city. It's making one driven by real data, not random numbers.

Plenty of tools scatter plausible-looking buildings. The harder problem is fidelity: reading a real place and letting its actual road types, footprints, and building tags decide the geometry. Raw map data isn't geometry. It has to be fetched, normalised, classified, and interpreted before an engine can use any of it.

04 What I did

Built a node-based generative workflow, driven by controls, not code.

Ingest

Read the real world

OSMnx pulls the road graph and building footprints for a real neighbourhood, normalised from WGS84 to local metres and cleaned to JSON.

Classify

Tag, don't guess

A rule-based classifier maps OSM tags to a semantic type: residential, commercial, or industrial. Built as a slot an ML model can drop into later.

Generate

Data drives geometry

The HDA sets road width from road type, extrudes building height from floor/height tags, and groups primitives by building type.

Package

A tool, not a scene

A parameterised HDA with a clean interface, exporting FBX/USD with named material slots and two LOD levels.

05 How it works

A staged pipeline, from Overpass API to Unity import.

Five stages, each with a single clean handoff: Python fetches and classifies the data, the Houdini HDA turns it into geometry, an FBX/USD export carries named material slots, and a Unity C# editor tool imports it in one click. Everything is pre-baked offline, not generated at runtime.

The data pipeline
01 · Data
OSM / Overpass
Fetch the road network and building footprints for a real area.
02 · Ingest
Python (OSMnx)
Normalise coordinates, clean to structured JSON.
03 · Core
Classifier
Rule-based tag to type: residential, commercial, industrial.
04 · Author
Houdini HDA
Roads, footprint extrusion, material slots, all driven by tags.
05 · Export
FBX / USD
Two LOD passes; named material slots survive the round-trip.
06 · AI
Nano Banana Pro
Generate per-building facade photos: baked windows, weathering, trim.
07 · Engine
Unity (C#)
Editor tool assigns the facades by slot name, builds LOD Groups.

Every stage has a single, testable handoff. The classifier is the thesis: real-world tags decide the geometry, instead of random numbers.

The Houdini network behind the city generator
The Houdini HDA: a JSON reader feeds the road-network and building-footprint SOPs, with primitive groups named by semantic type, packaged into one reusable .hda.
06 The result

Real data in, game-ready city out.

3
Semantic types classified from real tags: residential, commercial, industrial
2
LOD levels exported: full detail and reduced poly
1
Click to import into Unity: materials plus LOD Groups
~500m
Real neighbourhood block generated end to end

These describe what the pipeline does, not a benchmark.

The same HDA-as-a-product discipline I shipped 20+ times at DNEG, where real artists, editors, and compositors drove the tools in production.

Shipped with CI/CD, QA, and docs across art, engineering, and TD · qualitative adoption, not a headline figure