Global Illumination Effects
Transcription
Global Illumination Effects
Global Illumination Effects Christian A. Wiesner Zusammenfassung Globale Beleuchtungstechniken spielen eine große Rolle bei der Entwicklung von Animationsfilmen. Da diese vorberechnet werden, ist die Berechnungsdauer nicht das entscheidende Kriterium, aber die Künstler wollen die Ergebnisse so schnell wie möglich zu sehen bekommen. Es existiert eine Vielzahl von Algorithmen und wir werden uns davon zwei im Speziellen anschauen. Zum Einen ist da Radiosity, welche im Gegensatz zu Raytracing für die Simulation von diffusen Lichtumgebungen eingesetzt wird. Die andere Technik, die wir uns anschauen werden, ist Ambient Occlusion, welche in der gegenwärtigen Version von PIXAR’s RenderMan eingesetzt wird. 1 Einleitung Globale Beleuchtungstechniken sind in der Erstellung von Animationsfilmen unabdingbar geworden. Dies ist in aktuellen Filmen, wie z.B. Up und Toy Story 3 von PIXAR zu sehen, in denen die globalen Beleuchtungstechniken zu realistischen Beleuchtungen der Szene führen. Ein weiterer Effekt, der durch globale Beleuchtung erreicht wird, ist der der weichen Schatten. Diese entstehen dadurch, dass in der Realität keine Punktlichtquellen existieren. Jede real existierende Lichtquelle besitzt eine räumliche Ausdehnung. Durch diese flächigen Lichtquellen entstehen die angesprochenen weichen Schatten. Der Effekt des sogenannten Subsurface Scatterings (zu deutsch: Volumenstreuung) ist ein weiterer, der durch globale Beleuchtung erreicht wird. Dieser Effekt entsteht durch die Streuung des Lichts in transluzenten Materialien. Es gibt verschiedene Algorithmen, die jeweils einen Teil von globaler Beleuchtung erfüllen, wie z.B. die Technik des Photon Mappings, oder der Ambient Occlusion, die wir in dieser Ausarbeitung genauer betrachten wollen. Darüber hinaus existieren, wie bereits erwähnt, viele weitere. Ein gemeinsames Ziel dieser Algorithmen ist das Lösen eines Teils der Rendering Equation, die wir nun betrachten werden. Globale Beleuchtungstechniken haben immer noch das Problem, dass sie nicht in Echtzeit darstellbar sind. Dies liegt an der sehr aufwendigen Berechnung, sobald sich die Szene ändert. Zwei bekannte Vertreter um einen Teil von globaler Beleuchtung zu erreichen sind Raytracing und Radiosity. Radiosity wollen wir in dieser Ausarbeitung im Speziellen betrachten. 2 Grundlagen Energie wird mithilfe von Photonen transportiert. Die Energie eines einzelnen Photons errechnet sich wie folgt: E = hv (1) Hierbei steht h für die Planck-Konstante und v für die Frequenz des Lichts. Damit ist die Energie eines Photons nur von der Frequenz des Lichts abhängig. Um den Lichttransport in einer Szene beschreiben zu können, benötigen wir verschiedene radiometrische Einheiten die in folgender Tabelle zusammengefasst sind: Strahlungsenergie Strahlungsleistung Irradiance Radiosity Strahlungsintensität Q Φ = dQ dt dΦ E = dA dΦ B = dA dΦ I = d~ω J W W m2 W m2 W sr Table 1: Radiometrische Einheiten Mit diesen Einheiten lässt sich nun die Strahlung beschreiben: L= d2 Φ dAd~ ω cosθ (2) Damit ist die Strahlung die Strahlungsleistung einmal abgeleitet nach der Fläche und einmal abgeleitet nach dem Richtungsvektor ω ~ gewichtet mit einem Winkel θ. Der Winkel θ ist der Winkel zwischen ω ~ und der Normalen der Oberfläche des betrachteten Punkts. cosθ beschreibt das Lambertsche Gesetz, welches 1 ist, wenn der Vektor ω ~ in Richtung der Normalen zeigt und 0 wenn er orthogonal zu ihr ist. Eine weitere Annahme die wir treffen ist, dass die Strahlung auf einem Strahl sich nicht ändert, also konstant bleibt. Die Irradiance beschreibt die Stärke des einfallenden Lichts. Sie wird durch folgende Formel beschrieben: Z Ei = Li cosθi dω~i (3) Ω Wie in Abbildung 1 zu sehen integrieren wir über die Hemisphäre eines Punktes i und sammeln die einfallende Strahlung Li ein. Diese wird mit dem Lambertschen Gesetz gewichtet. Nun haben wir alles was nötig ist um die BRDF (Bidirectional reflectance distribution function) zu beschreiben[Nicodemus 1965]. Wir wollen hier den anisotropen 6-dimensionalen Fall betrachten: fr (ω~i , ~ x, ω~r ) = dLr (~ x, ω~r ) Li (~ x, ω~i )cosθi dω~i (4) den er reflektiert. Beim Reflexionsteil testen wir ~ x gegen alle in der Szene befindlichen Patches ~ y. Hierbei betrachten wir wieviel Strahlung L von dem Patch ~ y erhält, gewichtet mit der BRDF fr und einem Geometriefaktor G, welcher von der räumlichen Lage der Patches zueinander und deren Entfernung abhängt. Zusätzlich muss die Sichtbarkeit V des Patches ~ y überprüft werden, die entweder 1 oder 0 ist. 3 Abbildung 1: Die Irradiance ω~i beschreibt den Richtungsvektor des einfallendes Lichts und ω~r den des reflektierten Lichtstrahls. Die Richtungsvektoren ω ~ sind durch die Winkel φ zur Normalen und die Winkel θ auf der Basis der Hemisphäre parametrisiert. ~ x ist ein Punkt auf der Oberfläche. Man kann diese Gleichung auch 7-dimensional betrachten, indem man noch zusätzlich die Wellenlänge des Lichts mit berücksichtigt. Damit gibt uns die Gleichung an, wieviel Licht an einem Punkt ~ x in Richtung ω~r reflektiert wird, wenn das Licht im Winkel ω~i auf den Punkt trifft. Integrieren wir nun über die gesamte Hemisphäre, bekommen wir unsere Reflexionsgleichung für einen Ortsvektor ~ x und einen Richtungsvektor ω~r : Z Lr (~x, ω~r ) = fr (ω~i , ~ x, ω~r )Li (~ x, ω~i )cosθi dω~i (5) Ω Hierbei wird die einfallende Strahlung Li mit der BRDF fr und dem Lambertschen Gesetz gewichtet. Nachdem wir die Szene in diskrete Patches unterteilt haben, können wir die Renderinggleichung aufstellen[Kajiya 1986]. Sie lautet: L(~x, ω~r ) = Le (~ x, ω~r )+ Z Radiosity Szenen in denen nur diffuse Reflexionen betrachtet werden können mittels Radiosity simuliert werden. Radiosity ist ein Finite-Elemente-Verfahren aus dem Jahre 1984. Es wurde von Goral et al. [Goral et al. 1984] entwickelt und spielt trotz seines Alters immer noch eine große Rolle in der Computergrafik. Es hat seinen Ursprung in der thermischen Hitzeübertragung. Dadurch, dass wir eine diffuse Lichtszene betrachten, ist diese Betrachterunabhängig und die Beleuchtung bleibt konstant, solange die Objekte in der Szene nicht verändert werden. Wollen wir uns nun im Folgenden die diskrete Radiosity-Gleichung anschauen. Sie lautet: X Bj Fij (7) Bi = Bie + ρi j Bi bezeichnet die Radiosity eines Patches i. Was bei der Gleichung sofort auffällt, ist, dass es sich, wie bei der Renderinggleichung, um eine rekursive Formel handelt. Ansonsten lässt sich die Radiosity, wie die Renderinggleichung auch, in einen Emissionsteil Bie und einen Reflexionsteil aufspalten. Dadurch, dass wir von einer diffusen Szene ausgehen, ist die BRDF der Renderinggleichung nun nur von der Materialeigenschaft des Patches i abhängig. Deshalb können wir diese Konstante ρi aus dem Integral herausziehen. Dies vereinfacht die Gleichung ungemein und wir brauchen nur noch über die empfangene Radiosity von allen Patches j aufsummieren, gewichtet mit einem Formfaktor. 3.1 Formfaktoren Der Formfaktor zwischen einem Patch i und einem Patch j ist wie folgt definiert: Z Z 1 cosθi cosθj Fij = dAj dAi (8) Ai Ai Aj πr2 Die Radiosity eines Patches i verteilt sich auf der Fläche dessen. Deshalb wird sie durch die Fläche (6) Ai geteilt. Nun wird über beide Flächen integriert. Der resultierende Formfaktor ist abhängig von den beiden Winkeln θi und θj der beiden Patches Sie gibt an wieviel Licht an einem Patch ~ x in zueinander (Lambertsches Gesetz). Außerdem Richtung ω~r geschickt wird. Was die Berechfällt die Radiosity mit zunehmender Entfernung nung dieser Gleichung so aufwendig macht ist die r ab. Rekursion. Dies ist daran zu sehen, dass die RadiZur Berechnung der Formfaktoren gibt es ance selbst wieder auf der rechten Seite der Gleichung auftaucht. Das Licht, dass in Richtung ω~r verschiedene Möglichkeiten, wie in Abbildung 2 zu sehen. Da sind zum einen die analygesendet wird lässt sich aufteilen in den Teil Le , tischen Lösungsansätze und zum anderen die nuwelchen der Patch ~ x selbst emittiert und den Teil, fr (ω~i , ~ x, ω~r ) · L(~ y , −ω~i ) · V (~ x, ~ y ) · G(~ x, ~ y ) · dAy y ~S Abbildung 2: Übersicht über die verschiedenen Berechnungsmöglichkeiten der Formfaktoren Abbildung 3: Das Nusselt Analog merischen. Wesentlich verbreiteter sind die numerischen. Diese unterteilen sich in Ansätze die Flächen zu Flächen berücksichtigen und Ansätze die Flächen von einem Punkt aus betrachten. Bei den Ansätzen von einem Punkt aus, kann man zwischen den Algorithmen unterscheiden, die über eine bestimmte Fläche sampeln und solche die über die Hemisphäre sampeln. Wir wollen uns nun den Hemicube Algorithmus genauer anschauen, welcher ein Vertreter der Algorithmen ist, die über die Hemisphäre sampeln. 3.2 Hemicube Algorithmus Der Hemicube Algorithmus ist eine Approximation der Hemisphäre. Betrachten wir zunächst einmal das Nusselt Analog, welches zur Berechnung der Formfaktoren über die Hemisphäre benutzt wird. Zunächst wird die Hemisphäre des Patches i betrachtet. Der zu testende Patch j wird in einem ersten Schritt auf diese Hemisphäre projiziert. Diese Projektion wird ein zweites Mal auf die Grundfläche der Hemisphäre projiziert. Die so erhaltene Fläche A teilen wir durch die Gesamtfläche der Grundfläche B um unseren Formfaktor Fij zu erhalten. Dieser Sachverhalt ist in Abbildung 3 dargestellt. Die Idee des Hemicube Algorithmus besteht nun darin die Hemisphäre durch einen sogenannten Hemicube zu approximieren, um die Berechnung zu beschleunigen. Den Hemicube eines Patches i erhalten wir, indem wir um den Mittelpunkt in Richtung der Normalen einen Würfel erstellen und nur die obere Hälfte betrachten. Was nun zur Bestimmung der Formfaktoren nötig ist, ist die Vorberechnung der sogenannten Delta Formfaktoren. Diese entsprechen den einzelnen Quadraten des Würfels. Nun werden die von der Projektion des Patches j überdeckten Formfaktoren zusammengezählt und aufsummiert. Den finalen Formfaktor erhalten wir also durch die Gleichung: Fij = X q ∆Fq (9) Abbildung 4: Beispielbild des Hemicubes. In dieser Szene werden der Lampenschirm und die Tischoberfläche auf den Hemicube projiziert. Dieser Algorithmus kann auch auf der Grafikkarte performant ausgeführt werden[Lum et al. 2005][Coombe et al. 2004]. Betrachten wir dazu die Szene in Abbildung 4. Als Viewport nehmen wir den Mittelpunkt des Patches i. Die jeweilige Seite des Hemicubes nehmen wir als Projektionsebene. Nun führen wir das Rendering aus und lesen die Informationen des Farbbuffers aus. Im Farbbuffer stehen in den einzelnen Pixeln die jeweiligen IDs der Patches in der Szene. Somit wird die Sichtbarkeitsüberprüfung mithilfe des Tiefentests gelöst und muss nicht über aufwendiges Raytracing gelöst werden. 3.3 Radiosity Algorithmus Nachdem wir uns nun die Berechnung der Formfaktoren im Detail angeschaut haben, können wir den kompletten Radiosity Algorithmus betrachten. Zuerst müssen die Formfaktoren zwischen den Patches mithilfe eines Algorithmus vorberechnet werden. Nachdem dies erledigt ist, geht es darum folgende rekursive Gleichung zu lösen: X Bi = Bie + ρi Bj Fij (10) j Diese Gleichung lässt sich in folgendes lineares Gleichungssystem (LGS) überführen: B1 1 − ρ1 F11 −ρ1 F12 ... −ρ1 F1n 1 − ρ2 F22 . . . −ρ2 F2n B2 −ρ2 F21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bn −ρn Fn1 −ρn Fn2 . . . 1 − ρn Fnn E1 E = 2 (11) ... En Die Emissionskoeffizienten Ei und die ρi sind vorgegeben, während die Formfaktoren Fij vorberechnet werden müssen. Nun sind die einzigen Unbekannten die Bi , welche mittels der Lösung des LGS bestimmt werden. Hierbei eignen sich Algorithmen, wie z.B. Gauss-Seidel. Betrachten wir noch einmal die rekursive Radiosity-Formel. Dadurch, dass B auch auf der rechten Seite auftaucht, können wir dies wieder aufspalten. Was entsteht ist eine Von-NeumannReihe, wie in folgender Gleichung dargestellt: B = E + T B = E + T E + T 2B = ... = T 0E + T 1E + T 2E + T 3E + . . . = B (0) + B (1) + B (2) + B (3) + . . . (12) Dies bedeutet anschaulich, dass wir die Lichtverhältnisse nach jeder Reflexion betrachten. Mit jeder weiteren Reflexion wird der Energiebeitrag geringer. 3.4 Shooting versus Gathering Es gibt zwei Möglichkeiten die Radiosity für die einzelnen Patches zu bestimmen. Die eine Methode ist die des Shootings. Hierbei betrachten wir einen konkreten Patch j und dessen Einfluss auf die Szene. Bj hat auf die j-te Spalte der Matrix T Einfluss. Die andere Möglichkeit ist die des Gatherings. Hierbei betrachten wir einen konkreten Patch i und berücksichtigen alle auf die Bi Einfluss nehmenden Faktoren. Dies entspricht der i-ten Spalte der Matrix T . 3.5 Bewertung Radiosity ist zweifelsohne ein älteres Verfahren. Nichtsdestotrotz ist es immer noch weitverbreitet, da es ein sehr ausgereiftes Verfahren für die Modellierung von diffusen Szenen ist. Das erhaltene Ergebnis kann mit anderen Beleuchtungsverfahren, wie z.B. Raytracing, kombiniert werden. 4 Ambient Occlusion Eine weitere Technik, die wir in dieser Ausarbeitung betrachten wollen, ist die des Ambient Occlusion [Landis 2002]. Das in der Computergrafik sehr häufig verwendete, weil schnell zu berechnende, Verfahren ist das Phong Beleuchtungsmodell. In diesem Modell wird eine konstante minimale Lichthelligkeit angenommen, die durch diffuse Mehrfachreflexionen entsteht. Für jedes Material wird eine konstante Reflexion angenommen, was zu nicht sehr realistisch wirkenden Bildern führt. Eine Möglichkeit, dem entgegenzusteuern, ist die Ambient Occlusion. Diese Technik beruht im Wesentlichen auf der Verdeckung der Sichtbarkeits-Hemisphäre eines Punktes. Je weniger die Hemisphäre verdeckt ist, desto heller erscheint dieser Punkt. Das Resultat ist, dass verdeckte Gegenden dunkler erscheinen, als solche, die relativ offen liegen. Nachdem die neuen ambienten Reflexionskoeffizienten für jeden Punkt vorberechnet wurden, können diese mit dem gewöhnlichen Phong Beleuchtungsmodell multipliziert werden. Die ambiente Reflexion ist dann nicht mehr konstant, sondern variiert auf der Oberfläche des Objektes. Nun gibt es verschiedene Methoden die Ambient Occlusion zu berechnen. Im Folgenden wollen wir zwei Techniken näher betrachten, die auf der GPU (Graphics Processing Unit) ausgeführt werden. Zum einen wäre da die Ambient Occlusion im Screen Space, die zwar relativ ungenau, dafür aber schnell durchzuführen ist. Zum anderen wollen wir die Berechnung der Ambient Occlusion im Object Space betrachten, die wesentlich genauer ist. Im Gegenzug ist sie aber relativ teuer. 4.1 Screen Space Ambient Occlsuion Die Screen Space Ambient Occlusion (SSAO) kann komplett auf der Grafikkarte ausgeführt werden. Sie benötigt keinerlei Vorberechnungen und ist unabhängig von der Szenenkomplexität. Die wesentliche Idee des Verfahrens ist, die Verdeckung der Hemisphäre nicht durch teures Raytracing zu berechnen. Stattdessen greift sie auf Informationen des Tiefenbuffers zurück und führt dort das Raytracing durch. Die SSAO sampelt um jeden Pixel in einem bestimmten Muster. In dem Spiel Crysis mit der CryEngine 2 wurde diese Technik das erste Mal verwendet[Mittring 2007]. Hierbei wurden zum Sampeln dreidimensionale Kugeln verwendet. Die Verdeckung jedes einzelnen Punktes wird dabei durch den Tiefentest mit den anderen Punkten realisiert. Hierbei ist es wichtig, dass Punkte mit starkem räumlichen Abstand kaum Einfluss auf die Überdeckung des Punktes haben. Das Ergebnis sind teilweise sehr verrauschte Bilder, sodass diese meist nochmals verwaschen werden, um weiche Übergange zu erhalten. Es handelt sich bei der SSAO um eine grobe Approximation, wenn die Rechenzeit entscheidend ist. Damit findet sie vor allem in Computerspielen Verwendungen, wo schnelle Berechnungen vonnöten sind und es sich meist um sehr dynamische Szenen handelt. 4.2 Object Space Ambient Occlsuion Bei der Technik der Object Space Ambient Occlusion (OSAO) handelt es sich um ein vergleichsweise genaues, aber rechenaufwendigeres Verfahren. Hierbei interpretieren wir einen Vertex als orientierte Scheibe[Bunnell 2005]. Der Radius der Scheibe wird durch die Größe der anliegenden Dreiecke berechnet. Hierbei verwenden wir den Satz des Heron zur Berechnung des Flächeninhaltes eines Dreiecks: p A = s(s − a)(s − b)(s − c) (13) wobei s = a+b+c der halbe Umfang des Dreiecks 2 ist. Was nun wahlweise als Textur im Pixelshader oder direkt im Vertexshader gespeichert wird, sind die Position, Normale und Fläche jeder Kreisscheibe. Zur Laufzeit greifen wir auf diese Informationen zurück um die Überdeckung zu approximieren. Dazu verwenden wir folgende Formel: 1− rcosθE max(1, 4cosθR ) q A + r2 Π (14) hierbei ist r der Verbindungsvektor zwischen dem Schatten-Emitter und dem Schatten-Empfänger (engl. Receiver). θR beschreibt den Winkel zwischen r und der Normalen des Empfängers. Dies bedeutet, dass Scheiben mit geringerer Fläche und größerem Abstand weniger Einfluss auf den Empfänger R haben und umgekehrt. Wie sofort auffällt, ist die Berechnung im Object Space wesentlich aufwendiger und stark abhängig von der Szenenkomplexität. Im Umkehrschluss bedeutet dies aber, dass die Ergebnisse wesentlich realistischer wirken, als die des Screen Space. Dies macht OSAO besonders interessant für Anwendungen, in denen Realismus wichtiger ist, als die Rechenzeit. Vor allem bei Animationsfilmen ist das der Fall, was sich auch daran sehen lässt, dass die aktuelle Version von PIXAR’s RenderMan OSAO verwendet. 4.3 Bewertung Alles in allem lässt sich sagen, dass Ambient Occlusion zu den gewünschten weichen Schatten führt und für statische Objekte vorberechnet werden kann. Es handelt sich hierbei um eine wesentlich neuere Technologie als Radiosity, sodass wir noch in den kommenden Jahren neue Entwicklungen in diesem Bereich erwarten können. In Abbildung sind die Ambient Occlusion maps für Modelle aus dem PIXAR-Film Cars zu sehen. 5 Ausblick und Bewertung Auch wenn bei Animationsfilmen die Berechnungszeit nicht das entscheidende Argument ist, benötigt die Film-Industrie immer noch schnellere Algorithmen. Zum einen bedeutet dies geringere Berechnungszeiten des finalen Films. Zum Anderen sollte man sich klar machen, dass hier Werkzeuge für Künstler entwickelt werden, die die Ergebnisse so schnell wie möglich sehen wollen, um Abbildung 5: Ambient Occlusion Ergebnisse ihrer Kreativität freien Lauf zu lassen. Ansonsten werden durch die Einführung von hochauflösenden Filmen und den nun recht weitverbreiteten 3DFilmen immer größere Anforderungen an den Realismus der Beleuchtung gestellt. Dem Zuschauer würde es sofort auffallen, falls ein Objekt falsch beleuchtet wird. Alles in allem lässt sich sagen, dass kein neu erscheinender Animationsfilm ohne globale Beleuchtungstechniken auskommt. Ansonsten spielt, wie bereits erwähnt, die Berechnungszeit bei Animationsfilmen nicht die entscheidende Rolle, da ein kompletter Animationsfilm Bild für Bild auf Großrechnern vorberechnet wird. Quellenangabe Bunnell, M. 2005. GPU Gems 2: Programming Techniques for High-Performance Graphics and General-Purpose Computation (Gpu Gems). Addison-Wesley Professional. Coombe, G., Harris, M. J., and Lastra, A. 2004. Radiosity on graphics hardware. In Proceedings of Graphics Interface 2004, Canadian Human-Computer Communications Society, School of Computer Science, University of Waterloo, Waterloo, Ontario, Canada, GI ’04, 161–168. Goral, C. M., Torrance, K. E., Greenberg, D. P., and Battaile, B. 1984. Modeling the interaction of light between diffuse surfaces. SIGGRAPH Comput. Graph. 18 (January), 213–222. Kajiya, J. T. 1986. The rendering equation. SIGGRAPH Comput. Graph. 20 (August), 143– 150. Landis, H. 2002. Production-Ready Global Illumination. In Siggraph Course Notes, vol. 16. Lum, E. B., liu Ma, K., and Max, N. 2005. N.: Calculating hierarchical radiosity form factors using programmable graphics hardware. Journal of Graphics Tools 10 . Mittring, M. 2007. Finding next gen: Cryengine 2. In ACM SIGGRAPH 2007 courses, ACM, New York, NY, USA, SIGGRAPH ’07, 97–121. Nicodemus, F. E. 1965. Directional reflectance and emissivity of an opaque surface. Appl. Opt. 4, 7 (Jul), 767–773.