Shadow Mapping of Large Environments

Werbung
Diplomarbeitspräsentationen der Fakultät für Informatik
Shadow Mapping of Large Environments
Daniel Scherzer
Diplomstudium
Informatik
Technische Universität Wien
Institut für Computergraphik und Algorithmen
Arbeitsbereich Computergraphik
Betreuer: Werner Purgathofer & Michael Wimmer
Problemstellung
Grundidee
Ziel dieser Arbeit ist es Schatten in Echtzeit ohne Artefakte zu
generieren. Dabei erweisen sich ausgedehnte Umgebungen mit
tausenden von Objekten als die schwierigste Aufgabe. Zur
Lösung existieren zwei verbreitete Algorithmen. Einerseits das
Shadow Volume Verfahren, welches pixelgenaue Schatten
liefert, dabei aber nur bei polygonarmen Objekten in Puncto
Geschwindigkeit mit dem zweiten Verfahren, Shadow Mapping,
mithalten kann. Shadow Mapping ist im Gegensatz dazu eine
Bildraum Methode, die den z-Buffer verwendet. Dies hat den
Vorteil mit allen Objekten umgehen zu können, die mit einem zBuffer darstellbar sind, während Shadow Volumes nur mit
geschlossenen Polyedern umgehen können.
Shadow Mapping wird in zwei Schritten durchgeführt:
Im ersten Schritt wird die Szenerie vom Licht aus gesehen
gerendert und die so gewonnenen Tiefenwerte in der
sogenannten Shadow Map abgespeichert (siehe Grafik rechts).
Im zweiten Schritt wird die Szenerie von der Kamera aus
gerendert. Dabei wird jeder Punkt vom Kamerakoordinatensystem in das Koordinatensystem des Lichtes gebracht. Dort
wird dieser Punkt mit dem dazugehörigen Punkt aus der Shadow
Map verglichen: Liegt der Punkt aus der Shadow Map näher, so
muß der Kamerapunkt im Schatten liegen und wird daher dünkler
dargestellt.
Problem: Perspective Aliasing
Problem: Projection Aliasing
Problem: Inkorrektes Self-Shadowing
Unter einer perspektivischen Sicht auf eine Szenerie werden
nahe Objekte größer dargestellt als entfernte Objekte. Dadurch
werden auch die Schatten, die nahe der Kamera zu liegen
kommen, vergrößert. Da dies in einer Shadow Map
normalerweise keine Berücksichtigung findet (siehe Grafik links,
unterhalb), kommt es hier zum sogenannten Perspective
Aliasing. Hierbei wird in der Nähe der Kamera, aufgrund von
unzureichender Auflösung, die Pixelstruktur der Shadow Map
sichtbar, was zu Artefakten, wie im Bild unterhalb, rechts zu
sehen, führt. Das rote Pixel ist deutlich als solches zu erkennen
und der resultierende Schatten weißt hier eine deutlich
treppenförmige Silhouette auf.
Beim Erstellen der Shadow Map werden Oberflächen die
ungefähr im rechten Winkel zur Shadow Map stehen nur spärlich
gesampled (siehe Grafik links, unterhalb). Ein in der Shadow
Map von einem Pixel abgedeckter Bereich umspannt von der
Kamera aus gesehen viele Pixel. Dadurch werden beim rendern
der Schatten einzelne Shadow Map Pixel vergrößert, was zum
sogenannten Projection Aliasing führt (siehe Bild rechts,
unterhalb, in den rot eingekreisten Regionen).
Der Grund für Inkorrektes Self-Shadowing liegt im Resampling:
Die im Koordinatensystem der Kamera erzeugte Koordinate wird
in das Koordinatensystem der Lichtquelle transformiert (zKam).
Dort wird sie mit dem entsprechenden Lichtsample in der
Shadow Map verglichen (zLicht). Wie in der folgenden Abbildung
auf der linken Seite zu sehen, kann der Shadow Map Test zu
einem falschen Ergebnis führen, wenn ein ungünstiger
Resampling Fall eintritt. Dies resultiert in Moiré Effekten, zu
sehen im Bild rechts, unten.
Kamerasicht
zKam > zLicht
Shadow map
Inkorrektes Self-shadowing
Lösung für Perspective Aliasing
Lösung für Projection Aliasing
Lösung für Inkorrektes Self-Shadowing
Da zu wenig Auflösung in der Shadow Map für die Bereiche nahe
der Kamera aufgewendet wird, kann in den meisten Fällen eine
Umverteilung der Shadow Map Auflösung helfen (siehe folgende
Grafik und Bild).
Eine exakte Lösung für Projection Aliasing ist mit
Echtzeitmethoden momentan nicht machbar. Wir greifen daher
zu einem Trick und verwenden das Phong-Beleuchtungsmodel
zu unserem Vorteil, um etwaige Artefakte zu verstecken. Die
Lichtintensität der diffusen Beleuchtungskomponente verhält
sich nach Lambert wie
Eine mögliche Lösung besteht darin die Geometrie für den
Shadow Map Test etwas von der Lichtquelle zu entfernen, also
einen sogenannten Bias einzuführen (siehe folgende Grafik
links). Dies ergibt einen robusteren Shadow Map Test, weil die
gemessene Distanz zum Licht vergrößert wird, die
Schattengrenze also geringfügig vom Licht weggerückt wird.
Dies hilft inkorrektes Self-Shadowing zu vermeiden (siehe
folgendes Bild rechts).
I = IL max ( dot ( L, N ), 0 ).
Um das in Echtzeit zu bewerkstelligen wird eine zusätzliche
perspektivische Transformation im Lichtraum definiert. Diese
wird so gewählt, dass Objekte nahe der Kamera eine
Vergrößerung erfahren und weiter entfernte Objekte verkleinert
werden (siehe folgende Grafik).
Das bedeutet, daß gerade jene Teile des Bildes mit potentiell
hohem Projection Aliasing ein kleines I aufweisen und daher
stark abgedunkelt sind, was zu einem Verstecken der Artefakte
führt (siehe Bild rechts, unten). Der ambiente Term erhellt
beschattete und nicht beschattete Bereiche gleichermaßen,
kann also hier außer Acht gelassen werden und der spekulare
Term wird nur dann groß, wenn kaum Projection Aliasing
vorhanden ist.
L
N
zKam < zLicht+bias
Kein Self-shadowing
Ergebnisse
Wir haben die oben genannten Verfahren kombiniert und in eine
Echtzeit Anwendung integriert. Rechts nebenstehend ist ein
Ergebnisbild zu sehen.
Eine Szenerie mit über 10.000 Objekten wird hier in Echtzeit um
artefaktfreie Schatten ergänzt, ohne dass es zu zusätzlichen
Geschwindigkeitseinbußen gegenüber dem einfachen Shadow
Mapping kommt.
Literatur
Kontakt
[WSP2004] M. Wimmer, D. Scherzer, and W. Purgathofer; Light space perspective shadow maps; In Proceedings of Eurographics
Symposium on Rendering 2004
Daniel Scherzer ([email protected])
Michael Wimmer ([email protected])
http://www.cg.tuwien.ac.at/research/vr/lispsm
Herunterladen