Portfolio · Unreal Engine 5.8 · 2026

Sundmark World Builder

En procedurell pipeline som gör om en skriven designbrief till en spelbar nordisk postapokalyptisk region på 8 × 8 km i Unreal Engine, och en testanläggning där varje gameplaysystem i spelet kan provas i ett eget rum.

Sundmark, ett fiktivt svenskt landskap8 000 × 8 000 mhöjdkarta 2017² · celler på 3,97 mspec v0.118

Vad jag gjorde

Design, regi och granskning

Jag satte visionen för spelet (utforskande och städer i Fallout-stil, NPC-liv i Kenshi-stil, människor och fordon på vägarna) och designade världen det utspelar sig i: regionerna, städerna och deras roller, väghierarkin, berättelsen om katastrofen och utseendet jag var ute efter.

Koden skrevs av AI-kodassistenter utifrån mina briefar, i många korta iterationer. Mitt jobb var att bestämma vad som skulle byggas, bedöma varje renderat resultat mot målet, spela det, underkänna det som såg falskt ut och sätta reglerna som pipelinen måste följa, till exempel att landsvägar saknar kantsten och att varje väg slutar i en väg av samma eller högre klass.

Varje siffra på den här sidan är uppmätt i motorn. Där något inte är klart än står det under Status.

  • Designdokument för världen: regioner, städer, katastrof, kvalitetsgranskning
  • Regler för terräng, vatten, vägar och broar som generatorn kontrollerar
  • Granskning av varje bygge genom renderade bilder och spel
  • Planering: en plan för demokartan som sätter gameplay först

Fallstudie 1

Från designbrief till spelbar region

Världen börjar som en JSON-spec: kust, berg, floder, städer med sina roller, vägnätet och en bombkrater med sitt skadeområde. En generator i Python gör om den till terräng och planer; Unreal bygger nivån från de filerna utan att någon placerar en enda aktör för hand.

  1. Skriv specen

    Regioner med hot- och lootnivåer, bosättningar, vägklasser, katastrofen. Versionshanterad med ändringslogg.

  2. Generera

    Python och NumPy: terräng, erosion, floder och sjöar, en vägraf efter lägsta kostnad, planer för städer och byar, regler för dekor. Ungefär 8 minuter.

  3. Paketera

    Vägar, broar, husplattor, byggsatsdelar och vatten som enkla datafiler, med QA-kontroller av väglutning, terränglutning och överlapp.

  4. Bygg nivån

    Headless-steg i Unreal: en landskapsimportör i C++, vatten, vegetation, hus, städer av AAA-byggsatser, vägar, dekor, broar, navmesh.

  5. Granska

    Renderade bilder styrda från Python via editorns MCP-server, granskningsskript, sedan spel i editorn.

Designkarta över Sundmark med städer, vägar, floder, kusten och avspärrningszonen
Plansch ADesignkarta: städer, vägrafen, floder, kust och avspärrningszonen.
Regionkarta färgad efter hotnivå
Plansch BSexton regioner, färgade efter hotnivå (1 till 10), var och en med egen lootnivå och egna fraktioner.
Terränganalys med för branta sluttningar i rött
Plansch CTerränganalys: sluttningar brantare än gränsen för att gå i rött, vatten i blått.
Skuggad förhandsvisning av den genererade terrängen med städer
Plansch DSkuggad förhandsvisning direkt från generatorn, innan Unreal öppnas.
531 598träd, buskar och stenar placerade som instanser
733 505delar ur modulära byggsatser i städerna
1,58 milj.dekorföremål på gator och gårdar
833svenska trähus anpassade till sina plattor
~28 000rader Python och C++ i pipelinen
Kvarnviks hustak med berg i fjärran
KvarnvikMarknadsstaden, byggd av licensierade stadsbyggsatser längs gatuplaner som generatorn lägger ut kvarter för kvarter.
Kloster inom murar med gotisk kyrka, korsgång och fruktträdgård
KlostretEn gotisk kyrka inom borgmurar, med porthus, korsgång, klocktorn och fruktträdgård, utlagd av ett enda skript utifrån tomten den får.
Kyrkogårdspark med kupolkapell, lyktor och en grusallé
BackparkenKyrkogårdsparken: kapell, allé, en rundel med statyer, gravkvarter och murar längs bäcken.
Gårdar och åkrar vid en flod
BjörkbackaGårdar på egna plattor, åkrar med stenmurar och en flod vars stränder hålls torra.
En gata i Kvarnvik i gatuhöjd
GatunivåKantsten, trottoarer och gatlyktor bara inne i stan.
Höjdkurvkarta över en bergsväg
QA-plotEn bergsväg kontrollerad mot lutningskraven för lastbilar på en karta med 2 m ekvidistans.

Fallstudie 1, fortsättning

Ett spelbart demo skuret ur regionen

Hela regionen är för tung att speltesta. Ett beskärningsverktyg skär ut en kvadrat på 2,5 km runt Kvarnvik och jordbruksbyn Fjällby ur samma data och behåller alla världskoordinater, och samma byggsteg ger en nivå som går att spela.

