05.11.2012 Aufrufe

Entwicklung eines BRDF-Shader-Plugins für Cinema 4d

Entwicklung eines BRDF-Shader-Plugins für Cinema 4d

Entwicklung eines BRDF-Shader-Plugins für Cinema 4d

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Fachbereich 4: Informatik<br />

<strong>Entwicklung</strong> <strong>eines</strong><br />

<strong>BRDF</strong>-<strong>Shader</strong>-<strong>Plugins</strong> <strong>für</strong><br />

CINEMA 4D<br />

Studienarbeit<br />

im Studiengang Computervisualistik<br />

vorgelegt von<br />

Manuel Becker<br />

Betreuer: Prof. Dr.-Ing. Stefan Müller<br />

(Institut <strong>für</strong> Computervisualistik, AG Computergraphik)<br />

Koblenz, im Januar 2008


Erklärung<br />

Ich versichere, dass ich die vorliegende Arbeit selbständig verfasst und<br />

keine anderen als die angegebenen Quellen und Hilfsmittel benutzt habe.<br />

Ja Nein<br />

Mit der Einstellung der Arbeit in die Bibliothek bin ich einverstanden. � �<br />

Der Veröffentlichung dieser Arbeit im Internet stimme ich zu. � �<br />

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />

(Ort, Datum) (Unterschrift)


Inhaltsverzeichnis<br />

1 Einführung 1<br />

2 Grundlagen 3<br />

2.1 Radiometrie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2.2 Tonemapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />

2.3 CINEMA 4D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

3 <strong>BRDF</strong> 7<br />

3.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

3.2 Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

3.3 Klassen von <strong>BRDF</strong>s . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

3.4 Beleuchtungsmodelle . . . . . . . . . . . . . . . . . . . . . . . 10<br />

3.4.1 Lambert . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

3.4.2 Phong . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

3.4.3 Weitere Modelle . . . . . . . . . . . . . . . . . . . . . . 13<br />

3.5 Measured <strong>BRDF</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.6 Anwendungsgebiete . . . . . . . . . . . . . . . . . . . . . . . 16<br />

4 Technische Umsetzung 18<br />

4.1 Das SDK von CINEMA 4D . . . . . . . . . . . . . . . . . . . . 18<br />

4.2 Wahl der <strong>BRDF</strong>-Daten . . . . . . . . . . . . . . . . . . . . . . 19<br />

4.2.1 Auswahlmöglichkeiten . . . . . . . . . . . . . . . . . 19<br />

4.2.2 Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

4.2.3 Einbindung . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

4.3 Vorberechnungen . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

4.4 Auslesen und interpolieren der <strong>BRDF</strong>-Werte . . . . . . . . . 29<br />

4.5 Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

4.6 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

5 Fazit und Ausblick 45<br />

iii


Abbildungsverzeichnis<br />

1 Radiometrie: Raumwinkel . . . . . . . . . . . . . . . . . . . . 3<br />

2 Radiometrie: Strahldichte . . . . . . . . . . . . . . . . . . . . 4<br />

3 Radiometrie: Bestrahlungsstärke . . . . . . . . . . . . . . . . 5<br />

4 <strong>BRDF</strong>: Reflexion . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

5 <strong>BRDF</strong>: Anisotropie . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

6 <strong>BRDF</strong>: Isotropes und anisotropes Material . . . . . . . . . . . 10<br />

7 Beleuchtungsmodell: Lambert . . . . . . . . . . . . . . . . . . 11<br />

8 Beleuchtungsmodell: Phong . . . . . . . . . . . . . . . . . . . 12<br />

9 Beleuchtungsmodell: Phong und Blinn-Phong im Vergleich . 13<br />

10 Beleuchtungsmodell: Cook-Torrance - Selbstverschattung . . 14<br />

11 Beleuchtungsmodell: Cook-Torrance - Ergebnis . . . . . . . . 14<br />

12 Measured <strong>BRDF</strong>s: verschiedene Messapparaturen . . . . . . 15<br />

13 Stand der Technik: Verwendung von Measured <strong>BRDF</strong>s im Film<br />

„The Matrix“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

14 Auswahlmöglichkeiten: Die MERL-Datenbank . . . . . . . . 20<br />

15 Vorberechnungen: lokales Koordinatensystem . . . . . . . . 26<br />

16 Vorberechnungen: Kugelkoordinaten . . . . . . . . . . . . . . 27<br />

17 Interpolation der <strong>BRDF</strong>-Werte: Schematische Darstellung . . 30<br />

18 Interpolation der <strong>BRDF</strong>-Werte: Ausschnitt einer <strong>BRDF</strong>-Datei 31<br />

19 Interpolation der <strong>BRDF</strong>-Werte: Gewichtung von Werten . . . 33<br />

20 Integration: GUI, Screenshot 1 . . . . . . . . . . . . . . . . . . 38<br />

21 Integration: GUI, Screenshot 2 . . . . . . . . . . . . . . . . . . 39<br />

22 Integration: GUI, Screenshot 3 . . . . . . . . . . . . . . . . . . 39<br />

23 Ergebnisse: planare Fläche, <strong>BRDF</strong>-<strong>Shader</strong> und CINEMA 4D<br />

Standard-Material im Vergleich . . . . . . . . . . . . . . . . . 40<br />

24 Ergebnisse: Kugel, <strong>BRDF</strong>-<strong>Shader</strong> und CINEMA 4D Standard-<br />

Material im Vergleich . . . . . . . . . . . . . . . . . . . . . . . 41<br />

25 Ergebnisse: Federn, Vergleich der Tonemapping-Werte . . . 42<br />

26 Ergebnisse: 1955 Chevrolet Bel Air, <strong>BRDF</strong>-<strong>Shader</strong> und CINE-<br />

MA 4D Standard-Material im Vergleich . . . . . . . . . . . . 43<br />

27 Ergebnisse: 1955 Chevrolet Bel Air, <strong>BRDF</strong>-<strong>Shader</strong> mit und<br />

ohne Spiegelung . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

iv


1 Einführung<br />

Die in der Computergrafik immer wichtiger werdende fotorealistische Darstellung<br />

von Objekten erhält nicht nur in der Spiele- und Filmindustrie ein<br />

steigendes Maß an Bedeutung, da computergenerierte Grafiken heutzutage<br />

in fast allen Bereichen eingesetzt werden. Dieser Trend zum Fotorealismus<br />

enstand schon in den späten 60er Jahren im gleichnamigen Kunststil in der<br />

Malerei.<br />

Bei der Generierung möglichst realistisch wirkender Bilder spielen viele<br />

Faktoren eine Rolle. In dieser Arbeit wird speziell auf Materialien und<br />

deren Reflexionseigenschaften eingegangen, die durch so genannte <strong>BRDF</strong>s<br />

(Bidirectional Reflectance Distribution Function) beschrieben werden. Hauptaugenmerk<br />

liegt dabei auf den Measured <strong>BRDF</strong>s, deren physikalische Reflexionswerte<br />

durch aufwändige Messverfahren akquiriert werden. Sie bieten<br />

somit wesentlich komplexere Darstellungsmöglichkeiten von Oberflächen,<br />

als es Standard-Beleuchtungsmodelle wie das Lambert- oder das Phong-<br />

Modell könnten. So ist es möglich, beispielsweise Seide oder gebürstetes<br />

Metall wesentlich schöner und realistischer darzustellen.<br />

Measured <strong>BRDF</strong>s finden schon in einigen Bereichen Verwendung. Dazu<br />

gehört beispielsweise die 3d-Grafik-Software Maya von Autodesk, in der die<br />

Nutzung <strong>eines</strong> solchen <strong>Shader</strong>s möglich ist. Diese Funktion ist in CINEMA<br />

4D von MAXON jedoch noch nicht integriert. Die Motivation <strong>für</strong> diese<br />

Arbeit ist es daher, einen solchen <strong>Shader</strong> <strong>für</strong> CINEMA 4D zu entwickeln,<br />

unter der Annahme, dass dieser vor allem <strong>für</strong> anisotrope Materialien bessere<br />

Ergebnisse im Rendering liefert. Diese Funktionalität soll durch ein Plugin<br />

zur Verfügung gestellt werden.<br />

Diese Arbeit dokumentiert sowohl die <strong>Entwicklung</strong> des <strong>BRDF</strong>-<strong>Shader</strong>s, als<br />

auch dessen Ergebnisse. Da <strong>für</strong> das Verständnis der Funktionalität, die sich<br />

hinter dem Plugin verbirgt, ein Hintergrundwissen vorhanden sein muss,<br />

beschäftigt sich Kapitel 2 mit den Grundlagen der Radiometrie und mit der<br />

Wahl <strong>eines</strong> geeigneten Tonemappers. Ein kurzer Einblick in die Historie und<br />

Möglichkeiten von CINEMA 4D runden dieses Kapitel ab.<br />

Kapitel 3 beschäftigt sich mit den Grundlagen der <strong>BRDF</strong>, beschreibt<br />

ihre Eigenschaften und erläutert den Unterschied zwischen isotropen und<br />

anisotropen Materialien. Um einen besseren Einblick in die Thematik der<br />

Beleuchtungsmodelle zu bekommen, werden die grundlegenden Konzepte<br />

kurz erläutert. Auf die wichtigsten Modelle (Lambert und Phong) wird<br />

dabei ausführlicher eingegangen. Das darauf folgende Measured <strong>BRDF</strong>s-<br />

Unterkapitel 3.5 zeigt die Unterschiede zu den mathematischen Beleuchtungsmodellen<br />

und verschiedene Möglichkeiten, diese Art der <strong>BRDF</strong> zu<br />

erzeugen. In Abschnitt 3.6 veranschaulichen anschließend einige ausgewählte<br />

Anwendungsgebiete die Möglichkeiten der gemessenen <strong>BRDF</strong>s.<br />

Kapitel 4 beschreibt die technische Umsetzung des <strong>BRDF</strong>-<strong>Shader</strong>s als<br />

1


Plugin auf Basis des SDKs von CINEMA 4D. Vor der detaillierten Beschreibung<br />

der Implementation wird auf die Wahl und deren Begründung <strong>für</strong><br />

ein bestimmtes <strong>BRDF</strong>-Dateiformat eingegangen. Ein kleiner Exkurs über<br />

die Einbindung des Sortierverfahrens Selectionsort erweitert Unterkapitel<br />

4.2. In Abschnitt 4.3 wird die notwendige Nutzung und Umrechnung in<br />

ein lokales Koordinatensystem, sowie die Transformation in Kugelkoordinaten<br />

erläutert. Der Hauptteil dieser Arbeit befindet sich in Unterkapitel<br />

4.4, in dem das Auslesen und die Interpolation der <strong>BRDF</strong>-Werte anhand<br />

von Beispielen und Quellcodeausschnitten beschrieben wird. Abschnitt 4.5<br />

stellt die Integration der einzelnen Komponenten, sowie der GUI, zu einem<br />

Gesamtsystem dar. Das Kapitel schließt mit den Ergebnissen des <strong>Shader</strong>s.<br />

Das letzte Kapitel beinhaltet das Fazit und den Ausblick, beruhend auf<br />

den Erkenntnissen dieser Arbeit und der <strong>Entwicklung</strong> des <strong>BRDF</strong>-<strong>Shader</strong>s.<br />

2


2 Grundlagen<br />

2.1 Radiometrie<br />

Um die Verwendung und den Aufbau der <strong>BRDF</strong> besser verstehen zu können,<br />

ist es notwendig ein paar radiometrische Grundlagen zu kennen. Wichtig<br />

<strong>für</strong> das Verständnis sind vor allem der Raumwinkel, die Strahldichte<br />

und die Bestrahlungsstärke, die im Folgenden näher erläutert werden. Das<br />

Zusammenspiel dieser drei Elemente bildet die physikalische Basis, um eintreffendes<br />

und ausgehendes Licht über jeweils ein bestimmtes Winkelpaar<br />

<strong>für</strong> einen Punkt auf einer Oberfläche beschreiben zu können.<br />

Raumwinkel<br />

Der Raumwinkel beschreibt das Verhältnis der bedeckten Kugeloberfläche<br />

A k zum Kugelradius r zum Quadrat und ist vergleichbar mit einem Winkel<br />

(Radiant) im zweidimensionalen Raum. Die entsprechende Einheit lautet<br />

Steradiant (sr). Der maximale Raumwinkel der gesamten Einheitskugeloberfläche<br />

beträgt dabei immer 4π sr. Um lediglich einen Teil des Lichtes zu<br />

betrachten, welches beispielsweise durch einen recht kleinen Ausschnitt der<br />

Hemisphäre auf die Materialoberfläche trifft, wird der differentiale Raumwinkel<br />

dω verwendet. Abbildung 1 zeigt ein Beispiel <strong>für</strong> einen solchen<br />

Raumwinkel. Liegen die Winkel in sphärischen Koordinaten (θ, φ) vor, so<br />

lässt sich die Fläche mit folgender Formel bestimmen:<br />

dω = sin θdθdφ (1)<br />

Abbildung 1: Radiometrie: Raumwinkel; Abbildung aus: [Mue08]<br />

3


Strahldichte (Radiance)<br />

Die Strahldichte beschreibt, wie viel Lichtenergie auf einer Fläche auftrifft<br />

bzw. von dort versendet wird. Sie entspricht der Helligkeit, die vom menschlichen<br />

Betrachter wahrgenommen wird und ist radiometrisch gesehen somit<br />

die wichtigste Größe. In der Literatur wird sie meistens, wie auch zum<br />

Beispiel in [DBB03], durch das Zeichen L beschrieben und lässt sich mathematisch<br />

folgendermaßen erfassen:<br />

Die Einheit dazu lautet:<br />

L =<br />

d 2 Φ<br />

dA · cos θ · dω<br />

Watt<br />

m 2 sr<br />

Eine wichtige Eigenschaft der Strahldichte ist es, dass sie entlang des Lichtstrahls<br />

konstant bleibt. Ein Blatt Papier beispielsweise erscheint somit aus<br />

verschiedenen Betrachtungsdistanzen gleich hell. Dies gilt ebenfalls <strong>für</strong> verschiedene<br />

Betrachtungswinkel, denn durch cos θ in Formel 2 nimmt die<br />

Helligkeit konstant zur sichtbaren Fläche ab. Da aber auch die sichtbare<br />

Fläche mit cos θ abnimmt, bleibt die wahrgenommene Helligkeit aus allen<br />

