zurück   

 Prof. Urban
 Materialien zu POV-Ray

zur HIB Wien

Camera mit normal-bumps

Wir beginnen mit unserer beliebten roten Kugel vor einem hübschen Himmelshintergrund:

Dieses Bild entstand durch folgendes Skript

#include "colors.inc"
#include "textures.inc"
#include "skies.inc"

global_settings { assumed_gamma 1.0 }

// Kamera
camera
{
location <0, 0.75, -10>
direction 3.0*z
right image_width/image_height*x
look_at <0.0, 0.0, 0.0>
}

// Lichtquelle
light_source { <-10,10,-10> color rgb <1,1,1> }

// Himmelsgewölbe
sky_sphere { pigment { Blue_Sky2 scale 0.2 } }

///////////////////////////////////////////////////////////////////////////

sphere { <0,0,0> , 1
texture {
pigment { color rgb <1,0,0>*1.2 }
finish { Shiny }
}
}

Wie wir bereits wissen, können wir das Aussehen der Kugel mithilfe des normal Modifiers verändern. Er täuscht durch kleine Verschiebungen des Normalvektors der Kugel, der ja zur Reflexionsberechnung herangezogen wird,  eine Oberflächenstruktur vor, ohne dass die geometrische Form verändert wird. 

Wenn wir etwa bumps als Muster verwenden, können wir diese in ihrer Stärke verändern, mittels scale ihre Größe beeinflussen und eventuell durch turbulence die Verwirbelung verstärken. Einzige Änderung zum obigen Programm ist die Definition der Kugel:

sphere { <0,0,0> , 1 
texture {
pigment { color rgb <1,0,0>*1.2 }
finish { Shiny }
normal { bumps 0.2 turbulence 0.1 scale 0.2 }
}
}

Mögliche Ergebnisse:

Ergebnis bumps scale turbulence
0.5 0.05 0
0.5 0.2 0
0.9 0.2 0
0.9 0.2 0.7

Altbekannte Tricks...

Die camera in POV-Ray  erlaubt einen tollen Trick: Da ein normal Modifier wie etwa bumps keine wirren Zahlen liefert, sondern algorithmisch berechnete 'Verzerrungen' bereitstellt, darf man ihn als Modifier einer camera benutzen! 

Die einzige Änderung zum obigen Programm ist nun, dass wir die normal-Zeile aus der Kugel entfernen, und in die camera verschieben:

camera
{
location <0, 0.75, -10>
direction 3.0*z
right image_width/image_height*x
look_at <0.0, 0.0, 0.0>
normal { bumps 0.3 turbulence 0.2 scale 0.1 }
}

Damit wird unsere Szene durch eine sehr seltsame verwackelte Kamera betrachtet, oder besser 'gesagt durch eine seltsam geschliffene Linse gesehen:

Ergebnis bumps scale turbulence
0.02 0.1 0
0.02 0.2 0
0.1 0.2 0
0.2 0.1 0
0.3 0.3 0
0.3 0.3 1.0
0.5 0.05 0
0.6 0.2 0

Eine Anwendung

// camera mit bumps macht aus geraden Linien Kurven

camera {
normal {
bumps 0.1 // 0.1
scale 0.2 //0.2
}
}

#local R=seed(5);

// 500 dünne gerade Fädchen
#local i=500;
#while(i)
//
sphere{ <0, rand(R)*9, 9> .005 // eine winzige Kugel, y-Position zufällig
scale <(0.6+rand(R))*999,1,1> // in x-Richtung 1 bis 1000 mal vergrößert

// Farbe extrem hell (keine Lichtquelle)
pigment{ rgb <5+0,5+9,5+9*rand(R)> } // viel Grün, (zufällig) viel Blau
rotate 360*rand(R)*z // zufällige Drehung in der Bildebene
}
#local i=i-1;
#end

Rechnen wir zum Vergleich diese Szene OHNE CAMERA (also mit default-Einstellung) so ergibt sich ein Bild aus 500 dünnen Fädchen, die aus gestreckten Kugeln bestehen und zufällig positioniert und gedreht sind.

Fügen wir jedoch diese modifizierte camera ein, so ist das Ergebnis weitaus interessanter - und alles eine Folge der Kameraverzerrung: