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:
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. Szene mit Shadow Mapping
Im ersten Durchlauf (Pass 1) wird die 3D-Geometrie aus der Sicht der
Lichtquelle berechnet.
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.
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.
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!!!) 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.
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.
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.
|