Flygbild över demokvadraten på 2,5 km med staden, gårdar och ett berg
L_SundmarkDemoDemokvadraten från 900 m höjd. Kanten ser ut som en kust, så nivån slutar vid havet i stället för vid en vägg.
MätningResultatHur det mättes
Nivåstorlek143 MBmot 640 MB för hela regionen
Byggtid~4 minalla steg headless, från data till sparad nivå
Bildtid11,4 ms medianungefär 88 fps i 1920 × 1080, Lumen på, RTX 4080 SUPER; renderingstråden sätter gränsen vid ungefär 3 000 draw calls
Laddning av kartan10,6 sfristående spel, CSV-profil över 2 400 bildrutor
Minne som kartan lägger till~2,5 GBjämfört med samma körning på den lilla standardnivån
Bygge av navmesh22 s2,5 × 2,5 km, sparad med nivån

Felsökning

Den första navmeshen såg komplett ut, men rutterna från torget till hälften av byarna tog slut efter några hundra meter. En flood fill över celler på 50 m visade ett rent diagonalt snitt genom öppen landsbygd. Genom att utesluta en grupp i taget hittades orsaken: flodernas ytor delade navmeshen i öar, även med kollisionen avstängd. När vattnet undantogs från navigeringen och riktiga broar placerades vid varje korsning hängde alla elva byar ihop.

Före1 762 av 2 500 celler nås från torget.
Efter2 446 av 2 500 celler. Resten är slutna innergårdar i stadskvarteren.
nås från torgetnavmesh, men avskuretstart: Torget

Fallstudie 2

Testanläggningen

En central hall med en monter och en teleportplatta för varje rum, så att varje system i spelet kan provas för sig på en minut. Hela nivån byggs av ett enda skript, rummen kontrolleras automatiskt i spel, och mina egna speltester ledde till att hälften av rummen byggdes om.

Den centrala hallen med färgade montrar och spelets HUD
HallenVy i spelet med HUD: kompass, hälsa, mat och vatten. Varje monter förklarar sitt rum och en platta teleporterar dig dit.
1.1
Vapenförråd och lootAlla föremål att plocka upp, sju behållare, fysiklådor att bära.
1.2
LåsFem nivåer av dyrkning; elektroniska dörrar som öppnas från sina terminaler.
1.3
HackningSignallås: ställ in frekvens, amplitud och fas mot sändningen.
1.4
RörverketGas och eld blockerar tre grindar; varje ventil skickar en tryckstöt.
1.5
Strömmen tillbakaHitta tre säkringar och få liv i en död valvdörr.
1.6
Mörka rummetSmygande med ljusmätare, lampor att skjuta sönder, tysta nedtagningar.
1.7
SkjutbananDockor, stålplåtar och tunnor på 10, 25 och 50 m.
1.8
NärstridsringenJabbar, kraftslag, slag med vapnet och kniven.
1.9
RörelseRamper från 10° till 50°, trappsteg upp till 90 cm, glapp och tunnlar.
1.10
VerkstadenByggläge i din egen bosättning; nybyggarna använder det du placerar.
1.11
StegarPlattformar som bara nås via stege; NPC:n klättrar också.
Minispel för att hacka ett signallås på en terminalskärm
1.3Signallåshacket, byggt i C++ inne i terminalskärmen.
Eld och gas som strömmar ur rör framför en grind
1.4Rören pulserar och skadar tills ventilen stängs.
Mörka rummet i rött ljus
1.6Mörka rummet: tre kammare, en S-kurva och plundrare på vakt.
Skjutbanans banor med mål
1.7Skjutbana med banor på 10, 25 och 50 m.
Verkstadsrummet med en nybyggare
1.10Verkstaden: en nybyggare använder möblerna som spelaren bygger.
Rörelsebana med ramper och trappor
1.9Rörelsebana för att testa karaktärskontrollen.
Närstridsring med träningsdockor
1.8Närstridsringen.
Stegrummet med en stege upp till en plattform
1.11Stegar som både spelaren och NPC:er använder.

Under huven

Verktyg och tekniker

Världspipelinen

  • Python, NumPy, SciPy och OpenCV för terräng, hydrologi, vägrafer och stadsplaner
  • Ett editorbibliotek i C++ för landskapsimport, instansiering och spline-meshar
  • Headless-commandlets i Unreal som kedjas av ett byggskript, där varje steg kontrolleras via sin rapport
  • Renderad granskning och styrning av editorn via Unreals MCP-server
  • Navmesh-prober från Python: flood fill, raycasts mot navmeshen och kontroller av rutter

Gameplay i testanläggningen

  • C++-system: teleportplattor, farliga rör och ventiler, säkringsskåp, terminaler med kopplade dörrar, skärmar för dyrkning och signallås, pussel
  • En byggare i Python på 942 rader för hela nivån
  • Automatiska prober i spelet för varje rum och automationstester i Unreal för lås och hackning
  • NPC:er som klättrar i stegar, använder möbler och reagerar på ljus

Status, oktober 2026

Läget just nu

Fungerar

  • Hela regionen och demonivån byggs från data, hela vägen
  • Demonivån laddar, går att spela i editorn och har en sammanhängande navmesh
  • Alla elva testrum, kontrollerade i spel

Nästa steg

  • Vägarna som vägaktörer i spelet, så att patruller, handlare och fordon kan resa mellan städerna
  • Byggnader man kan gå in i, med början i klosterkyrkan
  • Neutralt nordiskt dagsljus och barrskog; ljuset är för gyllene just nu
  • En lång genomspelning av demot i spelarhöjd