Perspektiven konstant. Abbildung 2 zeigt schematisch die Abhängigkeit<br />

der Strahldichte von cos und dem Ausstrahlungswinkel θ. Die Kreisform<br />

verdeutlicht, dass orthogonal zur Fläche wesentlich mehr Licht ausgesandt<br />

wird als zu den Seiten.<br />

Abbildung 2: Radiometrie: Strahldichte; Abbildung aus: [Mue08]<br />

4<br />

(2)<br />

(3)


Bestrahlungsstärke (Irradiance)<br />

Die in der Literatur, so auch in [PH04], häufig mit einem E definierte Bestrahlungsstärke<br />

gibt an, wie viel Strahlungsfluss dΦ pro Flächenelement<br />

dA auftritt (siehe Abbildung 3). Das bedeutet, dass eine Verdopplung der<br />

Fläche bei konstant einfallender Strahlung eine ebenfalls konstant bleibende<br />

Bestrahlungsstärke zur Folge hat [Mue08]. Im Gegensatz zur Strahldichte<br />

nimmt sie jedoch mit der Entfernung zur Lichtquelle im Quadrat ab und<br />

hat somit die folgende Einheit:<br />

Watt<br />

m 2<br />

Sie lässt sich durch die folgende Formel beschreiben:<br />

E = dΦ<br />

dA<br />

Abbildung 3: Radiometrie: Bestrahlungsstärke E; Abbildung aus: [Mue08]<br />

2.2 Tonemapper<br />

Da es Farbwerte gibt, die nach deren Berechnung außerhalb des darstellbaren<br />

Bereichs des Displays liegen, wird ein Tonemapper benötigt. Dieser<br />

bildet beispielsweise den höchsten rgb-Wert auf 1 ab. Alle Werte darunter<br />

werden linear skaliert. Diese Methode wird als linearer Tonemapper bezeichnet.<br />

Formel 6 beschreibt die lineare Skalierung <strong>für</strong> den Wert val, der<br />

mit einem neuen Maximalwert newMaxVal multipliziert wird (in der Regel<br />

ist dieser Wert 1, da alle Werte darüber meist außerhalb des darstellbaren<br />

5<br />

(4)<br />

(5)


Bereichs liegen) und anschließend durch den höchsten Wert maxVal geteilt<br />

wird [Sch94]. Der maximale Wert der Szene wird somit auf den neuen<br />

Maximalwert abgebildet.<br />

f (val) =<br />

val · newMaxVal<br />

maxVal<br />

Das daraus resultierende Problem ist, dass zwar alle Lichtquellen gut erkennbar<br />

sind, die restliche Szene aber durch das Herabskalieren wesentlich<br />

dunkler dargestellt wird. Eine Alternative ist es daher, alle Werte über rgb 1<br />

abzuschneiden und auf rgb 1 zu setzen. Beide Methoden erzeugen jedoch<br />

bei hohem Kontrast im Bild unvorteilhafte Ergebnisse. Wesentlich bessere<br />

Resultate liefert der logarithmische Tonemapper oder das URQ-Verfahren<br />

(engl. Uniform Rational Quantization). Da beide Verfahren in ihrer Qualität<br />

sehr ähnlich abschneiden, wird das URQ-Verfahren verwendet, da dieses<br />

einen geringeren Rechenaufwand hat. Formel 7 zeigt die entsprechende<br />

Skalierungsfunktion, die über den Parameter p steuerbar ist. Wird dieser auf<br />

1 gesetzt, so entspricht das Verfahren dem linearen Tonemapper [Kol03].<br />

f (val) =<br />

p · val<br />

p · val − val + maxVal<br />

(6)<br />

mitp ∈ [1, ∞] (7)<br />

Auf weitere Tonemapper wird im Zuge dieser Arbeit nicht eingegangen,<br />

da lediglich ein Tonemapping-Verfahren gesucht wurde, welches schnell<br />

ist und dennoch gute Ergebnisse erzielt. Weitaus bessere Verfahren sind<br />

wesentlich komplexer im Aufwand der Implementierung und in ihrer Rechenzeit.<br />

2.3 CINEMA 4D<br />

MAXON’s CINEMA 4D [Gmb07a] ist eine 3d-Grafik-Software zum Modellieren,<br />

Texturieren und Animieren von 3d-Objekten, sowie dem Rendern<br />

von Bildern und Animationen. Seit 1989 (damals noch FastRay genannt)<br />

wurde CINEMA 4D stetig bis zur aktuellen Version R10.5 weiterentwickelt.<br />

Zusätzlich zur Basisversion gibt es eine Vielzahl an optionalen Modulen,<br />

wie beispielsweise der Advanced Renderer. Dieser ermöglicht die Berechnung<br />

globaler Beleuchtung, HDRI, Radiosity und weitere Einstellungen. Mit einem<br />

anderen Modul namens HAIR lassen sich zum Beispiel nicht nur Haare,<br />

sondern auch Grasflächen, Felle usw. erzeugen.<br />

CINEMA 4D läuft sowohl unter Windows, als auch auf Mac OS X und bietet<br />

ein sehr umfangreiches SDK, mit dem sich <strong>Plugins</strong> in der Programmiersprache<br />

C++ entwickeln lassen. Das Entwickler-Forum Plugin-Cafe [Gmb07b]<br />

bietet in diesem Bereich reichlich Unterstützung bei Fragen und Problemen<br />

im Umgang mit dem SDK.<br />

6


3 <strong>BRDF</strong><br />

In diesem Kapitel werden sowohl die Grundlagen und die Eigenschaften, als<br />

auch verschiedene Klassen und Modelle von <strong>BRDF</strong>s weitergehend erläutert.<br />

Das Hauptaugenmerk liegt dabei vor allem auf gemessenen <strong>BRDF</strong>s (engl.<br />

Measured <strong>BRDF</strong>s), da diese den Grundstein <strong>für</strong> den selbst entwickelten<br />

<strong>BRDF</strong>-<strong>Shader</strong> liefern. Anschließend wird betrachtet, in welchem Rahmen<br />

ein solcher <strong>Shader</strong> genutzt werden könnte und wie weit der heutige Stand<br />

der Technik in diesem Bereich bereits ist.<br />

3.1 Definition<br />

Die vier-dimensionale bidirektionale Reflektanzverteilungsfunktion (engl. <strong>BRDF</strong>,<br />

Bidirectional Reflectance Distribution Function) gibt an, wie viel Licht unter<br />

beliebigen Einfalls- und Ausfallsrichtungen, jeweils definiert durch ein<br />

Winkelpaar, reflektiert wird. Zum einen handelt es sich dabei um das eintreffende<br />

Licht, welches durch die Winkel θin und φin beschrieben wird und<br />

zum anderen um das ausgehende Licht, repräsentiert durch θout und φout.<br />

Da die meisten Materialien zumindest teilweise diffus sind, wird lediglich<br />

ein Teil des Strahlungsflusses reflektiert. Die restlichen Anteile werden von<br />

der Oberfläche absorbiert.<br />

Die Funktion setzt <strong>für</strong> ein Flächenelement dA das ausgehende Licht in<br />

Relation zum eingehenden Licht, was sich mathematisch folgendermaßen<br />

beschreiben lässt:<br />

fr(dA, ωo, ωi) = dLo(dA, ωo)<br />

dE(dA, ωi)<br />

(8)<br />

dLo(dA, ωo)<br />

=<br />

.<br />

Li(dA, ωi) · cosθi · dωi<br />

(9)<br />

Für die Richtungen ω werden Kegel auf der Halbkugel betrachtet, die eine<br />

Mehrzahl an Richtungen beinhalten und durch Raumwinkel in ihrer Größe<br />

definiert sind. [PH04]<br />

Abbildung 4 auf Seite 8 zeigt ein mögliches Reflexionsverhalten einer<br />

Oberfläche <strong>für</strong> die Richtungen ωi, ωo.<br />

Spricht man vom Reflexionsgrad einer <strong>BRDF</strong>, so ist damit das Verhältnis<br />

vom ausgehenden (Φo) zum eingehenden (Φi) Strahlungsfluss gemeint. Das<br />

Besondere an dieser Einheit mit dem Bezeichner p ist, dass der Wertebereich<br />

im Gegensatz zur <strong>BRDF</strong> zwischen 0 und 1, anstatt zwischen 0 und unendlich<br />

liegt. Mathematisch lässt sich dieses Verhältnis folgendermaßen erfassen:<br />

p = Φo<br />

Φi<br />

=<br />

�<br />

2π Lo(dωo) · cos θo · dωo<br />

�<br />

2π Li(dωi) · cos θi · dωi<br />

7<br />

(10)


Abbildung 4: <strong>BRDF</strong>: Reflexion von Licht (i: incoming, o: outgoing); Abbildung aus:<br />

[Mue08]<br />

3.2 Eigenschaften<br />

<strong>BRDF</strong>s haben drei wichtige Eigenschaften, die erfüllt sein müssen, um von<br />

einem physikalisch korrekten Modell sprechen zu können. Zum einen handelt<br />

es sich dabei um die Helmholtz-Reziprozität. Diese ist genau dann erfüllt,<br />

wenn die Einfalls- und Ausfallswinkel vertauscht werden können ohne den<br />

Wert der <strong>BRDF</strong> zu ändern (Gleichung 11). Der Strahlungsfluss ist somit in<br />

beiden Richtungen identisch. Diese Eigenschaft lässt sich beispielsweise<br />

sehr gut an dem Prinzip des Raytracings zeigen, denn dort beginnt die<br />

Berechnung des Bildes von der Kamera aus und nicht bei den Lichtquellen<br />

selbst.<br />

<strong>BRDF</strong>(θi, φi, θo, φo) = <strong>BRDF</strong>(θo, φo, θi, φi) (11)<br />

Eine weitere wichtige Eigenschaft ist Erfüllung des Energieerhaltungs-Satzes,<br />

der besagt, dass Licht nicht erzeugt, sondern lediglich von der Oberfläche<br />

reflektiert wird. Der Reflexionsgrad liegt demnach immer zwischen 0 und 1,<br />

da nicht mehr Licht reflektiert werden kann als auf dem Material auftrifft.<br />

Diese Eigenschaft ist besonders wichtig <strong>für</strong> die Simulation von Licht, bei<br />

der ein Lichtstrahl sonst niemals konvergieren würde. So könnte eine eventuelle<br />

Abbruchbedingung <strong>für</strong> die Berechnung, bei welcher der Anteil <strong>eines</strong><br />

Strahls zu niedrig <strong>für</strong> die Gesamthelligkeit der Szene wird, nicht stattfinden.<br />

Zusammengefasst besagt diese Eigenschaft demnach, dass das Licht aller reflektierten<br />

Strahlen nicht größer sein kann, als die Menge des auftreffenden<br />

Lichtes [Geb]:<br />

∑ o<br />

<strong>BRDF</strong>(θi, φi, θo, φo) · cosθo · dωo ≤ 1 (12)<br />

Als dritte Eigenschaft muss gelten, dass die <strong>BRDF</strong> nicht negativ ist, um als<br />

8


physikalisch korrekt gelten zu können:<br />

<strong>BRDF</strong>(θi, φi, θo, φo) ≥ 0 (13)<br />

Zusätzlich zu den drei bisher genannten Eigenschaften wird häufig das<br />

Merkmal der Superposition genannt. Dieses beschreibt, dass sich zwei Lichtstrahlen,<br />

die im gleichen Punkt auf ein Material treffen, sich nicht gegenseitig<br />

in ihrer Wirkung beeinflussen und problemlos linear überlagert werden<br />

können [Geb].<br />

3.3 Klassen von <strong>BRDF</strong>s<br />

<strong>BRDF</strong>s können auf Grund einer weiteren Eigenschaft in zwei verschiedene<br />

Klassen unterteilt werden. Diese Unterscheidung findet anhand der Oberflächencharakteristik<br />

<strong>eines</strong> Materials statt, bei der zwischen isotropen und<br />

anisotropen Oberflächen differenziert wird.<br />

Bei natürlichen Materialien wird davon ausgegangen, dass diese immer<br />

zum Teil anisotrop sind und sich nicht rotationssymmetrisch verhalten. Die<br />

Oberfläche verändert die Strahlstärke des reflektierten Lichtes bei einer<br />

Rotation um die Azimutwinkel, wie Abbildung 5 zeigt. Gebürstetes Metall<br />

oder Seide sind gute Beispiele aus der Realität.<br />

Abbildung 5: <strong>BRDF</strong>: Anisotropie, eine Rotation um die Flächennormale verändert<br />

das Reflexionsverhalten; Abbildung aus: [CW93]<br />

Isotropie bedeutet, dass das wahrgenommene reflektierte Licht <strong>eines</strong> Gegenstandes<br />

selbst dann noch identisch auf den Betrachter wirkt, wenn<br />

dieser rotiert wird. Eine Plastikkugel stellt ein gutes Beispiel dar, bei der<br />

sich das Glanzlicht bei Rotation der Kugel und einem gleich bleibendem<br />

Betrachtungs- und Lichteinfallswinkel nicht verändert. Eine planare Fläche<br />

ist demnach rotationssymmetrisch bezüglich ihrer Normalen, so dass sich<br />

die Anzahl der Freiheitsgrade der <strong>BRDF</strong> auf drei reduzieren lassen [Mei95]:<br />

1. Einfallszenitwinkel θi<br />

2. Ausfallszenitwinkel θo<br />

3. Relativer Azimutwinkel ν = φo − φi<br />

9


Die Reflexion einer isotropen <strong>BRDF</strong> hängt also nicht von den beiden Azimutwinkeln<br />

φi und φo ab, sondern von ihrer Differenz, was Formel 15 nochmals<br />

veranschaulicht. Gleichung 14 bildet die Grundlage <strong>für</strong> diese Aussage, da<br />

zu beiden Azimutwinkeln ein beliebiger Wert φ aufaddiert werden kann,<br />

der das Ergebnis aber dennoch nicht verändert [CW93].<br />

<strong>BRDF</strong>isotrop(θi, φi, θo, φo) = <strong>BRDF</strong>(θi, φi + φ, θo, φo + φ) (14)<br />

= <strong>BRDF</strong>(θi, 0, θo, φo − φi) (15)<br />

Den Unterschied zwischen einem isotropen und einem anisotropen Material<br />

zeigt Abbildung 6.<br />

