Stochastic Transparency and Shadows - Hochschule …nischwit/Hauptseminar/2011/Seminararbeit... ·...

29

Transcript of Stochastic Transparency and Shadows - Hochschule …nischwit/Hauptseminar/2011/Seminararbeit... ·...

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