Portfolio · Unreal Engine 5.8 · 2026
A procedural pipeline that turns a written design brief into a playable 8 × 8 km Nordic post-apocalyptic region in Unreal Engine, and a test facility where every gameplay system of the game can be tried in its own room.
What I did
I set the vision for the game (Fallout-style exploration and towns, Kenshi-style NPC life, people and vehicles on the roads) and designed the world it plays in: the regions, the towns and their roles, the road hierarchy, the catastrophe story and the look I was after.
The code was written by AI coding assistants working from my briefs, in many short iterations. My job was to decide what to build, judge every rendered result against the target, play it, reject what looked fake and set the rules the pipeline must follow, for example that country roads have no kerbs and every road ends on a road of the same or a higher class.
Every number on this page was measured in the engine. Where something is not done yet, it says so under Status.
Case study 1
The world starts as a JSON spec: coast, mountains, rivers, towns with their roles, the road network and a bomb crater with its damage field. A Python generator turns it into terrain and plans; Unreal builds the level from those files without anyone placing a single actor by hand.
Regions with threat and loot tiers, settlements, road classes, the catastrophe. Versioned with a changelog.
Python and NumPy: terrain, erosion, rivers and lakes, a least-cost road graph, town and village plans, dressing rules. About 8 minutes.
Roads, bridges, building pads, kit parts and water as plain data files, with QA lints for grades, slopes and overlaps.
Headless Unreal steps: a C++ landscape importer, water, vegetation, houses, AAA-kit towns, roads, dressing, bridges, navmesh.
Rendered shots driven from Python over the editor's MCP server, audit scripts, then play in the editor.










Case study 1, continued
The full region is too heavy to play-test. A crop tool cuts a 2.5 km square around Kvarnvik and the farming village Fjällby out of the same data, keeps every world coordinate, and the same build steps produce a level you can play.

| Measurement | Result | How it was measured |
|---|---|---|
| Level size | 143 MB | against 640 MB for the full region |
| Rebuild time | ~4 min | every step headless, from data to a saved level |
| Frame time | 11.4 ms median | about 88 fps at 1920 × 1080, Lumen on, RTX 4080 SUPER; render thread is the limit at about 3 000 draw calls |
| Map load | 10.6 s | standalone game, CSV profile over 2 400 frames |
| Memory added by the map | ~2.5 GB | against the same run on the small default level |
| Navmesh build | 22 s | 2.5 × 2.5 km, saved with the level |
Debugging story
The first navmesh looked complete, yet paths from the town square to half of the villages stopped after a few hundred metres. A flood fill over 50 m cells showed a clean diagonal cut through open countryside. Ruling things out one group at a time found the cause: the river surfaces split the navmesh into islands even with their collision off. With water excluded from navigation and real bridges placed on every crossing, all eleven villages connect.
Case study 2
A hub hall with a booth and a teleport pad for each room, so every system of the game can be tried on its own in a minute. The whole level is built by one script, rooms are probed automatically in play, and my own play-tests drove a rebuild of half the rooms.









Under the hood
Status, October 2026