Abbildung 6: <strong>BRDF</strong>: Isotrope Oberfläche links, anisotrope Oberfläche rechts; Abbildung<br />

aus: [Geb]<br />

3.4 Beleuchtungsmodelle<br />

Nachdem die verschiedenen Eigenschaften der <strong>BRDF</strong>s näher erläutert wurden,<br />

wird nun auf die möglichen Beschreibungsarten der Reflexionseigenschaften<br />

verschiedener Materialien eingegangen. Dazu findet eine Unterscheidung<br />

zwischen zwei grundsätzlichen Vorgehensweisen statt: Zum<br />

einen die exakte Messung der <strong>BRDF</strong> <strong>eines</strong> Materials, womit sich Abschnitt<br />

3.5 näher beschäftigt, und zum anderen die Approximation mit Hilfe von<br />

empirischen oder theoretischen Modellen, welche die Eigenschaften einer<br />

Oberfläche näherungsweise beschreiben sollen. Sie unterscheiden sich beispielsweise<br />

in ihrer Verwendung <strong>für</strong> die unterschiedlichsten Materialklassen<br />

(Plastik, Metall, Papier), im Realismus oder im Aufwand der Berechnung.<br />

Auf Grund der höheren Flexibilität sind sie gegenüber der gemessenen<br />

<strong>BRDF</strong>s sehr gut anhand verschiedener Parameter anpassbar und finden<br />

somit eine sehr häufige Verwendung in der Computergrafik. Diese Modelle<br />

werden als lokal bezeichnet, da sie im Gegensatz zu gobalen Beleuchtungsmodellen<br />

(Beispiele: Raytracing, Radiosity) lediglich das Verhalten von Licht<br />

<strong>für</strong> einen bestimmten Punkt der Oberfläche beschreiben. Die Simulation<br />

von indirektem Licht geschieht global.<br />

10


3.4.1 Lambert<br />

Mit dem Beleuchtungsmodell von Lambert (1760) lassen sich besonders<br />

gut diffuse Materialien beschreiben. Papier zum Beispiel reflektiert das<br />

eintreffende Licht diffus und erscheint somit von allen Blickrichtungen des<br />

Betrachters gleich hell. Diese Oberflächeneigenschaft lässt sich dadurch<br />

beschreiben, dass die Strahldichte unabhängig vom Betrachtungswinkel θ<br />

immer identisch ist. Die Helligkeit ist abhängig vom Winkel θi zwischen der<br />

Oberflächennormale und dem Vektor zur Lichtquelle. Steht die Lichtquelle<br />

exakt orthogonal über einem Punkt auf der Fläche, so ist der Strahlungsfluss<br />

pro Flächeneinheit genau dort am größten [Wik07b]. Ein großer Winkel θi<br />

bedeutet einen sehr flachen Lichteinfall und somit eine geringere Helligkeit,<br />

die durch cos θ verursacht wird. Abbildung 7 verdeutlicht diese Eigenschaft<br />

des Lambert-Beleuchtungsmodells.<br />

Abbildung 7: Beleuchtungsmodell: Lambert; Je nach Winkel zur Ebene wird unterschiedlich<br />

viel Licht reflektiert. Die Fläche, die zur Richtungslichtquelle<br />

hin zeigt reflektiert das meiste Licht. Die Helligkeit der<br />

Flächen nimmt mit steigendem Winkel zur Lichtquelle ab, bis die äußere<br />

Fläche im 90 ◦ Grad-Winkel nichts mehr reflektiert und schwarz<br />

erscheint. Abbildung aus: [DMfA07]<br />

11


3.4.2 Phong<br />

Das Phong-Beleuchtungsmodell wurde 1975 von Bui-Tuong Phong entwickelt<br />

und findet in der heutigen Computergrafik ebenfalls wie das Modell<br />

von Lambert eine sehr große Verwendung. Das diffuse Material wird bei<br />

Phong um eine spekulare Reflexion erweitert und basiert auf dem Lambert-<br />

Beleuchtungsmodell. Es eignet sich vor allem <strong>für</strong> die Darstellung glatter,<br />

plastikähnlicher Oberflächen, wobei die Berechnung nicht auf physikalischen<br />

Grundlagen beruht. Somit handelt es sich um ein vollständig empirisches<br />

Modell. Der Grund da<strong>für</strong> ist, dass der Energieerhaltungssatz, also eine<br />

der in Abschnitt 3.2 definierten Eigenschaften, die eine physikalisch korrekte<br />

<strong>BRDF</strong> charakterisieren, nicht eingehalten wird. In diesem Modell wird<br />

nicht ausgeschlossen, dass mehr Licht reflektiert wird als auf der Oberfläche<br />

auftrifft.<br />

Um ein Glanzlicht erzeugen zu können, wird das Beleuchtungsmodell<br />

um den spekularen Term cos n ψ erweitert. n wird als Glanzzahl bezeichnet.<br />

Je höher diese Zahl ist, desto spitzer ist das Glanzlicht des Materials. Der<br />

Winkel ψ liegt zwischen dem reflektierten Lichtstrahl und der Blickrichtung<br />

des Betrachters, was in Abbildung 8 nochmals bildlich dargestellt wird.<br />

Abbildung 8: Beleuchtungsmodell: Phong, spiegelnder Term; Abbildung aus:<br />

[Mue05]<br />

Bisher wurde lediglich das diffuse Licht, welches sich aus dem Lambert-<br />

Beleuchtungsmodell ergibt, und der spekulare Term auf Basis des Phong-<br />

Modells erläutert. Für die letztendliche Berechnung der Helligkeit bzw. der<br />

Farbe <strong>eines</strong> Punktes auf der Oberfläche <strong>eines</strong> 3d-Objekts reicht dies jedoch<br />

nicht aus. Formel 16 zeigt, welche Komponenten <strong>für</strong> das vollständige Beleuchtungsmodell<br />

benötigt werden. Für die Berechnung der beiden Winkel<br />

θi und ψi ist die Normale des Punktes auf der Oberfläche erforderlich. Bei<br />

allen Termen (M, L) handelt es sich um RGB-Farben, deren Summe größer<br />

12


eins werden kann und somit auf eins geclippt werden muss.<br />

#Lq<br />

L = Md · La + (Md · cos θi + Ms · cos n ψi) · Li<br />

∑<br />

i=1<br />

M d beschreibt die diffuse Materialfarbe, die mit einer ambienten Lichtfarbe<br />

multipliziert wird. Somit ist die Oberfläche auch an unbeleuchteten Stellen<br />

nicht komplett schwarz. Zusätzlich wird über alle Lichtquellen #Lq der<br />

Szene sowohl die diffuse Komponente des Lambert-Modells (M d · cosθi), als<br />

auch die spektrale Komponente des Phong-Modells (Ms · cos n ψi) aufsummiert,<br />

wobei Ms die spiegelnde Materialfarbe <strong>für</strong> das Glanzlicht ist. Diese<br />

beiden Terme werden mit der Farbe der Lichtquelle Li multipliziert.<br />

3.4.3 Weitere Modelle<br />

Auf eine genauere Definition aller weiteren Modelle wird in dieser Arbeit<br />

nicht eingegangen, da diese lediglich auf den Grundlagen der Beleuchtungsmodelle<br />

aufbaut. Dennoch werden einige der Vollständigkeit halber genannt<br />

und kurz beschrieben.<br />

Eine Verbesserung des Phong-Modells stellt das durch James F. Blinn 1977<br />

erweiterte Blinn-Phong-Modell dar. So genannte Halbvektoren, die geometrisch<br />

gesehen genau mittig zwischen zwei Vektoren stehen, optimieren<br />

die grafische Darstellung des Reflexionsverhaltens, ohne deutlich längere<br />

Renderzeiten bei der Berechnung der Oberflächen in Kauf nehmen zu müssen.<br />

Abbildung 9 zeigt den Unterschied im Glanzlicht zwischen Phong und<br />

Blinn-Phong.<br />

(16)<br />

Abbildung 9: Beleuchtungsmodell: Phong und Blinn-Phong im Vergleich, rechts:<br />

Blinn-Phong mit einer kleineren Glanzzahl n; Abbildung aus:<br />

[Wik07a]<br />

Ein realistischeres Modell ist das 1982 entwickelte Cook-Torrance-Beleuchtungsmodell,<br />

das auf physikalischen Grundlagen der Oberflächenstruktur<br />

beruht. Es wird angenommen, dass eine Oberfläche aus vielen kleinen<br />

13


Microfacetten (Unebenheiten) besteht, die das Licht reflektieren. Die Grundannahme<br />

ist somit, dass jedes Material in gewissem Maße rau ist. Durch die<br />

Facetten lassen sich beispielsweise Selbstverschattungen und Abblendungen<br />

simulieren, die das reflektierte Licht zum Teil blockieren. Abbildung<br />

10 stellt die beiden Möglichkeiten <strong>für</strong> eine Unebenheit an der Oberfläche<br />

bildlich dar. Das Ergebnis <strong>eines</strong> möglichen Renderings zeigt Abbildung 11.<br />

Abbildung 10: Beleuchtungsmodell: Cook-Torrance; links: Das einfallende Licht<br />

wird durch eine Unebenheit auf der Oberfläche blockiert (Selbstverschattung);<br />

rechts: Das reflektierte Licht wird blockiert (Abblendung);<br />

der Vektor L zeigt zum Licht, V zum Betrachter und H bezeichnet<br />

den Halbvektor zwischen L und V. Abbildung aus: [Geb]<br />

Abbildung 11: Beleuchtungsmodell: Cook-Torrance; links: eine Plastikvase; rechts:<br />

eine Vase aus Kupfer. Besonderheit des Modells: Die Farbe des<br />

Glanzlichts ist im Gegensatz zu Phong nicht nur von der Farbe der<br />

Lichtquelle abhängig, was vor allem bei metallischen Gegenständen<br />

sehr viel realistischer ist. Abbildung aus: [Geb]<br />

Zur Weiterentwicklung können auch die folgenden Modelle herangezogen<br />

werden, die <strong>für</strong> diese Arbeit jedoch nicht weiter betrachtet wurden und<br />

daher lediglich namentlich genannt werden. Zum Beispiel:<br />

• He (1991)<br />

• Ward (1992)<br />

• Lafortune (1993)<br />

• Schlick (1994)<br />

• Oren-Nayar (1995)<br />

• Ashikhmin (2000)<br />

14


3.5 Measured <strong>BRDF</strong>s<br />

Die alternative Methode zur Approximation einer <strong>BRDF</strong> ist eine Beschreibung<br />

der Reflexionseigenschaften durch eine exakte Messung. Somit lässt<br />

sich sicherstellen, dass die Eigenschaften des Materials physikalisch korrekt<br />

simuliert werden können. Dieses Verfahren ist vor allem <strong>für</strong> sehr komplexe<br />

Materialeigenschaften geeignet, da sich diese meist nicht vollständig korrekt<br />

approximieren lassen. Wie eine solche Messung durchgeführt werden kann<br />

zeigt Abbildung 12. Zu sehen sind drei verschiedene Mess-Apparaturen, die<br />

sich durch die Art des Aufnahmegerätes und die Form der Materialprobe<br />

unterscheiden. Zudem differenzieren sie sich in den Freiheitsgraden der einzelnen<br />

Komponenten, die sich je nach Vorrichtung um zwei Achsen, um eine<br />

Achse oder gar nicht bewegen lassen. Da lediglich die relativen Positionen<br />

der drei Komponenten zueinander relevant sind, lässt sich beispielsweise<br />

mit der Apparatur aus Abbildung 12a die gleiche <strong>BRDF</strong> erzeugen, wie es<br />

mit der Vorrichtung aus Abbildung 12b möglich wäre.<br />

In Abbildung 12c wird anstatt einer flachen Materialprobe eine kugelförmige<br />

Probe verwendet. Zudem wird eine Kamera anstatt <strong>eines</strong> Detektors<br />

verwendet, mit der sich zweidimensionale Aufnahmen von der Kugel anfertigen<br />

lassen. So ist es möglich, viele Einfalls- und Ausfallswinkel des Lichtes<br />

gleichzeitig aufzunehmen und folglich Zeit bei der Vermessung zu sparen.<br />

Abbildung 12: Measured <strong>BRDF</strong>s: verschiedene Messapparaturen; Abbildung aus:<br />

[MWL + 99]<br />

Die Messung erfolgt in allen drei Modellen über die gesamte Hemisphäre<br />

(Halbkugel). Der Aufwand bzw. die Dauer <strong>für</strong> eine Messung ist daher sehr<br />

hoch, je nachdem in wie vielen Winkelschritten die beweglichen Komponenten<br />

die Daten erzeugen. Laut Marschner et al. [MWL + 99] kann eine<br />

Messung trotz moderner Computersteuerung durchaus mehrere Stunden<br />

dauern.<br />

Was letztendlich erzeugt wird ist eine Datei, in der die Reflexionseigenschaften<br />

der zwei Winkelpaare <strong>für</strong> auftreffendes und ausgehendes Licht<br />

erfasst werden. Somit erhält man <strong>für</strong> jegliche Kombination der vier Winkel<br />

θi, φi, θo und φo einen oder mehrere <strong>BRDF</strong>-Werte. Mehrere Werte ergeben<br />

sich beispielsweise, wenn das reflektierte Licht in die drei Farbkanäle rot,<br />

15


grün und blau zerlegt wird oder eine Unterteilung der verschiedenen Wellenlängen<br />

stattfindet, so dass es durchaus noch mehr Werte sein können.<br />

Die Anzahl der Werte in der <strong>BRDF</strong> richtet sich zudem hauptsächlich nach<br />

der Größe der Gradschritte, mit der die Materialprobe gemessen wurde.<br />

3.6 Anwendungsgebiete<br />

Die grundlegenden mathematischen Beleuchtungsmodelle lassen sich in<br />

fast jeder 3d-Grafik-Software finden, da sie trotz leichter Implementierung<br />

überzeugende Ergebnisse liefern. <strong>BRDF</strong>-<strong>Shader</strong>, die gemessene <strong>BRDF</strong>s verwenden<br />

sind jedoch wesentlich seltener aufzufinden. Dies mag zum einen<br />

an einer weitaus höheren Komplexität der <strong>Shader</strong> liegen und zum anderen<br />

an nur sehr wenigen Anbietern, die solche <strong>BRDF</strong>-Dateien erzeugen. Ein Beispiel<br />

