Portfolio · Unreal Engine 5.8 · 2026

Sundmark World Builder

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.

Sundmark, a fictional Swedish region8 000 × 8 000 m2017² heightmap · 3.97 m cellsspec v0.118

What I did

Design, direction and review

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.

  • World design documents: regions, towns, catastrophe, quality review
  • Rules for terrain, water, roads and bridges the generator checks
  • Review of every build from rendered shots and play
  • Planning: a demo-map plan that puts gameplay first

Case study 1

From a design brief to a playable region

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.

  1. Write the spec

    Regions with threat and loot tiers, settlements, road classes, the catastrophe. Versioned with a changelog.

  2. Generate

    Python and NumPy: terrain, erosion, rivers and lakes, a least-cost road graph, town and village plans, dressing rules. About 8 minutes.

  3. Package

    Roads, bridges, building pads, kit parts and water as plain data files, with QA lints for grades, slopes and overlaps.

  4. Build the level

    Headless Unreal steps: a C++ landscape importer, water, vegetation, houses, AAA-kit towns, roads, dressing, bridges, navmesh.

  5. Review

    Rendered shots driven from Python over the editor's MCP server, audit scripts, then play in the editor.

Design map of Sundmark with towns, roads, rivers, the coast and the exclusion zone
Plate ADesign map: towns, the road graph, rivers, coast and the exclusion zone.
Region map coloured by threat level
Plate BSixteen regions, coloured by threat (1 to 10), each with its own loot tier and factions.
Terrain analysis with slopes over the limit in red
Plate CTerrain analysis: slopes over the walkable limit in red, water in blue.
Shaded preview of the generated terrain with towns
Plate DShaded preview straight from the generator, before Unreal is opened.
531 598trees, bushes and rocks placed as instances
733 505modular building-kit parts in the towns
1.58 Mstreet and yard dressing items
833Swedish wooden houses fitted to their pads
~28 klines of Python and C++ in the pipeline
Rooftops of Kvarnvik with mountains in the distance
KvarnvikThe market town, built from licensed city kits along street plans the generator lays out per block.
Walled monastery with a gothic church, cloister and orchard
MonasteryA gothic church inside castle walls, with a gatehouse, cloister, bell tower and orchard, laid out by one script from the lot it is given.
Cemetery park with a domed chapel, lanterns and a gravel avenue
BackparkenThe cemetery park: chapel, avenue, round place with statues, quarters of graves and walls along the brook.
Farms and fields beside a river
BjörkbackaFarms on their own pads, fields with stone walls, a river with its banks kept dry.
A street in Kvarnvik at street level
Street levelKerbs, pavements and street lamps only inside town.
Contour map of a mountain road
QA plotA mountain road checked against truck grades on a 2 m contour plot.

Case study 1, continued

Cutting a playable demo out of the region

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.

Aerial view of the 2.5 km demo square with the town, farms and a mountain
L_SundmarkDemoThe demo square from 900 m. The edge reads as a coast, so the level ends at the sea instead of a wall.
MeasurementResultHow it was measured
Level size143 MBagainst 640 MB for the full region
Rebuild time~4 minevery step headless, from data to a saved level
Frame time11.4 ms medianabout 88 fps at 1920 × 1080, Lumen on, RTX 4080 SUPER; render thread is the limit at about 3 000 draw calls
Map load10.6 sstandalone game, CSV profile over 2 400 frames
Memory added by the map~2.5 GBagainst the same run on the small default level
Navmesh build22 s2.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.

Before1 762 of 2 500 cells reachable from the town square.
After2 446 of 2 500 cells. The rest are closed courtyards inside town blocks.
reached from the town squarenavmesh, but cut offstart: Torget

Case study 2

The test facility

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.

The hub hall with coloured booths and the in-game HUD
HubIn-game view with the HUD: compass, health, food and water. Each booth explains its room and a pad teleports you there.
1.1
Armory & LootEvery pickup, seven containers, physics crates to carry.
1.2
LocksFive lockpicking tiers; electronic doors opened from their terminals.
1.3
HackingSignal lock: tune frequency, amplitude and phase to the broadcast.
1.4
Pipe WorksGas and fire block three gates; each valve sends a surge.
1.5
Power RestoreFind three fuses and bring a dead vault door back.
1.6
Dark RoomStealth with a light meter, shoot out lamps, silent takedowns.
1.7
Shooting RangeDummies, steel plates and barrels at 10, 25 and 50 m.
1.8
Melee RingJabs, power punches, weapon bashes and the knife.
1.9
MovementRamps from 10° to 50°, steps up to 90 cm, gaps, tunnels.
1.10
WorkshopBuild mode in your own settlement; settlers use what you place.
1.11
LaddersPlatforms reached only by ladder; the NPC climbs them too.
Signal lock hacking minigame on a terminal screen
1.3The signal-lock hack, built in C++ inside the terminal screen.
Fire and gas venting from pipes in front of a gate
1.4Pipe hazards pulse and hurt until their valve is shut.
The dark room in red light
1.6Dark room: three chambers, an S-curve, raiders on guard.
Shooting range lanes with targets
1.7Shooting range with lanes at 10, 25 and 50 m.
Workshop room with a settler NPC
1.10Workshop: a settler uses the furniture the player builds.
Movement course with ramps and stairs
1.9Movement course for testing the character controller.
Melee ring with training dummies
1.8Melee ring.
Ladder room with a ladder to a platform
1.11Ladders, used by the player and by NPCs.

Under the hood

Tools and techniques

World pipeline

  • Python, NumPy, SciPy and OpenCV for terrain, hydrology, road graphs and town plans
  • A C++ editor library for landscape import, instancing and spline meshes
  • Headless Unreal commandlets chained by a build script, each step checked by its report
  • Rendered review and editor control over Unreal's MCP server
  • Navmesh probes: flood fill, navmesh raycasts and path checks from Python

Gameplay in the test facility

  • C++ systems: teleport pads, pipe hazards and valves, fuse box, terminals and linked doors, lockpicking and signal-lock screens, puzzles
  • A 942-line Python builder for the whole level
  • Automated in-game probes per room and Unreal automation tests for locks and hacking
  • NPCs that climb ladders, use furniture and react to light

Status, October 2026

Where it stands

Working

  • The full region and the demo level build from data, end to end
  • The demo level loads, plays in the editor and has a connected navmesh
  • All eleven test rooms, probed in play

Next

  • Roads as game road actors, so patrols, traders and vehicles travel between towns
  • Enterable buildings, starting with the monastery church
  • Neutral Nordic daylight and conifer forests; the current light is too golden
  • A long play-through of the demo at player height