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.