Die Flächennormale und Refraktion


POVRAY nimmt im Standardfall glatte Oberflächen an. Das bedeutet zum Beispiel, daß die Flächennormale (der Vektor, der senkrecht auf der Fläche steht) beim plane an jedem Punkt identisch ist. Bei der Kugel wird beispielsweise angenommen, daß die Flächennormale der Vektor ist, der vom Kugelmittelpunkt zum betrachteten Punkt zeigt. Sollen diese Standardannahmen geändert werden, so bietet POVRAY durch die normal - Klausel viele Möglichkeiten an, die Flächennormale zu beeinflussen.

Durch bumps wird zur Flächennormale ein Vektor addiert, der sich über die Fläche verteilt stufenweise ändert. Dadurch entsteht der Eindruck einer zerbeulten Oberfläche. Man beachte aber, daß die Flächennormale nur die Reaktion der Oberfläche auf das einfallende Licht beeinflußt. Der Körper selbst bleibt unberührt. Betrachtet man im nachfolgenden Bild den Rand der Kugel, so wird man einen exakten (und keinen zerbeulten) Kreis erkennen:


/* ............ */
plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         checker color rgb <0, 0, 1>
            color rgb <0.6, 0.6, 0.6>
      }
      scale 0.6
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgb <1, 0, 0>
      }
      normal {
         bumps 0.7
         scale 0.1
      }
      finish {
         phong 0.9
      }
   }
}

Durch die filter - Klausel kann ein Körper mehr oder minder durchsichtig gemacht werden. Alternativ kann die Farbangabe statt durch rgb auch durch rgbf gegeben werden. Diese hat 4 Parameter, wobei der vierte den Filterwert angibt. Je größer dieser ist, umso durchsichtiger ist der Körper:


/* ............. */
plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         checker color rgb <0, 0, 1>
            color rgb <0.6, 0.6, 0.6>
      }
      scale 0.6
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgbf <1, 1, 1, 1>
      }
      normal {
         bumps 0.7
         scale 0.1
      }
      finish {
         phong 0.9
      }
   }
}

Das sieht deshalb nicht wie eine Glaskugel aus, weil diese das Licht nicht so unberührt durch sich hindurch lassen, sondern brechen würde. Die Lichtbrechung wird durch die refraction - Klausel eingeschaltet. Die ior - Klausel (Index Of Refraction) gibt den Brechungsindex an. Dieser bestimmt, um wieviel langsamer sich das Licht im Körper bewegen soll:


/* ............ */
plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         checker color rgb <0, 0, 1>
            color rgb <0.6, 0.6, 0.6>
      }
      scale 0.6
   }
}

sphere {<0, 0, 0>, 1
   texture {
      pigment {
         color rgbf <1, 1, 1, 1>
      }
      normal {
         bumps 0.7
         scale 0.1
      }
      finish {
         phong 0.9
         refraction 1
         ior 1.05
      }
   }
}

Eine interessante Modifikation der Flächenormalen produziert die wave - Klausel. Sie verändert die Flächenormale so, daß sie für Punkte gleichen Abstands von der Y-Achse stets den gleichen Wert hat. Dadurch entsteht der Eindruck von Wellen, deren Frequenz (und Phase) konfigurierbar sind:


/* ............ */
plane {<0, 1, 0>, -1.2
   texture {
      pigment {
         color rgb <0, 0, 1>
      }
      normal {
         waves 0.8
         frequency 3
      }
   }
}

sphere {<0, -1, 0>, 1
   texture {
      pigment {
         color rgb <1, 0, 0>
      }
      finish {
         phong 0.9
      }
   }
}