DYNAcity in Unreal Engine
I worked on an Unreal Engine version of DYNAcity that brings Beirut’s building and road geometry into an explorable city world. The project combines a C++ driving plugin, source-based neighbourhood starts, camera controls, and a synthetic traffic preview.
Technologies used
- Unreal Engine
- C++
- Python
- SUMO
Taking the city beyond the browser
The Unreal version of DYNAcity explores the same city through a different interface. A planner or researcher can inspect the model at street level, move between neighbourhood starts, and view a synthetic mobility preview. The objective is an explorable research environment with traceable source geometry.
Building a city world from source geometry
The implementation imports Beirut’s building and road geometry into a World Partition map. Python exporters prepare the geometry and companion source indices, while the Unreal integration manages the city world and inspection controls. Batched geometry reduces the number of individual building and road objects the editor has to manage.
Keeping source identity matters as much as rendering the scene. Imported geometry can be traced back to a source area or road instead of becoming an anonymous collection of meshes. Point-cloud previews remain optional and load on demand.
Driving depends on the collision model
A C++ plugin adds an exploration vehicle, camera states, reset controls, and neighbourhood start points. Movement uses a simple steering model with acceleration, braking, reversal, and bounded substeps. It is an arcade exploration model rather than a calibrated drivetrain or suspension simulation.
One engineering problem was that visually correct roads were not necessarily usable collision surfaces. The project documentation records thin road geometry disappearing from Unreal’s automatic fallback collision. Retaining the full fallback triangles, rebuilding collision, and reloading the saved map allowed the source starts to be checked against wheel support and chassis clearance.
That repair trades additional collision geometry and memory for more faithful road contact. Passing those placement checks does not establish uninterrupted driving across the entire city.
Showing traffic without claiming a physical traffic twin
The optional SUMO connection draws synthetic traffic near the camera or driver. The simulation and player vehicle remain separate: visible traffic does not imply that simulated cars interact with the player’s physics. Facade materials, street finishes, and some environmental details are illustrative.
What still needs validation
The source includes the project descriptor, integration code, driving controls, and documented runtime checks. Current citywide frame-rate performance, long continuous routes, and some post-recovery editor states still need fresh verification. I would measure those explicitly before presenting the environment as a finished driving simulator.
City geometry: Beirut 001 by Salim al-Kadi and team. Source roads: © OpenStreetMap contributors. The screenshots show modelled geometry, not a photographic reconstruction of present-day Beirut.
Source and verification notes
Tags
More University projects
University
AI Workflow DSL
A Python DSL and table-driven LL(1) parser for multi-agent workflows, with generated grammar docs and source-aware syntax errors.
University
AUBus Premium
A PyQt5 carpooling prototype for AUB students, backed by a threaded TCP server, SQLite ride matching, and live driver notifications.
University
Campus Connect API
A Spring Boot API for university club discovery, event management, registrations, role-aware administration, and notifications.
Explore other projects
Web
DYNAcity Web Simulator
A 3D Beirut simulator for exploring street changes, traffic, pedestrian flows, and urban forecasts.
AI
Hint 3D: Interactive Segmentation
Studying how corrective clicks, PointSAM masks, and small test-time updates can improve 3D segmentation.
AI
Hint++: Human-Guided 3D Adaptation
Frozen-teacher evaluation and adaptive safety signals for 3D models whose rare-class failures disappear in aggregate scores.