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
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
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