De techniek achter de succesvolle game Horizon Zero Dawn van het Nederlandse Guerrilla Games is al bijna twintig jaar in de maak. En nog steeds wordt eraan gesleuteld, door meer dan vijftig programmeurs. Met hun Decima Engine kunnen collega’s hun weidse landschappen, gehaaide robotdino’s en avontuurlijke plotlijnen werkelijkheid maken.

Aloy staart naar een subtropische horizon. Haar rode haren wapperen in de wind. De bepantsering op haar armen glinstert in de zon. In de verte grazen wat robotdino’s, nu nog nietsvermoedend. Met een druk op de knop komt Aloy in beweging: ze glijdt van een kabelbaan en bespringt een van de mechanische beesten. Ze neemt zijn kop in de houdgreep en rekent met hem af. De spelcamera zoomt dramatisch op haar in.

Wie Horizon Zero Dawn speelt op de Play­Station 4 staat er allemaal niet eens bij stil. Het weidse uitzicht: alles wat Aloy ziet, kan worden bezocht. Het ongelooflijke detail: gebladerte ritselt en wuift, de dino kronkelt, Aloy zelf beweegt levens­echt. En de besturing: de joysticks, knoppen en triggers reageren direct op je input.
 

Gigantische spelwereld

Om dat voor elkaar te krijgen, werken er maar liefst tweehonderd mensen aan zo’n spel. Ruim vijftig daarvan werken aan verbeteringen en uitbreidingen van de game engine. Senior gameprogrammeur ing. Eelke Schipper is een van hen. In Guerrilla’s open kantoortuin aan de Herengracht in Amsterdam demonstreert hij de Horizon-wereldkaart.
Op een van zijn beeldschermen verschijnt een raster van tientallen vakjes, elk 512 bij 512 m in het spel. Samen vormen die een gigantische spelwereld.

De omlijning van een vakje geeft aan of het landschap van het betreffende gebied al in het werkgeheugen van de PlayStation 4 is geladen en zo ja, in welk detailniveau. ‘Als Aloy van het ene naar het andere vakje loopt, op weg naar een dorpje in de verte, dan begint het ene gebied uit te streamen en het andere in te streamen’, legt Schipper uit. ‘Van de andere kant van de wereldkaart ziet de speler dan alleen de skyline.’

De uitdaging is om het spel voortdurend vloeiend te laten reageren op wat de speler ervan vraagt.

Daarna toont Schipper de profiler, een visuele weergave van wat er gebeurt in de CPU en de GPU. De CPU of central processing unit is de rekenkamer van de PlayStation 4, die bijhoudt wat spelobjecten doen en waar de speler zich bevindt in de spelomgeving. De GPU of graphics processing unit is de tekenstudio die dit alles in miljoenen pixels ­uitdrukt. Samen zorgen ze ervoor dat dertig keer per seconde het beeld wordt ververst, oftewel een nieuwe frame wordt ge­­tekend.

Elk blokje dat de profiler laat zien, is een taak: het simuleren van golvend haar, het in hout­patroon inpakken van de blokhut op de achtergrond of het uitzetten van de looproute van een kudde herten. Zijn de blokjes te groot, dan duurt het te lang om een nieuwe frame te tekenen en begint het beeld te schokken.

Ruwweg een derde van de tijd is nodig voor het berekenen van de geometrie (waar zijn de bouwblokken op het scherm en wat doen ze?), een derde voor de belichting en een derde voor na­­bewerkingseffecten zoals kleurcorrectie, bewegings­onscherpte en scherptediepte. De uitdaging is om het spel voortdurend vloeiend te laten reageren op wat de speler ervan vraagt. Ook in de drukste ­scènes.
 

Kunstmatig eilandje

Gelukkig heeft Guerrilla Games hier een boel ervaring mee. Het bedrijf ontstond in het jaar 2000 uit een fusie van drie kleinere Nederlandse studio’s. Een ervan, Orange Games, bracht het technisch fundament mee waarop het bedrijf nog altijd voortbouwt: de Core Engine. Deze was geschreven om boorplatformen op zee te visualiseren. In plaats van er urenlang over te doen om een 3D-model in alle detail, pixel voor pixel te renderen, gooide het systeem overbodige franje snel weg, zodat de gebruiker in realtime door een grove versie van het ­platform kon bewegen.

