Stochastic Transparency and ShadowsSeminararbeit
Fakultät für Informatik und Mathematik
Prof. Dr. Alfred Nischwitz
Hochschule München
vorgelegt von
Daniel Wiesenhütter
im Juni 2011
Inhaltsverzeichnis
1 Einleitung 4
2 Grundlagen 6
2.1 Schattentextur Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Transmission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Stochastic Transparency 8
3.1 Abtastung der Lichtdurchlässigkeit . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Stochastische Schattentexturen . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Rauschunterdrückung durch die geschichtete Zufallsprobe . . . . . . . . . . . 12
3.4 Korrektur der Alphawerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 Einbindung der Entfernungen . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Algorithmus mit räumlichen Antialiasing . . . . . . . . . . . . . . . . . . . . 16
3.7 Verbesserungsmöglichkeiten für stochastische Schattentexturen . . . . . . . . 17
3.8 Ergebnisse von Stochastic Transparency . . . . . . . . . . . . . . . . . . . . 18
4 Colored Stochastic Shadow Maps 20
4.1 Zusammenhang zwischen Verdeckung und Transmission . . . . . . . . . . . . 20
4.2 Allgemeiner Algorithmus (CSSM1) . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 E�zienter Algorithmus für das RGB-Farbmodell (CSSM2) . . . . . . . . . . 23
4.4 Abtastwerte für die Filterung . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.5 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5 Fazit 27
2
Abbildungsverzeichnis
2.1 Als erstes werden aus der Lichtposition zu allen Objekten die Z-Werte berech-
net und in der Schattentextur gespeichert. Danach werden aus der Augenpo-
sition die Z-Werte mit der Schattentextur verglichen und dem entsprechend
beleuchtet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1 Abtastung der Lichtdurchlässigkeit bei drei transparenten Objekten und blau-
en Hintergrund. Durch die stochastische Wahl der Abtastwerte wird bei glei-
cher Opazität andere Werte abgetastet. . . . . . . . . . . . . . . . . . . . . . 11
3.2 Das linke Bild wurde ohne irgend ein zusätzliches Verfahren gerendert. Das
mittlere zeigt Stochastic Transparency und das rechte Dual-Depth Peeling. . 18
3.3 Transparente Haare, Gräser und Kleidung werden nur mit Stochastic Trans-
parency dargestellt. Gra�k: [Enderton et al. 2011] . . . . . . . . . . . . . . . 19
4.1 Als erstes werden aus der Lichtposition zu allen Objekten die Z-Werte berech-
net und in der farbigen Textur gespeichert. Dabei können einzelne Farbkanäle
transmittiert werden. Danach werden aus der Augenposition die Z-Werte mit
der Schattentextur verglichen und dem entsprechend beleuchtet. . . . . . . . 23
4.2 Das linke Bild zeigt die farbige Schattentextur von CSSM. Rechts sieht man
die farbigen Schatten der Gläser. Gra�ken: [McGuire and Enderton 2011] . . 26
4.3 Spielszene mit 1 Million Dreiecken. Gra�k:[McGuire and Enderton 2011] . . 26
3
1 Einleitung
In der Welt gibt es viele lichtdurchlässige Materialien und Erscheinungen, welche das Aus-
sehen der Umgebung beein�ussen. Schaut man aus dem Fenster, so ist das Glas fast durch-
sichtig. Jedoch bein�ussen Schmutz oder die Farbe von Glas das einströmende Licht. Die
Gardinen, die das Fenster schmücken, sind wahrscheinlich aus Sto�. So wie fast jeder andere
gewebte Sto� wird die Gardine das einfallende Licht nicht völlig absorbieren, sondern zu
gewissen Teilen durchlassen. Wie viel Licht durchgelassen wird, hängt von dem Materialei-
genschaften ab. Wenn man aus dem Fenster in einen Park blicken darf, so sieht man dort
Bäume, eine Graswiese und vielleicht noch Sträucher und andere Vegetation. Viele Blätter
und Grashalme sind lichtdurchlässig oder semitransparent. Ein Baum wirft nur einen küh-
lenden und dunklen Schatten wenn die Baumkrone dicht bewachsen ist. Ein einzelnes Blatt
würde keinen dunklen Schatten werfen sondern vielleicht einen grünen. Nur die Überdeckung
von vielen Blättern führt zu einem dunklen Schatten, da das Licht von mehreren Blättern
immer weiter abgeschwächt wird. Eine sattgrüne Wiese hingegen muss dicht bewachsen sein,
sonst kommt der braune Boden darunter zum Vorschein. Gleiches gilt für Haare, die eben-
falls lichtdurchlässig sind. Das Aussehen und die Farbe einer Frisur hängt einerseits von der
Haarfarbe, aber auch von der Fülle der Haare ab. Weitere Beispiele für lichtdurchlässige oder
semitransparente Materialien und Erscheinungen sind Feuer und Rauch, Nebel und Wolken,
Kristalle und Edelsteine, Haut, Papier und andere künstlich hergestestellte Dinge.
Lichtdurchlässigkeit und Teiltransparenz bein�ussen also das Aussehen der Umwelt. Die
Überdeckung von mehreren lichtdurchlässigen Objekten bestimmt die Farbe, die man wahr-
nimmt. Die Eigenschaft eines Objektes bestimmt wiederum die Farbe eines Schattens. Ein
dickes rotes Geschirrtuch wirft einen dunklen grauschwarzen Schatten, wo hingegen ein roter
Seidenschal einen hellrötlichen Schatten werfen wird. Ein Algorithmus der diese E�ekte in
der Computergra�k wiedergeben könnte, wäre höchst erstrebenswert. Das Verfahren wäre
sowohl für die Darstellung von lichtdurchlässigen Objekten wie auch für jegliche Schatten
einsetzbar. Zurzeit gibt es viele Ansätze für Spezialfälle wie Haare, Rauch oder Vegetation.
Ein Ansatz, der für alle genannten Erscheinungen anwendbar ist, wurde von Enderton et
al. [2010] entwickelt und heiÿt Stochastic Transparency. Das Verfahren Colored Stochastic
Shadow Maps kann auch farbige Schatten darstellen und wurde von McGuire und Enderton
[2011] vorgestellt.
4
Abbildungsverzeichnis
Das Thema dieser Seminararbeit ist Stochastic Transparency and Shadows. Es wird dabei
als erstes auf ein paar Grundlagen für die Arbeit eingangen. Im nächsten Kapitel wird das
Verfahren Stochastic Transparency vorgestellt um lichtdurchlässige Objekte darzustellen.
Darauf folgt ein Kapitel über Colored Stochastic Shadow Maps, welches es ermöglicht farbige
Schatten von lichtdurchlässigen Objekten darzustellen. Zum Schluÿ wird noch ein Fazit zu
den behandelten Verfahren gegeben.
5
2 Grundlagen
2.1 Schattentextur Verfahren
Das Schattentextur Verfahren von [Williams 1978] ist die Grundlage für viele aktuelle Schat-
tengenerierungsverfahren (Shadow Mapping). Wie in Abbildung 2.1 zu sehen ist, wird als
erstes aus der Position der Lichtquelle alle Entfernungen z zu den Objekten in einer Textur
gespeichert. Diese wird auch Schattentextur (shadow map) genannt. Da in diesem Ren-
deringdurchlauf nur die Entfernungen betrachtet werden und keine Berechnungen für die
Beleuchtung von Objekten durchgeführt werden muss, ist dieser Durchgang schneller als
normale Durchläufe. In einem zweiten Renderingdurchlauf wird die Schattentextur für die
Beleuchtung betrachtet. Dazu werden als erstes die Position eines Fragmentes in das Koor-
dinatensystem der Schattentextur transformiert. Mit einem Zugri� auf die Schattentextur
wird danach die Entfernung zLichtquelle aus der Lichtposition mit der Entfernung zAugenpunktverglichen. Ist zLichtquelle < zAugenpunkt so liegt aus Sicht der Lichtquelle ein Blocker auf dem
Weg zu dem Fragment. Deswegen liegt das Fragment im Schatten und muss abgedunkelt
werden.
2.2 Transmission
Die Transmission beschreibt bei Photonen (Lichtteilchen) die Lichtdurchlässigkeit eines Me-
diums. Für ein lichtdurchlässiges Objekt mit einheitlichen Materialeigenschaften liegt der
Anteil des Lichtes mit der Wellenlänge λ über eine Distanz von d innerhalb des Mediums
bei:
exp−4πdκλ
λ
Wobei κλ der Extinktionskoe�zient der imaginäre Anteil des Brechungsindex ist. Die Trans-
mission ist nicht lichtbrechend, wenn die Richtung des eintretenden Strahls gleich der Rich-
tung des austretenden Strahls ist. Dies passiert wenn der reale Anteil des Brechungsin-
dex η für das durchschreitende Medium und das umliegende Medium das gleiche beträgt
[Hecht 2002]. In dieser Arbeit wird der Transmissionsgrad für die drei Wellenlängen von rot,
grün und blau zu ~t = (~tr,~tg,~tb) vereinfacht. Ebenfalls wird eine Lichtbrechung vernachlässigt.
6
2.2 Transmission
Abbildung 2.1: Als erstes werden aus der Lichtposition zu allen Objekten die Z-Werte berech-net und in der Schattentextur gespeichert. Danach werden aus der Augenpo-sition die Z-Werte mit der Schattentextur verglichen und dem entsprechendbeleuchtet.
7
3 Stochastic Transparency
Stochastic Transparency ermöglicht die Darstellung von lichtdurchlässigen Objekten ohne
eine Sortierung und wurde in [Enderton et al. 2011] vorgestellt. Ebenfalls benötigt das Ver-
fahren eine konstanten Speicherbedarf und eine feste Anzahl Renderingdurchläufen. Dieses
Kapitel ist eine teilweise Zusammenfassung der Erkenntnisse aus der oben genannten wis-
senschaftlichen Verö�entlichung.
Screen-Door Transparency von [Fuchs et al. 1985] ist ein älteres Verfahren mit dem licht-
durchlässige Objekte darstellen kann. Bei einer Überdeckung von mehreren lichtdurchläs-
sigen Objekten entscheidet bei Screen-Door Transparency eine Maske (stipple pattern),
welche Farbe der Objekte am Bildschirm angezeigt wird. Bei zwei überlappenden Objek-
ten wird anfangs erst die Farbe des ersten, dann des zweiten und dann wieder des ersten
Objektes angezeigt (usw.). Bei einer genügend hohen Au�ösung können somit Objekte mit
gleicher Lichtdurchlässigkeit dargestellt werden. Später wurde von [Mulder et al. 1998] die
Wahl der Auswahlmuster für Screen-Door Transparency optimiert. Im OpenGL �red book�
von [Neider and Davis 1993] wurde auch schon die Idee von zufälligen Auswahlmustern für
jedes Polygon als Cheesy Translucency vorgestellt. Mit der Einführung von Multisample
Antialiasing (MSAA) in der Hardware wurde auch Alpha-to-Coverage (a2c) implementiert.
Bei MSAA werden für jedes wiedergegebene Pixel zusätzlich, zur Zeit bis zu acht, Abtas-
tungen (samples) in der Nähe des Pixelzentrums berechnet. Die Farbwerte dieser Abtast-
werte werden meistens gemittelt um Kanten zu glätten und Kanten- udn Stufene�ekte, auch
Aliasinge�ekte genannt, zu verhindern. Mit a2c wird die Anzahl der Abtastwerte von der
Opazität α des Pixel abhängig gemacht. Da bei der Auswahl der Abtastungen immer die
selbe Auswahl getro�en wird, kommt es zu Überdeckungen und visuellen Artifakten bei der
Darstellung von überlappenden tranluzenten Objekten. Stochastic Transparency erweitert
diese Verfahren um ein zufälliges Auswahlmuster, nutzt den MSAA-Modus zur Beschleuni-
gung und implementiert einige Ansätze um Rauschen in der Darstellung zu vermindern.
Durch das zufällige Auswahlmuster, welches in Stochastic Transparency implementiert
wurde, entsteht wie bei vielen anderen stochastischen Verfahren Rauschen in der Darstel-
lung. Im Abschnitt 3.1 wird die Basismethode für das Wiedergeben von Farben und Schatten
beschrieben. Der Abschnitt 3.2 beschreibt den Algorithmus für die Darstellung von Schatten.
Im nächsten Abschnitt 3.3 wird gezeigt, wie man das Rauschen durch die geschichtete Zufalls-
8
3.1 Abtastung der Lichtdurchlässigkeit
probe (strati�ed sampling) vermindern kann. Um weiter das Rauschen zu unterdrücken wird
im Abschnitt 3.4 die Korrektur der Alphawerte erklärt. Der Abschnitt 3.5 beschreibt einen
Algorithmus mit drei Renderingdurchläufen, der weiter das Rauschen unterdrücken soll. Im
Abschnitt 3.6 wird der Algorithmus durch den Einsatz von MSAA verbessert. Der nächste
Abschnitt 3.6 verbindet die zuletzt genannten Verbesserungen nochmals mit der Schatten-
generierung. Im letzten Abschnitt 3.7 werden die Ergebnisse des Verfahrens betrachtet.
3.1 Abtastung der Lichtdurchlässigkeit
Die Autoren stellen als erstes eine Methode für die Abtastung der Lichtdurchlässigkeit vor.
Dieser Vorgang soll unabhängig von der Sortierung sein und mit konstantem Speicherbe-
darf und in konstanter Zeit berechnet werden können. Die lichtdurchlässigen Objekte sollen
in der Darstellung korrekt angezeigt werden, weswegen die richtige Farbmischung bei der
teilweisen Überdeckung von semitransparenten Objekten zu weiter hinten liegenden Objek-
ten eine Rolle spielt. Deswegen müssen bei der Berechnung der Farbe eines Pixels auch die
Farbanteile der lichtdurchlässigen Objekte, die sich teilweise überdecken, betrachtet werden.
Diese Objekte werden meistens in der Computergra�k durch Dreiecke dargestellt (folgen-
des gilt auch für alle anderen Gra�kprimitive wie Rechtecke). Somit wird eine Menge von
Dreiecken, bei dem jedes i-tes Dreieck eine Farbe ci, Opazität αi und eine Entfernung zibesitzt, betrachtet. Die zu berechnende Endfarbe ergibt sich mit Hilfe des �over� Operators
aus [Porter and Du� 1984]:
C = α1c1 + (1 − α1)(α2c2 + (1 − α2)(α3c3 + . . .)) (3.1)
C =∑i
∏zj<zi
(1 − αj)
αici (3.2)
Der Farbanteil eines Dreiecks berechnet sich also aus der Opazität αi multipliziert mit der
Farbe ci eines Fragments. Durch die Tranzparenz der davor liegenden Dreiecke wird dieser
angepasst. Die Autoren führen zur weiteren Verständlichkeit zwei Beispiele ein.
Beispiel 1: Ein blauer Hintergrund (cb = (0, 0, 1)) wird von einem grünen Dreieck
(c1 = (0, 1, 0)) verdeckt. Das grüne Dreieck wird wiederrum von einem roten Dreieck
(c0 = (1, 0, 0)) überlagert. Bei einer Opazität der Dreiecke von 45 Prozent (α1 = α2 =
0.45) ergibt sich folgende Farbe für ein Pixel:
c = α0c0 + (1 − α0)α1c1 + (1 − α1)2cb = (0.45, 0.2475, 0.3025)
Bei diesem Beispiel steuern die zwei Dreiecke sowie der Hintergrund ihren Farbanteil
nur einem einzigen Farbkanal bei.
9
3.1 Abtastung der Lichtdurchlässigkeit
Beispiel 2: Bei N gleichfarbigen Dreiecken mit einer Opazität von α = 1/N und einer
Fragmentfarbe cf ergibt sich folgende Pixelfarbe:
c = (1 − α)Ncb +N−1∑i=0
(1 − α)iαcf
Dieses Beispiel soll die Situation verdeutlichen wenn viele kleine, schwach beleuchtete
und lichtdurchlässige Objekte sich überdecken um Rauch oder andere kleine Partikel
in der Szene darzustellen. Zudem soll hiermit verdeutlicht werden, dass der Farbbei-
trag eines einzelnen Dreieckes von der Opazität α der umliegenden Dreiecke abhängt.
Es wird dabei ein 25-prozentiger grauer Hintergrund (cb = (0.25, 0.25, 0.25)) mit vier
N = 4 weiÿen Dreiecken (cf = (1, 1, 1)) betrachtet.
In einem üblichen Z-Pu�er (Z-Bu�er) werden während der Rasterisierung alle Entfernun-
gen oder Tiefen z der Fragmente gespeichert, wobei bei einer Verdeckung von mehreren
Fragmenten nur der kleinste Z-Wert, also die Entfernung des vordersten Fragment gespei-
chert wird. Durch diese Information kann danach sicher gestellt werden, dass nur sichtbare
Fragmente gezeichnet werden und die Darstellung von opaken Objekten damit korrekt ist.
Bei einem Bildspeicher mit MSAA und einer Anzahl von Abtastungen S belegt ein Fragment
einige oder alle dieser Abtastwerte. Durch den Z-Bu�er wird nur die Farbe und Entfernung
des vordersten Fragments darin gespeichert. Enderton et al. wollen diese Abtastwerte dafür
nutzen um die Lichtdurchlässigkeit eines Fragmentes zu kodieren. Der Anteil der belegten
Abtastwerte S soll die Lichtdurchlässigkeit beschreiben. Dafür werden alle Abtastwerte eines
Fragments in der Pixelmitte angesehen. Ein opakes Fragment belegt deswegen alle Abtast-
werte oder keinen.
Ein semitransparentes Fragment hingegen belegt eine stochastische Untermenge von R Ab-
tastwerten, was zu einer Opazität von α = R/S führt. Diese Untermenge R soll so gewählt
werden, dass der erwartete mittlere Wert von R/S der Opazität α des Fragments entspricht.
Die Wahrscheinlichkeit, dass ein Abtastwert von Fragment überbeschrieben wird, beträgt
somit α. Im Beispiel 1 könnte R bei S = 4 Abtastwerten und einer Opazität von α = 0.45
die Werte 0, 1, 2, 3, 4 annehmen, sollte aber im Mittel den Wert 0.45S = 1.8 betragen.
Mit gewöhnlichen Z-Bu�er-Vergleichen belegt nur das vorderste Fragment die Abtastwerte
des Z-Bu�ers. In dieser Methode verliert ein Fragment Abtastwerte der Untermenge R an
davor liegende Fragmente. Es wird nur die Werte belegen, welche zur eigenen Untermenge
R gehören und zum Komplement aller anderen Untermengen der davor liegenden Fragmen-
te. Die Genauigkeit der Methode hängt damit von unkorrelierten Untermengen ab. Sind die
Untermengen R der einzelnen Fragmente zueinander unkorreliert, dann ist der Mengendurch-
schnitt das Produkt der geschätzten Mengengröÿen proportional zu S. Für einen bestimmten
Abtastwert ist somit die Wahrscheinlichkeit, dass ein Fragment i es zum Schluÿ belegt, das
10
3.2 Stochastische Schattentexturen
Abbildung 3.1: Abtastung der Lichtdurchlässigkeit bei drei transparenten Objekten undblauen Hintergrund. Durch die stochastische Wahl der Abtastwerte wird beigleicher Opazität andere Werte abgetastet.
Produkt von αi und (1 − αj) für alle davor liegenden Fragmente j. Da die angezeigte Pi-
xelfarbe der Durchschnitt aller Farben der Abtastwerte ist, ist diese Wahrscheinlichkeit der
geschätzte Beitrag von ci zu der endgültigen Pixelfarbe. Wenn jeder Abtastwert eine er-
wartungstreue Schätzfunktion für die Pixelfarbe besitzt, erfüllt der geschätzte Beitrag die
Formel (3.2). Bei steigender Anzahl der Abtastwerte S nehmen die Pixel die korrekte Farbe
an. Ebenfalls wird bei höherer Au�ösung ein Bereich von Pixeln die richtige Farbe annehmen.
Abbildung 3.1 zeigt nochmals den Ein�uÿ der stochastischen Wahl der Untermenge R.
Dabei ist zu beachten, dass das zweite und dritte Fragment die gleiche Opazität α besitzen,
jedoch nicht die selbe Untermenge R.
3.2 Stochastische Schattentexturen
Enderton et al. bemerken zusätzlich, dass eine stochastisch generierte Schattentextur eben-
falls mit der gleichen Herangehensweise erstellt werden kann. Jedoch werden hier in einer
Schattentextur die Entfernungen zu den Objekten gespeichert, sofern ein Fragment nicht zu-
fällig verworfen wird. Um Schatten für lichtdurchlässige Objekte erstellen zu können, muss
die Sichtbarkeit vis(z) entlang eines Lichtstrahls geschätzt werden. Die Sichtbarkeit vis(z)
beschreibt damit den Anteil des Lichtes der bis zur einer Entfernung z gelangt. Da alle
lichtdurchlässigen Objekte das Licht auf ihren Weg mit dem Faktor (1 − α) abschwächen,
berechnet sich die exakte Sichtbarkeit eines Fragments aus dem Produkt aller Ober�ächen-
überschneidungen davor:
11
3.3 Rauschunterdrückung durch die geschichtete Zufallsprobe
vis(z) = 1 −∏zi<z
(1 − αi) (3.3)
Eine Annäherung für die Sichtbarkeit vis(z) kann man nach den bisherigen Erkenntnissen
durch S Stichproben in der Schattentextur erreichen. Wenn man in einem kleinen Bereich
um das Fragmentzentrum die Werte zählt, welche näher als die Entfernung z des aktuellen
Fragments liegen und danach durch die Anzahl der Stichproben S teilt, so erhält man eine
Schätzung der Sichtbarkeit für den Schatten:
svis(z) = count(zi < z)/S ≈ vis(z) (3.4)
In stochastische Schattentexturen wird also pro Fragment zufällig die Entfernung geschrie-
ben. Vorrausgesetzt die Entfernung ist kleiner als die des untersuchten Fragments wird mit
der errechneten Wahrscheinlichkeit dieser Wert in der Schattextur überschrieben. Der Schat-
tenanteil eines Pixels wird letztendlich mit mehreren Stichproben in der Schattenttextur
durch simples percentage-closer �ltering (PCF) berechnet [Reeves et al. 1987].
3.3 Rauschunterdrückung durch die geschichtete
Zufallsprobe
Durch den stochastischen Ansatz für die Abtastung der Lichtdurchlässigkeit wird im Bild
eine Varianz in Form von zufälligen Rauschen auftreten. Um dieses Rauschen zu vermindern,
stellen die Autoren einige Ansätze vor. Als erstes wird vorgeschlagen, die Anzahl der Ab-
tastungen S zu erhöhen. In diesem Fall tritt jedoch das klassiche Monte Carlo Problem der
�diminishing returns� auf, wobei man für die Halbierung des mittleren Fehlers die Anzahl der
Abtastungen vervierfachen muss. Ein häu�ger Ansatz um diesen Problem entgegenzuwirken
ist die geschichtete Zufallsprobe (strati�ed sampling) oder Gruppenauswahl. Man betrachtet
somit die R Abtastwerte als Gruppe und nicht unabhängig von einander. Enderton et al.
schlagen dazu folgendene Betrachtungsweise für R vor:
Ri = bαiS + ξc
Der Wert von ξ ist dabei eine gleichverteilte Zufallszahl im Bereich von 0 und 1. Bei vier
Abtastwerten (S = 4) und einer Opazität von 45 Prozent (α0 = 0.45) ergibt sich somit
eine 20-prozentige Chance das R0 = 1 beträgt und eine 80-prozentige Chance für R0 = 2.
Nach dieser Berechnung wird zufällig eine Untermenge der berechneten Gröÿe R ausgewählt.
Statt für jeden Abtastwert einzeln eine α-gewichtete Münze zu werfen, wird zufällig eine der
möglichen Untermengen gewählt. Dadurch wird das Problem der �diminishing returns� ver-
hindert und der Fehler für ein Fragment nimmt linear ab.
12
3.4 Korrektur der Alphawerte
Der �root mean square error� (RMSE) beschreibt die Di�erenz zwischen einer Abschätzung
und den exakten Werten eines Modells. Der RMSE, auf Hundertstel aufgerundet, für das
Beispiel 1 und einer Anzahl von vier Abtastwerten (S = 4) beträgt für die drei RGB-Kanäle
somit:
σnaiv = (0.25, 0.21, 0.23)
Mit der geschichteten Zufallsprobe besitzt jedes Dreieck einen Anteil der S Abtastwerte,
die es repräsentiert. Das vorderste Dreieck hat die Wahl auf alle verfügbaren Abtastungen.
Bei dem hinteren Dreieck kann es jedoch sein, dass ein Teil Untermenge von dem vorderen
Dreieck überdeckt werden. Der RMSE ändert sich wie folgt zu:
σgeschichtet = (0.10, 0.17, 0.18)
Für das Beispiel 2 mit vier Abtastwerten (S = 4) ergibt sich folgende Verbesserung in den
drei RGB-Kanälen:
σnaiv = (0.35) → σgeschichtet = (0.12)
Auch wenn in diesem Beispiel keine Schichtung von Fragmenten vorliegt, pro�tiert man von
der Schichtung zwischen den Pixeln.
3.4 Korrektur der Alphawerte
Enderton et al. empfehlen zur weiteren Rauschunterdrückung die Korrektur der Alphawer-
te. Die Berechnung der exakten, nicht stochastischen gesamten Opazität, kann man nach
[Sintorn and Assarsson 2009] als Korrekturfaktor benutzen. Das Produkt aller Alphawerte
der transparenten Fragmente, die ein Pixel verdecken ist:
αgesamt = 1 −∏
(1 − αi) (3.5)
Diese gesamte Opazität, welche auch 1 − vis(∞) oder der Anteil der Hintergrundfarbe be-
trägt, kann in einem Renderingdurchgang berechnet werden, da diese unabhängig von der
Reihenfolge der Fragmente ist. Es hängt lediglich die Mischung der Farbwerte von der Rei-
henfolge ab und nicht die Alphawerte.
Wenn man die stochastische durchschnittliche Farbe mit αgesamt/(R/S) multipliziert, wer-
den die Farben der Pixel mit einer transparenten Ebene exakt. Empirisch gesehen werden
die Fehler bei mehreren transparenten Ebenen ebenfalls reduziert, wobei sie für Ausnahme-
fälle ansteigt. Diese Technik fügt dem Algorithmus einen systematischen Fehler (Bias) bei,
der sich jedoch bei steigenden S verringert. Für die weitere Betrachtung der systematischen
Fehler (Bias) siehe [Enderton et al. 2011].
13
3.5 Einbindung der Entfernungen
Für die beiden Beispiele des ersten Abschnitts sind die Auswirkungen der Korrektur der
Alphawerte aufschluÿreich. Der RMSE für Beispiel 1 ändert sich wie folgt:
σ = (0.10, 0.17, 0.18) → (0.17, 0.14, 0.0)
Der Fehler des roten Farbanteils wird vom vordersten roten Dreieck bein�usst. Dort erhöht
sich der RMSE, da das vorderste Dreieck bereits aus allen möglichen Abtastwerten S wählen
kann. Änderungen bei den anderen dahinterliegenden Dreiecken verschlechtern somit den
RMSE. Der Fehler des blauen Farbanteils, welcher von der Hintergrundfarbe vorgegeben
wird, verschwindet ganz. Im grünen Farbanteil, der vom grünen Dreieck abhängt, verringert
sich der RMSE ebenfalls. In den meisten Fällen mit geringerer Verdeckungstiefe werden sich
die Fehler verringern. Solange sie sich der RMSE pro Fragment verringert, verbessert es die
Darstellung des Pixels auf dem Bildschirm. Im Beispiel 2 verschwindet der RMSE in allen
Farbkanälen:
σ = (0.12) → (0.0)
Dieses Beispiel ist eher unüblich, doch wenn überlappende Fragmente die gleiche Farbe
besitzen, kann man durch die Korrektur Verbesserungen erreichen.
3.5 Einbindung der Entfernungen
Eine bisherige Fehlerquelle bei dem Algorithmus für Stochastic Transparency war bisher die
alleinige Gewichtung eines Fragmentes an Hand der Sichtbarkeit der Abtastwerte. Ein Teil
der belegten Abtastwerte R kann von davor liegenden Fragmenten überschrieben werden.
Enderton et al. schlagen deswegen einen weiteren Renderingdurchlauf vor, der diese Gewich-
tung verbessern soll.
Wenn man die Formeln (3.2) und (3.3) betrachtet, dann ist vis(z) nicht nur das Licht
welches bis zu einer Entfernung z gelangt, sondern auch das Licht welches das Auge aus
einer Entfernung z erreicht. Die Farbberechnung kann man deswegen umformen:
C =∑
vis(zi)αici (3.6)
Jedes Fragment liefert zu der endgültigien Pixelfarbe einen Farbbeitrag in Abhängigkeit
von der Sichtbarkeit vis(zi) und der Opazität αi bei. Die Autoren empfehlen mit einem
zusätzlichen Renderingdurchlauf eine Schätzung für svis(z) nach (3.4) zu erstellen. Eine
Schattentextur für transparente Objekte aus der Kameraposition ist diese Schätzung. So-
mit ist jedes Verfahren für die transparente Schattenerstellung genauso eine Methode für
die Darstellung von transparenten Objekten. Ein zusätzlicher Renderingdurchlauf (accumu-
lation pass) wird ebenfalls mit Occupancy Maps von [Sintorn and Assarsson 2009] für die
14
3.5 Einbindung der Entfernungen
Darstellung von Objekten und Schatten benutzt. Ebenfalls werden in diesem Verfahren die
aufaddierten Alphawerte durch die gesamte Opazität zur Korrektur geteilt. Enderton et al.
übernehmen diese Ansätze und erstellen in dem zusätzlichen Durchlauf einen stochastischen
Z-Bu�er. Der tiefenbasierte Algorithmus für ein Depth-Based Stochastic Transparency ist
somit:
1. Rendere alle opaken Objekte und den Hintergrund in einen seperaten Bu�er.
2. Berechne die gesamte Opazität für jedes Pixel mit (3.5) in einen seperaten Bu�er.
3. Ermittle die stochastische Transparenz für jeden Abtastwert und speichere nur die
Entfernung z in einen seperaten MSAA-Bu�er.
4. Akkumuliere alle Fragmentfarben und deren Alphawerte mit (3.6) auf. Die Sichtbarkeit
wird dabei mit (3.4) geschätzt, indem alle zuvor berechneten z-Werte der Abtastwerte
für ein Pixel mit der aktuellen Entfernung z verglichen werden. Speichere die Ergebnisse
in einen seperaten Bu�er.
5. Korrigiere die Summe der transparenten Farben mit der zuvor berechneten gesamten
Opazität und mische sie mit dem opaken Hintergrund.
Der erste Schritt dient lediglich der Beschleunigung der Rechenzeit und der Qualität der Dar-
stellung, da dadurch alle transparenten Objekte, die hinter opaken Objekten liegen, nicht
mehr betrachtet werden und die Darstellung der opaken Objekte nicht mit Rauschen behaf-
tet ist. Der Algorithmus funktioniert jedoch auch für den Fall von α = 1.
Bei diesem Algorithmus wird die Sichtbarkeit und nicht nur der Alphawert quantisiert.
Ebenfalls werden nicht nur die vordersten Fragmente im Z-Bu�er berücksichtigt sondern
durch die Akkumulierung alle. Alle Fragmente tragen somit zur Farbgebung bei. Der Algo-
rithmus liefert ohne eine Korrektur der Alphawerte für das Beispiel 1 eine Veränderung im
RMSE:
σ = (0.10, 0.17, 0.18) → (0.0, 0.05, 0.18)
Der Fehler des blauen Hintergrundes verbessert sich dabei nicht, jedoch werden die Fehler
für die beiden Dreiecke enorm verringert. Eine Korrektur der Alphawerte verschlechtert diese
Werte wieder:
σ = (0.0, 0.05, 0.18) → (0.14, 0.12, 0.0)
Nichtsdestotrotz empfehlen die Autoren die Korrektur der Alphawerte, da sie in allen Szenen
Artifakte verhindert haben. Bei Beispiel 2 geht der RMSE auf null, da die Dreiecke die gleiche
Farbe besitzen:
σ = (0.12) → (0.8) → (0.0)
15
3.6 Algorithmus mit räumlichen Antialiasing
3.6 Algorithmus mit räumlichen Antialiasing
Die Autoren betrachten nun die Abtastwerte als räumlich verteilt in der Nähe des Pixelzen-
trums. Dazu wird der MSAA-Modus aktueller Gra�kkarten benutzt, bei dem zur Zeit bis
zu acht Abtastwerte im Bereich eines Pixels gespeichert werden. Zudem besitzt dabei jedes
Fragment eine Abdeckungsmaske (coverage mask), in der die Anzahl der belegten Abtast-
werte des Pixels gespeichert ist. Dies ist e�zienter, da die Berechnung der Sichtbarkeit pro
Abtastwert im Z-Bu�er geschieht, die Farbberechnung aber nur für jedes Fragment statt�n-
det. Für die Anzeige werden die Abtastwerte eines Pixels dann mit der Hardware gemittelt,
wobei auch ein eigener Filter per Software angewandt werden kann.
Die Abtastwerte für das räumliche Antialiasing können auch für die Abtastwerte der Trans-
parenz genutzt werden. Akutelle Gra�kkarten unterstützen bereits einen Alpha-to-Coverage-
Modus (a2c), welche die Belegung der Abdeckungsmaske in Abhängigkeit der Opazität α
verändert. Es verknüpft dabei die Abdeckungsmaske und eine Auswahlmaske abhängig von
α mit einem logischen UND. Das Problem dabei ist, dass die Generierung der Auswahlmas-
ke immer die gleiche ist und somit bei gleicher Opazität α immer die gleiche Auswahlmaske
gewählt wird. Bei Stochastic Transparency wird hingegen darauf geachtet, dass die Auswahl-
masken unkorreliert sind. Das ist der Hauptunterschied zu dem a2c-Modus.
Bei diesem Verfahren empfehlen Enderton et al. auch die Werte für die Alphakorrektur im
MSAA-Modus zu berechnen. Dadurch kann man die Kanten von opaken zu lichdurchlässigen
Objekten schöner darstellen, was des Öfteren bei Fenstern der Fall ist. Für die Korrektur
der semitransparenten Objekte braucht man zwar nur die gesamte Opazität pro Pixel. Im
letzten Schritt wird jedoch der Hintergrund mit (1 − αgesamt) abgedunkelt, weswegen die
gesamte Opazität für alle Abtastwerte benötigt wird.
Ein weiterer Vorteil dieses Ansatzes ist, dass nicht mehr extra alle Z-Werte der Abtastungen
mit dem aktuellen Fragment verglichen werden müssen. Dies kann mit Hilfe des Z-Bu�ers
im MSAA-Modus erledigt werden. Der Z-Bu�er akkumuliert dabei alle Abtastwerte, die
(z ≤ zi) erfüllen. Wenn die Abtastwerte dann für die Anzeige gemittelt werden, wird das
Fragment mit (3.4) multipliziert. Der tiefenbasierte und geglättete Algorithmus für Antiali-
ased Depth-Based Stochastic Transparency lautet nun:
1. Rendere alle opaken Objekte und den Hintergrund in einen seperaten MSAA-Bu�er.
2. Berechne die gesamte Opazität für jedes Pixel mit (3.5) in einen seperaten MSAA-
Bu�er.
3. Ermittle die Z-Werte der lichtdurchlässigen Objekte, indem sie in den opaken Z-Bu�er
geschrieben und mit Hilfe von einem stochastischen a2c aussortiert werden.
4. Rendere die semitransparenten Objekte, wobei die Farben aufaddiert werden (addi-
tive blending mode), in einen seperaten MSAA-Bu�er. Vergleiche dabei die Entfer-
nung z mit den Werten aus dem vorher berechneten Z-Bu�er. Mit der Farbe Schwarz
16
3.7 Verbesserungsmöglichkeiten für stochastische Schattentexturen
begonnen, werden nur die Farbbeiträge αici der Abtastwerte übernommen, bei dem
(zFragment ≤ zBuffer) ist.
5. Verdunkle den opaken Hintergrund mit (1− αgesamt) für jeden Abtastwert. Korrigiere
danach die Summe der transparenten Farben mit der zuvor berechneten gesamten
Opazität und mische sie über den abgedunkelten opaken Hintergrund.
Der Algorithmus von Enderton et al. braucht schluÿendlich nur drei zusätzliche Rendering-
durchläufe für lichtdurchlässige Objekte. Wenn man mehr Abtastwerte für die Berechnung
benutzen will, empfehlen die Autoren den Algorithmus mit unterschiedlichen Anfangswerten
für die Zufallsgeneratoren zu iterieren und die Ergebnisse danach zu mitteln. Da die Be-
rechnung der gesamten Opazität unabhängig von den zufälligen Zahlen ist, werden für die
Erhöhung der Abtastwerte nur zwei zusätzliche Renderingdurchläufe benötigt.
3.7 Verbesserungsmöglichkeiten für stochastische
Schattentexturen
Für die Erstellung von stochastischen Schattentexturen betrachten die Autoren die beschrie-
benen Verbesserungen im Bezug auf die Schattengenierung. Bei der Erstellung einer stochas-
tischen Schattentextur wird eine gewöhnliche Schattentextur mit einem Abtastwert pro Pixel
generiert, wobei Fragmente mit einer Wahrscheinlichkeit von α nicht berücksichtigt werden.
Die Erstellung des Schattens erhält man dann durch PCF. Die Vorzüge von der geschich-
teten Zufallsprobe gelten laut Enderton et al. auch für Schattentexturen. Dabei muss man
die Schattentextur nur in einen Z-Bu�er im MSAA-Modus berechnen und die Auswahl der
nicht beachteten Fragmente über ein stochastisches a2c vornehmen.
Ebenfalls kann das Prinzip der Korrektur mit Alphawerten angewendet werden. Dabei wird
jedoch die gesamte Abnahme der Sichtbarkeit für jedes Schattentextur Texel berechnet.
Wenn man diese durch die erwartete Abnahme der Sichtbarkeit teilt, kann man dies als
Korrekturfaktor für die Sichtbarkeitsfunktion von (3.4) benutzen. Wie auch zuvor kann es in
bestimmten Fällen zu Verschlechterungen kommen. Zudem ist es möglich die Schattentex-
tur mit der gesamten Opazität zu korrigieren um den Schattenwurf von lichtdurchlässigen
Objekten auf opaken Objekten zu verbessern. Dafür müsste man aber getrennte Schatten-
texturen für transparente und opake Objekte berechnen.
Eine letzte Möglichkeit den Schattenwurf von lichtdurchlässigen Objekten zu verbessern, ist
einfach einen gröÿeren PCF-Filter zu benutzen. Die Schatten werden aber dadurch nur kör-
niger. Enderton et al. empfehlen hierzu den Ansatz aus [Mittring 2007], bei dem zufällig die
Abtastwerte aus einem groÿen Filter benutzt werden.
17
3.8 Ergebnisse von Stochastic Transparency
Abbildung 3.2: Das linke Bild wurde ohne irgend ein zusätzliches Verfahren gerendert. Dasmittlere zeigt Stochastic Transparency und das rechte Dual-Depth Peeling.
3.8 Ergebnisse von Stochastic Transparency
In Abbildung 3.2 kann man die Ergebnisse sehen, welche man mit Stochastic Transparency
erreichen kann. Es werden dazu Bilder eines Motors gezeigt, die mit Hilfe eines Beispiels aus
[NVIDIA SDK 2011] erstellt wurden. Auf der linken Seite ist dazu das Modell ohne ein spezi-
elles Verfahren für lichtdurchlässige Objekte dargestellt. Man kann sofort erkennen, dass die
Darstellung des Motors inkorrekt ist. Für eine richtige Anzeige müsste man die semitrans-
parenten Objekte sortieren und von hinten nach vorne rendern. Das mittlere Bild wurde mit
Stochastic Transparancy gerendert. Es wurde dafür der letzte Algorithmus für Antialiased
Depth-Based Stochastic Transparency benutzt. Ebenfalls wurde die Anzahl der Abtastwerte
auf (S = 24) erhöht, indem drei mal zwei Durchläufe für die stochastischen Renderingdurch-
läufe und unterschiedlichen Anfangswerte für die Zufallsgeneratoren gewählt wurden. Mit
dem zusätzlichen Durchlauf für die Berechnung der gesamten Opazität lief die Anwendung
mit ingesamt sieben zusätzlichen Renderingdurchläufen für die lichtdurchlässigen Objekte.
In der Bildmitte im Bereich der Kupplung, welche von den zwei Auspu�rohren verdeckt
wird, kann man ein Rauschen im Bild ausmachen. Als Vergleich dazu zeigt das rechte Bild
die Darstellung des Motors mit Hilfe von Dual-Depth Peeling von [Bavoil and Myers 2008]
und [Liu et al. 2009]. Dieses Bild wird mit vier zusätzlichen Renderingdurchläufen für die
Darstellung von semitransparenten Objekten generiert. Die Anzahl der Renderingdurchläufe
wurde bei den beiden letzten Verfahren so gewählt, dass eine Bildwiederholrate von 60 - 70
Bildern pro Sekunde auf einer GeForce GTX 560 Ti möglich waren. Auch wenn im rech-
ten Bild kein Rauschen auftritt, so hängt die Darstellung von der Anzahl der Durchläufe
ab. Gäbe es mehr Verdeckungen von transparenten Objekten, so würden die weiter hinten
liegenden semitransparenten Objekte nicht mehr berücksichtigt werden. Stochastic Transpa-
rency hingegen besitzt diese Beschränkung nicht, weswegen der Algorithmus praktisch für
jegliche Art von lichtdurchlässigen Objekten genutzt werden kann. In Abbildung 3.3 werden
18
3.8 Ergebnisse von Stochastic Transparency
zum Beispiel 15000 transparente Haare, 6000 transparente Texturen, transparente Kleidung
und andere opake Objekte mit 26 Bildern pro Sekunde gerendert.
Abbildung 3.3: Transparente Haare, Gräser und Kleidung werden nur mit Stochastic Trans-parency dargestellt. Gra�k: [Enderton et al. 2011]
19
4 Colored Stochastic Shadow Maps
Colored stochastic shadow maps (CSSM) ist ein Schattentextur-Verfahren (Shadow Map-
ping) um farbige Schatten darzustellen und wurde in [McGuire and Enderton 2011] vorge-
stellt. Ebenfalls beschreibt der Name auch das Aussehen der generierten Schattentexturen.
Das gesamte folgende Kapitel betrachtet Teile der Arbeit von McGuire und Enderton.
CSSM vereinigt teilweise Verdeckung und die Transmission mit unterschiedlichen Wellenlän-
gen um somit Schatten für opake, farbig lichtdurchlässige und teilweise verdeckte Objekte
berechnen zu können. Es kann als stochastisches Äquivalent einer Deep Shadow Map von
[Lokovic and Veach 2000] verstanden werden, welche in einem Renderingdurchlauf berechnet
werden kann. CSSM erweitert dabei den bereits vorgestellten Algorithmus Stocastic Trans-
parency von [Enderton et al. 2011]. Dort wurde für die Schattenerstellung eine stochastische
Schattentextur für normale Schatten erstellt und mit Hilfe von PCF ge�ltert. Bei CSSM wird
dieses Verfahren weiterentwickelt, in dem für jeden Farbkanal stochastisch eine Schattentex-
tur berechnet wird. Die Entfernungen z zum Licht werden dabei jedoch nur übernommen,
wenn die Transmissionswerte des Objektes dies zulassen. Dies wird im Abschnitt 4.1 genau-
er betrachtet. Im nächsten Abschnitt 4.2 wird ein allgemeiner Algorithmus für CSSM und
im Abschnitt 4.3 ein ei�zienterer Algorithmus vorgestellt. Danach werden im Abschnitt 4.4
die Abtastwerte für die Filterung von CSSM beschrieben. Zuletzt werden die Ergebnisse im
Abschnitt 4.5 betrachtet.
4.1 Zusammenhang zwischen Verdeckung und
Transmission
Für die Berechnung von farbigen Schatten �nden McGuire und Enderton einen Ansatz für
den Zusammenhang von Verdeckung und Transmission. Dazu werden drei statistische Er-
eignisse für ein Photon der Wellenlänge λ und einer Ober�äche in einem Dreieck de�niert:
D = �Das Photon tri�t das Dreieck, welche die Ober�äche umschlieÿt.�
O = �Das Photon tri�t die Ober�äche selbst.�
T = �Das Photon wird durch die Ober�äche transmittiert�
Eine Ober�äche ist dabei der sichtbare Teil eines Objektes, wie zum Beispiel eine Textur für
20
4.2 Allgemeiner Algorithmus (CSSM1)
Material α ~tr ~tg ~tbgrünes Glas 1.00 0.1 0.9 0.1durchsichtiges Nylon 0.25 0.5 0.5 0.5Backstein 1.00 0.0 0.0 0.0schwarzes Nylon 0.25 0.0 0.0 0.0
Tabelle 4.1: Beispielwerte für Transmissionswerte mit verschiedenen Wellenlängen nach[McGuire and Enderton 2011]
ein Blatt eines Baumes, die auf ein Dreieck gelegt wurde. Der restliche Teil des Dreiecks,
welches nicht das Blatt darstellen soll, wird dabei auf α = 0 gesetzt und sollte als nicht
präsent gelten. Durch diese Texturierung wird in der Computergra�k viel Aufwand für die
Modellierung und Darstellung von feinen Strukturen eingespart.
Die Wahrscheinlichkeit für ein Photon, welches die Ober�äche tri�t und von einem Drei-
eck umschlossen wird, wäre somit P (O|D) = α. Desweiteren wäre die Wahrscheinlichkeit,
dass ein Photon der Wellenlänge λ von der Ober�äche transmittiert wird P (T |O) = ~tλ.
Beispielwerte �nden sich in Tabelle 4.1. Die Wahrscheinlichkeit eines Photons welches nicht
transmittiert und re�ektiert wird, reduziert sich damit:
~ρλ = P (T |D) = 1− P ([(O ∩ T ) ∪O]|D)
~ρλ = (1− ~tλ)α (4.1)
Somit stellt ~ρλ den Anteil des Lichtes für jede Wellenlänge dar, welches die Ober�äche tri�t,
aber nicht transmittiert wird. Dies setzen die Autoren als Konstante für die Darstellung von
farbigen Schatten voraus.
4.2 Allgemeiner Algorithmus (CSSM1)
Als erstes wird von McGuire und Enderton ein allgemeiner Algorithmus für CSSM vorge-
stellt, der das Verfahren Stochastic Transparency um eine Transmission von Lichtanteilen
erweitert. Dadurch werden nur bestimmte Wellenlängen eines Photons transmittiert, weswe-
gen schluÿendlich farbige Schatten entstehen. Eine Brechung der Lichtstrahlen wird jedoch
nicht berücksichtigt. Das Verfahren benötigt für jede Wellenlänge eine eigene Textur und
wird CSSM1 genannt.
In diesem Verfahren werden im ersten Schritt, ähnlich dem traditionellen PCF, aus der
Position der Lichtquelle alle Entfernungen z zu den Objekten berechnet. Diese werden je-
doch nicht sofort in eine einzige Textur (shadow map) geschrieben. Bei CSSM1 wird für
jede Welllenlänge λ ein Zufallsvektor ~ξλ erstellt, wobei ~ξλ ein Vektor mit gleichverteilten
Zufallszahlen von 0 bis 1 ist und mit einem Hash-Algorithmus für die Weltkoordinate des
21
4.2 Allgemeiner Algorithmus (CSSM1)
Fragments berechnet wird (vgl. [Enderton et al. 2011]). Falls der Vektor ~ξλ gröÿer als der
Transmissionsvektor ~ρλ ist, werden keine z-Werte in die shadow map geschrieben. Sind die
Werte in ~ρλ besonders klein, was bei kleinen α und hohen ~tλ der Fall ist, werden für die-
se Wellenlänge wahrscheinlicher die z-Werte in die Schattentextur geschrieben und somit
später ein Schatten wiedergegeben. Es folgt eine Zusammenfassung des Algorithmus für die
Schattentexturgenerierung:
1. Für jede Wellenlänge λ:
(a) Leere und initialisiere die Schattentextur neu.
(b) Setze die Projektionsmatrix für die Lichtquelle.
(c) Rendere alle Ober�ächen, wobei Fragmente mit ~ξλ > ~ρλ ausrangiert werden.
2. Gebe das Array von Schattentexturen zurück.
Im zweiten Schritt des Algorithmus wird nun die Beleuchtung mit Hilfe der Schattentex-
tur der jeweiligen Wellenlänge λ für jedes Fragment berechnet. Als erstes wird die Position
des Fragmentes in das Koordinatensystem der Lichtquelle transformiert. Nun beginnt die
Schattensuche. Es wird für jede Wellenlänge λ der Schattenanteil berechnet. Dazu wird
die Beleuchtung ~Iλ zuerst mit 0 initialisiert. Nun werden, ähnlich wie mit PCF, in einem
bestimmten Abstand (o�set) Abtastungen im Bereich der Position des Fragments vorge-
nommen. Die ausgewählten z-Werte der shadow map werden mit dem z-Wert des aktuellen
Fragments verglichen. Falls der Abtastwert gröÿer als der aktuelle z-Wert ist, wurde kein
Schatten gefunden und die Beleuchtung ~Iλ inkrementiert. Nachdem alle Abtastungen vor-
genommen wurden, wird die endgültige Beleuchtung für die Wellenlänge berechnet. Diese
ergibt sich aus dem Beleuchtungsanteil der Lichtquelle ~Lλ multipliziert mit dem berechneten
Schattenanteil. Der Schattenanteil berechnet sich aus ~Iλ geteilt durch die Anzahl der Abtast-
werte. Ein Fragment liegt also im Kernschatten (umbra), wenn ~Iλ niemals wegen niedrigeren
z-Werten in der shadow map erhöht wurde und somit mit der Multiplikation von 0 die Be-
leuchtung auf schwarz gesetzt wird. Umgekehrt bleibt die Farbe des Fragments unverändert,
wenn ~Iλ wegen höheren z-Werten in der Schattentexutr immer erhöht wurde und somit mit
1 multipliziert wird. Ansonsten liegt das Fragment im Halbschatten (penumbra) und der
berechnete Schattenanteil verdunkelt die Farbe des Fragments. Die Beleuchtungsrechnung
mit Schatten kann ebenfalls zusammengefasst werden:
1. Übergebe die projezierte Schattentexturkoordinate ~sxyz.
2. Für jede Wellenlänge λ:
(a) ~Iλ = 0.
(b) Berechne für jeden Abtastwert ~∆ des Filters:~Iλ+ = z an der Stelle ~sxy + ~∆ der Schattentextur falls > ~sz.
(c) ~Iλ = ~Lλ · ~Iλ/Anzahl der Abtastwerte.
22
4.3 E�zienter Algorithmus für das RGB-Farbmodell (CSSM2)
Abbildung 4.1: Als erstes werden aus der Lichtposition zu allen Objekten die Z-Werte berech-net und in der farbigen Textur gespeichert. Dabei können einzelne Farbkanäletransmittiert werden. Danach werden aus der Augenposition die Z-Werte mitder Schattentextur verglichen und dem entsprechend beleuchtet.
Da die Farb- und Schattenberechnung für jede Wellenlänge λ vorgenommen wird, können
farbige Schatten wiedergegeben werden.
4.3 E�zienter Algorithmus für das RGB-Farbmodell
(CSSM2)
Neben dem allgemeinen Algorithmus wird von McGuire und Enderton ein e�zienterer Algo-
rithmus für die Abtastung von roten, grünen und blauen Wellenlängen im RGB-Farbmodell
beschrieben. Statt für jede Wellenlänge eine eigene Schattentextur zu erstellen, wird für die
drei Farbkanäle eine einzige Textur erstellt (colored shadow map). Bei der Erstellung schreibt
man mit Hilfe von Vektoren nur in eine farbige Schattentextur, was zu einer Beschleunigung
in der Erstellung durch weniger Schreibzugri�e führt. Ebenfalls spart man dadurch Band-
breite und braucht eine geringere Anzahl von Instruktionen. Einen Überblick kann man in
Abbildung 4.1 bekommen. Das rote obere Objekt besitzt hohe Werte für den roten Farbkanal
in ~ρλ. Deswegen ist es möglich, dass nicht der Z-Wert des semitransparenten roten Objektes
in die Schattentextur geschrieben wird, sondern der des blauen Hintergrundes. Gleiches gilt
für manche Entfernungsvergleiche mit dem grünen unteren Objekt.
Bei dem Algorithmus wird als erstes wird die farbige Schattentextur erstellt. Um nicht die
Vorteile des hardwarebeschleunigten Z-Bu�er einzubüÿen, werden im ersten Schritt aus der
Position der Lichtquelle alle Entfernungen z der opaken Objekte gerendert. Danach werden
diese Werte in alle Farbkanäle einer RGB-Textur kopiert, indem ein groÿes Viereck wieder-
gegeben wird. Als nächstes werden die Z-Werte der lichtdurchlässigen Objekte in alle Kanäle
geschrieben. Wie zuvor werden jedoch nur die Z-Werte überschrieben, wenn der Vektor ~ξλgröÿer als der Transmissionsvektor ~ρλ ist. Ansonsten wird der Z-Wert des aktuellen Frag-
23
4.4 Abtastwerte für die Filterung
ments des lichtdurchlässigen Objekts übernommen.
Eine Übersicht über den Algorithmus für die Schattentexturgenerierung folgt:
1. Setze die Projektionsmatrix für die Lichtquelle.
2. Leere und initialisiere den Z-Bu�er und die farbige Schattentextur.
3. Schalte das Schreiben der Farben aus und das Schreiben der Entfernungen ein.
4. Kopiere alle Entfernungen zu den Farbwerten indem ein Anzeigenfüllendes Rechteck
gerendert wird.
5. Rendere alle lichtdurchlässigen Objekte wobei die Farbe max(zfragment, ~ξλ > ~ρλ) ent-
spricht.
Nun wird als zweites wieder die Beleuchtung berechnet. Durch die RGB-Textur spart man
sich hier wieder Zugri�e und greift mit einem Vektor alle Tiefenwerte der Kanäle für die
Berechnung des Schattenanteils ab. Die Berechnung der Beleuchtung �ndet analog zu CSSM1
statt. Der Algorithmus für die Beleuchtungsrechnung mit Schatten wird folgendermaÿen
zusammengefasst:
1. Übergebe die projezierte Schattentexturkoordinate ~sxyz.
2. ~Iλ = 0.
3. Berechne für jeden Abtastwert ~∆ des Filters:
(a) ~Iλ+ =Farbe an der Stelle ~sxy + ~∆ der Schattentextur falls > ~sz.
4. Gebe ~Lλ · ~Iλ/Anzahl der Abtastwerte zurück.
4.4 Abtastwerte für die Filterung
Bei der Berechnung der Beleuchtung und der Schatten werden im Umfeld des jeweiligen
Fragments Abtastwerte betrachtet. Dadurch wird einerseits geprüft, ob das Fragment im
Kernschatten, Halbschatten liegt oder keinen Schattenanteil besitzt. Andererseits entsteht
durch die stochastische Wahl der Schattenblocker ein Rauschen im farbigen Schatten, das
durch einen breiteren Filter geglättet werden soll. Für den CSSM2-Algorithmus wird von
den Autoren ein Filter für dieses Problem vorgestellt. Er besitzt dreizehn Abtastpunkte, die
relativ zum Zentrum der Texturkoordinate abgegri�en werden.
~∆i = Xi + ~δ(~sxy)
Xi ∈ {(0, 0), (±3,±3), (±4,±0), (±0,±4), (±7,±0), (±0,±7)}
24
4.5 Ergebnisse
Wobei die Rauschfunktion ~δ den Filter weiter variiert. Er soll groÿe blockweises Rauschen
durch einzelnes Pixelrauschen ersetzen. Das blockweise Rauschen kann dadurch entstehen,
dass teilweise ein Wert in der Schattentextur für mehrere Bildschirmpixel genutzt wird.
~δ(~sxy) = [(5~sxy)mod (2,2)]− (1,1)
6(‖ ∂~sxy∂x ‖1,‖
∂~sxy∂y ‖1
)Der Ausdruck ‖· · · ‖1 bedeutet, dass der Ausdruck Manhattan-Distanz besitzt. Die Manhat-
tan Distanz wird von speziellen OpenGL/DirectX APi-Aufrufen unterstützt und von der
GPU-Hardware beschleunigt. Die Rauschfunktion ~δ ist eine vereinfachte Form der kompli-
zierteren Rauschfunktion, welche in [Mittring 2007] vorgestellt wurde.
4.5 Ergebnisse
In Abbildung 4.2 sieht man auf der rechten Seite drei farbige Gläser, die einen farbigen
Schatten werfen. Dabei kann man beobachten, dass die Schatten der anderen Gläser korrekt
gemischt werden. Die Intensität des Schatten hängt ebenfalls davon ab, wieviele semitranspa-
rente Schichten vom Licht durchdrungen werden. Dies ist gut an den Ö�nungen der Gläser
zu erkennen, da der Schatten des oberen Bereiches des Glases einen helleren Bereich der
Ö�nung zeigt. Desweiteren werden sogar die Verfärbungen der spekularen Glanze�ekte si-
muliert, wie man auf dem liegenden gelben Glas sehen kann.
Auf der linken Seite von Abbildung 4.2 wird die farbige Schattentextur der Szene gezeigt.
Diese wurde aus der Position des Lichtes erstellt und zeigt deswegen die Szene aus einer
anderen Perspektive. Man kann sehr leicht das Rauschen innerhalb der farbigen Objekte
erkennen, welches das stochastische Verfahren mit sich bringt. In der Szene ist davon jedoch
nichts mehr zu sehen, da durch einen geeigneten Filter das Rauschen entfernt worden ist.
Abbildung 4.3 zeigt eine Spielszene, die McGuire und Enderton mit CSSM gerendert ha-
ben. Diese Szene mit über einer Million Dreiecken soll laut den Autoren mit 60 Bildern pro
Sekunde laufen und je nach Betrachtung nur 0.1-0.9 ms mehr als der die Generierung mit
opaken Schatten brauchen. Der Algorithmus ist also durchaus für aktuelle Echtzeitanwen-
dungen interessant.
25
4.5 Ergebnisse
Abbildung 4.2: Das linke Bild zeigt die farbige Schattentextur von CSSM. Rechts sieht mandie farbigen Schatten der Gläser. Gra�ken: [McGuire and Enderton 2011]
Abbildung 4.3: Spielszene mit 1 Million Dreiecken. Gra�k:[McGuire and Enderton 2011]
26
5 Fazit
In dieser Arbeit werden die aktuellen stochastischen Ansätze für die Darstellung von trans-
parenten Objekten und Schatten vorgestellt. Alle Verfahren können mit einer aktuellen Gra-
�kkarte in Echtzeit dargestellt werden.
Das Verfahren Stochastic Transparency ermöglicht es, eine beliebige Anzahl von trans-
parenten Objekten, wie auch deren farblosen Schatten, in einer Szene darzustellen. Durch
den stochastischen Ansatz werden alle Beitrage der lichtdurchlässigen Objekte zur Berech-
nung der Farbe eines Pixels im Mittel berücksichtigt. Dadurch entsteht ein Rauschen im
Bild, welches mit zusätzlichen Renderingdurchläufen minimiert wird. Insgesamt benötigt
das Verfahren somit mindestens drei zusätzliche Renderingdurchläufe für die Darstellung
von transparenten Objekten. Das Rauschen kann man ebenfalls vermindern, indem man
die Anzahl der Abtastwerte für ein Pixel erhöht. Zur Zeit ist dies nur durch zwei zusätzli-
che Renderingdurchläufe möglich. Dabei wird die Wahl der zufällig gewählten Abtastwerte
durch einen anderen Startwert für den Zufallsgenerator geändert. In Zukunft wird sich das
Verfahren ohne groÿe Änderungen verbessern, da der Algorithmus von der Entwicklung der
Gra�kkarten pro�tiert. Wird die jetzige Anzahl der Abtastwerte bei MSAA von acht auf
sechzehn oder zweiunddreiÿig erhöht, so wird sich die Bildqualität enorm verbessern. Ein
weiterer Vorteil des Verfahrens ist die feste Anzahl von Durchläufen und der konstante
Speicherbedarf. Zudem ist es möglich mit dem gleichen Ansatz Schatten von transparenten
Objekten darzustellen. Somit ist Stochastic Transparency ein guter Ansatz um jegliche Art
von transparenten Objekten in einer Szene darzustellen.
Mit dem Algorithmus für Colored Stochastic Shadow Maps kann man farbige Schatten
von transparenten Objekten darstellen. Das Verfahren ähnelt dabei dem PCF, jedoch wird
eine Schattentextur für jede Farbkomponente erstellt. Der Algorithmus wurde dabei soweit
verbessert, dass eine farbige Schattentextur generiert wird, indem stochastisch die Entfer-
nungen zu den transparenten Objekten geschrieben werden. Dieser Vorgang wird jedoch von
den Transmissionswerten eines Objektes beein�usst. Farbige transparente Objekte können
somit nur bestimmte Farbkanäle blockieren. In einem letzten Durchlauf wird das zusätzliche
Rauschen des stochastischen Ansatzes noch mit einem geeigneten Filter geglättet. Dadurch
ist das Vefahren nicht viel langsamer als herkömmliche Schattengenierungsverfahren und
auch für ältere Hardware geeignet. Zudem kann CSSM, wie auch PCF, mit anderen Verfah-
ren kombiniert werden. Somit sind Colored Stochastic Shadow Maps ein guter Ansatz, wenn
man einen farbigen Schatten von transparenten Objekten darstellen will.
27
Literaturverzeichnis
[Bavoil and Myers 2008] Bavoil, L., and Myers, K. 2008. Order Independent Transpa-
rency with Dual Depth Peeling. Tech. rep., NVIDIA.
[Enderton et al. 2011] Enderton, E., Sintorn, E., Shirley, P., and Luebke, D. 2011.
Stochastic Transparency. IEEE transactions on visualization and computer graphics,
VOL. 17.
[Fuchs et al. 1985] Fuchs, H., Goldfeather, J., Hultquist, J., Spach, S., Austin,
H., Brooks Jr, F., Eyles, J., and Poulton, J. 1985. Fast spheres, shadows, textures,
transparencies, and image enhancements in Pixel-Planes. In Proceeding SIGGRAPH
'85 Proceedings of the 12th annual conference on Computer graphics and interactive
techniques , 111-120.
[Hecht 2002] Hecht, E. 2002. Optics. Addison-Wesley. 4th Edition.
[Liu et al. 2009] Liu, F., Huang, M., Liu, X., and Wu, E. 2009. E�cient Depth Peeling
via Bucket Sort. HPG '09 Proceedings of the Conference on High Performance Graphics
2009.
[Lokovic and Veach 2000] Lokovic, T., and Veach, E. 2000. Deep shadow maps. In Pro-
ceeding of SIGGRAPH 2000, ACM, New york, NY, USA, 385-392.
[McGuire and Enderton 2011] McGuire, M., and Enderton, E. 2011. Colored Stocha-
stic Shadow Maps. In Proceeding I3D '11 Symposium on Interactive 3D Graphics and
Games, ACM, New York, NY, USA.
[Mittring 2007] Mittring, M. 2007. Finding next gen: Cryengine 2. In SIGGRAPH '07:
ACM SIGGRAPH 2007 courses, ACM, New York, NY, USA, 97-121.
[Mulder et al. 1998] Mulder, J., Groen, F., and van Wijk, J. 1998. Pixel masks for
screen-door transparency. In Proceedings of Visualization, 351-358.
[Neider and Davis 1993] Neider, J., and Davis, T. 1993. OpenGL Programming Guide:
The O�cial Guide to Learning OpenGL. Release 1. Addison-Wesley Longman Publishing
Co., Inc., Boston, MA, USA.
28
Literaturverzeichnis
[NVIDIA SDK 2011] nvidia sdk 11: http://developer.nvidia.com/nvidia-graphics-sdk-11.
Zuletzt besucht: 29.06.2011.
[Porter and Du� 1984] Porter, T., and Duff, T 1984. Compositing digital images. In
Proceedings of SIGGRAPH, 253-259.
[Reeves et al. 1987] Reeves, W., Salesin, D. H., and Cook, R. L. 1987. Rendering
antialiased shadows with depth maps. In Proceedings of SIGGRAPH 197, ACM, New
York, NY, USA, 283-291.
[Sintorn and Assarsson 2009] Sintorn, E., and Assarsson, U. 2009. Hair self shadowing
and transparency depth ordering using occupancy maps. In I3D '09: Proceedings of the
2009 symposium on Interactive 3D graphics and games, 67-74.
[Williams 1978] Williams, L. 1978. Casting curved shadows on curved surfaces. In SIG-
GRAPH 1978, ACM, New York, NY, USA, 270-274.
29