Dynamische virtuele lichtvelden voor games

Jeroen
Put

Dynamische virtuele lichtvelden voor games

Correcte belichting is één van de belangrijkste factoren die bijdragen tot realisme in computergegenereerde beelden. Om dit realisme te behalen, moet de voortplanting van het licht nauwkeurig gesimuleerd worden. Dat je deze tekst kan lezen, komt omdat inkomende lichtdeeltjes (fotonen), via je ogen op je netvlies invallen. Die beelden worden vervolgens in de hersenen verder verwerkt en geïnterpreteerd als wat je ziet. Dit razendsnelle proces vindt voortdurend plaats in ons brein, zodat we ons zicht als iets heels vanzelfsprekend beschouwen. In een film of computerspel willen we dat een virtuele omgeving realistisch op het scherm getoond wordt. Voor een computer is het simuleren van dit lichttransport, de voortplanting van licht doorheen een ruimte, echter heel moeilijk.

Gewoonlijk wordt dit globale belichtingsprobleem opgelost met behulp van raytracing. Dit concept is niet nieuw. De oude Grieken, omstreeks de vijfde eeuw v.C., dachten dat de aarde opgebouwd was uit vier elementen: vuur, lucht, aarde en water. Ze geloofden dat de godin Aphrodite ook het menselijke oog uit die elementen had opgebouwd, en dat het vuurelement stralen (rays) afschoot uit de ogen. Die stralen tastten als enorme ‘voelsprieten’ de omgeving af, waardoor we kunnen zien. Dankzij de moderne wetenschap weten we uiteraard dat het proces omgekeerd verloopt: onze ogen zijn passieve instrumenten die lichtstralen uit de omgeving opvangen. Toch wordt het actief afschieten van stralen in computerprogramma’s veel gebruikt om het licht van een virtuele omgeving te berekenen. Hierdoor wordt vermeden dat er stralen getrokken worden die de ogen toch niet snijden. Raytracing kan op een aantal manieren gebeuren, maar vaak vertrekken stralen vanuit de camera en botsen ze op willekeurige manieren doorheen de gesimuleerde omgeving.

Het nadeel van raytracing is dat de berekeningen erg veel tijd vragen. Bij het berekenen van de beelden uit films zoals ‘Lord of the Rings’ worden vaak honderden zware computers gebruikt, die soms dagenlang rekenen op enkele fragmenten. Tijdens het spelen van games willen we echter een ogenblikkelijke verandering van de beelden, als reactie op onze besturing. Om realistische beelden te maken, is er dus veel tijd nodig, maar die hebben we niet bij games. Daarom passen de meeste games trucjes toe om toch snel mooie beelden te genereren. Zo wordt meestal alleen het directe licht gesimuleerd: het licht wat van een lichtbron (zoals een lamp, de zon,etc...), rechtstreeks botst op een element in de wereld. Indirect licht, het licht dat meerdere keren botst in de omgeving, wordt meestal volledig genegeerd of ruw benaderd. Nochtans is dit indirecte licht belangrijk voor het realisme. Beeld je maar eens een knalrode bal in, vlakbij een witte muur. In de echte wereld zal de bal een rode gloed afgeven op de witte muur, die sterker wordt naarmate de bal dichterbij de muur ligt. In games van vandaag wordt dit effect grotendeels genegeerd, waardoor de muur er onnatuurlijk wit blijft uitzien. Dit subtiele verschil zorgt ervoor dat onze hersenen het beeld al snel als ‘niet echt’ gaan bestempelen. Ook andere veelvoorkomende effecten worden niet in rekening gebracht in hedendaagse games, zoals bijvoorbeeld de felle lichtstrepen op een tafel van licht dat door een glas afgebogen wordt.

Één van de redenen waarom raytracing zo traag is, is dat er telkens maar enkele stralen tegelijkertijd worden afgeschoten. Dit komt omdat huidige processoren maar over enkele kernen (cores) beschikken die in parallel kunnen werken. Om belichting op een snelle én realistische manier te berekenen, wordt in mijn masterproef niet de processor, maar de grafische kaart gebruikt. De grafische kaart bevat een chip die veel meer kernen heeft dan een gewone processor, waardoor veel meer stralen tegelijkertijd kunnen afgeschoten worden. De stralen worden afgeschoten in evenwijdige bundels, over de hele omgeving heen. Dit proces wordt bovendien herhaald in alle richtingen, zodat uiteindelijk alle lichtstralen in de omgeving getraceerd zijn. De verzameling van stralen noemt men in de wetenschappelijke literatuur een lichtveld. Een lichtveld kan in principe opgebouwd worden met echte foto’s of beelden, maar in mijn masterproef veronderstel ik dat we het enkel op kunstmatige omgevingen zullen uitvoeren. Hierdoor kan de omgeving, met speciale trucjes op de grafische kaart, ook in de diepte gescand worden. Het hele proces lijkt een beetje op een röntgenfoto nemen. In de masterproef wordt er als het ware een scan genomen van de belichtingstoestand op dat moment.

Natuurlijk blijft de belichting in een game niet de hele tijd hetzelfde. Objecten in de omgeving vervormen voortdurend en verplaatsen zich vaak met hoge snelheid. Wanneer we in een game auto’s zien rijden, dan verwachten we correcte schaduwen en reflecties zoals in de realiteit. Als we een rode bal tegen een witte muur gooien, dan moet ook de rode schijn zich op een natuurlijke manier aanpassen. Vroeger werd dit probleem opgelost door de hele belichting voor ieder beeld opnieuw te berekenen. Maar de belichting verandert niet altijd en overal even veel, waardoor er veel rekenkracht verspild werd. In mijn thesis los ik dit probleem op, door enkel de stralen te hertraceren die door de dynamische objecten worden beïnvloed. Ook hiervoor worden speciale functies van de grafische kaart gebruikt, die uit de totale bundel van stralen telkens de niet-relevante delen ‘wegknippen’.

Met virtuele lichtvelden kunnen lichteffecten in games op een realistische en snelle manier berekend worden. Bovendien biedt een virtueel lichtveld goede ondersteuning voor complexe lichtbronnen: door een afbeelding te plaatsen voor de bundels stralen die bij de lichtbron vertrekken, kunnen de kleuren van die stralen eenvoudig beïnvloed worden. De afbeelding werkt dan als een soort filter voor het licht dat uitgezonden wordt.

 

Universiteit of Hogeschool
Universiteit Hasselt
Thesis jaar
2012