Ray Tracing kann man als rekursiven Algorithmus z.B. wie folgt implementieren. Dabei wird vereinfachend nur von Intensität gesprochen.
RayTrace
begin
for all EyeRays do
Intensity Trace(EyeRay,0);
od
end
Die Prozedur RayTrace berechnet für alle Kamerastrahlen die Intensitäten. Dabei wird je Strahl die folgende Funktion Trace aufgerufen. Die Berechnung der eigentlichen Intensitäten ist in der Funktion LightModel versteckt.
Trace(Ray,RecDepth)
begin
IntensityNothing;
if NextHitPoint found then
for all ShadowRays at NextHitPoint do
IntensityLightModel(NextHitPoint,ShadowRay);
od
if RecDepthMaxDepth then
IntensityTrace(ReflectedRay,RecDepth+1);
IntensityTrace(TransmittedRay,RecDepth+1);
fi
IntensityLightModel(NextHitPoint,AmbientLight);
else IntensityBackGround
fi
return Intensity;
end
Beim Berechnen der ShadowRays muss man beachten, dass bei transparenten Objekten auch durch das Material beleuchtet werden kann, d.h. man muss den Winkel zwischen ShadowRay und Normalenvektor in die Betrachtung einbeziehen.
Ray Tracing ist ein Abtastvorgang mit den damit verbundenen Problemen. Eines dieser Probleme liegt im Aliasing (Treppeneffekte). Ein Vorschlag ist distributed Ray Tracing, d.h. eine geringfügige, zufällige Störung der Strahlen abweichend von ihrem idealen, strahlenoptischen Verlauf und ein Abtasten mit mehr als einem Strahl pro Pixel.
Die Beschleunigungsverfahren greifen an allen Faktoren der oben vorgestellten Formel, d.h. einerseits an der Anzahl der zu verfolgenden Strahlen, andererseits aber auch bei jedem einzelnen Strahl an dessen Berechnungsaufwand, insbesondere dem Auffinden des nächstgelegenen Schnittpunktes. Zudem können parallele Verfahren beim Ray Tracing leicht eingesetzt werden.
Also:
Die Anzahl der Strahlen kann durch Verringerung der Rekursionstiefe, spezielle Behandlung der ShadowRays, sowie Undersampling-Techniken reduziert werden.
EyeRays brauchen prinzipiell nicht verfolgt zu werden, da man auf einfachere Algorithmen (z.B. Scanline-Algorithmen) zurückgreifen kann. Ist für ein Pixel das zu sehende Objekt gefunden, kann der Schnittpunkt und Normalenvektor berechnet werden. Ohne Verspiegelung oder Transparenz endet auch dann bereits das `Tracen'.
Bemerkung: Man beachte allerdings, dass schnelle Verfahren--wie eben der Scanline-Algorithmus--nicht unbedingt mit allen Basisobjekten gut zurechtkommen. Eventuell ist es notwendig alle Basisobjekte in Polygone zu zerlegen, was jedoch dann die Ränder krummliniger Objekte wiederum verschlechtert. Hier muss man wohl auch einen Kompromiss zwischen Qualität und Geschwindigkeit machen.
Die Schattenkarte kann durch einen einfachen Vorberechnungsschnitt je Lichtquelle berechnet werden. Liegt nun das Objekt nicht in der Liste des zugehörigen Bereiches, so liegt es im Schatten. Im anderen Fall müssen die in der Liste vorkommenden Objekte als potentielle Schattenspender untersucht werden.
Der Speicherplatz ist maximal
In der einfachsten Version wird der Zwischenpunkt einfach durch Interpolation der Farbwerte der beiden Randpunkte berechnet. Als erste Verbesserung kann untersucht werden, ob beide Randpunkte mit dem EyeRay das selbe Objekt treffen. Die Interpolation wird nur dann vorgenommen, wenn dies der Fall ist, sonst wird der Bildpunkt normal berechnet. Als weitere Verbesserung kann der Mittelpunkt auf jeden Fall korrekt berechnet werden, allerdings erübrigt sich ein Tracen, falls die Strahlen der Randpunkte das gleiche Objekt treffen, man nimmt einfach an, es wird das gleiche Objekt getroffen. Die Interpolation findet also erst auf zweiter Rekursionsstufe statt. Statt das Verfahren nur in der Bildzeile anzuwenden, ist es auch möglich, dies über Zeilen hinweg durch versetzte Anordnung der Abtastpunkte zu implementieren.
Undersampling birgt eine erhöhte Gefahr des Aliasing. Oft werden Bilder mit Supersampling, d.h. einer höheren Auflösung, berechnet und anschließend auf die eigentliche Auflösung reduziert. Da durch die höhere Auflösung mehr Information vorhanden ist (höhere Abtastfrequenz), können Alias-Effekte reduziert werden. Man wendet also zweckmäßigerweise an Kanten oder anderen Übergängen Supersamling an und an einheitlichen Bildausschnitten Undersampling.