<strong>für</strong> einen solchen Anbieter ist die Firma SpheronVR AG [AG07], die mit<br />

Hilfe <strong>eines</strong> so genannten Goniophotometers <strong>BRDF</strong>-Messdaten von verschiedenen<br />

Autolacken erzeugt. Die 3d-Grafik-Software Maya von Autodesk<br />

[Aut07] beispielsweise, stellt ein Plugin zur Verfügung, mit dem es möglich<br />

ist, diese Dateien in Maya zu laden und als <strong>Shader</strong> zu verwenden.<br />

Ein weiteres Anwendungsgebiet ist die Vermessung von natürlichen Materialien<br />

der Erdoberfläche. Abhängig von dem Stand der Sonne und dem<br />

Betrachtungswinkel lassen sich anhand der gemessenen <strong>BRDF</strong>-Daten Aussagen<br />

über die Reflexionseigenschaften der verschiedensten Oberflächenmaterialien<br />

treffen. Anhand dieser Aussagen kann eine Klassifizierung der<br />

Materialien stattfinden, die sogar <strong>für</strong> militärische Erkennungsaufgaben verwendet<br />

werden kann [Stu06].<br />

Die Messung der natürlichen Oberflächeneigenschaften kann auf verschiedene<br />

Arten erfolgen. Zum einen über Geräte, die am Boden aufgebaut<br />

werden, wie beispielsweise der „WAAC“ (Wide Angle Airborne Camera)<br />

mit Zeilensensor, und zum anderen von Flugzeugen oder Satelliten aus.<br />

Erfolgt die Messung der gleichen Oberfläche aus verschiedenen Höhen, so<br />

wird dies Mehretagenexperiment genannt, mit dessen Hilfe sich die Einflüsse<br />

der Atmosphäre beschreiben lassen können [Stu06].<br />

Auch in der Filmindustrie werden Measured <strong>BRDF</strong>s verwendet. Für den<br />

Film „The Matrix Reloaded“ beispielsweise wurde „Agent Smith“, eine der<br />

Hauptfiguren des Films, zusätzlich komplett am Computer generiert. So<br />

ließen sich Szenen mit mehreren hundert Instanzen dieser Person realisieren.<br />

Der Anzug des Agenten wurde mit Hilfe einer 700.000 Dollar teuren<br />

Maschine auf dessen Reflexionseigenschaften vermessen. Abbildung 13a<br />

zeigt die auch von der NASA verwendete Maschine, mit der normalerweise<br />

zum Beispiel Tarnflugzeuge auf ihre Materialeigenschaften geprüft werden.<br />

Abbildung 13b zeigt drei verschiedene anisotropische Materialien, die<br />

<strong>für</strong> die Kleidung des Agenten verwendet wurden. Abbildung 13c präsentiert<br />

16


das Ergebnis: Links ein Foto des Hauptdarstellers, rechts ein komplett am<br />

Computer generiertes Modell. Das finale Rendering ist kaum noch vom<br />

realen Vorbild zu unterscheiden. Besonders die korrekte Darstellung des<br />

Anzugmaterials macht den virtuellen Charakter glaubhaft.<br />

Abbildung 13: Stand der Technik: Verwendung von Measured <strong>BRDF</strong>s im Film „The<br />

Matrix“; Abbildung aus: [Bor]<br />

17


4 Technische Umsetzung<br />

Im folgenden Kapitel geht es, nach den Grundlagen in den vorherigen Abschnitten,<br />

um die eigentliche technische Umsetzung des <strong>Shader</strong>s als Plugin<br />

in CINEMA 4D. Um der Reihenfolge der einzelnen <strong>Entwicklung</strong>sschritte<br />

treu zu bleiben, wird zunächst das SDK und dessen Möglichkeiten kurz<br />

beschrieben. Vor dem Beginn der <strong>Entwicklung</strong> war die Wahl bzw. Festlegung<br />

auf <strong>eines</strong> der verschiedenen <strong>BRDF</strong>-Formate notwendig. Danach folgt<br />

die Umsetzung der einzelnen Vorberechnungen, die <strong>für</strong> den <strong>Shader</strong> und<br />

dessen Berechnungen notwendig sind. Der eigentliche Hauptteil des <strong>Shader</strong>s,<br />

in dem die Werte ausgelesen und interpoliert werden, wird wird in<br />

Abschnitt 4.4 behandelt. Ein kurzer anschließender Überblick über die GUI<br />

(engl. Graphical User Interface) zeigt, welche Möglichkeiten der Benutzer in<br />

der Verwendung des <strong>Shader</strong>s hat und welche Parameter sich verändern<br />

lassen. Nachdem die größeren Komponenten beschrieben wurden, werden<br />

diese in Abschnitt 4.5 zu einem Gesamtsystem integriert. Abschließend<br />

werden ein paar Ergebnisse, sowie auffallende Fehler während der <strong>Entwicklung</strong><br />

aufgezeigt, die zum größten Teil behoben werden konnten. Die<br />

möglichen Ursachen und deren Fehlerminimierung werden im Ausblick<br />

näher dargestellt.<br />

4.1 Das SDK von CINEMA 4D<br />

Um mit der <strong>Entwicklung</strong> beginnen zu können, musste zunächst das SDK<br />

von CINEMA 4D installiert werden. Als <strong>Entwicklung</strong>s-Plattform wurde<br />

Microsoft WindowsXP verwendet. Die Wahl des <strong>Entwicklung</strong>swerkzeugs<br />

fiel demnach auf Microsoft Visual Studio 2005, welches zudem das einzige<br />

Werkzeug ist, <strong>für</strong> das MAXON unter Windows Support leistet. Eine<br />

alternative Kombination ist XCode und Mac OS X. Langjährige persönliche<br />

Erfahrung mit Windows, sowie fortgeschrittene Erfahrungen mit CINEMA<br />

4D unter diesem Betriebssystem waren der Grund, sich <strong>für</strong> WindowsXP zu<br />

entscheiden.<br />

Das SDK bietet auf Grund der Vielzahl an Plugintypen viele Möglichkeiten,<br />

zusätzliche kleine Programme <strong>für</strong> CINEMA 4D zu entwickeln, die sich<br />

in ihrer Verwendung grundlegend unterscheiden. Es gibt beispielsweise<br />

einen Plugintyp namens „ObjectData“, mit dem sich eigene Objekttypen<br />

(z.B. Deformer, Partikelmodifikatoren) erzeugen lassen. Da es sich in dieser<br />

Arbeit um einen <strong>BRDF</strong>-<strong>Shader</strong> handelt, blieb lediglich die Wahl zwischen<br />

den beiden Typen „<strong>Shader</strong>Data“ und „MaterialData“. Der zweite Typ bietet<br />

die Grundlage <strong>für</strong> einen 3D-<strong>Shader</strong>, der <strong>für</strong> die Beschreibung des Reflexionsverhaltens<br />

des Lichtes anhand einer <strong>BRDF</strong>-Datei ungeeignet wäre, da<br />

lediglich die Texturkoordinaten und ein Punkt auf der Oberfläche <strong>für</strong> die<br />

Berechnungen benötigt werden. Die Wahl fiel darum auf den „<strong>Shader</strong>Data“-<br />

Typ, weil es sich bei diesem Plugintyp um einen 2D-<strong>Shader</strong> handelt.<br />

18


4.2 Wahl der <strong>BRDF</strong>-Daten<br />

Angesichts einer steigenden Komplexität mit einer Mehrzahl an <strong>BRDF</strong>-<br />

Dateiformaten, wurde bei der <strong>Entwicklung</strong> zunächst ein Format festgelegt.<br />

Deshalb ist das Plugin um alternative Formate erweiterbar.<br />

4.2.1 Auswahlmöglichkeiten<br />

Da die korrekte Messung einer <strong>BRDF</strong> recht aufwändig ist und die Geräte<br />

da<strong>für</strong> zum Teil sehr teuer sind, ist die Zahl der Anbieter solcher Dateien<br />

überschaubar klein. Im Zuge dieser Arbeit wurde Wert darauf gelegt,<br />

OpenSource-Dateien zu verwenden, da sie den großen Vorteil besitzen,<br />

die Tests ohne besonderen Kostenaufwand durchzuführen und auch die<br />

Nutzung <strong>für</strong> den Endverbraucher weiterhin kostenfrei zu halten. Auf gewerbliche<br />

<strong>BRDF</strong>-Messungen, wie sie die Firma SpheronVR AG [AG07]<br />

beispielsweise anbietet, wird daher in diesem Zusammenhang nicht weiter<br />

eingegangen.<br />

Cornell Universität<br />

Die Cornell Universität [oCG08] bietet eine Vielzahl verschiedener Materialien<br />

und Dateiformate kostenlos zum Download an. Die Vermessungen<br />

fanden hauptsächlich mit einem selbst konstruierten Gonioreflektometer statt,<br />

mit dem sich die Reflexionseigenschaften des Materials sogar in verschiedenen<br />

Wellenlängen messen lassen. Somit enthalten einige der Dateien bis zu<br />

65 verschiedene Wellenlängen im Bereich von 400 und 700nm. Zusätzlich<br />

stehen zum Teil auch Dateien zur Verfügung, in denen zwischen den drei<br />

Farbkanälen separiert wurde oder bei denen lediglich eine Zahl als <strong>BRDF</strong>-<br />

Wert dient. Pro Material wurden ca. 1439 Messungen aus unterschiedlichen<br />

Kombinationen von Kamera und Licht aufgenommen.<br />

Die vier Winkel und die entsprechenden Reflexionswerte der <strong>BRDF</strong><br />

liegen mit sechs Nachkommastellen sowohl im matlab-Dateiformat, als<br />

auch im astm-Format (ASTM Standard E1392-96) vor, welches ein Standard-<br />

Format <strong>für</strong> die Messung winkelabhängiger Streuung von Licht auf spekularen<br />

und diffusen Oberflächen ist [Wor08]. Zusätzlich gibt es noch bildbasierende<br />

Datensätze und spc-Dateien, die Spektrumsinformationen im<br />

ASCII-Format beinhalten.<br />

Die Anzahl der angebotenen Materialien liegt bei ca. 13 Stück, wobei<br />

es <strong>für</strong> fast jedes Material mehrere Dateitypen zum Download gibt. Die<br />

Auswahl ist demnach nicht sehr groß. Die von der Cornell Universität zur<br />

Verfügung gestellten Beispiele verdeutlichen, wie das Ergebnis der einzelnen<br />

<strong>BRDF</strong>-Dateien aussehen könnte.<br />

19


MERL<br />

Die elektronische Forschungsabteilung von Mitsubishi (engl. MERL: Mitsubishi<br />

Electric Research Laboratories besitzt eine umfassendere <strong>BRDF</strong>-Datenbank<br />

[Lab08]). Sie enthält über 100 verschiedene Materialien und ist nur zu persönlichen<br />

oder Forschungszwecken frei verwendbar. Der Zugang über einen<br />

FTP-Server wird erst nach einer Registrierung per eMail freigeschaltet. Abbildung<br />

14 zeigt eine Übersicht über alle vorhandenen <strong>BRDF</strong>-Materialien<br />

der MERL-Datenbank.<br />

Abbildung 14: Auswahlmöglichkeiten: Die MERL-Datenbank; Abbildung aus:<br />

[Lab08]<br />

Die Dateien der Datenbank sind jeweils ca. 34 Megabyte groß und liegen<br />

im Binärformat vor. Die Dateigröße begründet sich vor allem durch die<br />

über 1.000.000 unterschiedlichen Messungs-Kombinationen. Somit liefert<br />

diese Datenbank die detailliertesten Materialmessungen. Angefangen von<br />

Aluminium über Nylon bis hin zu Teflon oder gelbem Plastikmaterial lassen<br />

sich die verschiedensten Materialien der Autoindustrie finden. Dennoch<br />

existiert zu den Materialien bzw. ihrer allgemeinen Verwendung keine Dokumentation,<br />

die im Zuge dieser Arbeit sinnvoll verwendet werden konnte.<br />

Lediglich eine C++ Quellcodedatei zeigt, wie sich die Dateien verwenden<br />

lassen.<br />

20


CUReT<br />

Die CUReT (engl. Columbia-Utrecht Reflectance and Texture Database [RD08])<br />

ist ähnlich wie die Sammlung von MERL eine etwas umfassendere <strong>BRDF</strong>-<br />

Datenbank mit 61 Datensätzen. Die Proben stammen von den unterschiedlichsten<br />

Materialien, teilweise sogar von Pflanzen und Weißbrot. Die Reflexionsdaten<br />

liegen sowohl im <strong>BRDF</strong>, als auch im BTF-Format (engl. Bidirectional<br />

Texturing Function) vor, auf das in dieser Arbeit nicht genauer eingegangen<br />

wird. Die Daten der drei Farbkanäle rot, grün und blau stehen sowohl getrennt,<br />

als auch durch einen gemittelten <strong>BRDF</strong>-Wert der drei Kanäle zur<br />

Verfügung. Der Unterschied zu den beiden anderen Quellen ist jedoch, dass<br />

die Werte, jeweils pro Kanal, vollständig in einer Datei erfasst sind. Somit<br />

umfassen vier Dateien (R, G, B, gemittelt) die gesamten Messungen.<br />

Jede der 61 gemessenen Materialproben enthält eine Kombination von<br />

205 verschiedenen Aufnahme- und Beleuchtungsperspektiven, was im Gegensatz<br />

zu den Proben der Cornell Universität und der MERL-Datenbank<br />

recht wenig ist.<br />

4.2.2 Auswahl<br />

In diesem Abschnitt wird anhand mehrerer Faktoren begründet, welcher der<br />

drei Anbieter, bei dem eine <strong>BRDF</strong>-Datei kostenfrei herunterladen werden<br />

kann, <strong>für</strong> diese Arbeit in Frage kommt. Hier<strong>für</strong> wird zu jedem Faktor der<br />

vorteilhafteste Anbieter genannt und die Wahl kurz begründet.<br />

Alle drei übrig gebliebenen Quellen unterscheiden sich grundsätzlich in<br />

den folgenden Eigenschaften voneinander:<br />

• Dateiformat: Das beste Format bietet Cornell, da die Dateiformate im<br />

ASCII-Zeichensatz vorliegen, gut dokumentiert sind und auf Grund<br />

des ASTM-Standards eine Verwendung des Dateiloaders <strong>für</strong> andere<br />

