Flyover Ghent

Open-source 3D art built on real city data. All three projects use the "Gent in 3D" dataset from data.stad.gent to render the city of Ghent. Two run in the browser using Three.js, one outputs a slicer-ready STL ready for 3D printing.

As presented at BYOB 2025

Projects

Fly Over Gent

Free-flight through all of Ghent using official municipal 3D data. Explore 150+ tiles of the city with WASD controls.

Zoomed-out view of Ghent in Fly Over Gent
WASD free-flight controls
Dynamic tile loading 150+ city tiles
Python pipeline DWG→DXF→STL preprocessing
3-tier tile caching Service Worker → memory → scene
Direction-aware loading only fetches tiles the camera faces
Live minimap color-coded tile readiness

Built with Three.js. Python preprocessing with ODA File Converter, ezdxf, and trimesh. Lambert-72 coordinates.

Drones Over Ghent

Autonomous drone flocking over a 3D model of Ghent. Drones use boid algorithms to exhibit natural swarming behavior above the city skyline.

Drones flocking above the city of Ghent
Boid flocking with autonomous agents
4 camera modes follow, chase, orbit, free-flight
Real-time GUI controls for tweaking parameters

Built with Three.js and vanilla JavaScript.

Print Ghent

Pick an area on the map, get a printable slab of the city. Free, no signup, runs entirely in your browser. Uses the same tiles as Fly Over Gent so the whole Ghent dataset is available to crop from.

3D printed slab of the Korenmarkt area in Ghent
Map selection Shift-drag for square, Alt for freeform
Watertight slab plane-clipped terrain + 4 walls + flat bottom
Drop edge buildings optional clean cut along the bbox
Configurable base set slab thickness in meters
Pure browser pipeline no backend, STLExporter output

Built with Three.js, Leaflet, and proj4. Tiles served from the same GCS bucket as Fly Over Gent.

Data & Pipeline

The Data

The city of Ghent publishes its full 3D model as open data through the "Gent in 3D" dataset. It covers the entire city in 1km² tiles using the Lambert-72 coordinate system — buildings as LOD2 geometry (rooftops modeled from LiDAR, walls extruded from cadastral contours) and terrain from ground-point elevation data.

Stad Gent Open Data
Processing Pipeline

The entire pipeline is automated with python run_all.py --download — it downloads all 150+ tiles from the Gent open data API, extracts the DWG files, and batch converts them to STL in parallel.

.ZIP downloaded from data.stad.gent API
download_gent_data.py
.DWG LiDAR scan data
ODA File Converter (cached)
.DXF vector geometry
ezdxf — parse 3DFACE entities
.STL triangle meshes (parallel)
trimesh — mesh export
Three.js rendered in browser
Overzichtskaart kilometer-vakken

Map Caching

Direction-Aware Tile Caching

Caching to speed up loading times, takes into account camera direction and position. Tiles persist between sessions so revisited areas load instantly.

Tile States
Available — exists in dataset, never fetched
SW Cached — stored in browser cache
In Memory — geometry parsed, ready to re-add
Loading — fetch in-flight
Visible — rendered in scene
Minimap showing tile cache states