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.
Listing 7: C++: Schleife über alle Lichtquellen<br />
1 cam = sd−>vd−>GetRayCamera ( )−>m. o f f ;<br />
2 toCam = cam − sd−>vd−>p ;<br />
3 toCamL . x = ddu ∗ toCam ;<br />
4 toCamL . y = ddn ∗ toCam ;<br />
5 toCamL . z = ddv ∗ toCam ;<br />
6<br />
7 CalcSphericalCoordinates ( toCamL,& theta_s ,& phi_s ) ;<br />
8<br />
9 for ( long i =0; i vd−>GetLight ( i )−>link −>GetMg ( ) . o f f ;<br />
12 toLight = l i g h t − sd−>vd−>p ;<br />
13 toLightL . x = ddu ∗ toLight ;<br />
14 toLightL . y = ddn ∗ toLight ;<br />
15 toLightL . z = ddv ∗ toLight ;<br />
16<br />
17 CalcSphericalCoordinates ( toLightL ,& t h e t a _ i ,& phi_i ) ;<br />
18<br />
19 / / sum up BrdfValue<br />
20 radiance += SampleBrdf ( t h e t a _ i , phi_i , theta_s , phi_s ) ;<br />
21<br />
22 / / BrdfValue ∗ 1 / r ∗ r<br />
23 i f ( bdata . d i s t a n c e f a l l o f f )<br />
24 radiance ∗= (1/Pow( Len ( toLight ) , 2 ) ) ;<br />
25 }<br />
Da die <strong>BRDF</strong>-Werte je nach Datei generell sehr klein sind oder durch den<br />
aktivierten Lichtabfall extrem klein werden können, wird ein Tonemapper<br />
benötigt, der eine effektive Darstellung der Werte überhaupt erst möglich<br />
macht. Die <strong>BRDF</strong>-Werte in den Dateien sind meist sehr niedrig. Das Ergebnis<br />
ist daher in den meisten Fällen eine fast schwarze Oberfläche, auf der lediglich<br />
ein extrem hoher <strong>BRDF</strong>-Wert <strong>für</strong> das Glanzlicht des Materials dargestellt<br />
wird. Abschnitt 2.2 beschreibt die Wahl <strong>eines</strong> geeigneten Tonemappers und<br />
dessen Funktionsweise, der wie in Codeausschnitt 8 implementiert wurde.<br />
36