Real-time ray tracing: de toekomst voor 3D games?

55 reacties
Inhoudsopgave
  1. 1. Inleiding
  2. 2. Lichtstralen
  3. 3. Intensief
  4. 4. Quake 4 Raytraced
  5. 5. Intel
  6. 6. Larrabee
  7. 7. Reacties

Inleiding

Ray tracing is zo'n term die iedere computerliefhebber wel eens heeft horen vallen. Voer de kreet in op images.google.com en de mooiste 3D plaatjes verschijnen op je scherm. Ray tracing is dan ook een techniek om 3D beelden te berekenen met realistische schaduwen en reflecties. Al sinds jaar en dag zijn er voor de PC programma's te krijgen waarmee het mogelijk is om met deze techniek hoogstaande afbeeldingen te creëren. Het programma Pov-Ray, door ons gebruikt als benchmark voor processors, is daar wellicht nog wel het bekendste voorbeeld van. Ray tracing heeft echter een groot beletsel voor brede toepassing: het vergt zeer veel rekenkracht. Tot een paar jaar geleden kon je minuten en soms zelfs uren wachten, voordat de berekening van een niet eens zo heel complexe afbeelding voltooid was. Voor games is ray tracing dus niet bruikbaar. Je wilt immers meerdere frames per seconde in plaats van meerdere secondes per frame.  


Dit is geen foto, maar een met behulp van ray tracing gemaakte 3D afbeelding. (bron)

Een paar jaar geleden begon Amerikaanse student Daniel Pohl met onderzoek om met de snelle CPU's van tegenwoordig de techniek toch voor games in te kunnen zetten. Intel, dat maar wat graag ziet dat de CPU een belangrijkere chip blijft van de GPU, bood hem direct na zijn afstuderen een baan aan. Inmiddels claimt Intel dat ray tracing dé toekomst voor gamerendering is. De geheimzinnige, nu nog in ontwikkeling zijnde Larrabee-chip moet daar de ideale basis voor zijn. ATI en nVidia claimen vooralsnog dat Intel veel gewag maakt om niets. De toekomst zal moeten uitwijzen of ze dat zeggen omdat ze zelf een achterstand hebben op dit vlak, of juist omdat ray tracing daadwerkelijk nooit geschikt zal zijn voor gaming.

Lichtstralen

Hoewel ray tracing in detail een complexe technologie is, is het niet erg moeilijk om te begrijpen hoe het werkt. Ray tracing is het best te vergelijken met de manier waarop beelden naar onze ogen worden getransporteerd, alleen dan exact andersom. Het zien van objecten in de echte wereld heeft alles te maken met licht dat ontstaat bij een bron (bijvoorbeeld de zon of een gloeilamp) en al dan niet via een omweg in onze ogen terecht komt. In feite stuurt een lichtbron naar alle richtingen lichtstralen, die natuurkundig het best te omschrijven zijn als een straal van zogenaamde fotonen. Zodra zo'n lichtstraal op een object botst, kunnen er een aantal zaken gebeuren. Een gedeelte van licht wordt geabsorbeerd of weerkaatst (reflections in jargon) en bij (semi-)transparante objecten kan een gedeelte van het licht al dan niet via een gewijzigde hoek binnen het object zijn weg vervolgen (refractions in jargon). Via al die reflecties komen de lichtstralen in onze ogen terecht en zo zien wij objecten. Kort samengevat nemen we niet zozeer een object zelf waar, maar het licht dat het weerkaatst.

Licht bestaat verder uit vele frequenties; licht dat alle zichtbare frequenties bevat zien wij als wit. Sommige materialen reflecteren echter slechts een beperkt deel van de frequenties; deze beperkte reflectie zorgt ervoor dat we kleuren kunnen onderscheiden; een object dat wij als ‘rood' ervaren reflecteert alleen de lichtfrequenties die binnen het spectrum van de kleur rood vallen.


De werking van ray tracing uitgebeeld. (Bron: Wikipedia)

Andersom

