next up previous contents
Nächste Seite: Der Algorithmus Aufwärts: Ray Tracing Vorherige Seite: Ray Tracing   Inhalt

Die Idee des Ray Tracings

Da es nicht praktikabel ist, alle von einem strahlenden Objekt ausgesendeten Strahlen zu verfolgen, geht man den umgekehrten Weg. Die potentiell ins Auge einfallenden Lichtstrahlen werden zurückverfolgt. Ein Schnitt im entstehenden Strahlkegel wird als Projektionsfläche dargestellt. Treffen die Strahlen auf Oberflächen, werden sie entsprechend den optischen Gesetzen (Reflexion, Transparenz, Brechung usw.) gespiegelt bzw. gebrochen. Die Strahlen transportieren die Energie (Farbe und Intensität, je nach Farbmodell RGB, YIQ (YUV), HSL usw.) des Lichtes.

Die von einer Lichtquelle ausgesendete Energie wird so für den in das Auge einfallenden Strahl berechnet.

rayalgo

Obige Abbildung veranschaulicht die Vorgehensweise. Im Folgenden wird auf die dort gemachten Bezeichnungen für die verschiedenen Strahlen zurückgegriffen. Der Algorithmus arbeitet also wie folgt:

Das Aussenden der reflektierten Strahlen und der transmittierten Strahlen ergibt ein rekursives Verfahren. Die Tiefe der Rekursion wird durch eine maximale Rekursionstiefe begrenzt. Der Algorithmus liefert also einen Strahlbaum:

raytree

Ändert sich die Kameraposition, d.h. der Punkt von dem aus die Kamerastrahlen erzeugt werden, oder bewegt sich ein Objekt, dann müssen eventuell große Teile der Strahlbäume neu aufgebaut werden.

Als Anzahl der Strahlen, die bei der Berechnung eines Bildes anfallen, erhält man also:

\begin{displaymath}r=\char93 \mbox{EyeRays} * (2^{\mbox{RecDepth}}-1) * (\char93 \mbox{ShawdowRays}+1) \end{displaymath}

Für jeden dieser Strahlen muss der Schnittpunkttest durchgeführt werden. Implementiert man dies auf sehr naive Art und Weise, erfordert dies z.B. ein lineares Suchen über alle Objekte. Die Zeit zur Berechnung eines Schnittpunktes bezeichnen wir im folgenden mit $t_i$. Will man weiterhin nicht nur ein Einzelbild, sondern eine ganze Sequenz von Bildern erzeugen, vervielfacht sich der Aufwand mit der Länge der Sequenz $s$. Die Laufzeit beträgt somit (in Einheiten eines Schnittpunkttests) ohne Berücksichtigung der Berechnungen des Beleuchtungsmodells und anderer Vorbereitungs- und Nachbereitungszeiten:

\begin{displaymath}T=s*r*t_i \end{displaymath}

Setzt man folgende, durchaus übliche Größen ein: $\char93 \mbox{EyeRays}=1024\times 1024$, $\mbox{RecDepth}=4$, $\char93 \mbox{ShawdowRays}=5$ erhält man:

\begin{displaymath}T\approx s*t_i*10^8 \end{displaymath}

Nun setzen Beschleunigungsverfahren so an, dass alle Faktoren dieser Formel reduziert werden, d.h. die Anzahl der zu untersuchenden Strahlen wird reduziert und das Auffinden sowie die Berechnung der Schnittpunkte wird beschleunigt.


next up previous contents
Nächste Seite: Der Algorithmus Aufwärts: Ray Tracing Vorherige Seite: Ray Tracing   Inhalt
© 2004/2005, A. Formella & D. Fellner, Universität Braunschweig