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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!