Elke keer als je een nieuwe TV-show of film kijkt met indrukwekkende computer-gegenereerde beelden, ben je getuige van de kracht van Ray Tracing. Maar hoe werkt die magie precies? Denk eens aan die epische ruimteslagen, ver weg in een melkwegstelsel, of de levensechte karakters die je nauwelijks van echt kunt onderscheiden. Achter al deze visuele pracht schuilt een complexe technologie die het mogelijk maakt om licht realistisch te simuleren. Vandaag duiken we diep in de Ray Tracing uitleg en ontdekken we hoe dit proces digitale werelden tot leven brengt.
Lichtstralen Simuleren: De Magie van Path Tracing
Wanneer 3D-artiesten beginnen aan een scène, modelleren ze eerst objecten zoals ruimteschepen of draken, geven ze texturen, positioneren ze met lichtbronnen en een camera. Daarna volgt het renderen, een computationeel proces dat simuleert hoe lichtstralen van oppervlakken weerkaatsen en objecten verlichten. Het transformeert eenvoudige 3D-modellen in een levensechte omgeving.
Er zijn veel algoritmes, maar de huidige industriestandaard voor films en TV is Path Tracing werking. Dit algoritme vraagt om een onvoorstelbare hoeveelheid berekeningen. Om je een idee te geven: als de hele wereldbevolking non-stop zou rekenen, één berekening per seconde, zou het 12 dagen duren om één scène te renderen! Jarenlang was Path Tracing daarom alleen weggelegd voor supercomputers. Het concept stamt uit 1986, maar pas na 30 jaar konden films zoals *Zootopia*, *Moana*, *Finding Dory* en *Coco* met Path Tracing worden gerenderd – en zelfs toen waren serverfarms met duizenden computers en maandenlange rekentijden nodig.
Waarom Path Tracing Zo Veel Rekenkracht Vraagt (en Hoe We Het Oplossen!)
Waarom vereist Path Tracing dan miljarden en miljarden berekeningen? En hoe slagen we erin om het nu sneller te doen?
Het antwoord ligt deels in de architectuur van moderne GPU’s. Wanneer je een hedendaagse grafische kaart opent, vind je duizenden CUDA- of shading cores, én gespecialiseerde Ray Tracing (RT)-cores. Deze RT-cores zijn specifiek ontworpen en geoptimaliseerd om Ray Tracing-berekeningen uit te voeren. Binnenin de RT-cores zijn er twee belangrijke onderdelen: één voor het razendsnel doorzoeken van Bounding Volume Hierarchies (BVH) en één voor het bepalen welke driehoek een lichtstraal raakt.
Een van de grootste uitdagingen is het bepalen welke van de miljoenen driehoekjes een straal het eerst raakt. Dit wordt opgelost met een Bounding Volume Hierarchy (BVH). In essentie worden alle driehoekjes in de scène opgedeeld in steeds kleinere virtuele ‘doosjes’. Een straal hoeft dan niet alle miljoenen driehoekjes af te gaan, maar controleert eerst welke doosjes hij raakt. Dit hiërarchische systeem reduceert miljoenen berekeningen tot een handvol simpele doos-intersecties, gevolgd door slechts enkele driehoek-intersecties. Met deze combinatie van BVH en geavanceerde GPU rendering kunnen complexe scènes, die voorheen dagen of maanden duurden, nu in enkele minuten worden gerenderd. Ter vergelijking: de krachtigste supercomputer uit 2000, de ASCI White, kostte 110 miljoen dollar en deed 12,3 biljoen operaties per seconde. Een moderne NVidia 3090 GPU kostte bij introductie een paar duizend dollar en presteert 36 biljoen operaties per seconde. Ongelooflijk wat een rekenkracht we nu in een schoenendoosformaat grafische kaart kwijt kunnen!
Het Leven van een Lichtstraal: Primair, Secundair en Schaduwstralen
Laten we eens kijken hoe zo’n draak en koninkrijk tot leven komen. De artiest modelleert alles, van eilanden en kastelen tot de draak zelf, waarbij alle complexe vormen worden opgedeeld in miljoenen kleine driehoekjes (vaak zo’n 3,2 miljoen voor een scène). Daarna krijgen ze texturen die niet alleen de kleur bepalen, maar ook materiaaleigenschappen zoals ruwheid, glans of transparantie. Lichtbronnen worden geplaatst en afgesteld om het tijdstip van de dag te simuleren, en een virtuele camera legt het vast.
Path Tracing simuleert vervolgens hoe licht interacteert en weerkaatst van elk oppervlak. In de echte wereld starten lichtstralen bij de zon, weerkaatsen van objecten en bereiken onze ogen. Met CGI is het onmogelijk om oneindig veel lichtstralen vanaf de lichtbron te berekenen. Daarom doen we het omgekeerd: we sturen miljarden stralen vanuit de virtuele camera, door de ‘view plane’ (die net zoveel pixels heeft als de uiteindelijke 4K-afbeelding, zo’n 8,3 miljoen) de scène in. Dit is een gigantisch parallelle operatie, want elke pixel is onafhankelijk en zijn duizend bijbehorende stralen kunnen tegelijkertijd worden berekend.
De eerste stralen die vanuit de camera een object raken, noemen we primaire stralen. Zij bepalen welk object geraakt wordt en welke basiskleur de pixel krijgt. Maar een object is zelden egaal verlicht; er zijn heldere plekken en schaduwen. Dit brengt ons bij globale belichting, de combinatie van directe en indirecte belichting.
Om directe belichting te berekenen, sturen we vanaf het raakpunt van de primaire straal extra stralen, de zogenaamde schaduwstralen, richting elke lichtbron. Als er niets tussen het raakpunt en de lichtbron staat, wordt het direct verlicht. De intensiteit, kleur en richting van de lichtbron bepalen vervolgens de helderheid en kleur van die pixel.
Maar wat als een punt in de schaduw ligt, zoals de achterkant van een paal die geen direct zonlicht krijgt? Die is niet pikzwart, toch? Dat komt door indirecte belichting, licht dat weerkaatst van andere objecten, zoals muren. Om dit te simuleren, genereren we vanaf het raakpunt van de primaire straal een secundaire straal die van het oppervlak afketst en een nieuw punt raakt. Vanaf dat nieuwe punt sturen we opnieuw schaduwstralen uit om te zien hoe *dat* punt direct verlicht wordt. Zo wordt het nieuwe punt als het ware een lichtbron die het originele punt indirect verlicht. Dit ‘stuiteren’ van secundaire stralen gebeurt meerdere keren, waarbij telkens schaduwstralen worden gestuurd. Het doel is om alle paden te vinden waarlangs licht de camera kan bereiken, vandaar de naam Path Tracing werking. Een mooi effect hiervan is kleurweerkaatsing: een rode ballon naast een witte muur zal een rode gloed op de muur werpen.
Materialen en Licht: Hoe Ruwheid en Transparantie Alles Veranderen
De manier waarop secundaire stralen van een oppervlak weerkaatsen, hangt sterk af van de materiaal- en textuureigenschappen die aan een object zijn toegewezen. Neem bijvoorbeeld een reeks grijze bollen met verschillende ruwheidswaarden. Een perfect glad oppervlak met géén ruwheid gedraagt zich als een spiegel: alle secundaire stralen weerkaatsen in exact dezelfde hoek, waardoor een perfecte reflectie ontstaat. Als de ruwheid echter 100% is, kaatsen de secundaire stralen in willekeurige richtingen af, wat resulteert in een vlak, dof grijs oppervlak.
Bij materialen zoals glas worden er zelfs speciale brekingsstralen gegenereerd die dwars door het materiaal heen gaan. De kleur en helderheid van de pixels in het glas zijn dan vooral afhankelijk van de richting van deze brekingsstralen en wat ze aan de andere kant raken. Path Tracing toont hier zijn ware kracht, met meervoudige spiegelreflecties en realistische breking in glas. In een complexere scène kunnen we bijvoorbeeld kiezen voor duizend stralen per pixel en vier secundaire weerkaatsingen; andere scènes vragen om andere instellingen. Wanneer al deze waarden worden vermenigvuldigd met het aantal pixels per afbeelding en het aantal frames per seconde (voor animaties), wordt duidelijk waarom Path Tracing zoveel rekenkracht vraagt.
Ray Tracing in Games: Twee Verschillende Werelden
In videogames wordt Ray Tracing op verschillende manieren toegepast, omdat real-time rendering veel sneller moet zijn dan voor films.
Een veelvoorkomende methode lijkt op Path Tracing, maar met slimme snelkoppelingen. Voor een game-omgeving wordt een zeer lage-resolutie dubbelganger van alle modellen gemaakt. Path Tracing wordt vervolgens gebruikt om de directe en indirecte belichting voor deze lage-resolutie objecten te bepalen, en de resultaten worden opgeslagen in een ‘light map’. Deze light map wordt vervolgens toegepast op de hoge-resolutie objecten in de scène, wat resulteert in realistische indirecte belichting en schaduwen. Dit is een van de Ray Tracing-technieken die bijvoorbeeld in de Lumen-renderer van Unreal Engine wordt gebruikt.
Een compleet andere aanpak is Screen Space Ray Tracing. Deze methode gebruikt niet de volledige 3D-geometrie van de scène, maar maakt gebruik van de afbeeldingen en data die al door de grafische rendering-pipeline van de game zijn gegenereerd, zoals een dieptekaart (die aangeeft hoe ver elk object van de camera is) en een normale kaart (die de richting van elk oppervlak toont). Door deze gegevens te combineren, kunnen we een vereenvoudigde 3D-representatie van de scène krijgen. Als we bijvoorbeeld de reflectie van bomen in een meer willen zien, laten we stralen van het meeroppervlak (op basis van de normale kaart) weerkaatsen in deze vereenvoudigde geometrie.
Een nadeel van Screen Space Ray Tracing is dat het alleen data kan gebruiken die al op het scherm zichtbaar is. Als de camera beweegt en de bomen uit beeld verdwijnen, kunnen ze ook niet meer in de reflectie worden getoond. Ook objecten achter de camera kunnen niet worden gereflecteerd. Dit type Ray Tracing, samen met andere rendering-algoritmes, wordt gebruikt in games zoals *Cyberpunk*.
Veelgestelde Vragen
Wat is het fundamentele verschil tussen traditionele rendering en Ray Tracing?
Traditionele rendering, ook wel rasterization genoemd, projecteert 3D-objecten naar 2D-pixels op het scherm. Het focust op het snel tonen van geometrie. De Ray Tracing uitleg is daarentegen gebaseerd op de simulatie van individuele lichtstralen, die de complexe interacties van licht met oppervlakken nabootsen voor een ongekend fotorealisme.
Hoe helpen gespecialiseerde GPU’s, zoals die met RT-cores, bij Ray Tracing?
Moderne GPU’s bevatten speciale RT-cores die specifiek zijn ontworpen om Ray Tracing-berekeningen te versnellen. Ze voeren taken uit zoals BVH traversal (het efficiënt vinden van het juiste driehoekje dat een lichtstraal raakt) en ray-triangle intersectie met ongelooflijke snelheid. Hierdoor kunnen miljarden lichtstralen per seconde worden verwerkt, wat essentieel is voor de complexiteit van Path Tracing werking.
Wat zijn de grootste uitdagingen bij het toepassen van Ray Tracing in videogames?
De primaire uitdaging voor Ray Tracing in games is de enorme rekenkracht die nodig is om de complexe Path Tracing werking in realtime (d.w.z. 60 frames per seconde of meer) te draaien. Game-ontwikkelaars gebruiken daarom geoptimaliseerde methoden zoals het pre-berekenen van licht in ‘light maps’ of screen space ray tracing, die minder rekenintensief zijn en een balans bieden tussen visueel realisme en speelbare prestaties.


