Projezierte Shadowmaps: Unterschied zwischen den Versionen
Aus DGL Wiki
Flo (Diskussion | Beiträge) K (Der Kateogrie Technik oder Algorithmus zugeordnet) |
K (Siehe auch hinzugefügt, Kommas gesetzt) |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Konzept == | == Konzept == | ||
− | Um die Szene zu schattieren, werden ihre | + | Um die Szene zu schattieren, werden ihre Tiefenwerte vom Blickpunkt der schattenwerfenden Lichtquelle aus in eine Textur gerendert. Danach wird diese Textur mit entsprechenden Fragmentvergleichen auf die Szene projeziert. |
== Grundlegende Funktionsweise == | == Grundlegende Funktionsweise == | ||
Zeile 20: | Zeile 20: | ||
'''Negativ :''' | '''Negativ :''' | ||
<ul><li>[[Aliasing]], da selbst sehr hochaufgelöste Tiefentexturen meist nicht ausreichend sind</li> | <ul><li>[[Aliasing]], da selbst sehr hochaufgelöste Tiefentexturen meist nicht ausreichend sind</li> | ||
− | <li>Direktionale Lichtquellen bis 90° Abstrahlwinkel lassen sich mit einer 2D Textur, omnidirektionale bzw. Lichtquellen mit einem Abstrahlwinkel von mehr als 90° mit Hilfe einer Cubemap realisieren. Bei diesen sollte Frustum Culling benutzt werden um redundantes Rendern zu vermeiden.</li> | + | <li>Direktionale Lichtquellen bis 90° Abstrahlwinkel lassen sich mit einer 2D Textur, omnidirektionale bzw. Lichtquellen mit einem Abstrahlwinkel von mehr als 90° mit Hilfe einer Cubemap realisieren. Bei diesen sollte Frustum Culling benutzt werden, um redundantes Rendern zu vermeiden.</li> |
− | <li>Benötigt einen Polygonoffset um Selbstschattierung korrekt darzustellen. Der richtige Offset ist jedoch je nach Implementation unterschiedlich.</li> | + | <li>Benötigt einen Polygonoffset, um Selbstschattierung korrekt darzustellen. Der richtige Offset ist jedoch je nach Implementation unterschiedlich.</li> |
<li>Back-Projection (lässt sich jedoch durch Clipping-Planes vermeiden)</li> | <li>Back-Projection (lässt sich jedoch durch Clipping-Planes vermeiden)</li> | ||
</ul> | </ul> | ||
+ | |||
+ | == Siehe auch == | ||
+ | [[GLSL Licht und Schatten]] | ||
[[Kategorie:Technik_oder_Algorithmus]] | [[Kategorie:Technik_oder_Algorithmus]] |
Aktuelle Version vom 19. November 2013, 21:02 Uhr
Inhaltsverzeichnis
Konzept
Um die Szene zu schattieren, werden ihre Tiefenwerte vom Blickpunkt der schattenwerfenden Lichtquelle aus in eine Textur gerendert. Danach wird diese Textur mit entsprechenden Fragmentvergleichen auf die Szene projeziert.
Grundlegende Funktionsweise
1. Tiefenpuffer-Inhalt der Szene vom Blickpunkt der Lichtquelle aus in eine Textur rendern 2. Passenden Fragmentvergleich setzen (GL_TEXTURE_COMPARE_MODE_ARB/GL_TEXTURE_COMPARE_FUNC_ARB) 3. Automatische Texturkoordinaten-Generierung aktivieren (TexGen) 4. Szene nun mit projezierter Tiefentextur rendern
Vor- und Nachteile
Positiv :
- Keine Kenntnis der zugrundeliegenden Szenengeometrie nötig
- Selbstschattierung als kostenloses Feature
- Kaum CPU-Interaktion nötig
Negativ :
- Aliasing, da selbst sehr hochaufgelöste Tiefentexturen meist nicht ausreichend sind
- Direktionale Lichtquellen bis 90° Abstrahlwinkel lassen sich mit einer 2D Textur, omnidirektionale bzw. Lichtquellen mit einem Abstrahlwinkel von mehr als 90° mit Hilfe einer Cubemap realisieren. Bei diesen sollte Frustum Culling benutzt werden, um redundantes Rendern zu vermeiden.
- Benötigt einen Polygonoffset, um Selbstschattierung korrekt darzustellen. Der richtige Offset ist jedoch je nach Implementation unterschiedlich.
- Back-Projection (lässt sich jedoch durch Clipping-Planes vermeiden)