Anbieter, die ebenfalls diesem Standard folgen, ermöglicht. Das Binär-<br />

Format der MERL-Dateien wäre im Zuge dieser Arbeit ein zusätzliches<br />

Hindernis in der Implementierung des Dateiloaders gewesen.<br />

• Vielfalt: Ein sehr großes Spektrum an Dateien besitzt die MERL-Datenbank,<br />

wie auch CUReT, denn beide Datenbanken weisen eine größere<br />

Anzahl an <strong>BRDF</strong>-Daten auf. Die Anzahl der Materialien ist in der<br />

MERL-Datenbank höher, CUReT weist dennoch eine etwas größere<br />

Materialvielfalt auf.<br />

• Detailgrad: Den höchsten Detailgrad erzielt MERL, weil sich die<br />

Anzahl der Kombinationen von Kamera- und Lichtposition mit ca.<br />

1.000.000 Messungen pro Material deutlich von den anderen beiden<br />

Anbietern absetzt. Die niedrigste Anzahl an Messungen weist die<br />

CUReT-Datenbank auf. Die Datensätze sind somit ungenauer und<br />

21


weniger detailliert. Die notwendige Interpolation zwischen den Messwerten<br />

liefert aus diesem Grund eine noch unschärfere Darstellung<br />

der Oberfläche.<br />

• Dokumentation: Cornell verfügt über die umfangreichste Dokumentation,<br />

da alle Materialien sowohl mit Bild, als auch mit einer Beschreibung<br />

angegeben werden. Eine allgemeine Erläuterung der Messungen,<br />

sowie der Dateiformate erleichtern den Einstieg zudem.<br />

Nach einem einfachen Ausschlussverfahren fiel die Wahl auf die Materialien<br />

der Cornell Universität. Grund da<strong>für</strong> ist vor allem das standardisierte astm-<br />

Dateiformat, als auch die gute Dokumentation, die den Einstieg erleichtert<br />

hat.<br />

4.2.3 Einbindung<br />

Nach der Wahl des Dateiformats wurde ein Datei-Loader entwickelt, der<br />

dieses Format verarbeitet und so die Grundlage <strong>für</strong> den <strong>BRDF</strong>-<strong>Shader</strong> bietet.<br />

Verarbeitet bedeutet zunächst, dass die Daten der Datei in CINEMA 4D<br />

verfügbar sein mussten, um beim Rendering auf diese zurückgreifen zu<br />

können. Wie sich bei der <strong>Entwicklung</strong> aber herausstellte, war die Datenstruktur<br />

<strong>für</strong> die Verwendung der Datei in Hinsicht auf diese Arbeit nicht<br />

effizient. Die Daten liegen ungeordnet im astm-Dateiformat vor. Um diese<br />

<strong>für</strong> den <strong>Shader</strong> nutzen zu können, war es wichtig, sie vor ihrer Benutzung<br />

zu sortieren. Der Grund <strong>für</strong> die Sortierung ist, dass jeweils zwei <strong>BRDF</strong>-Werte<br />

während des Rendervorgangs interpoliert werden müssen, worauf in Abschnitt<br />

4.4 näher eingegangen wird. Als Sortierverfahren wird Selectionsort<br />

verwendet, da dieses einfach zu implementieren und <strong>für</strong> den Zweck einer<br />

einmaligen Sortierung ausreichend schnell ist. Ein folgender kurzer Exkurs<br />

in das Verfahren beschreibt dessen Grundlagen.<br />

Selectionsort<br />

Der Sortieralgorithmus wird anhand <strong>eines</strong> Beispiel-Arrays erläutert. Ein<br />

Array ist eine Datenstruktur, die eine Aneinanderreihung von gleichen<br />

Elementen beschreibt.<br />

Zuerst wird das erste Element des Arrays selektiert. Danach wird das<br />

restliche Array nach dem kleinsten Wert durchsucht. Wird der kleinste Wert<br />

gefunden, so werden diese beiden Stellen vertauscht. Sollte kein kleinerer<br />

Wert zu finden sein, findet keine Vertauschung statt. Anschließend wird<br />

die zweite bzw. nächste Stelle selektiert. Dieser Vorgang wiederholt sich<br />

bis nur noch ein Wert im Array übrig geblieben ist. Das folgende Beispiel<br />

veranschaulicht diese Schritte nochmals anhand von konkreten Werten in<br />

einem Array.<br />

22


1. Schritt: das unsortierte Array<br />

2 5 3 1 4<br />

2. Schritt: den ersten Wert selektieren<br />

2 5 3 1 4<br />

3. Schritt: das restliche Array nach dem kleinsten Wert durchsuchen und<br />

diesen ebenfalls selektieren. Wird kein kleinerer Wert gefunden, so<br />

wird Schritt 4 übersprungen.<br />

2 5 3 1 4<br />

4. Schritt: die selektierten Felder tauschen<br />

1 5 3 2 4<br />

5. Schritt: nächstes Feld selektieren (die Felder links davon sind nun<br />

sortiert)<br />

1 5 3 2 4<br />

Schritt 3 bis 5 wird nun solange wiederholt, bis das Array vollständig sortiert<br />

ist. Selection Sort benötigt bei einem durchschnittlichen Datensatz etwa<br />

O(n 2 /2) Vergleiche und O(n) Vertauschungen.<br />

Der Datei-Loader<br />

Bevor das Array sortiert werden kann, muss es zunächst erzeugt werden.<br />

Dazu wurde eine CINEMA 4D-Komponente verwendet, die es ermöglicht,<br />

eine Datei in der GUI anzuwählen. Sobald eine Datei ausgewählt wurde,<br />

wird diese in das Array geladen. Pseudocodeausschnitt 1 auf Seite 24 gibt<br />

eine zusammenfassende Übersicht über die einzelnen Schritte des Loaders.<br />

Zunächst wird die im astm-Format vorliegende Datei geöffnet. Da CINEMA<br />

4D keine Funktion bietet, mit der komplette Zeilen gelesen werden können,<br />

wird die Datei Byte <strong>für</strong> Byte eingelesen und zu Zeilen zusammen gesetzt.<br />

Ist das Zeilenende erreicht, so wird diese Zeile darauf untersucht, ob es<br />

sich um Datei-Informationen handelt, die in den ersten Zeilen der Datei<br />

stehen, oder ob es sich um <strong>BRDF</strong>-Daten handelt. Diese werden anhand <strong>eines</strong><br />

vorher definierten Trennzeichens (in diesem Fall durch das astm-Format<br />

definierte Komma) zerlegt und im Array gespeichert. Im Kopfbereich der<br />

Datei befinden sich allgemeine Angaben, wie beispielsweise die Anzahl<br />

der <strong>BRDF</strong>-Werte, die <strong>für</strong> spätere Zwecke in einer Membervariable zwischengespeichert<br />

werden. Anschließend wird das Array durch Selectionsort<br />

zeilenweise sortiert, wobei es Zeilen in diesem Sinne in einem Array nicht<br />

gibt. Es wird lediglich darauf geachtet, dass die Werte einer Zeile immer<br />

zusammengehörig vertauscht werden. Wird dies nicht beachtet, so ist die<br />

Datei unbrauchbar. Sortiert wird zunächst nach den Werten von θi, dann<br />

nach φi, anschließend nach θo und letztendlich nach φo.<br />

23


1 openFile ( ) ;<br />

2 separator = " , " ;<br />

Listing 1: Pseudocode: Datei-Loader<br />

3 for ( i n t i =0; i < f i l e l e n g t h ; i ++)<br />

4 {<br />

5 singleChar = readByte ( ) ;<br />

6 i f ( ! endOfLine )<br />

7 {<br />

8 l i n e += singleChar ;<br />

9 }<br />

10 e lse<br />

11 {<br />

12 i f ( fileHeader )<br />

13 {<br />

14 readFileInformation ( ) ;<br />

15 }<br />

16 e lse<br />

17 {<br />

18 readBrdfValues ( separator ) ;<br />

19 }<br />

20 }<br />

21 }<br />

22 S e l e c t i o n S o r t V a l u e s ( ) ;<br />

Nachdem die Datei geladen wurde bietet der <strong>Shader</strong> die Möglichkeit, durch<br />

einen Haken im <strong>Shader</strong>menü eine separate Datei im brdf -Format anzulegen.<br />

So müssen sehr umfangreiche Dateien nicht nochmals sortiert werden.<br />

Zudem lassen sich zusätzlich weitere Informationen im Kopf der Datei<br />

speichern, die daher auch nicht erneut berechnet werden müssen. Die brdf -<br />

Dateiendung wurde beliebig gewählt, da es sich um ein eigenes Format<br />

handelt. Im Dateikopf wird zum Beispiel erfasst, wie viele Werte in einer<br />

Zeile stehen, was sehr wichtig <strong>für</strong> spätere Berechnungen ist und ob ein Material<br />

isotrop oder anisotrop ist. Der anschließende Aufbau ist der astm-Datei<br />

ähnlich. Grundsätzlich würde daher eine Markierung in der Datei oder im<br />

Dateiname reichen, um zu kennzeichnen, dass die Werte in der Datei bereits<br />

sortiert sind. Da diese Kennzeichnung durch das astm-Format aber nicht<br />

vorgesehen ist, wird auf Wunsch des Nutzers eine separate Datei erzeugt.<br />

Diese Datei lässt sich anschließend direkt über den Datei-Loader laden.<br />

4.3 Vorberechnungen<br />

Bevor die <strong>BRDF</strong>-Werte verwendet werden können, muss <strong>für</strong> jeden Punkt<br />

der berechneten Oberfläche sowohl der Vektor zur Lichtquelle, als auch<br />

24


der Vektor zum Betrachter bzw. zur Kamera vorhanden sein. Diese beiden<br />

Vektoren lassen sich folgendermaßen berechnen:<br />

1 Vector cam , toCam ;<br />

Listing 2: C++: Vektor zur Kamera<br />

2 cam = sd−>vd−>GetRayCamera()−>m. o f f ;<br />

3 toCam = cam − sd−>vd−>p ;<br />

Der Vektor cam bezeichnet die Position der Kamera im Weltkoordinatensystem.<br />

Durch die Subtraktion von Kameraposition und Oberflächenpunkt<br />

(engl. surface point) wird der Vektor vom Oberflächenpunkt zur Kamera<br />

berechnet. Gleiches wird <strong>für</strong> die Berechnung des Vektors zur Lichtquelle<br />

durchgeführt. Dazu ist es wichtig zu beachten, dass eine Szene mehrere<br />

Lichtquellen besitzen kann. Demnach muss die gesamte Berechnung <strong>für</strong><br />

jede Lichtquelle in der Szene durchgeführt werden, worauf in Abschnitt 4.5<br />

näher eingegangen wird.<br />

Lokales Koordinatensystem<br />

Eine wichtige Voraussetzung <strong>für</strong> die Erzeugung der beiden Vektoren toCam<br />

und toLight ist, dass diese im lokalen und nicht im Weltkoordinatensystem<br />

vorliegen. Der Grund da<strong>für</strong> ist die Ausrichtung der Oberfläche, die in globalen<br />

Koordinaten nicht beachtet werden würde. Abbildung 15 auf Seite<br />

26 zeigt den Unterschied zwischen einer horizontalen Fläche in (a) sowie<br />

in (c) und einer geneigten Fläche in (b) und (d). In beiden Fällen müssen<br />

die Vektoren toCam und toLight identisch sein, da sich mit der Rotation der<br />

Fläche auch die Ausrichtung der Normale n verändert hat. Die Winkel θi<br />

und θo sind zur Normale n in (a) bis (d) exakt gleich groß. Werden diese<br />

Winkel bei rotierter Fläche in Weltkoordinaten wie in (b) betrachtet, so sind<br />

die Vektoren und die Winkel in Bezug auf das grün eingeblendete Koordinatensystem<br />

(zur besseren Darstellung wurde das Weltkoordinatensystem in<br />

den Ursprung des Oberflächenpunktes verschoben) jedoch unterschiedlich.<br />

Bei der Umwandlung in Kugelkoordinaten im Weltkoordinatensystem wird<br />

angenommen, dass die Normale n noch immer parallel zur y-Achse steht.<br />

Somit würden die Winkel falsch berechnet werden und der <strong>Shader</strong> würde<br />

lediglich <strong>für</strong> horizontale Flächen korrekte Ergebnisse liefern. (c) und (d) zeigen<br />

die gleichen Ausrichtungen der Oberfläche. Dort werden die Vektoren<br />

jedoch korrekt berechnet, da das lokale Koordinatensystem, welches durch<br />

n und u gebildet wird, in (d) mitrotiert wird.<br />

Das Beispiel aus Abbildung 15 zeigt die Problematik lediglich <strong>für</strong> 2D-<br />

Koordinaten. Da der <strong>Shader</strong> in 3D-Koordinaten berechnet wird, benötigt<br />

er daher eine zusätzliche Achse z im Weltkoordinatensystem bzw. v in lokalen<br />

Koordinaten. Bevor die Vektoren in Kugelkoordinaten umgerechnet<br />

werden können, müssen diese in das lokale Koordinatensystem des Oberflä-<br />

25


Abbildung 15: Vorberechnungen: lokales Koordinatensystem; Die beiden Vektoren<br />

toCam und toLight müssten sowohl in (a), als auch in (b) identisch<br />

sein, da die beiden Winkel θ i und θo zur Oberflächennormale n<br />

exakt gleich sind. Werden die Vektoren jedoch in Weltkoordinaten<br />

betrachtet, so sind diese aber unterschiedlich. Auf Grund der besseren<br />

Darstellung wird in (b) zusätzlich das Weltkoordinatensystem<br />

im Ursprung des Oberflächenpunktes angezeigt. u und n bilden in<br />

(c) und (d) die lokalen Koordinatensysteme.<br />

chenpunktes transformiert werden. Dazu wird dessen Koordinatensystem<br />

benötigt, welches sich über die Texturkoordinaten (auch uvw-Koordinaten<br />

genannt) erzeugen lässt. Sind sowohl das neue Koordinatensystem, als auch<br />

der zu transformierende Vektor bekannt, so lässt sich die Umrechnung<br />

wie in Formel 17 durchführen. Die Basisvektoren des ursprünglichen Systems<br />

erzeugen die Tranformationsmatrix, wenn sie als Zeilen in die Matrix<br />

geschrieben werden [Mue05].<br />

⎛<br />

⎝<br />

pu<br />

pv<br />

pw<br />

