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