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