Matrix berekeningen zijn anders vrij zeldzaam in een raytracer, waar je op doelt zijn waarschijnlijk de vector berekeningen welke enorm goed te parallelliseren zijn. Matrices zijn hebben over het algemeen 3 of 4 vector registers nodig en zijn (dus) minder geschikt.
Matrices worden vooral gebruikt bij verschillende transformaties en rotaties welke je in een statische raytraced scene eigenlijk niet tegen komt. Daar staat tegenover dat je bij het raytracen uit gaat van de ray (welke er een of meerdere, voor anti-aliassing, per pixel zijn). Een ray word opgesteld door middel van de vergelijking
R =
o +
td. Waarbij R de uiteindelijke ray is,
o de oorsprong van de ray,
d de richting en
t de afstand.
Wat een raytracer in grondbeginsel doet is
t uitrekenen om de ray-equation op te lossen.
o En
d worden gegeven,
o is tijdens de eerste fase van het trace proces gelijk aan de camera oorspong en
d is de richting naar de pixel op je view-plane (een virtueel scherm recht voor de camera dat je scherm voor moet stellen, uiteindelijk word je view-plane op het echte scherm geprojecteerd).
Voor iedere volgende fase is
o van de nieuwe ray in de meeste gevallen gelijk aan de oplossing van de ray-equation van de vorige ray en kan
d uitgerekend worden door verschillende reflectie of refractie (het breken van licht in een transparante stof zoals glas of water) formules los te laten op de vorige ray. Dit herhaald zicht tot er aan een bepaalde voorwaarde voldaan is en er niet verder getraced hoeft te worden.
Omdat iedere ray eigenlijk compleet onafhankelijk is van andere rays is dit proces uitermate geschikt om parallel uit te voeren; zo kun je er bijvoorbeeld voor kiezen om een scanline (een horizontale rij pixels) of een tile (een vierkant van pixels) in een aparte thread of zelfs op een aparte machine te tracen. Ook kunnen de vector berekeningen nog door SIMD parallel uitgevoerd worden. De voornaamste reden dat dit (nog) niet haalbaar is op een videokaart is de enorme hoeveelheid aan data die tussen de CPU en de videokaart op en neer moet gaan.
[Reactie gewijzigd door PrisonerOfPain op 29 juli 2024 01:53]