Dit werd de basis van Killzone (2004), het futuristische schietspel voor de PlayStation 2 waarmee Guerrilla zich in de kijker speelde. Nu, een reeks miljoenenhits en een overname door Sony verder, dwalen nog steeds coderegels uit die oorspronkelijke olieplatformtechniek door de software, als diep weggezakte bakstenen in een steeds hoger opgemetselde megatempel.
 

Screenshot uit de game Killzone, die Guerrilla Games uitbracht in 2004.


Tegenwoordig sleutelen 54 programmeurs dagelijks aan deze engine. Onder meer omvat die de software die op de Play­Station 4 draait als je Horizon speelt. Die rendert de 3D-beelden, speelt audio af, verzorgt spellogica, laadt geheugen in en uit, simuleert kunstmatige intelligentie en physics, en communiceert met internet. Maar de engine bevat ook de tools die de rest van de studio nodig heeft om zo’n complexe game te ontwerpen.

Omdat de beroemde Japanse game­maker Hideo Kojima er nu ook mee werkt, is de verzamelde techniek omgedoopt tot Decima Engine. Dat is een verwijzing naar het kunstmatige eilandje Dejima in Nagasaki, waar in de zeventiende eeuw de Hollanders waren gehuisvest die toen als enigen handel mochten drijven met de Japanners. Toch staat overal in de editor nog ‘Core’. Vermoedelijk is er heel wat archeologisch werk voor nodig om die naam ­helemaal weg te krijgen.
 

Belichtingsmodel

Hoe programmeer je met zoveel mensen aan één game? Allereerst door de groep in subgroepen te verdelen. Ing. Jeroen Krebbers, hoofd van het techteam, gebruikt een ­analogie van lagen. Zijn techgroep zit het dichtst op de PlayStation 4 en stuurt direct de graphics, de audio en het geheugen aan. De gametechgroep ontwikkelt algemene technologie om bijvoorbeeld interactieve spelobjecten in te laden. En de gamecodegroep, waar Eelke Schipper toe behoort, stuurt de verschillende specifieke spelsystemen aan, zoals de besturing van Aloy en de verschillende opdrachten die ze al dan niet heeft uitgevoerd. ‘Simpel gezegd zorgt het techteam ervoor dat we appli­caties kunnen draaien, gametech dat we spelletjes kunnen draaien, en gamecode dat we Horizon kunnen draaien’, zegt Schipper.

De Guerrilla-programmeurs opereren volgens een methode die continuous integration heet. In plaats van dat ze bijvoorbeeld wekelijks een nieuwe versie van de engine opleveren, maakt het hele bedrijf constant gebruik van de nieuwste code. Binnen een uur werkt iedere tekenaar of ontwerper al met een code-update. ‘Dat is nogal een verantwoordelijkheid’, zegt Krebbers. ‘Als er iets misgaat, kan de studio zomaar plat komen te liggen. Maar daardoor wordt het probleem dus ook direct gefixt.’
 

Woekerplant van logica

De engine groeit constant; een woekerplant van miljoenen regels logica. ‘Na jaren werk komt de klad er vanzelf in, dus je moet bewust tijd inruimen om op te ruimen’, zegt Krebbers. Een stukje code weggooien blijkt dan soms moeilijk. Omdat je het zelf hebt gemaakt en eraan gehecht bent, of omdat je niet weet wat een collega voor geniaals van plan was. ‘Wij hanteren nu de regel: is iets al een paar projecten niet gebruikt? Dan kan het waarschijnlijk weg’, zegt Schipper. Gaat het toch fout, dan is er altijd nog de revision-history-­database, waarmee verwijderde code is terug te zetten.
 


De groei van de engine komt niet in de laatste plaats voort uit de steeds betere hardware waarmee het team mag werken, zoals onlangs de snellere PlayStation 4 Pro. ‘Daardoor groeien de verwachtingen voor wat we moeten opleveren’, zegt Krebbers. ‘In Killzone had je altijd maar een paar soldaten om je heen. Nu moeten we tien­tallen dino’s en personages tegelijk in beeld ­brengen.’