Het berekenen van 3D beelden op de PC via de ray-tracingtechniek werkt zoals gezegd op een vergelijkbare manier, alleen dan exact andersom. Het heeft immers geen nut om alle ontelbare lichtstralen die vanuit een lichtbron ontstaan door te rekenen. Het merendeel zal immers nooit in je gezichtveld terecht komen. Daarom begint ray tracing bij de positie waar volgens de maker van de afbeelding het oog van de kijker zich bevindt. Vanaf dit standpunt wordt er als het ware door elke pixel van het scherm een lichtstraal (ray) gestuurd, die verder gevolgd wordt (tracing). Die straal zal in de virtuele 3D wereld, die zich achter het scherm bevindt,  botsen tegen een object. Door de eigenschappen van het materiaal in de berekening mee te nemen, weet de ray-tracingsoftware welk gedeelte van de lichtstraal gereflecteerd, geabsorbeerd en/of gerefracteerd moet worden.
Vanuit elk punt waar één van de virtuele stralen botst met een 3D object wordt een reflectiestraal in de richting van alle aanwezige lichtbronnen berekend. Mocht er ergens op die zogenaamde shadow ray een ander object staan, dan is bepaald dat die betreffende lichtbron geen rechtstreekse invloed heeft en dat het object dus in schaduw staat. Naast deze shadow ray wordt er (indien de materiaaleigenschappen van het object dat voorschrijven) vanuit het betreffende punt onder de juiste hoek een reflectie-ray doorgerekend. Indien een object (semi-)transparant is, wordt er ook een nieuwe ray met de juiste brekingshoek binnen het object zelf verder doorgerekend. Nadat alle stralen op de juiste manier recursief zijn doorgerekend, kan de kleur van de betreffende pixel worden bepaald.

Intensief

Ray tracing kost zoals gezegd zeer veel rekenkracht, vandaar dat bij 3D games een andere, veel simpelere technologie wordt gebruikt. Deze techniek, die de basis is van alle moderne GPU's, heet rasterization en werkt juist met de 3D objecten als basis. Elk object in een spel is opgebouwd uit vele driehoeken (triangles) en voor elk van deze driehoeken wordt via een simpele matrix-berekening bepaald of en zo ja waar deze op het scherm getoond moet worden. Wanneer er op dezelfde pixel-positie een tweede triangle komt, bepaalt de zogenaamde Z-buffer welk object vooraan staat en dus zichtbaar moet blijven. Via verschillende manieren (textures en dergelijke) wordt uiteindelijk bepaald hoe alle driehoeken moeten worden ingekleurd. Op die manier wordt elk frame in een game object voor object opgebouwd, dat veel sneller gaat dan daadwerkelijk op een realistische manier de banen van lichtstralen door te rekenen. Om in games toch enigszins realistische belichtingseffecten mogelijk te maken, is de rasterization-technologie de afgelopen jaren fors uitgebreid: van light maps en bump mapping, tot stencil buffers en volledig programmeerbare vertex- en pixel-shaders. Dat alles heeft ervoor gezorgd dat moderne games als Crysis er veel mooier en realistischer uitzien dan de games van een paar jaar geleden. Niemand kan echter ontkennen dat de kwaliteit van geraytracede afbeeldingen uit bijvoorbeeld het programma Pov-ray of Hollywood films als Shrek of Ice Age nog niet worden behaald.

Je ooit afgevraagd waarom films er beter uit zien dan 3D-games? Het antwoord is ray tracing.

Quake 4 Raytraced

Dit verschil in kwaliteit houdt de mogelijkheid om toch ray tracing in te zetten interessant voor real-time rendering, ondanks de hoge eisen aan rekenkracht. Zoals gezegd voegde de Amerikaanse student Daniel Pohl in 2004 de daad bij het woord: hij ging aan de slag met de inmiddels door Id Software tot open source gemaakte broncode van Quake 3 en programmeerde een eigen versie die op basis van ray tracing de 3D spelwereld op het scherm toverde. Dat bleek simpeler dan gedacht, al was het eindresultaat om te huilen. In 2006 ging hij verder met het maken van een ray traced versie van het complexere Quake 4. Draaiend op een resolutie van 256x256 pixels, wist hij met een Intel Core 2 Extreme QX6700 quad-core processor een snelheid van een kleine 17 frames per seconde te behalen. Niet echt speelbaar dus, maar wel een mooi startpunt voor extra onderzoek naar real-time ray tracing.

