Das Shadow Mapping gilt heutzutage als Standardverfahren für die Simulation von Schattenwürfen in einer 3D-Szene. Unabhängig von den Fortschritten, die man bei der Darstellung von Echtzeitschatten erzielt hat, ist die den Schattenberechnungen zugrunde liegende Idee denkbar einfach – man überprüft, ob ein Szenenpixel von einer Lichtquelle aus gesehen sichtbar ist (kein Schatten) oder nicht (Schatten). Damit sich dieser Test durchführen lässt, muss zunächst – im Verlauf eines zusätzlichen Render-Durchgangs – das Tiefenabbild der 3D-Szene aus der Blickrichtung der betreffenden Lichtquelle (Lichtquellen-Perspektive) in einer separaten Textur – der sogenannten Shadow Map – zwischengespeichert werden.
Im Zuge des Deferred Renderings (Lightings) bietet sich jedoch eine modifizierte Form der Schattenberechnung an. Für die Durchführung der Beleuchtungsberechnungen ist es hierbei notwendig, sowohl die Kameraraum-Normalen wie auch die Kameraraum-Positionen der sichtbaren Szenenpixel in separaten Render-Targets (Texturen) zwischenzuspeichern. Speichert man darüber hinaus zusätzlich die Kameraraum-Positionen der Schattenspender-Pixel aus der Blickrichtung einer Lichtquelle in einer Shadow Map, lassen sich die Schattenwürfe wie folgt berechnen:
- Transformation der Position eines sichtbaren Szenenpixels aus der Kameraperspektive in die Lichtquellen-Perspektive. Als Ergebnis erhält man die Texturkoordinaten, an denen das transformierte Szenenpixel in der Shadow Map zu finden wäre, sofern es nicht durch einen Schattenspender-Pixel verdeckt wird.
- Die Kameraraum-Position, die bei den zuvor berechneten Texturkoordinaten in der Shadow Map gespeichert ist, dient als Ursprung einer virtuellen Punktlichtquelle, welche das potenziell verdeckte Szenenpixel mit einem sogenannten Negativ-Licht (Antiradiance) beleuchtet (abdunkelt).
Hinweis: Das Negativ-Licht wirkt als Schattenspender. Mit zunehmender Distanz zwischen dem transformierten Szenenpixel und dem Schattenspender-Pixel schwächt sich der Abdunklungseffekt (die Schattenintensität) mehr und mehr ab. Für den Fall, dass ein transformiertes Szenenpixel auch von der Lichtquelle aus gesehen sichtbar ist, wird kein Schatten berechnet.
Im Rahmen des heutigen Tutorials wird die Schattenberechnung sowohl für
direktionale Lichtquellen, wie auch für Spotlights oder omnidirektionale Lichtquellen (Punktlichter) demonstriert.
.