Berechnung weicher Schatten beim Ray Tracing

  • Typ:Studienarbeit
  • Datum:2006
  • Autor(en):Thorsten Harter, Markus Oßwald

Übersicht

Die Computergrafik nähert sich immer mehr dem Ziel, Bilder zu erzeugen, die mit dem bloßen Auge nicht von der Realität zu unterscheiden sind. Ein weit verbreitete Methode ist dabei das Ray Tracing, bei dem die Ausbreitung von Lichtstrahlen durch die Gesetze der geometrischen Optik beschrieben wird. Es ist besonders dazu geeignet, Reflexionen an spiegelnden Oberflächen naturgetreu darzustellen. Der Algorithmus ist sehr intuitiv und einfach zu implementieren. Ray Tracing ist rechenaufwendig und wurde bisher immer dann eingesetzt, wenn eine möglichst hohe Qualität der Bildsynthese gefragt war. Es gibt jedoch Bestrebungen, Ray Tracing echtzeitfähig zu machen, zum Beispiel durch die Ausnutzung der Möglichkeiten neuer Grafikhardware.

Beispielszenen, die zur Prüfung des neuen Verfahrens zur Berechnung von weichen Schatten erzeugt wurden

Beim gewöhnlichen Ray Tracing können nur harte Schatten simuliert werden, da lediglich geprüft wird, ob eine Punktlichtquelle sichtbar oder verdeckt ist. In der Realität hat jedoch jede Lichtquelle eine Ausdehnung, weshalb Schatten keine scharfe Grenze haben, sondern einen Bereich, der Halbschatten genannt wird. In diesem Bereich ist die Lichtquelle teilweise sichtbar und teilweise verdeckt. Um diesen "weichen" Übergang beim Schattenwurf auch beim Ray Tracing zu erhalten, existieren etliche Verfahren, die sich in der Qualität der erzeugten Bilder und dem nötigen Rechenaufwand unterscheiden.

Auf der SIGGRAPH 2005 wurde ein neuer Algorithmus [Laine et al. 2005] vorgestellt, der die Berechnung weicher Schatten soweit beschleunigen soll, dass nun auch über deren Verwendung beim Echtzeit Ray Tracing nachgedacht werden kann. Da der Speicherverbrauch jedoch unbefriedigend hoch war, sollte nun ein abgeänderter Algorithmus implementiert werden und dessen Geschwindigkeit und Speicherverbrauch mit verschiedenen Beispielszenen getestet werden. Zunächst musste in C++ ein Ray Tracer implementiert werden. Um diesen zu beschleunigen und um die nötigen Vorraussetzungen für den neuen Algorithmus zu schaffen, wurde dann eine Datenstruktur zur räumlichen Unterteilung der Szene implementiert, ein sogenannter kd-Baum. Schließlich wurden mit dem neuen Algorithmus verschiedene Tests durchlaufen (siehe Beispielszenen) und die Ergebnisse mit denen des ursprünglichen Algorithmus verglichen.

Ergebnis

Der neue Ansatz zur Berechnung von weichen Schatten erreicht nicht die Leistung des ursprünglichen Algorithmus. Sogar in den am meisten geeigneten Testszenen war die Rechenzeit dreimal so lang. Positiv kann angemerkt werden, dass der Speicherverbrauch reduziert wurde.

Die Benutzung eines kd-Baumes als Datenstruktur zur Speicherung der Kanten ist problematisch, da eine ungünstige gewählte Unterteilungsstrategie zu langen Rechenzeiten führen kann. Solange sowohl das Ray Tracing als auch die Berechnung von weichen Schatten auf demselben kd-Baum und damit auf derselben räumlichen Unterteilung basiert, wird es schwer sein, optimale Parameter zu finden. Ein kd-Baum mit kleinen Quaderhüllen, der zu kurzen Renderzeiten in Szenen ohne Schatten führt, kann für ein Szene mit weichen Schatten weniger geeignet sein, weil viele Kanten in mehr als einer Hülle untergebracht und dadurch oft abgearbeitet werden müssen.

Links

Soft Shadow Homepage unseres Betreuers Ulf Assarsson (Chalmers University of Technology, Göteborg)