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
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