⎞<br />

⎛<br />

⎠ = ⎝<br />

ux uy uz<br />

vx vy vz<br />

wx wy wz<br />

26<br />

⎞<br />

⎛<br />

⎠ · ⎝<br />

px<br />

py<br />

pz<br />

⎞<br />

⎠ (17)


Umrechnung in Kugelkoordinaten<br />

Ein Punkt im Raum lässt sich zum Beispiel über die kartesischen Koordinaten<br />

(x, y, z) darstellen. Eine andere Möglichkeit ist es, den Punkt über<br />

den Abstand zum Ursprung (r) und zwei Winkel (θ, φ) zu definieren. Diese<br />

Art der Darstellung wird als Kugelkoordinaten bezeichnet. Da <strong>für</strong> die<br />

Berechnung der Reflexion des <strong>Shader</strong>s vorerst lediglich die Richtung des<br />

auftreffenden und ausgehenden Lichtes wichtig ist, werden nur die beiden<br />

Winkel benötigt. Diese Vereinfachung, bestehend aus zwei Winkeln ohne<br />

den Abstand zum Ursprung, wird als sphärische Koodinaten beschrieben.<br />

Diese Bezeichnung ist lediglich ein Unterbegriff der Kugelkoordinaten <strong>für</strong><br />

den Fall, dass der Abstand r gleich 1 ist. Im 2D-Raum wird die Darstellung<br />

<strong>eines</strong> Punktes auf einen Winkel und den Abstand zum Ursprung reduziert.<br />

Die Bezeichnung da<strong>für</strong> lautet Polarkoordinaten.<br />

Abbildung 16 zeigt die unterschiedlichen Darstellungsweisen des Punktes<br />

P, zum einen in karthesischen Koordinaten, zum anderen in Kugelkoordinaten.<br />

Abbildung 16: Vorberechnungen: Kugelkoordinaten; Darstellung von karthesischen<br />

Koordinaten (x, y, z) als Kugelkoordinaten <strong>für</strong> den Punkt<br />

P, dessen Abstand zum Ursprung durch r definiert ist. Die beiden<br />

Winkel (θ, φ) definieren die Ausrichtung des Punktes auf der<br />

Halbkugel; Abbildung aus: [Mue08]<br />

Die Umrechnung von Kugelkoordinaten in karthesische Koordinaten ist<br />

durch Formel 18 möglich [Mue08].<br />

⎛<br />

⎝<br />

Px<br />

Py<br />

Pz<br />

⎞ ⎛<br />

⎞<br />

r · sin θ · cos φ<br />

⎠ = ⎝ r · cos θ<br />

r · sin θ · sin φ<br />

⎠ (18)<br />

27


Nach θ und φ aufgelöst ergeben sich die beiden Gleichungen 19 und 20.<br />

θ = arccos( Py<br />

) 0 ≤ θ ≤ π (19)<br />

r<br />

φ = arctan( Pz<br />

) 0 ≤ φ ≤ π (20)<br />

Px<br />

Da r nicht betrachtet wird, fällt dieses in Gleichung 19 weg. Da<strong>für</strong> muss der<br />

Vektor zuvor auf die Länge 1 normiert werden.<br />

Programmausschnitt 3 zeigt die Funktion, mit der ein Vektor in sphärische<br />

Koordinaten transformiert wird. Übergeben wird ein Vektor v, sowie<br />

zwei Zeiger auf die beiden Winkel, die berechnet werden sollen. Nachdem<br />

der Vektor normalisiert wurde, lassen sich θ und φ durch die Funktionen<br />

ACos() und atan2() erzeugen. atan2() stellt eine Erweiterung zu atan() dar,<br />

die die Vorzeichen der beiden übergebenen Parameter beachtet und so den<br />

Winkel im korrekten Quadranten ermittelt. Der Wertebereich wird somit<br />

von −π/2 bis π/2 auf −π bis π vergrößert. Die Funktion wird beim Rendering<br />

pro Oberflächenpunkt mindestens zwei Mal aufgerufen. Ein Mal<br />

<strong>für</strong> den Vektor toCam und anschließend <strong>für</strong> die Vektoren toLight zu jeder<br />

Lichtquelle in der Szene.<br />

Listing 3: C++: Umrechnung in sphärische Koordinaten<br />

1 Bool Brdf<strong>Shader</strong> : : CalcSphericalCoordinates ( Vector v ,<br />

2 double ∗ theta , double ∗ phi )<br />

3 {<br />

4 v = ! ( v ) ; / / n o r m a l i z e v e c t o r<br />

5<br />

6 ∗ t h e t a = ACos( v . y ) ;<br />

7 ∗ phi = atan2 ( v . z , v . x ) ;<br />

8<br />

9 return true ;<br />

10 }<br />

28


4.4 Auslesen und interpolieren der <strong>BRDF</strong>-Werte<br />

Nach der Speicherung der Werte aus der Datei in einem Array und der<br />

anschließenden Sortierung (siehe Abschnitt 4.2.3), müssen diese zur Laufzeit<br />

ausgelesen und interpoliert werden. Da<strong>für</strong> müssen die vier Winkel θi, φi, θo<br />

und φo bekannt sein, die durch eine Transformation in Kugelkoordinaten<br />

berechnet wurden, was bereits in Abschnitt 4.3 erläutert wurde.<br />

Während des Rendervorgangs wird zu jedem Punkt p auf der Oberfläche<br />

dessen Reflexionswert berechnet. Abbildung 17 soll zum Verständnis der<br />

einzelnen Interpolationsschritte beitragen. Dargestellt ist eine Halbkugel<br />

von oben, wobei der Punkt p den Mittelpunkt darstellt. Die einzelnen Kreise<br />

zeigen schematisch die Theta-Schritte, die von Datei zu Datei variieren können.<br />

Der Wertebereich liegt zwischen 0 (Mittelpunkt) und π/2 (maximaler<br />

äußerer Wert). Die Phi-Schritte werden durch die blauen und roten Linien<br />

innerhalb der Kreise dargestellt. Ihr Wertebereich liegt zwischen −π und π.<br />

Die blauen Linien stehen <strong>für</strong> die eingehenden Werte θi und φi. Die Position<br />

der Lichtquelle ist daher in diesem Beispiel oben rechts. Die roten Linien stellen<br />

die ausgehenden Werte θo und φo dar. Die Kamera bzw. der Betrachter<br />

ist somit unten links positioniert. Die grünen Punkte beschreiben die Messwerte<br />

der <strong>BRDF</strong>-Datei. Diese sind pro Flächeneinheit konstant. Aus diesem<br />

Grund muss zwischen den einzelnen Flächen interpoliert werden, da die<br />

Oberfläche anderenfalls eine grobe Kachelung aufweist. Die Markierungen<br />

in Form <strong>eines</strong> Kreuzes symbolisieren die exakten Raumwinkel, durch die<br />

das Licht eintrifft bzw. ausgesandt wird. Für diese beiden Winkelpaare gilt<br />

es nun herauszufinden, wie viel Licht bei vorgegebenen Raumwinkeln im<br />

Punkt p auf der Oberfläche reflektiert wird.<br />

Die Interpolation findet in mehreren Schritten statt. Der Einfachheit<br />

halber wird dieser Vorgang zunächst <strong>für</strong> ein isotropes Material erläutert.<br />

Die blauen Phi-Schritte bleiben somit unbeachtet. Zu allererst werden die<br />

beiden Flächenmittelpunkte gesucht, zwischen denen die blaue Markierung<br />

liegt. Dies sind der Mittelpunkt der Fläche, auf der die Markierung liegt<br />

und der Mittelpunkt oberhalb (einen Theta-Ring weiter außen). Für diese<br />

beiden Werte soll nun der <strong>BRDF</strong>-Wert <strong>für</strong> das austretende Licht im roten<br />

Bereich ausgelesen werden. Anschließend werden die beiden resultierenden<br />

Werte interpoliert und liefern somit den endgültigen Reflexionswert <strong>für</strong> das<br />

Beispiel aus Abbildung 17.<br />

Die folgenden Schritte werden <strong>für</strong> das isotrope Beispiel zwei Mal ausgeführt,<br />

da zwischen den beiden Ergebnissen, wie im vorigen Absatz beschrieben,<br />

interpoliert werden soll. Zunächst werden die Werte zwischen den<br />

orangenen Linien im roten Bereich interpoliert und entsprechend gewichtet,<br />

da nicht der Mittelpunkt auf der Linie berechnet werden soll, sondern der<br />

Punkt, der der Markierung am nächsten liegt. Diese beiden Punkte werden<br />

über die türkise Linie ein weiteres Mal interpoliert und gewichtet, so dass<br />

genau der Wert berechnet wird, auf dem die rote Markierung liegt. Zusätz-<br />

29


lich findet eine Interpolation zwischen den nebenliegenden Flächen statt,<br />

deren Wert ebenfalls in Bezug auf die rote Markierung interpoliert wird.<br />

Das Ergebnis ist der ausgehende Reflexionswert <strong>für</strong> eine Fläche im blauen<br />

Bereich.<br />

Würde ein anisotropes Material verwendet werden, so müsste ebenfalls<br />

auf der blauen Seite mehrfach interpoliert werden. Die Berechnung der Zwischenwerte<br />

ist gleich der Interpolation im roten Bereich <strong>für</strong> die ausgehenden<br />

Werte.<br />

Abbildung 17: Interpolation der <strong>BRDF</strong>-Werte: Schematische Darstellung<br />

30


Nach der Erläuterung der Grundidee wird im Folgenden genauer auf die<br />

Implementierung eingegangen. Abbildung 18 zeigt einen Ausschnitt aus<br />

einer <strong>BRDF</strong>-Datei. Zu sehen sind die vier Winkel <strong>für</strong> das auftreffende und<br />

ausgehende Licht und der dazu gehörige <strong>BRDF</strong>-Wert, der angibt wie viel<br />

Licht unter zwei bestimmten Winkelpaaren reflektiert wird. Je höher der<br />

Wert, desto heller erscheint die Oberfläche unter dieser Winkel-Konstellation.<br />

Viele Dateien enthalten auch mehrere <strong>BRDF</strong>-Werte, beispielsweise separiert<br />

nach rot, grün und blau oder nach den Wellenlängen. Dennoch wird der<br />

Einfachheit halber in diesem Abschnitt immer von einem <strong>BRDF</strong>-Wert ausgegangen.<br />

Abbildung 18: Interpolation der <strong>BRDF</strong>-Werte: Ausschnitt einer <strong>BRDF</strong>-Datei mit<br />

Zeilennummer, den beiden Winkelpaaren, sowie einem <strong>BRDF</strong>-Wert<br />

Um zwischen zwei Werten interpolieren zu können, müssen die Nachbarn<br />

<strong>eines</strong> Winkels gefunden werden. Dazu wurde eine Funktion entwickelt, mit<br />

der sich die am nächsten liegende Zeile <strong>für</strong> vier übergebene Winkelwerte<br />

ermitteln lässt. Pseudocode 4 auf Seite 32 zeigt eine vereinfachte Version<br />

des Algorithmus’. Durchsucht wird das ganze Array nach einer Zeile (eine<br />

Zeile entspricht den vier Winkeln und dem <strong>BRDF</strong>-Wert), die den übergebenen<br />

Werten am nächsten liegt. Die Variable column bezeichnet die gerade<br />

durchsuchte Spalte. Da das Array zuerst nach θi sortiert ist, wird zuerst nach<br />

diesem Wert gesucht. Wird ein Wert gefunden, der dem gesuchten Wert<br />

am nächsten liegt, so wird die Funktion <strong>für</strong> die nächsten Spalte rekursiv<br />

aufgerufen. Die Anzahl der insgesamt am nächsten liegenden Zeilen wird<br />

somit pro Durchlauf weiter reduziert, bis nur noch eine Zeile nach dem<br />

letzten Durchlauf mit Spalte φo übrig ist.<br />

31


Listing 4: Pseudocode: Suche die am nächsten liegende Zeile<br />

1 i n t GetNearestLine ( t h e t a _ i , phi_i , theta_o , phi_o , column )<br />

