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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!