Stefan Röttger Universität Stuttgart (VIS). Überblick 1. Motivation 2. Shadow Volumes [Crow77] 3....

Preview:

Citation preview

Stefan Röttger Universität Stuttgart (VIS)

Überblick

1. Motivation2. Shadow Volumes [Crow77]3. Verfahren ohne Stencil Buffer4. Demonstrationsfilm

MotivationShadow Volumes:+ dynamische Schattenberechnung in Echtzeit+ Nutzung der Grafikhardware (Stencil Buffer)Problem: Einschränkung auf neuste PC Grafikkarten

(z.B. kein Stencil Buffer auf der Voodoo 3)NEU: Benutzung des Screen Buffers als ErsatzDAMIT: Lauffähig z.B. ab Voodoo 1 !

Shadow Volumes

Schritt 1: Szene rendern Z-Werte

Shadow Volumes

Vorderseite: +1

Schritt 2: Shadow Volume Seiten rendern

Rückseite: -1

Shadow Volumes

Vorderseite: ±0 (Tiefentest)Rückseite: ±0 (Tiefentest) = ±0

Shadow Volumes

Vorderseite: +1Rückseite: ±0 (Tiefentest) = +1

±0

Shadow Volumes

Vorderseite: +1Rückseite: -1 = ±0

±0+1

Shadow Volumes

±0+1±0

Shadow Volumes• Wiederholung mit allen schattenwerfenden

Objekten• Pixel mit Stencil Buffer Wert > 0 schwarz färben• Szene erneut rendern um ambienten

Beleuchtungsanteil hinzuzufügen• Oder Helligkeitswerte im Schatten halbieren

Verfahren ohne Stencil BufferIdee: Die Schattenmaske wird im Screen Buffer

(RGB- oder Alpha-Kanal) berechnet, anstatt im Stencil Buffer

Problem: dstColor = dstColor -1 nicht realisierbar

Lösung: Anstatt +1 : *2 (verdopple Farbwert)Anstatt -1 : /2 (halbiere Farbwert)

Blendingfunktionen für *2, /2Farbwerte: 0 schwarz 1 weissweiss

Blendingfunktionen:

cdst=f*csrc + g*cdst

*2: f=cdst, csrc=1, g=1 cdst = cdst*1 + 1*cdst

/2: f=0, g=0.5 cdst = 0 + cdst*0.5

Zustand eines PixelsInitialisiere alle Pixel mit Farbwert 1/4

1/4 1/2 1

*2

/2

*2

/2

*2 (Clamping!)

„Eingabefolgen“:

Punkt in Shadow Volume: *2

Punkt vor Shadow Volume:

Punkt hinter Shadow Volume: *2 , /2

„Normierung“ auf 0/1Nach dem Rendern aller Shadow Volumes:

1/4 1/2 1

*2

1/2

1/2

1

1

0

0

*2

Licht Schatten

Invert(c:=1-c)

Anwendung der Schattenmaske• Multipliziere s/w Schattenmaske mit Bild:

Rendern der Szene, mit cdst = cdst * csrc

• Szene erneut rendern um ambienten Beleuchtungsanteil hinzuzufügen mit cdst = cdst + csrc

• Oder alternativ die Werte im Schatten halbieren mit Normierung auf 0.5/1 und cdst = cdst * csrc

Beispiel: Shadow Volumes

Beispiel: *2, Inv, *2

Beispiel: Fertiges Bild

Berechnung im Alpha Kanal• Alternativ kann kann die Schattenmaske auch im

Alpha Kanal berechnet werden• Angewendet wird die Schattenmaske durch

Umkopieren des Alpha Kanals in eine gleich große Textur

• Vorteil: Berechnung der Schattenmaske mit niedrigerer Auflösung möglich Schattenmaske wird schneller rasterisiert

• Szene muss bei Halbierung der Schattenwerte nicht noch einmal gerendert werden

Demonstrationsfilm

Zusammenfassung• Effiziente Schattenberechnung auch ohne

Stencil Buffer möglich• Schattenmaske wird im Screen Buffer (oder im

Alpha Kanal) aufgebaut• Verwende *2, /2 anstatt +1, -1• Durch anschließendes Umkopieren in eine

Textur kann die Schattenmaske auch in kleineren Auflösungen berechnet werden

• Wende die Schattenmaske nach Normalisierung an: ambiente Beleuchtung, schwarze Schatten, Helligkeit halbieren

Fin

Fragen?

Recommended