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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!