Die moeten bovendien steeds natuurgetrouwer worden weerge­geven. ‘Een paar games geleden werkte een halve programmeur aan het belichtingsmodel. Nu zijn daar twee mensen fulltime mee bezig.’ Dit komt onder andere door de opmars van physically-based rendering; het gamebeeld opbouwen volgens de wetten van
de natuurkunde. Rondstuiterende lichtdeeltjes, absorberende materialen, kleuren: het klopt ­allemaal steeds beter.


Kleine stukjes

De open opzet van Horizon stelde heel andere eisen aan de techniek dan het lineaire Killzone. Voorheen werden de levels ontwikkeld in het 3D-pakket Maya, waar steeds één ontwerper mee bezig was. ‘Dat kon doordat het min of meer tunnels waren’, zegt Krebbers. ‘Iedereen werkte aan kleine stukjes, die aan elkaar konden worden gekoppeld om samen het spel te vormen.’ Voor Horizon moesten alle medewerkers echter tegelijk in één open wereld aan de slag. Inmiddels worden 3D-modellen nog wel in Maya gemaakt, maar kunnen deze modellen door de levelontwerpers in de game zelf op hun plek worden gezet. ‘We bouwden in feite een editor om de bestaande game engine heen’, zegt Schipper. Met een druk op de knop kan het team nu schakelen tussen spel en ontwerpomgeving.
 


Sommige elementen worden helemaal niet met de hand geplaatst, zoals de rijke begroeiing van Horizon. Daarvoor werd een systeem geschreven dat de planten afhankelijk van de omgeving automatisch plaatst. ‘In Killzone 2 en 3 zaten misschien een of twee plantjes’, zegt Krebbers. ‘In Killzone: Shadow Fall was er één bosrijk gebied. Dat fungeerde als proeftuin voor Horizon. Maar voor een volledig organische wereld was meer nodig.’

De editor is een soort cockpit met een miljoen knoppen.

Schipper demonstreert de editor. In één modus ligt er een extra laag op het gamelandschap die allerlei abstracte elementen bevat. Deze symboliseren bijvoorbeeld de plekken waar robotvijanden verschijnen, waar tropisch gebied overgaat in steppe en waar de speler beoogde speldoelen behaalt. In een andere modus worden logische verbanden visueel gemaakt in een stroomschema en kunnen waardes worden aangepast: het aantal pijlen dat Aloy bij zich heeft, of het ­aantal meters dat een dino rent voordat hij even om zich heen kijkt.

‘De editor is een soort cockpit met een miljoen knoppen, die onze ontwerpers een krachtige gereedschapskist in handen geeft. Als we merken dat ze een bepaalde handeling vaak uitvoeren, zoals het aanpassen van het landschap, zorgen wij voor tools waarmee ze dat sneller of beter kunnen doen.’

Zo kwam er een tool waarmee de ontwerpers veel gemakkelijker opdrachten in elkaar kunnen zetten, waardoor ze in theorie meer tijd hebben om leuke opdrachten te verzinnen. ‘In het beste geval ontstaat er een soort sneeuwbaleffect, waardoor technische features leiden tot nieuwe ideeën’, vult Krebbers aan.

 

Geen weg terug

In de tien jaar dat hij voor Guerrilla werkt, heeft Krebbers het personeel in aantal zien verdubbelen. De medewerkers van het techteam hebben steeds gespecialiseerder werk gekregen en de verwachting is dat het aantal programmeurs verder groeit en het aantal specialisten nog groter wordt. Zeker na het succes van Horizon Zero Dawn: in de twee weken na de lancering in maart werden er al 2,6 miljoen exemplaren verkocht.

Op het moment van schrijven zijn Krebbers en Schipper nog volop bezig met verbeteringen van en een uitbreiding voor Horizon Zero Dawn, maar een vervolg ligt voor de hand. Of misschien een nieuwe Killzone – maar dan wel een die zich afspeelt in een open wereld. Want terug naar een oude versie van de engine is geen optie. In de wereld van de games is recht vooruit de enige weg naar de toekomst.
 


Meer weten over de techniek van Guerrilla Games? Hier heeft de studio een aantal presentaties gedeeld.
 

Dit artikel is ook te vinden in De Ingenieur nummer 6 van 2017, onder de titel 'Een horizon van pixels'. Tekst: Niels 't Hooft