Review

ASUS V8200 Deluxe

Shadow Buffer

Gleich den Hauptnachteil von Shadow Buffern zu Begin - Sie sind nicht im DirectX 8.1 Konzept vorgesehen, somit können sie nur per NVIDIA OpenGL Extension verwendet werden, was NVIDIA in ihren Angaben aber gut verschweigt. Bisher gab es folgende Ansätze zur Schattenerzeugung:

verschieden Techniken
verschiedene Techniken im Überblick

Auf eine Ebene projezierte Schatten (projected planar shadows) sind recht einfach zu erzeugen, allerdings funtionieren sie nur auf ebenen Flächen richtig. Schattentexturen (light maps) eignen sich für statische Lichter, haben aber den Nachteil, dass mit ihnen keine dynamische Schatten erzeugt werden können, zumindest wenn es auf Performance ankommt. Schattenvolumen (shadow volumes) eignen sich hervorragend für dynamische Szenen, allerdings steigt ihr Rechenaufwand, je komplexer die Szenen und Schatten werden Weiche Schattenränder sind mit ihnen jedoch auch nicht möglich. Durch die Kombination dieser Techniken konnte man bisher schon recht vielversprechende Ergebnisse erzielen.
Shadow Buffer besitzen den Vorteil, dass sie sich hervorragend für dynamische Szenen eignen und ihr Berechnungsaufwand fast unabhängig von der Komplexität der Szene ist. Sie arbeiten nach folgendem Prinzip.

Shadow Mapping Algorithmus
Shadow Mapping
Szene mit Shadow Mapping

Im ersten Durchlauf (Pass 1) wird die 3D-Geometrie aus der Sicht der Lichtquelle berechnet.

Shadow Mapping
Shadow Mapping
Berechnung aus der Sicht der Lichtquelle -> Z-Buffer als Texture zwischenspeichern -> Shadow Buffer

Im 2. Durchlauf (2. Pass) wird die 3D-Geometrie aus der Sicht des Betrachters berechnet.

Shadow Mapping
Sicht des Betrachters

Bevor der Pixel (auch Fragment genannt) in den Framebuffer geschrieben wird, wird überprüft, ob die Z-Position des Pixels (Pixelposition(XYZ) wird dazu relativ zum Licht bestimmt!!)  gleich der Z-Position im Shadow Buffer ist. Wenn JA, dann liegt der Pixel im Licht, andernfalls im Schatten.
im Schatten
das graue Fragment liegt im Schatten, da das grüne Fragment näher am Licht liegt (beide haben die gleiche XY Position vom Licht aus!!!)

im Licht
das graue Fragment liegt im Licht, das Shadow Buffer Z-Wert und der transformierte(aus der sicht des Lichtes!!) Z-Wert des Fragmentes übereinstimmen

Natürlich hat auch dieses Verfahren ein paar Nachteile, wie jedes der anderen auch. Eine Shadow Buffer benötigt Speicher. Je höher die Auflösung, desto feiner der Schattenumriss, vorallem wenn das Licht in einem flachen Winkel auf ein Objekt scheint und dies somit einen langen Schatten wirft.
 
Shadow Buffer Auflösung
je länger (weiter weg vom Licht) der Schatten, desto wichtiger wird eine hochauflösender Shadow Buffer

Da das Shadow Buffer Verfahren auf Pixeleben arbeitet, nicht auf Polygonebene, leidet es unter Aliasing-Artefakten. Da X,Y und Z unterschiedliche Dimensionen und Auflösungen haben muss hier mit einem Z-Bias nachgeholfen werden.

 Shadow Buffer Z-Bias
Z-Bias ist abhängig von der Bit-Tiefe und Größe (z.B. 512x412) des Shadow Buffers

Das Z-Bias Problem soll NVIDIA's Shadow Buffer mit einem eigenen Algorithmus("percentage closer filtering", welcher auch weichere Schattenränder erlaubt) lösen, was mich darauf hinweisen läßt, dass es auf NVIDIA's Webseite keinerlei Shadow Buffer Informationen gibt, lediglich auf das Thema Shadow Mapping wird eingegangen, was den gleichen Algorithmus verwendet, jedoch schon auf TNT Karten einsatzfähig war, dort aber unter seiner beschränkten 8 Bit Genauigkeit zu leiden hatte. Jedoch gibt es in den Detonator XP Treibern eine neue Extension "GL_NV_copy_depth_to_color" - welche sich für Shadow Buffer anbieten würde, aber bis NVIDIA meine Fragen beantwortet hat, bleibt dies nur Spekulation. Sobald ich neue Informationen zu diesem Thema habe werde ich diesen Artikel aktualisieren.

<< vorherige Seite
                                                                        nächste Seite >>