Als je deze blogpost leest, ben je waarschijnlijk bekend met viewers zoals Mapbox, ArcGIS of Cesium, maar weet je ook dat het inladen van GIS-data in game engines in opkomst is? Geodan Research doet al meer dan 6 jaar onderzoek naar de mogelijkheden van geografische data in dit soort engines.
In het eerste deel van deze serie leg ik uit wat een game engine is, waarom je het zou gebruiken voor geografische data en laat ik een aantal van onze recente projecten zien. In latere posts hoop ik verder op technische details in te gaan.
Game engines
Zoals de naam al suggereert, is een game engine voornamelijk bedoeld om videogames mee te maken. Game engines hebben een heel scala aan ingebouwde functionaliteiten en componenten, waarmee een ontwikkelaar als het ware een programma in elkaar kan klikken. De ontwikkelaar kan deze toolbox uitbreiden door zelf nieuwe componenten te programmeren of plugins te downloaden. Daarnaast bieden de meeste game engines een heleboel exportmogelijkheden. Wil je je programma voor een telefoon maken? Exporteer het dan als iOS- of Android-app. Wil je een Virtual Reality-experience maken? Met één druk op de knop heb je een programma dat zowel op Mac, Windows en Linux draait.
Wereldwijd worden de game engines Unity en Unreal het meeste gebruikt. Voor de kenners: enkele bekende games die gemaakt zijn met behulp van deze engines, zijn Fall Guys, Overcooked (allebei Unity), Fortnite en Borderlands (Unreal).
Computers worden steeds beter, en daarmee worden computergames steeds mooier en sneller. Dit vereist van engines als Unity en Unreal dat ze geoptimaliseerd zijn in rendering (het tekenen van objecten). Door middel van shaders en post-processing kan je een fotorealistische 3D omgeving maken, en daarin rondlopen alsof je er echt bent.
Daarnaast zit er in videogames ontzettend veel interactie. In The Sims kan een speler bijvoorbeeld de omgeving manipuleren en aanpassen, terwijl zijn virtuele familieleden rondlopen in hun huis. Intussen hebben alle personages behoefte aan voedsel, sociale interactie en ontspanning. En o ja, plotseling vliegt de keuken in brand en wordt er ‘s nachts ingebroken.
…probeer dat allemaal maar eens in Mapbox te bouwen.
Ik hoor je nu vragen: ‘Maar, Tim, er is toch een oceaan aan verschil tussen het spel dat mijn kind op zijn Playstation 5 speelt en de 3D-viewer die ik op mijn werk gebruik?’
Mijn eerste antwoord daarop is: ‘Waarschijnlijk.’
Mijn tweede antwoord daarop is: ‘Maar is dat echt zo?’
De 3D-wereld waarin je kinderen uren van hun tijd doorbrengen bestaat toch ook uit terrein, gebouwen, bomen? Is die wereld niet net zo data-driven als de onze? Zou het niet fantastisch zijn om Cyberpunk 2077 te spelen met Amsterdam als basis, of Los Angeles, of Amersfoort Schothorst?
In essentie doen game engines hetzelfde als elke andere 3D-viewer: 3D-data uitlezen en visualiseren. Ze kunnen dat alleen een stuk mooier en met een stuk meer interactie en dynamiek, omdat ze geoptimaliseerd zijn voor high-paced videogames. En dat opent een hele nieuwe wereld aan mogelijkheden voor je GIS-viewer.
>>> Niet overtuigd? Fun fact: zowel Mapbox als ESRI ontwikkelen plugins voor Unity en Unreal. Kijk eens naar die screenshots: dat is toch om je vingers bij af te likken?
Geodan Research en game engines
Geodan is al enkele jaren bezig met het onderzoeken hoe geo-data gebruikt kan worden in game engines, voornamelijk in Unity. Vooral op het gebied van Virtual Reality (VR) en Augmented Reality (AR) zijn veel projecten gedaan, maar we hebben ook gekeken naar het visualiseren van big data en crowd simulation. In het archief van deze website vind je een uitgebreide selectie hiervan. In deze post licht ik enkele projecten uit die volgens mij verschillende facetten van het gebruik van Unity laten zien.
Digital Twinning
Digital Twinning is een centraal thema binnen Research. In de Unity-editor combineren we verschillende databronnen tot een levendige Digital Twin van een willekeurige plek in Nederland (hier: Zwolle). Naar wens voegen we er allerlei componenten aan toe, zoals crowd- en verkeerssimulatie, weersomstandigheden, en VR-interactie. Ook zijn we in staat om er toekomstige plannen in te tonen. In het kader van burgerparticipatie kunnen inwoners dan in VR bekijken hoe hun straat er in de toekomst uit komt te zien en daar hun mening over geven. Door het gedetailleerde niveau waarop de data gevisualiseerd wordt, begrijpen mensen veel beter waar ze naar kijken en wat voor invloed de plannen hebben op hun leefomgeving. Om het geheel nog toegankelijker te maken, heeft Unity ook een functionaliteit om 360°-video’s te maken. Die kan je gewoon op je telefoon bekijken, zonder VR-toeters en -bellen.
Ook zijn we bezig met het ontwikkelen van een ‘sandbox’ die helpt bij de beleidsvorming rondom COVID-19. Wat gebeurt er bijvoorbeeld als je een bepaalde straat in het centrum van Zwolle afzet of éénrichtingsverkeer maakt? Verdwijnt de drukte (en daarmee het risico op het overdragen van het virus) of wordt het op andere plekken juist drukker? Welke set aan maatregelen zijn het meest effectief en welke regels hebben weinig invloed op de geschatte verspreiding van het virus? Door middel van een uitgebreide toolbox en dynamische simulatie kunnen beleidsmakers de maatregelen tweaken voor hun eigen stad.
>>> Nog geen genoeg van COVID? Bekijk ook deze simulatie, gebaseerd op de Washington Post.
De Digital Twin in Unity kan dus gebruikt worden als basis voor allerlei projecten. Het mooie is dat we de systemen die we maken kunnen hergebruiken: willen we de COVID-sandbox ergens anders proberen, dan kan dat.
Ondergronddata in Unity
Bij veel 3D-viewers is het visualiseren van ondergronddata een hoofdpijndossier, omdat tekenen onder de basiskaartlaag niet of slecht ondersteund wordt. Game engines hebben geen last van dit probleem en lenen zich dus goed voor dit doeleinde.
Er is een degelijke kans dat je overweldigd bent door het bovenstaande gifje. Geen zorgen, na bijna drie jaar bij een geo-bedrijf te hebben gewerkt, ben ik ook nog steeds overweldigd, al is het dan om een andere reden.
Je kijkt naar een visualisatie van de Basisregistratie Ondergrond (BRO). In heel Nederland zijn boringen en metingen gedaan om de samenstelling van de bodem in kaart te brengen. Dit is nuttig, omdat als je een tunnel of proefsleuf wil graven, je je spreekwoordelijke schep liever in zand dan in klei wil zetten. Elke kleur staat voor een ander type bodemlaag.
Nu je dat weet, ben je misschien weer wat tot rust gekomen. Ik zal je uitleggen waarom er toch nog steeds reden is om overweldigd te zijn.
De BRO-dataset bestaat uit blokken van 100 bij 100 meter, van 50 centimeter diep. Elk blok bevat metadata: kansen op bepaalde soorten bodem, waterdoorlaatbaarheid, et cetera. De BRO loopt tot een diepte van 50 meter.
Het model op de bovenstaande screenshot beslaat een oppervlakte van 400 km2. Dat betekent dat je naar vier miljoen blokjes, ofwel 32 miljoen vertices aan het kijken bent, die allemaal tegelijkertijd getekend worden door middel van een shader en waar je ook nog eens slicing-operaties op kan uitvoeren. En het mooie is: Unity kan deze hoeveelheid data vloeiend visualiseren. Dát is voor mij de reden om overweldigd te zijn.
Een andere vorm van ondergrondse data zijn kabels en leidingen. Op het bovenstaande gifje wordt ondergrondse infrastructuur gecombineerd met een real-time clash detection component. In rood worden de buizen weergegeven die in de weg liggen bij het plaatsen van de lichtmast.
Waar kabels en leidingen zich natuurlijk ook goed voor lenen, is Augmented Reality. Hoe mooi zou het zijn om op straat te kunnen zien waar ondergrondse infrastructuur ligt? We zijn op dit moment bezig om deze droom voor gravers te verwezenlijken in een smartphone applicatie.
Concluderend…
Begrijp me niet verkeerd, ik vind niet dat we allemaal over moeten stappen naar Unity of Unreal. Dat is misschien een klap in je gezicht na het lezen van dit artikel, maar bij uitstek zijn de ‘klassieke’ GIS-viewers natuurlijk uitblinkers in het on-the-fly inlezen van kaartlagen en het overzichtelijk weergeven daarvan: dat is precies waarvoor ze ontwikkeld zijn. Ben je echter van plan om iets met meer interactie of dynamiek te doen, of is het belangrijk dat de omgeving er gedetailleerder uit ziet? Overweeg dan eens om in Unity of Unreal te duiken.
Naar mijn mening zijn er een aantal afwegingen die je per applicatie zou moeten maken, voordat je een tool kiest om mee te werken:
- Interactiviteit: Is het van belang dat de eindgebruiker met de omgeving kan interacteren en die kan aanpassen?
- Deliverables: Moet de viewer in de browser draaien (lightweight), op een telefoon, of als programma op desktops?
- Streaming: Wordt de data gestreamd, afhankelijk van waar de gebruiker kijkt (macro), of is er een van tevoren klaargezet gebied?
- Detail: Moet de viewer zware 3D-modellen (met animaties) tonen en rekenmodellen draaien (bijvoorbeeld crowd simulation), of niet?
In zeer grove lijnen zou je voor een game engine kunnen kiezen als je voor een gedetailleerde viewer gaat die een van tevoren gegenereerd 3D-gebied toont, waarmee de gebruiker kan interacteren op een platform anders dan een webbrowser. ‘In grove lijnen’ omdat er een hele hoop ruimte voor speling is, vooral op het gebied van detail en streaming.
In mijn volgende artikel weid ik uit over hoe we precies een 3D-omgeving genereren in Unity en wat we dan vervolgens kunnen doen met die omgeving.