Een van de meest interessante aspecten van ray tracing is dat het vrijwel lineair schaalt wanneer je meer processors of processor cores toevoegt. Voor elke pixel van het beeld wordt er immers een eigen lichtstraal doorgerekend, die verder geen relatie heeft met de berekeningen die voor de andere pixels worden gedaan. Met twee cores behaalde Daniel Pohl in zijn Quake 4-versie een framerate die 1,96x hoger was dan met één core. Met vier cores was de schaling 3,84x. Er is maar weinig software die zo goed schaalt op multi-core processors.

Niet verrassend is het aantal pixels in beeld bepalend voor de vereiste rekenkracht. De complexiteit van de afbeelding, ofwel het aantal aanwezige objecten en de mate van gedetailleerdheid hiervan, heeft vrijwel geen invloed op de prestaties van het via ray tracing berekenen van 3D beeld. Dit in tegenstelling tot rasterization, waar een hogere mate van complexiteit meer driehoeken betekent. En de hiervoor benodigde rekenkracht schaalt lineair met het aantal driehoeken. Daniels conclusie luidde dan ook: ray tracing is de sleutel om ultragedetailleerde werelden binnen 3D-games op te bouwen.
Verder bleek met ray tracing dat het berekenen van een aantal 3D-effecten, die met conventionele methodes bijna niet te doen zijn, ineens zeer eenvoudig wordt. Een aantal zeer realistisch spiegelende objecten diende als voorbeeld. Zo bracht hij als proof-of-concept in een level van Quake 4 gebolde spiegels aan, waardoor je eenvoudig kunt zien of een tegenstander van achter een hoek komt aanrennen. Ook zogenaamde portals - een soort toverspiegels waarmee je de beelden van een andere plek in het spel kunt zien - bleken met ray-tracing zeer eenvoudig te creëren. Indrukwekkend zijn ook de resultaten met water; met slechts een paar regels code bleken weerspiegelingeffecten beter dan ooit te kunnen worden gesimuleerd. Bovenal bleek dat alle belichting en shaduwen in Daniel Pohls bewerkingen van Quake 3 en Quake 4 veel realistischer en mooier zijn dan in de originele versies.


De ray traced versie van Quake 4 kent zeer realistische schaduwen.


Volledige kloppende reflecties zijn voor ray tracing geen probleem.


Zulk geloofwaardig water zijn we in de originele Quake 4 nog niet tegengekomen.

Intel

Een nieuwe manier van 3D-games berekenen door de processor en software die bijna lineair schaalt met het aantal cores: meer dan voldoende reden voor Intel om direct interesse te tonen in het onderzoek van Daniel Pohl. Onderzoekers van Intel waren zelf ook al de nodige tijd bezig en hadden in hun Amerikaanse labs al een aantal nieuwe ray tracing algoritmes ontwikkeld die een stuk sneller werkten dan tot dusver werden toegepast. Daniel kreeg al snel een baan aangeboden en zodoende wist Intel tijdens haar Developer Forum eind 2007 een indrukwekkende demonstratie van de ray traced Quake 4-versie te geven. Op een systeem met twee Xeon X536- processors - 8 cores dus in totaal - wist men circa 90 frames per seconde te behalen bij een resolutie van 1280x720 pixels. Prima speelbaar dus. Heeft men hiermee het bewijs geleverd dat ray tracing daadwerkelijk de toekomst voor games is?


Real-time ray tracing werd gedemonstreerd tijdens IDF Fall 2007

Sceptisch

