Raytracing
Transcription
Raytracing
Raytracing Ausarbeitung zum Seminarvortrag „Raytracing“ am 01.07.2011 Proseminar „How to make a Pixar Movie“ Technische Universität München Sebastian Wiendl Betreuer: Dipl.-Inf. Matthäus G. Chajdas Inhaltsverzeichnis 1. Was ist Raytracing? ......................................................................................................................... 2 2. 3. 1.1. Einleitung und Anwendungsmöglichkeiten ............................................................................ 2 1.2. Funktionsweise eines Raytracers ............................................................................................. 2 1.3. Pathtracing ............................................................................................................................... 4 Verbesserung der Laufzeit............................................................................................................... 5 2.1. Effizientes Sampling beim Pathtracing ................................................................................... 5 2.2. Raumpartitionierung................................................................................................................ 6 2.2.1. BVH – Bounding Volume Hierarchie ............................................................................. 6 2.2.2. BSP – Binary Space Partition .......................................................................................... 6 Zusammenfassung und Ausblick..................................................................................................... 7 Literaturverzeichnis ................................................................................................................................. 8 Abbildungsverzeichnis ............................................................................................................................ 8 1 1. 1.1. Was ist Raytracing? Einleitung und Anwendungsmöglichkeiten Raytracing ist, wie der Name schon sagt, eine Methode, bei der Lichtstrahlen verfolgt werden. Sie wird hauptsächlich in der Computergrafik zur Erstellung fotorealistischer Bilder verwendet. Raytracing arbeitet basierend auf physikalischen Gesetzen, wie Lichtreflexion und -brechung, und kann Grafiken erstellen, die schon heutzutage so realistisch sind, dass kaum mehr zwischen einer echten Fotografie und dem durch Raytracing erzeugten Bild unterschieden werden kann (siehe Abbildung 1). Obwohl heutige Rechner um ein vielfaches Leistungsfähiger sind, als noch vor 10 oder 20 Jahren, Abbildung 1 Ein durch Raytracing erstellter Ferrari werden erst nach und nach auch ganze Filme produziert. Beispiele hierfür sind Animationsfilme, wie „Cars“ (Disney, 2010), oder „Cloudy with a Chance of Meatballs” (Sony Pictures, 2011). Die Stärken des Raytracing sind vor allem: „realistic reflections, sharp shadows, and ambient occlusion“ (Per H. Christensen, 2006). (dt.: realistische Reflexionen, scharfe Schatten und die Umgebungsverdeckung). Echtzeitraytracing ist noch in seinen Anfängen, weil die Berechnungen immer noch zu umfangreich sind. Dieses Manko ist auch Hauptgegenstand der heutigen Forschung. Je mehr Objekte und Lichtquellen in einer Szene vorhanden sind, desto höher ist der Aufwand, ein Bild zu rendern. Deswegen werden viele Methoden eingesetzt, die der effizienteren Berechnung der Bilder dienen. Im Folgenden soll zunächst das Grundprinzip des Raytracing vorgestellt werden, um danach kurz einige Wege zur effizienteren Gestaltung anzusprechen. 1.2. Funktionsweise eines Raytracers Im Gegensatz zur Realität, in der das Licht von einer, oder mehreren Lichtquellen emittiert wird, dann auf Objekte auftrifft und entweder absorbiert, gebrochen und/oder gespiegelt wird, arbeiten Raytracer im Allgemeinen genau gegengesetzt. Die Funktionsweise beim sogenannten Backward Raytracing (im Gegensatz zum Forward Raytracing) ist wie folgt: Die Sicht auf die Szene ist durch einen Blickwinkel bestimmt, der von der Position der Kamera festgelegt ist. Dann legt man zwischen die Kamera und die Szene einen virtuellen Bildschirm, der als Projektionsfläche dient. 2 Nun fährt man schrittweise fort: 1. Es wird ein Strahl von der Kamera aus durch jedes Pixel der Projektionsfläche erzeugt. 2. Jeder einzelne Strahl wird auf Schnittpunkte mit allen Objekten untersucht 3. Nun wird mit dem Schnittpunkt des am nächsten gelegenen Objektes gearbeitet. Wird an dieser Stelle abgebrochen und die Farbe des Objektes für das entsprechende Pixel verwendet, erhalten wir ein solches Bild: Abbildung 2 Bild nach Schnittstellenberechnung 4. Von dort aus werden sogenannte Schattenstrahlen zu allen Lichtquellen ausgesendet. 5. Jetzt wird die Farbe des Objektes mit der akkumulierten Lichtintensität der Lichtquellen skaliert. Wird an dieser Stelle abgebrochen erhalten wir bereits eine plastisch Ansicht. Wird jetzt noch die Schattenberechnung mit eingebaut, so wäre das Bild bereits fertig berechnet, wenn alle Objekte in der Szene nur aus diffusen Materialien (also nicht spiegelnden Materialien) bestünden. Zur Schattenberechnung muss man Abbildung 4 Bild nach überprüfen, ob sich auf dem Weg zwischen Lichtquellenberechnung Lichtquelle und Schnittpunkt ein Objekt befindet, dass die Lichtquelle verdeckt. Wenn dies der Fall ist kommt kein Licht von dieser Lichtquelle an. Abbildung 3 Ausgabe, wenn die Schattenberechnung aktiviert ist 6. Ist das Material unseres Objektes spiegelnd, so wird der reflektierte Strahl erzeugt und die bisherige Farbe wird mit der Farbe des neuen Strahls (je nach Reflexionsgrad) gegengerechnet. Reflexion erfordert also rekursives Raytracing Abbildung 5 Fertiges Bild mit Reflexionen Bei der Rekursion zu Beachten: Bei spiegelnden Materialien würde sich im Programmablauf eine Endlosschleife ergeben, wenn man nicht beachtet, dass die Lichtintensität mit jeder Reflexion abnimmt. Fällt der Wert unter eine bestimmte Grenze, so ist die Schleife zu verlassen. Eine andere Methode ist die, dass man schon im Vornherein festlegt, dass es eine bestimmte Rekursionstiefe geben soll, also nur zum Beispiel die ersten zwei Spiegelungen berechnet werden. So wurde auch im Film Cars vorgegangen. 3 1.3. Pathtracing Bei den in 1.2. verwendeten Bildern wurde zur besseren Darstellung zusätzlich zu dem gerichtet einfallendem Licht noch ein Ambientes Licht hinzu gefügt. Dies ist eine einfache Methode, um schnell globale Beleuchtung zu erhalten, aber entspricht nicht der Wirklichkeit und kommt daher eigentlich als Lichtquelle nicht in Frage. Um dennoch globale Beleuchtung darstellen zu können, wurde das Raytracing erweitert. Die neue Methode nennt sich nun Pathtracing. Das Problem beim Raytracing war, dass Materialien, die nicht spiegelnd sind, nur sichtbar wurden, wenn direkt Licht von einer Lichtquelle auftrifft. Doch in Wirklichkeit wird Licht selbst von diffusen Materialien nicht vollkommen absorbiert, sondern ein Bruchteil wieder emittiert und an die Umgebung abgegeben, wodurch auch Objekte sichtbar werden, die im Schatten liegen, da sie indirekte Beleuchtung erhalten. Abbildung 6 Bild ohne Pathtracing und Ambientes Licht Ohne Pathtracing und Ambientes Licht sähe die Szene so aus: Beim Pathtracing wird nun, unabhängig vom Material des Objektes, bei jedem neuen Schnittpunkt immer ein neuer Strahl ausgesandt. Die Richtung des austretenden Strahles ist zunächst beliebig. Bei spiegelnden Materialien, werden die austretenden Strahlen jedoch vermehrt in die Reflexionsrichtung ausgesandt, die auch beim normalen Raytracing verwendet wird. Dadurch werden nun nicht nur die Lichteinflüsse direkter Lichtquellen berücksichtigt, sondern auch indirekte Lichteinflüsse. Ist nun zu einem gewissen Zeitpunkt die Lichtintensität wieder unter ein Minimum gefallen, wird abgebrochen. Der Name Pathtracing („Pfadverfolgung“) rührt daher, dass der Strahl sich auf seinem Weg durch die Szene nie aufspaltet, sondern wirklich nur einen Pfad verfolgt. Da aber der Strahl grundsätzlich bei jedem Schnittpunkt jetzt in eine beliebige Richtung wieder ausgesandt wird, kommt man jetzt nicht mehr damit aus, durch jedes Pixel nur einen Strahl auszusenden. Es muss durch jeden Bildpunkt eine Vielzahl an Strahlen ausgesandt werden, die sich ihren Weg durch die Szene bahnen. Am Schluss wird dem Pixel die durchschnittliche Farbe der Einzelstrahlen zugeordnet. Der große Nachteil des Pathtracing ist, dass eine immens hohe Anzahl an Strahlen durch jedes Pixel geschickt werden muss, damit die Szene klar und scharf erkennbar ist. Dies ist in Abbildung 7 und 8 gut zu erkennen. In Abbildung 7 ist ein starkes Rauschen im Bild sichtbar, was auf eine ungenügende Anzahl an Strahlen zurückzuführen ist. Abbildung 7 Rauschen aufgrund zu niedriger Strahlenanzahl 4 Abbildung 8 wesentlich höhere Strahlenmenge In Abbildung 9 ist eine Lichtverteilung in einer willkürlichen Szene gegeben. Die waagrechte Achse beschreibt hierbei den Winkel, in dem ein Strahl von einem Punkt austritt. Die senkrechte Achse stellt die Lichtintensität dar, die der Strahl in der jeweiligen Richtung antreffen würde. Mit den vier Samples in der Szene werden 4 Punkte des Graphen abgegriffen, mit denen das Gesamtintegral über die Lichtintensität abgeschätzt werden kann. Da das Licht gut verteilt ist, reichen hier auch wenige Strahlen aus, um dies zu tun. 2. 2.1. Abbildung 7 Lichtverteilung in der Szene Verbesserung der Laufzeit Effizientes Sampling beim Pathtracing Wie in Abbildung 9 schon gesehen, gilt es, durch eine genügend hohe Anzahl an Samples das Integral der Lichtintensität in der Umgebung abzuschätzen. Das Beispiel war noch einfach, da fast eine Gleichverteilung vorlag. In den meisten Szenen wird das aber nicht der Fall sein und man trifft eher Integrale folgender Form an: Es gibt eine Intensitätsspitze an einem Punkt. Dies kann passieren, wenn zum Beispiel ein Spotlight an eine Wand strahlt. Alle von dort aus sichtbaren Punkte würden in diese Richtung solch eine Spitze aufweisen. In Abbildung 10 werden fünf Intensitäten abgegriffen. Da aber kein Sample nahe dem Maximum ist, würde das Integral sehr schlecht angenähert werden und wir bekämen eine falsche Darstellung der Szene. Abbildung 8 schlechtes Sampling Abbildung 9 schlecht beleuchtete Szene Abbildung 11 zeigt eine Szene, die sehr verwinkelt ist und nur eine Lichtquelle hat. Dies wäre ein Beispiel, bei dem durch zufällige Samples nur ein gutes Ergebnis erzielt werden kann, wenn eine aberwitzig große Menge an Strahlen ausgesendet wird, damit das Integral fast exakt berechnet werden kann. Da dadurch aber der Rechen- und der damit verbundene Zeitaufwand untragbare Proportionen erreichen würde, muss die Zufälligkeit der Strahlen eingeschränkt werden. 5 Abbildung 10 gutes Sampling Was erwünscht ist, ist, dass die Samples wie in Abbildung 12 verteilt sind. Um dies zu erreichen, muss die Richtung der Strahlen so beeinflusst werden, dass sie tendenziell dorthin ausgesandt werden, wo viel indirektes Licht zu finden ist. Eine Möglichkeit, dies zu tun, ist, dass man sich abspeichert, wo bereits indirektes Licht mit hoher Intensität gefunden wurde und dann davon ausgehend zukünftige Strahlen mit hoher Wahrscheinlichkeit in diese Richtungen auszusendet. 2.2. Raumpartitionierung 2.2.1. BVH – Bounding Volume Hierarchie Bounding Volumes (BV) sind geometrische Objekte, meist Kugeln (Spheres), oder Quader (Boxen), die um die Objekte in der Szene gelegt werden. Ziel dessen ist, dass man, bevor man den Schnittpunkttest eines Strahles mit jedem einzelnen Teilobjektes eines großen, komplexen Objekts durchführt, nun zunächst einmal nur zu überprüfen braucht, ob der Strahl das begrenzende Bounding Volume schneidet. Abbildung 11 BVH eines Modells mit Bounding Boxes Die Bounding Volume Hierarchie ist eine hierarchische Anordnung der jeweiligen Bounding Volumes in Baumstruktur. Hierbei beinhaltet jeweils das BV im Vaterknoten auch Abbildung 12 BVH mit Boxen und als Baumstruktur alle BV seiner Kinderknoten. Dadurch werden dann nur die Schnittpunkte mit den BV der Kinderknoten überprüft, wenn der Test mit dem BV des Vaterknotens erfolgreich war. Durch rekursive Aufrufe wird so der endgültige Schnittpunkt ermittelt. Um effizient zu arbeiten, sollten die Bounding Boxes achsenorientiert sein. 2.2.2. BSP – Binary Space Partition Bei der BSP wird der gesamte Raum, ähnlich der BVH, rekursiv unterteilt. Der Unterschied hierbei ist jedoch, dass der Raum durch (Hyper-)Ebenen partitioniert wird. Wie der Name schon sagt, wird jeder Raum und Teilraum durch eine Ebene in zwei Teilräume geteilt („binary“). Durch die wiederholte Aufteilung erhält man am Ende wieder einen Baum, genauer gesagt, einen Binärbaum, der bei Schnittpunkttests rekursiv abgearbeitet werden 6 Abbildung 13 BSP mit Baumansicht kann. In den Blättern des Baumes befinden sich dann nur noch Teilräume, die jeweils ein Objekt enthalten. Erweiterungen dieses Verfahrens machen es zu einem effektiven Mittel. Hierzu werden die Ebenen an den Koordinatenachsen orientiert. Die so erstellten Bäume nennt man k-d-Bäume. Dies vereinfacht Schnittpunkttests um ein Vielfaches. Als Option kann man auch, anstatt jeden Raum durch eine Ebene in zwei Unterräume zu unterteilen, 4, oder 8 Unterräume erstellen. Dadurch hätte dann jeder Vaterknoten des resultierenden Baumes 4 bzw. 8 Kinderknoten. Die dadurch resultierenden Bäume heißen dann dementsprechend Quadtrees und Octrees. 3. Zusammenfassung und Ausblick Zusammenfassend ist zu sagen, dass Raytracing in seiner ursprünglichen Art nur für einfache Szenen geeignet ist, jedoch Dank Pathtracing und Raumpartitionierungen ein effektives Verfahren geworden ist, dass mehr denn je einen Trend erlebt. Kombiniert mit Photon Mapping lassen sich alle wesentlichen Effekte mit einem Durchlauf brillant darstellen. Photon Mapping ist eine weitere Erweiterung des Raytracing, mit dem die schnelle Berechnung von Kaustiken (siehe Abbildung 16) durchgeführt werden kann. Im Rahmen dieser Ausarbeitung wird darauf aber nicht weiter eingegangen. Abbildung 14 Darstellung einer Kaustik Im Moment ist Raytracing in seiner Gesamtheit noch nicht in Echtzeit anwendbar, doch in Zukunft wird dies kein Problem mehr sein. Echtzeit-Raytracing ist derzeit wohl der größte Forschungsschwerpunkt und durch weitere Prozessor- und Grafikkartenverbesserungen in den nächsten Jahren liegen Echtzeitanwendungen für die breite Masse in greifbarer Nähe. Ein Ansatz soll hier kurz erwähnt werden: „Cloud Gaming“ ist ein Begriff, der sich vermutlich durchsetzen wird. Die Idee dahinter ist, dass eine große Anzahl der heute populärsten Computerspiele nicht abgekapselt auf dem Rechner des Benutzers laufen, sondern, dass man online gegen diverse andere Gegner auf der ganzen Welt spielen kann. Da die Interaktion sowieso durch einen großen Server des Betreiberunternehmens geregelt werden muss, werden die umfangreichen Berechnungen des Spieles auch direkt von dem Server erledigt. Somit muss der einzelne Benutzer selbst keinen rechenstarken Computer mehr haben, sondern kann beispielsweise schon mit einem einfachen Laptop diese Spiele spielen. Abbildung 17 7 Literaturverzeichnis Disney. (19. Juli 2010). Cars - Offizielle Film Website Ein Disney / Pixar Film. Abgerufen am 8. Juni 2011 von http://www.disney.de/DisneyKinofilme/cars/main-de.html?cid=de Intel1. (09. 07 2011). Research@Intel · Future Lab: Cloud Gaming:. Abgerufen am 09. 07 2011 von http://blogs.intel.com/research/2011/03/future_lab_cloud_gaming.php#more Intel2. (09. 07 2011). Research@Intel · Wolfenstein gets ray traced - on your laptop!:. Abgerufen am 09. 07 2011 von http://blogs.intel.com/research/2010/09/wolfenstein_gets_ray_traced_-.php Per H. Christensen, J. F. (September 2006). Ray Tracing for the Movie ‘Cars’. Abgerufen am 8. Juni 2011 von http://graphics.pixar.com/library/RayTracingCars/paper.pdf Peter Shirley, R. K. (2003). Realistic Ray Tracing, Second Edition. A K Peters, Ltd. Sony Pictures. (8. Juni 2011). Cloudy with a Chance of Meatballs. Abgerufen am 8. Juni 2011 von http://www.sonypictures.com/movies/cloudywithachanceofmeatballs/ Sopra. (27. April 2011). Bounding Volume – Das Sopra Wiki. Abgerufen am 12. Juni 2011 von http://sopra.le-gousteau.de/Bounding_Volume Wikipedia. (13. Mai 2011). Binary Space Partitioning – Wikipedia. Abgerufen am 12. Juni 2011 von http://de.wikipedia.org/wiki/BSP Abbildungsverzeichnis Abbildung 1 Ein durch Raytracing erstellter Ferrari ............................................................................... 2 Quelle: http://www.hardwareinfos.com/bild.php?bild_datei=img/berichte/nvidia_fermi_7.jpg&bild_name=Nvidia+Fermi%3A+Fer rari+%28Raytracing%29 Abbildung 2 Bild nach Schnittstellenberechnung ................................................................................... 3 Quelle: selbsterstellt Abbildung 3 Ausgabe, wenn die Schattenberechnung aktiviert ist ......................................................... 3 Quelle: selbsterstellt Abbildung 4 Bild nach Lichtquellenberechnung ..................................................................................... 3 Quelle: selbsterstellt Abbildung 5 Fertiges Bild mit Reflexionen ............................................................................................ 3 Quelle: selbsterstellt Abbildung 6 Bild ohne Pathtracing und Ambientes Licht ...................................................................... 4 Quelle: selbsterstellt Abbildung 7 Rauschen aufgrund zu niedriger Strahlenanzahl ................................................................ 4 Quelle: http://de.wikipedia.org/wiki/Path_Tracing 8 Abbildung 8 wesentlich höhere Strahlenmenge ...................................................................................... 4 Quelle: http://de.wikipedia.org/wiki/Path_Tracing Abbildung 9 Lichtverteilung in der Szene............................................................................................... 5 Quelle: selbsterstellt Abbildung 10 schlechtes Sampling ......................................................................................................... 5 Quelle: selbsterstellt Abbildung 11 schlecht beleuchtete Szene ............................................................................................... 5 Quelle: http://fc06.deviantart.net/fs9/i/2006/074/7/f/Path_tracing_2_by_Hafunui.png Abbildung 12 gutes Sampling ................................................................................................................. 6 Quelle: selbsterstellt Abbildung 13 BVH mit Boxen und als Baumstruktur ............................................................................ 6 Quelle: selbsterstellt Abbildung 14 BVH eines Modells mit Bounding Boxes ........................................................................ 6 Quelle: Betreuer Abbildung 15 BSP mit Baumansicht....................................................................................................... 6 Quelle: selbsterstellt Abbildung 16 Darstellung einer Kaustik ................................................................................................. 7 Quelle: http://www.cs.utexas.edu/~fussell/courses/cs354spring2007/assignments/raytracing/ray_examples/caustic_cognac.jpg Abbildung 17 ......................................................................................................................................... 7 Quelle: selbsterstellt 9