2 {<br />

3 for ( i n t i =minline ; i < numberOfValues ; i +=<br />

numberOfValuesPerLine )<br />

4 {<br />

5 i f ( f i l e V a l u e [ i +column ] < actualValue [ column ] )<br />

6 {<br />

7 i f ( firstLineWithThisValue )<br />

8 {<br />

9 saveLine ( ) ;<br />

10 }<br />

11 }<br />

12 e lse<br />

13 {<br />

14 i f ( distanceOf ( actualValue [ column ] , greaterValue )<br />

15


und ihre zugehörigen <strong>BRDF</strong>-Werte, wobei ein Wert über der in Abbildung<br />

17 dargestellten blauen Markierung liegt und einer darunter. Anschließend<br />

werden die in diesem Absatz beschriebenen Schritte <strong>für</strong> die nächsten drei<br />

Werte ebenfalls ausgeführt.<br />

Anschließend erfolgt die Interpolation. Um diese durchführen zu können,<br />

müssen die Abstände zunächst gewichtet werden. Abbildung 19 zeigt<br />

ein Beispiel <strong>für</strong> die Gewichtung von Farbwerten. Dieses Verfahren lässt sich<br />

auch auf die Werte der <strong>BRDF</strong>-Datei anwenden. Liegt ein Winkel näher an<br />

einem Winkelwert der Datei, so wird der daraus resultierende <strong>BRDF</strong>-Wert<br />

höher gewichtet.<br />

Abbildung 19: Interpolation der <strong>BRDF</strong>-Werte: Gewichtung von Werten anhand<br />

<strong>eines</strong> Farbbeispiels; 50% schwarz und 50% weiß ergeben einen<br />

mittleren Grauton, dargestellt auf dem Verlauf unter der Skala.<br />

Der Pseudocodeausschnitt 5 zeigt das Vorgehen, um zwei Werten eine Wichtung<br />

zuzuweisen. Zunächst muss die Entfernung zwischen den Werten<br />

bestimmt werden. Da die Entfernung nicht negativ sein kann, wird diese<br />

zum Betrag genommen. Ist die Entfernung gleich null, liegen beide Werte exakt<br />

auf der gleichen Stelle und können jeweils mit 50% gewichtet werden. Ist<br />

dies nicht der Fall, wird jeweils der Abstand zum zwischen liegenden Wert<br />

bestimmt und durch die Distanz geteilt. 1 minus den Wert vertauscht die<br />

beiden Gewichte. Liegt der aktuelle Wert beispielsweise näher an der oberen<br />

Zeile, so erhält die Variable weightTop eine höhere Gewichtung und somit<br />

einen höheren Wert zwischen 0 und 1. weightBottom würde den restlichen<br />

Anteil erhalten. Beispiel: weightTop = 0.8, weightBottom = 0.2<br />

Listing 5: Pseudocode: Zeilenwichtung<br />

1 d i s t a n c e = |bottomLineValue − topLineValue|<br />

2 i f ( d i s t a n c e == 0)<br />

3 {<br />

4 weightBottom = 0 . 5 ;<br />

5 weightTop = 0 . 5 ;<br />

6 }<br />

7 else<br />

8 {<br />

9 weightBottom = 1−(| actualValue − bottomLineValue| /<br />

d i s t a n c e ) ;<br />

10 weightTop = 1−(| actualValue − topLineValue| /<br />

d i s t a n c e ) ;<br />

11 }<br />

33


Nachdem die <strong>BRDF</strong>-Werte der darüber und darunter liegenden Zeile gewichtet<br />

wurden, muss dies rekursiv <strong>für</strong> alle folgenden Winkelwerte geschehen.<br />

Pseudocodeausschnitt 6 aus der Funktion GetInterpolatetValue zeigt den<br />

rekursiven Aufruf der Funktion <strong>für</strong> die nächste Spalte bis zu einer maximalen<br />

Rekursionstiefe von 3. Bei der maximalen Tiefe bzw. bei φo in Spalte 3<br />

(Spalte 0 entspricht θi) angekommen, werden die beiden <strong>BRDF</strong>-Werte <strong>für</strong><br />

die entsprechenden Zeilen ausgelesen, gewichtet und interpoliert zurückgegeben.<br />

Stehen die <strong>BRDF</strong>-Werte, getrennt nach rot, grün und blau in der<br />

Datei, werden diese getrennt gewichtet und in Vektor p zurückgegeben.<br />

1 i f ( column < 3)<br />

2 {<br />

Listing 6: Pseudocode: Rekursive Interpolation<br />

3 p = GetInterpolatedValue ( t h e t a _ i , phi_i , theta_s ,<br />

phi_s , bottomLine , nextColumn ) ∗ weightBottom<br />

4 + GetInterpolatedValue ( t h e t a _ i , phi_i , theta_s ,<br />

phi_s , topLine , nextColumn ) ∗ weightTop ;<br />

5 }<br />

6 else<br />

7 {<br />

8 i f ( numberOfBrdfValues == 1)<br />

9 {<br />

10 p = bottomLineBrdfValue ∗ weightBottom +<br />

topLineBrdfValue ∗ weightTop ;<br />

11 }<br />

12 e lse<br />

13 {<br />

14 p . x = bottomLineBrdfValueR ∗ weightBottom +<br />

topLineBrdfValueR ∗ weightTop ;<br />

15 p . y = bottomLineBrdfValueG ∗ weightBottom +<br />

topLineBrdfValueG ∗ weightTop ;<br />

16 p . z = bottomLineBrdfValueB ∗ weightBottom +<br />

topLineBrdfValueB ∗ weightTop ;<br />

17 }<br />

18 }<br />

19 return p ;<br />

Das Ergebnis ist ein interpolierter <strong>BRDF</strong>-Wert <strong>für</strong> die beiden Winkelpaare<br />

zur Lichtquelle und zum Betrachter. In Abschnitt 4.5 wird genauer auf<br />

dessen Weiterverwendung eingegangen.<br />

34


4.5 Integration<br />

In diesem Abschnitt werden die implementierten Komponenten zu einem<br />

Gesamtsystem integriert. Das Resultat der Berechnungen aus Unterkapitel<br />

4.4 ist ein <strong>BRDF</strong>-Wert, der nun verwendet werden kann. Codeausschnitt<br />

7 auf Seite 36 zeigt einen Teil der Output-Routine, die <strong>für</strong> die Berechnung<br />

jedes einzelnen Pixels der Oberfläche aufgerufen wird. Zunächst wird, wie<br />

bereits beschrieben, die Position der Kamera (cam) bestimmt, ein Vektor<br />

zur Kamera (toCam) erzeugt und dieser wird ins lokale Koordinatensystem<br />

des Oberflächenpunktes transformiert (toCamL), indem komponentenweise<br />

das Skalarprodukt des Kameravektors mit den lokalen Achsen gebildet<br />

wird. Dies entspricht der Multiplikation mit einer Matrix, in der die Basisvektoren<br />

zeilenweise enthalten sind. Anschließend wird der Vektor in<br />

Kugelkoordinaten umgewandelt.<br />

Der Vektor zur Lichtquelle muss im Gegensatz zum Kameravektor gegebenenfalls<br />

mehrfach berechnet werden, da sich mehrere Lichtquellen in<br />

einer Szene befinden können. Die <strong>für</strong> den Kameravektor bereits ausgeführten<br />

Schritte werden daher in einer Schleife <strong>für</strong> alle Lichtquellen wiederholt.<br />

Sobald die beiden Winkelpaare in Kugelkoordinaten vorliegen, wird die<br />

Funktion SampleBrdf aufgerufen, die <strong>für</strong> die Fehlerabfrage zuständig ist und<br />

dann entsprechend die Funktion GetInterpolatedValue aufruft. Die Fehlerbehandlung<br />

überprüft lediglich, ob Werte im Array zu den vier Winkeln<br />

gefunden werden können. Ist dies nicht der Fall, müssten die Werte extrapoliert<br />

werden, was aus Zeitgründen in dieser Arbeit leider nicht umgesetzt<br />

werden konnte.<br />

In Zeile 22-24 des Quellcodes wird die Distanz zur Lichtquelle ermittelt.<br />

Diese Entfernung fließt mit 1/r 2 in die Berechnung ein, falls der Benutzer<br />

den Lichtabfall von Lichtquellen in der GUI aktiviert hat. Zu beachten ist,<br />

dass die Entfernungswerte in CINEMA 4D teilweise sehr groß sind und der<br />

<strong>BRDF</strong>-Wert daher durch die Multiplikation mit einer steigenden Entfernung<br />

gegen 0 konvergiert.<br />

35


Listing 7: C++: Schleife über alle Lichtquellen<br />

1 cam = sd−>vd−>GetRayCamera ( )−>m. o f f ;<br />

2 toCam = cam − sd−>vd−>p ;<br />

3 toCamL . x = ddu ∗ toCam ;<br />

4 toCamL . y = ddn ∗ toCam ;<br />

5 toCamL . z = ddv ∗ toCam ;<br />

6<br />

7 CalcSphericalCoordinates ( toCamL,& theta_s ,& phi_s ) ;<br />

8<br />

9 for ( long i =0; i vd−>GetLight ( i )−>link −>GetMg ( ) . o f f ;<br />

12 toLight = l i g h t − sd−>vd−>p ;<br />

13 toLightL . x = ddu ∗ toLight ;<br />

14 toLightL . y = ddn ∗ toLight ;<br />

15 toLightL . z = ddv ∗ toLight ;<br />

16<br />

17 CalcSphericalCoordinates ( toLightL ,& t h e t a _ i ,& phi_i ) ;<br />

18<br />

19 / / sum up BrdfValue<br />

20 radiance += SampleBrdf ( t h e t a _ i , phi_i , theta_s , phi_s ) ;<br />

21<br />

22 / / BrdfValue ∗ 1 / r ∗ r<br />

23 i f ( bdata . d i s t a n c e f a l l o f f )<br />

24 radiance ∗= (1/Pow( Len ( toLight ) , 2 ) ) ;<br />

25 }<br />

Da die <strong>BRDF</strong>-Werte je nach Datei generell sehr klein sind oder durch den<br />

aktivierten Lichtabfall extrem klein werden können, wird ein Tonemapper<br />

benötigt, der eine effektive Darstellung der Werte überhaupt erst möglich<br />

macht. Die <strong>BRDF</strong>-Werte in den Dateien sind meist sehr niedrig. Das Ergebnis<br />

ist daher in den meisten Fällen eine fast schwarze Oberfläche, auf der lediglich<br />

ein extrem hoher <strong>BRDF</strong>-Wert <strong>für</strong> das Glanzlicht des Materials dargestellt<br />

wird. Abschnitt 2.2 beschreibt die Wahl <strong>eines</strong> geeigneten Tonemappers und<br />

dessen Funktionsweise, der wie in Codeausschnitt 8 implementiert wurde.<br />

36


Auf Grund der verschiedenen Dateiformate wird geprüft, ob es sich um<br />

eine <strong>BRDF</strong>-Datei mit einem <strong>BRDF</strong>-Wert handelt oder ob die Werte in drei<br />

Farbkanäle separiert vorliegen (siehe Zeile 1). Das Vorgehen ist bei beiden<br />

Dateiformaten gleich, bis auf die Kanäle des color-Vektors, die getrennt<br />

berechnet werden müssen.<br />

Die Berechnung des Tonemappers erfolgt nach Formel 7 auf Seite 6. Die<br />

Variable tonemappingValue ist ein über die GUI einstellbarer Wert zwischen<br />

1 und unendlich, der dem Parameter p aus Formel 7 entspricht. maxValue<br />

ist der maximale <strong>BRDF</strong>-Wert zwischen 0 und 1, der nach dem Einlesen der<br />

Datei erzeugt wird. Dieser Wert wird somit automatisch generiert und ist<br />

von Datei zu Datei unterschiedlich. Die Variable radiance enthält den in<br />

Formel 7 auf Seite 36 berechneten <strong>BRDF</strong>-Wert.<br />

Unter der <strong>für</strong> diese Arbeit getroffenen Annahme, dass die <strong>BRDF</strong>-Dateien<br />

noch nicht mit dem Kosinus des Winkels zur Lichtquelle gewichtet wurden,<br />

wird dieser mit dem bereits skalierten Farbwert in Zeile 4 bzw. 11 multipliziert.<br />

Anschließend wird ein ambienter Term aufaddiert, der ebenfalls<br />

über die GUI einstellbar ist und zwischen 0 und 1 liegt (siehe Zeile 13).<br />

Falls der Wert größer als 0 gewählt wird, besitzt die Oberfläche somit eine<br />

Grundhelligkeit, die verhindert, dass das Material an Stellen mit einem sehr<br />

niedrigen <strong>BRDF</strong>-Wert schwarz dargestellt wird.<br />

Listing 8: C++: Tonemapper<br />

1 i f ( bdata . numberOfValuesPerLine == 5)<br />

2 {<br />

3 Vector val = radiance ∗ bdata . tonemappingValue ;<br />

4 c o l o r = ( val . x / ( val . x − radiance . x + bdata .<br />

maxValue ) ) ∗ cos ( t h e t a _ i ) ;<br />

5 }<br />

6 else<br />

7 {<br />

8 c o l o r . x = ( radiance . x ∗ bdata . tonemappingValue ) / (<br />

radiance . x ∗ bdata . tonemappingValue − radiance . x<br />

+ bdata . maxValue ) ;<br />

9 c o l o r . y = ( radiance . y ∗ bdata . tonemappingValue ) / (<br />

radiance . y ∗ bdata . tonemappingValue − radiance . y<br />

+ bdata . maxValue ) ;<br />

10 c o l o r . z = ( radiance . z ∗ bdata . tonemappingValue ) / (<br />

radiance . z ∗ bdata . tonemappingValue − radiance . z<br />

+ bdata . maxValue ) ;<br />

11 c o l o r ∗= cos ( t h e t a _ i ) ;<br />

12 }<br />

13 c o l o r += bdata . ambient ;<br />

14 return c o l o r ;<br />

37


GUI<br />

In diesem Abschnitt werden ein paar Screenshots der grafischen Benutzeroberfläche<br />

(engl. GUI, Graphical User Interface) gezeigt, mit der sich der <strong>Shader</strong><br />

und dessen Parameter in CINEMA 4D steuern lässt. Der <strong>Shader</strong> ist vielseitig<br />

einsetzbar, da er sich in die verschiedenen Kanäle der Materialeigenschaften<br />

laden lässt. Abbildung 20 zeigt ein Material, in dessen Farbkanal der<br />

<strong>BRDF</strong>-<strong>Shader</strong> geladen wird. Die Verwendung im Diffusionskanal des Materials<br />

ist beispielsweise ebenfalls möglich. Durch eine große Zahl denkbarer<br />

Kombinationen existieren viele Einsatzmöglichkeiten <strong>für</strong> den <strong>Shader</strong>.<br />

Abbildung 20: Integration: GUI, Laden des <strong>BRDF</strong>-<strong>Shader</strong>s in den Farbkanal des<br />

Materials<br />

Abbildung 21 auf Seite 39 zeigt die Einstellungsmöglichkeiten des <strong>Shader</strong>s.<br />

Es gibt zwei verschiedene Modi. Der Modus „Standard-Materialien“ unterstützt<br />

die Verwendung von vordefinierten <strong>BRDF</strong>s. Bisher wurde lediglich<br />

eine „einfarbige“ Standard-<strong>BRDF</strong> implementiert. Die Liste ist dennoch leicht<br />

erweiterbar. Der zweite Modus „lade eigene <strong>BRDF</strong>-Datei“ gibt dem Nutzer<br />

die Möglichkeit, eigene <strong>BRDF</strong>-Dateien im astm- oder brdf -Format zu laden.<br />

Abbildung 22 zeigt die zusätzliche Option in diesem Modus an, mit der<br />

beim Laden einer astm-Datei automatisch eine Datei im brdf -Format im glei-<br />

38


chen Ordner mit dem gleichen Dateinamen angelegt wird. Die drei darunter<br />

liegenden Einstellungen sind in beiden Modi äquivalent. Ist „Lichtabfall“<br />

aktiviert, wird der <strong>BRDF</strong>-Wert mit 1/r 2 , wie in Quellcodeausschnitt 7 auf<br />

Seite 36 beschrieben, multipliziert. Der „Tonemapping-Wert“ zwischen 1<br />

und unendlich entspricht dem Parameter p aus Formel 7 auf Seite 6. Der<br />

zwischen 0 und 1 liegende „ambiente Term“ wird in Quellcodeausschnitt 8<br />

auf Seite 37 aufaddiert und ist in 0.05er-Schritten einstellbar.<br />

Abbildung 21: Integration: GUI, Verwendung des „Standard-Materialien“-Modus<br />

Abbildung 22: Integration: GUI, Verwendung einer eigenen Datei im astm- oder<br />

brdf -Format<br />

39


4.6 Ergebnisse<br />

Abschließend werden in diesem Abschnitt ein paar der Ergebnisse des <strong>Shader</strong>s<br />

gezeigt. Dabei werden nicht nur die „perfekten“ Renderings gezeigt,<br />

sondern auch fehlerhafte Bilder, auf die kurz eingegangen wird. Die Renderzeiten<br />

wurden auf einem Intel Pentium Dual Core mit 3.60 GHz und 2<br />

GB RAM gemessen.<br />

Abbildung 23 zeigt den <strong>BRDF</strong>-<strong>Shader</strong> im Vergleich zu einem CINEMA 4D<br />

Standard-Material auf einer planaren Fläche. Die Lichtquelle liegt mittig<br />

über der Fläche. Schwach zu erkennen ist der Helligkeitsabfall der Fläche<br />

zum Rand. Es handelt sich bei der Datei bristol1.astm um einen sehr diffusen<br />

dunklen Hausanstrich. Das Material ist isotrop und beinhaltet 1502 verschiedene<br />

Kombinationen von Einfalls- und Austrittswinkeln. Die Renderzeit<br />

des <strong>Shader</strong>s unterscheidet sich deutlich vom Standard-Material, <strong>für</strong> das aber<br />

kaum Berechnungen notwendig sind.<br />

Abbildung 23: Ergebnisse: planare Fläche, <strong>BRDF</strong>-<strong>Shader</strong> und CINEMA 4D<br />

Standard-Material im Vergleich<br />

40


In Abbildung 24 sind zwei Kugeln zu sehen. Die Lichtquelle befindet sich<br />

etwas oberhalb zwischen den beiden Objekten. Das Standard-Material erhielt<br />

zum besseren Vergleich ein Glanzlicht. Das Material des <strong>BRDF</strong>-<strong>Shader</strong>s<br />

erzeugt ein sehr diffuses und breites Glanzlicht. Die Einstellungen des <strong>Shader</strong>s<br />

gleichen denen aus Abbildung 23. Der Pfeil markiert ein Artefakt des<br />

<strong>Shader</strong>s, da die <strong>BRDF</strong>-Datei <strong>für</strong> diese Winkelpaare zur Lichtquelle und zur<br />

Kamera keine Werte enthält. Da ein Großteil der Fläche nicht beleuchtet<br />

wird, ist die Renderzeit bei beiden Kugeln entsprechend gering.<br />

Abbildung 24: Ergebnisse: Kugel, <strong>BRDF</strong>-<strong>Shader</strong> und CINEMA 4D Standard-<br />

Material im Vergleich<br />

41


Wird der Tonemapping-Wert zu hoch gewählt, wie dies in Abbildung 25<br />

links der Fall ist, so überstrahlt der <strong>Shader</strong>. Da die <strong>BRDF</strong>-Datei verschiedene<br />

<strong>BRDF</strong>-Werte <strong>für</strong> rot, grün und blau besitzt, wird jeder der Farbkanäle<br />

separat berechnet.<br />

Abbildung 25: Ergebnisse: Federn, Vergleich der Tonemapping-Werte<br />

42


Nachdem der <strong>Shader</strong> lediglich auf simplen Oberflächen verwendet wurde,<br />

zeigt Abbildung 26 den Unterschied des <strong>Shader</strong>s zum Standard-Material<br />

auf einem noch nicht vollständig modellierten 1955 Chevrolet Bel Air. Die<br />

Artefakte am Heck des Wagens sind modellbedingt.<br />

Abbildung 26: Ergebnisse: 1955 Chevrolet Bel Air, <strong>BRDF</strong>-<strong>Shader</strong> und CINEMA 4D<br />

Standard-Material im Vergleich<br />

43


Die Kombination verschiedener Kanäle erzeugt gute Ergebnisse, wie Abbildung<br />

27 im Vergleich zeigt. Links der <strong>BRDF</strong>-<strong>Shader</strong> im Farbkanal des<br />

Materials, rechts zusätzlich mit aktivierter Spiegelung. Das Material hat aus<br />

dieser Perspektive zudem viel kräftigere Farben im Vergleich zu Abbildung<br />

26 auf Seite 43, ohne dass die Einstellungen des <strong>Shader</strong>s verändert wurden.<br />

Abbildung 27: Ergebnisse: 1955 Chevrolet Bel Air, <strong>BRDF</strong>-<strong>Shader</strong> mit und ohne<br />

Spiegelung<br />

44


5 Fazit und Ausblick<br />

Fazit<br />

In dieser Arbeit wurden sowohl die Stärken von Measured <strong>BRDF</strong>s, die deren<br />

Einsatz be<strong>für</strong>wortet, als auch die Schwächen, die es zu minimieren gilt,<br />

betrachtet.<br />

So ist zum Beispiel die Anzahl der Anbieter, die kostenlose <strong>BRDF</strong>-<br />

Dateien zur Verfügung stellen sehr gering, was nicht zuletzt an aufwändigen<br />

Messverfahren liegt, wie sie in Abschnitt 3.5 beschrieben wurden. Zudem<br />

fehlt ein einheitliches Standard-Dateiformat, da sich die verschiedenen<br />

Dateiformate sowohl vom Dateiaufbau, als auch von der Bedeutung der<br />

gemessenen Werte signifikant unterscheiden. Cornell geht in diesem Bereich<br />

mit gutem Beispiel voran, indem die Daten in einem standardisierten Dateiformat<br />

gespeichert werden, welches in dieser Arbeit Anwendung fand. Die<br />

<strong>Entwicklung</strong> zur Verarbeitung weiterer Dateiformate war auf Grund der<br />

zur Verfügung stehenden Zeit nicht möglich. Dabei lag der Schwerpunkt<br />

der Arbeit mehr auf der Interpolation der <strong>BRDF</strong>-Werte. Diese erzielt <strong>für</strong><br />

Werte, wie sie in den verwendeten Dateien gegeben sind, gute Ergebnisse.<br />

Fehlende Rand-Messwerte erzeugen jedoch Artefakte auf der Oberfläche,<br />

da diese einen Einheitswert zugewiesen bekommen.<br />

Abschließend lässt sich als Fazit zusammenfassen, dass ein <strong>BRDF</strong>-<strong>Shader</strong><br />

auf Grund der in Abschnitt 4.6 gezeigten Ergebnisse dennoch effektiv eingesetzt<br />

werden kann. Die Handhabung <strong>für</strong> den Nutzer ist durch bereits<br />

vermessene Dateiformate denkbar einfach. Diese bieten vor allem im Bereich<br />

von anisotropen Materialien, im Gegensatz zu Beleuchtungsmodellen<br />

wie beispielsweise Lambert und Phong, einige wichtige Vorteile. Die Approximation<br />

der teilweise sehr komplexen Eigenschaften von anisotropen<br />

Oberflächen ist durch mathematische Modelle kaum möglich. Zudem ist<br />

die Geschwindigkeit des <strong>Shader</strong>s lediglich von der Anzahl der Messwerte<br />

abhängig, da Measured <strong>BRDF</strong>s bereits vorher akquirierte Daten bereit stellen.<br />

Da die Daten in exakten Messungen gewonnen werden lässt sich sicherstellen,<br />

dass die Eigenschaften des Materials physikalisch korrekt simuliert<br />

werden können. Auf Grund von OpenSource-Dateien ist das Plugin somit<br />

auch attraktiv <strong>für</strong> die Nutzung privater Verbraucher oder Kleinunternehmen,<br />

die nicht <strong>für</strong> „den großen Markt“ entwickeln.<br />

Ausblick<br />

Auf Grund der verschiedenen <strong>BRDF</strong>-Dateiformate wird es auch in Zukunft<br />

schwierig sein, diese möglichst effizient und vielseitig zu verwenden. Daher<br />

wäre es wünschenswert, ein einheitliches Dateiformat zu entwerfen, als<br />

auch zu standardisieren. Mehrere Dateiformate laden zu können war hinsichtlich<br />

der Aufgabenstellung nicht gefordert, wäre aber eine Erweiterung,<br />

die <strong>für</strong> die Nutzung des <strong>Shader</strong>s eine Bereicherung darstellen würde.<br />

45


Ein Großteil der Artefakte ist durch die Extrapolation der in der <strong>BRDF</strong>-<br />

Datei fehlenden Werte vermeidbar. Im Allgemeinen würde diese zusätzliche<br />

Randbehandlung bessere Ergebnisse erzielen.<br />

Die Geschwindigkeit des <strong>Shader</strong>s ist trotz der aufwändigen Berechnungen<br />

bereits effizient. Weitere Optimierungen an diesen können dennoch<br />

zu Verbesserungen führen, die den Einsatz auch in sehr großen Projekten<br />

ermöglichen.<br />

Da das SDK von CINEMA 4D die Einbindung des <strong>Shader</strong>s in das Gesamtsystem<br />

einschränkt, ist dies ausschließlich als Plugin möglich. Die<br />

Erweiterung der lokalen Beleuchtungsmodelle um eine weitere Alternative<br />

würde einen besseren Einsatz des <strong>BRDF</strong>-<strong>Shader</strong>s ermöglichen. Hierzu müsste<br />

der <strong>Shader</strong> nicht als Plugin, sondern als feste Komponente im System<br />

integriert werden.<br />

Abzuwarten bleibt, wie sich die Forschung im Bereich der lokalen Beleuchtungsmodelle<br />

entwickelt, ob sich Measured <strong>BRDF</strong>s auf dem Markt<br />

durchsetzen können und inwiefern der <strong>BRDF</strong>-<strong>Shader</strong> schließlich Verwendung<br />

findet.<br />

46


Literatur<br />

[AG07] SpheronVR AG. <strong>BRDF</strong> measurement of an isotropic material<br />

sample.<br />

http://www.spheron.com/en/VI_spheron<strong>BRDF</strong>/VI_spheron<strong>BRDF</strong>.php,<br />

Stand: Dez. 2007.<br />

[Aut07] Autodesk.<br />

http://www.autodesk.de,<br />

Stand: Dez. 2007.<br />

[Bor] George Borshukov. Measured <strong>BRDF</strong> in Film Production - Realistic<br />

Cloth Appearance for „The Matrix Reloaded“.<br />

[CW93] M.F. Cohen and J.R. Wallace. Radiosity and Realistic Image Synthesis.<br />

Morgan Kaufmann, 1993.<br />

[DBB03] P. Dutré, P. Bekaert, and K. Bala. Advanced Global Illumination.<br />

AK Peters, Ltd., 2003.<br />

[DMfA07] Kunstuniversität Linz Digital Media for Artists. Das Lambert-<br />

Beleuchtungsmodell.<br />

http://www.dma.ufg.ac.at/app/link/Grundlagen:3D-<br />

Grafik/module/9746,<br />

Stand: Dez. 2007.<br />

[Geb] Nikolaus Gebhardt.<br />

einige brdf modelle.<br />

[Gmb07a] MAXON Computer GmbH.<br />

http://www.maxon.de,<br />

Stand: Dez. 2007.<br />

[Gmb07b] MAXON Computer GmbH.<br />

http://www.plugincafe.com/forum/default.asp,<br />

Stand: Dez. 2007.<br />

[Kol03] Florian Koller. Konzeption, <strong>Entwicklung</strong> und Implementation<br />

<strong>eines</strong> hierarchischen Radiosity - Systems mit Schwerpunkt auf<br />

photometrischer Konsistenz und Tone Mapping. Studienarbeit,<br />

2003.<br />

[Lab08] MERL Mitsubishi Electric Research Laboratories.<br />

http://www.merl.com/brdf/,<br />

Stand: Jan. 2008.<br />

[Mei95] Gerhard Meister. Messung der spektralen Reflexionsfunktion<br />

(<strong>BRDF</strong>) ausgewählter Oberflächen bei natürlicher Beleuchtung.<br />

47


http://censis.informatik.uni-hamburg.de/publications/diplom.pdf,<br />

1995.<br />

[Mue08] Prof. Dr. Stefan Mueller.<br />

vorlesung: Cv-integration.<br />

WS07/08.<br />

[Mue05] Prof. Dr. Stefan Mueller.<br />

vorlesung: Computergrafik1.<br />

SS05.<br />

[MWL + 99] S.R. Marschner, S.H. Westin, E.P.F. Lafortune, K.E. Torrance,<br />

and D.P. Greenberg. Image-based brdf measurement including<br />

human skin. Proceedings of the 10th Eurographics Workshop on<br />

Rendering, pages 139–152, 1999.<br />

[oCG08] Cornell University Program of Computer Graphics.<br />

http://www.graphics.cornell.edu/online/measurements/reflectance/index.html,<br />

Stand: Jan. 2008.<br />

[PH04] M. Pharr and G. Humphreys. Physically Based Rendering: From<br />

Theory to Implementation. Morgan Kaufmann Publishers Inc. San<br />

Francisco, CA, USA, 2004.<br />

[RD08] CUReT Columbia-Utrecht Reflectance and Texture Database.<br />

http://www1.cs.columbia.edu/CAVE/software/curet/index.php,<br />

Stand: Jan. 2008.<br />

[Sch94] C. Schlick. Quantization techniques for visualization of high dynamic<br />

range pictures. Photorealistic Rendering Techniques, pages<br />

7–20, 1994.<br />

[Stu06] Universität Stuttgart. Reflexions- und Emissionsverhalten natürlicher<br />

Oberflächen - Teil 2: Anisotrope Reflexion. 06.11.2006.<br />

[Wik07a] Wikipedia. Blinn-Beleuchtungsmodell - Wikipedia, Die freie<br />

Enzyklopädie.<br />

http://de.wikipedia.org/w/index.php?title=Blinn-<br />

Beleuchtungsmodell&oldid=39819483,<br />

Stand: Dez. 2007.<br />

[Wik07b] Wikipedia. Lambertsches Gesetz - Wikipedia, Die freie Enzyklopädie.<br />

http://de.wikipedia.org/w/index.php?title=Lambertsches_Gesetz&oldid=36239490,<br />

Stand: Dez. 2007.<br />

[Wor08] ASTM International Standards Worldwide.<br />

http://www.astm.org/cgi-bin/SoftCart.exe/index.shtml?E+mystore,<br />

Stand: Jan. 2008.<br />

48

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!