Intel denkt van wel, maar anderen zijn sceptisch. ATI en nVidia zijn er heilig van overtuigd dat rasterization zeker nog vele jaren dé methode blijft om 3D games te berekenen. Zij hebben uiteraard alle reden om dat te zeggen. Gamedevelopers reageren verdeeld, maar niemand lijkt écht enthousiast. Het belangrijkste tegenargument dat je hoort is dat alle demonstraties zijn gedaan met het spel Quake 4, dat inmiddels alweer ruim drie jaar oud is. Moderne games als Crysis of World in Conflict hebben 3D-effecten die vele malen complexer zijn dan het gedateerde Quake 4. Velen willen graag bewijs zien dat ray tracing ook een alternatief zal zijn voor dergelijke spellen. Een bijbehorend argument is dat ray tracing wat betreft rekenkracht altijd achter zal blijven op rasterization, hoeveel 3D-effecten er ook bij bedacht worden. Een ander argument is dat de ontwikkelaars van 3D-games hun primaire focus steeds meer op consoles richten. Zolang ray tracing daar geen optie is, zal men voor PC-games absoluut geen compleet andere methode gaan toepassen.

Toch heeft ray tracing ontegenzeggelijk de interesse gewekt van een aantal gamedevelopers. De toekomst zal uitwijzen of en wanneer ze er daadwerkelijk mee aan de slag gaan. Als het zover is zal het aanvankelijk waarschijnlijk een combinatie van rasterization- en ray-tracingmethodes zijn.

Larrabee

In de tussentijd zit Intel niet stil. Het grote voordeel is volgens de processorfabrikant dat ray tracing zoals gezegd vrijwel linear schaalt met het aantal processor cores. Conventionele 3D-rendering doet dat overduidelijk niet: ook onze tests wijzen uit dat wanneer je twee of drie GPU's combineert in SLI of Crossfire, er slechts zelden een schaling behaald wordt die in de buurt van 2x of 3x komt. Dat heeft alles met het feit dat bij rasterization de berekeningen voor de eerstvolgende driehoeken of frames afhankelijk zijn van informatie uit vorige berekeningen. Intels insteek is helder: hoe meer cores we in een chip weten te proppen, hoe beter de prestaties van ray tracing ten opzichte van rasterization worden.

In dat opzicht is het interessant om het zogenaamde Larrabee-project van Intel in de gaten te houden. Dat wordt een op x86 gebaseerde processor met 16 of 24 cores, die speciaal wordt toegespitst op berekeningen met een hoge mate van parallellisatie. Intel heeft al aangegeven dat deze chip, wanneer deze in  2009 of 2010 op de markt komt, ingezet kan worden voor wetenschappelijke berekeningen, maar ook als GPU. Over dat laatste doet Intel tot op de dag van vandaag nog erg geheimzinnig, maar we moeten haast wel concluderen dat er op z'n minst enig verband zal bestaan tussen de ontwikkeling van Larrabee en Intels verregaande interesse in ray tracing. Hoewel het bedrijf al heeft aangekondigd dat de toekomstige chip ook prima met DirectX en OpenGL code zal werken, kan het ook heel goed het beginpunt zijn om real-time ray tracing echt voor een groot publiek beschikbaar te maken.

Dat zal echter wel betekenen dat Intel haast moet maken met de samenwerking met de grote gamedevelopers. Die werken nu immers al nauw samen met ATI en nVidia, die vooralsnog weinig brood zien in ray tracing. Intel zal zeker moeten investeren om een vergelijkbare nauwe band op te bouwen, maar het bedrijf heeft daarvoor zeker de middelen.


Intels Larrabee wordt een chip met 16-24 cores die vermoedelijk zeer geschikt is voor ray tracing.

Conclusie

Wordt real-time ray tracing de toekomst voor 3D games? Wij durven het niet te zeggen. Het onderzoek van Daniel Pohl toont hoe dan ook indrukwekkende resultaten en geeft zeker te denken. De belangrijkste vraag is misschien nog wel wat nu exact Intels plannen zijn met die geheimzinnige, toekomstige Larrabee-chip. Als ray tracing immers inderdaad een volwaardig alternatief wordt, dan zal zoals het er nu voor staat juist Intel het voortouw nemen op het gebied van grafische hardware, en niet ATI of nVidia. Of het bedrijf daarin zal slagen is opnieuw een vraag die niet te beantwoorden is. Het onderzoek naar real-time ray tracing zal de komende tijd in ieder geval onverminderd doorgaan.

0
*