POV-Ray-Logo Friedemanns POV-RAY Seiten
Was ist POV-Ray?


Überblick
Objekte
Oberflächen
Lichtquellen
Programmierung
Animationen



 
Was ist POV-Ray? - Überblick Seitenanfang

Die folgende Beschreibung der Möglichkeiten von POV-Ray erhebt keinen Anspruch auf Vollständigkeit, es soll sich lediglich um eine kleine Demonstration der Gestaltungsmöglichkeiten handeln.

Das Freeware-Programm POV-Ray bietet die Möglichkeit, dreidimensionale, quasi-fotorealistische Szenen mit dem Computer zu erstellen. Hierfür wird die Berechnungstechnik des Raytracing genutzt, so daß Bilder mit sehr realitätsnahen Eigenschaften wie Schattenwurf, Reflexionen, Lichtbrechung usw. erstellt werden können. Neuerdings unterstützt POV-Ray auch die Berechnungsmethode Radiosity, die zwar lichttechnisch der Realität noch näher kommt, jedoch mit erheblich höheren Rechenzeiten bezahlt werden muß.
Die Szenenerstellung basiert auf einer Script-Sprache, die mittlerweile auch diverse Anteile höherer Programmiersprachen aufweist (siehe Programmierung). Mittels dieser Sprache werden Grundobjekte in einem kartesischen xyz-Koordinatensystem plaziert. Ist eine Szene in Textform erstellt worden, wird diese dem Programm POV-Ray auf der Kommandozeile übergeben, worauf dieses die Berechnung und Ausgabe in eine Grafikdatei vornimmt.

Als klitzekleines Beispiel für die Darstellungsmöglichkeiten mittels POV-Ray seien hier mal die Grafiken wie z.B. Schalterleisten (siehe oben) und animierten GIFs (siehe Startseite) dieser Homepage genannt, die ich mit POV-Ray erstellt habe.
 
Was ist POV-Ray? - Objekte Seitenanfang

Der Aufbau der von POV-Ray zu berechnenden Szenen kann mittels folgenden zur Verfügung stehenden Grundobjekten realisiert werden:
box: Quader
cone: Kegel oder Kegelstumpf
cylinder: Zylinder
plane: Ebene mit unendlicher Ausdehnung
bicubic patch: Freiform-Oberfläche, die durch wenige Kontrollpunkte definiert werden kann (3D-Bézier-Kurve). Das Objekt wird dann aus Dreiecken angenähert
blob: Tropfenfiguren, die durch ineinanderfließende Kugeln entstehen
height field: Hiermit können z.B. Gebirge erstellt werden, wobei die Pixel einer Bilddatei als Höhenindex dienen
julia fractal: Ein dreidimensionales Fraktal
lathe: Rotation einer geschlossenen Spline-Kurve um eine Achse
mesh:
polygon: Möglichkeit zur Darstellung beliebiger 2D-Flächen, die durch anzugebende Punkte begrenzt werden
prism: Aufbau eines 3D-Objektes durch Ziehen einer 2D-Fläche entlang einer Achse
superquadric ellipsoid: Quader mit abgerundeten Kanten
surface of revolution: Definitionsmöglichkeit von Rotationsobjekten wie z.B. Vasen oder Flaschen
text: 3D-Text basierend auf beliebigen Truetype Fonts
torus: Torus- bzw. Ringobjekt
Weitere vordefinierte, aus den Grundobjekten zusammengesetzte Körper wie Pyramiden, Dodekaeder, Oktaeder, Sattelflächen etc.

Alle diese Grundobjekte können beliebig im Raum positioniert, gedreht und in beliebigen Richtungen skaliert werden. Weiterhin können Objekte zu sogenannten CSG-Objekten (CSG: Constructive Solid Geometry) zusammengefaßt werden:
union: Einfaches Zusammenfassen von Objekten
intersection: Bildung der Schnittmenge von Objekten
difference: Abziehen eines Objektes von einem anderen

 
Was ist POV-Ray? - Oberflächen Seitenanfang

Für die Oberflächengestaltungen (Texturen) stehen sehr vielfältige Möglichkeiten zur Verfügung. Diese reichen von der einfachen Farbgebung über Eigenschaften wie Reflexions- oder Brechungsgrad bis zu komplexen mathematisch berechneten Oberflächen. Sämtliche Eigenschaften können beliebig miteindander kombiniert und übereinander gelegt werden. Wie die Objekte selbst, können auch ihre Texturen unabhängig beliebig positioniert, gedreht und skaliert werden. Unter anderem stehen z.B. folgende Gestaltungsmöglichkeiten zur Verfügung:

Finish-Optionen: Ambientes und diffuses Lichtverhalten, Reflexion, Brillianz, Glanzlichter, metallische Effekte, Brechungsverhalten etc.
Farb-Optionen: Freie Farbdefinition oder Nutzung von vordefinierten Farben; Definierung von color maps; Projektion von Bilddateien (planar, sphärisch, zylindrich oder torusförmig) etc.
Normalen-Optionen: Durch Variation der Oberflächen-Normalen-Vektoren können z.B. durch bump maps scheinbar unebene Oberflächen (z.B. Stoff, Papier, Wellen etc.) erzeugt werden
Pattern-Optionen: Hierdurch können Oberflächen wie Holz, Marmor, Karos, Streifen, Spiralen, Steine, usw. erzeugt werden. Diese können durch diverse Optionen wie phase, frequency, turbulence usw. variiert werden
Halos: Hierdurch können vielfältige formbare Nebel- bzw. Staubeffekte erzeugt werden

Sämtliche dieser Optionen können auch wiederum beliebig kombiniert werde, so daß sich nahezu jede Oberflächeneigenschaft gestalten läßt. Für diejenigen, die eine Übersicht ihrer Texturen benötigen ist übrigens vielleicht mein Programm TXTS2POV von Interesse.
 
Was ist POV-Ray? - Lichtquellen Seitenanfang

Das wichtigste in einer Szenerie ist sicherlich die Beleuchtung, da erst durch Schattenwurf und Lichtreflexe ein einigermaßen realistischer Eindruck entsteht. Im übrigen würde das Nichtvorhandensein jeglichen Lichtes die Erstellung einer Szenerie zwar äußerst vereinfachen, den Betrachter aber ob eines gänzlich schwarzen Bildes sicherlich nicht zu Begeisterungsstürmen hinreißen.
POV-Ray bietet auch hier wieder vielfältige Möglichkeiten der Ausleuchtung einer Szene durch verschiedene Arten von Lichtquellen an:

Ambientes Licht: Legt die Hintergrundbeleuchtung einer gesamten Szene fest
Punktlichtquelle: Dies ist die wahrscheinlich meistgenutzte Beleuchtungsmethode. Ausgehend von einem Punkt wird die Szene nach allen Seiten beleuchtet.
Spotlights: Dies sind gerichtete, kegelförmige Lichtquellen, mit denen gezielt bestimmte Bereiche ausgeleuchtet werden können.
Zylindrische Lichtquellen: Ähnlich wie bei den Spotlights handelt es sich hier um eine gerichtete , räumlich begrenzte Lichtquelle, deren Beleuchtungsradius allerdings nicht mit Entfernung zur Lichtquelle zunimmt.
Bereichslichtquellen: Im Gegensatz zu den vorher aufgeführten Lichtquellen können durch diese Beleuchtungsmethode gesoftete Schattenränder erzeugt werden.

In einer Szenerie können theoretisch beliebig viele Lichtquellen unterschiedlicher Art verteilt werden, die Berechnungsmethode des Raytracing sorgt allerdings bei zunehmender Lichtuellenanzahl für eine stark steigende Rechenzeit.
 
Was ist POV-Ray? - Programmierung Seitenanfang

Die Programmierung der von POV-Ray zu berechnenden Szenen geschieht, wie schon erwähnt, mittels einer Script-Sprache. So definiert z.B. folgende Sequenz eine rote Kugel mit dem Radius 2, die sich im Ursprung des Koordinatensystems befindet:

sphere {
  <0, 0, 0>, 2
  texture {
    pigment { color Red }
    finish { phong 0.75 } // Glanzpunkt
  }
}
Auf ähnliche Weise werden sämtliche mögliche Objekte definiert. Der Nachteil dieser direkten Methode ist, daß sich bei komplexer Szenengestaltung sehr große und unübersichtliche Script-Dateien ergeben können. Um dieses zu vermeiden, hat man die Möglichkeit, häufig auftretende Objekte mittels #declare zu deklarieren, um diese dann immer wieder verwenden zu können.

Zusätzlich bietet POV-Ray nun auch diverse Möglichkeiten, Szenen relativ effizient zu programmieren, da diverse Sprachkonstrukte höherer Programmiersprachen implementiert wurden. Hierdurch lassen sich bestimmte Objektanordnungen z.B. wesentlich leichter realisieren. Als Beispiel diene hier eine quadratische Anordnung von 10x10 Kugeln in der x-y-Ebene:
#declare Kugel=sphere {
  <0, 0, 0>, 0.45
  texture {
    pigment { color Red }
    finish { phong 0.75 }
  }
}
#declare Y=0
#while (Y<10)
  #declare X=0
  #while (X<10)
    object { Kugel translate <X, Y, 0> }
    #declare X=X+1
  #end
  #declare Y=Y+1
#end
Durch die Programmierung mittels des #while-Befehls erspart man sich auf diese Weise das 100malige Angeben des Objektes Kugel. Da sich in Szenen durchaus nicht nur 100 sondern vielleicht 1000, 10000 oder mehr Objekte befinden könnten, stellt die Möglichkeit der Programmierung eine sehr große Bereicherung von POV-Ray dar.

An weiteren Befehlen und Funktionen stehen unter anderem zur Verfügung:

Direktiven: #declare, #if else, #ifdef, #ifndef, #switch #case und #range, #while
Einfache Funktionen: abs(A), acos(A), asin(A), atan2(A), ceil(A), cos(A), degrees(A), div(A,B), exp(A), floor(A), int(A), log(A), max(A,B), min(A,B), mod(A,B), pow(A,B) radians(A), rand(A), seed(A), sin(A), sqrt(A), tan(A)
Vektor-Funktionen: vaxis_rotate(A,B,F), vcross(A,B), vdot(A,B), vlength(A), vnormalize(A), vrotate(A)
String-Funktionen: asc(S), chr(A), concat(S1,S2,...), file_exists(S), str(A,L,P), strcmp(S1,S2), strlen(S), strlwr(S), substr(S,P,L), strupr(S), val(S)
Sollte einem die Möglichkeit der Script-Programmierung übrigens nicht zusagen, kann man auch auf diverse grafische Szeneneditoren (Modellers) zurückgreifen, die zum größten Teil als Shareware speziell für POV-Ray geschrieben wurden.
 
Was ist POV-Ray? - Animationen Seitenanfang

Das Programm POV-Ray bietet nicht nur die Möglichkeit, statische Bilder zu erzeugen, sondern durch Mehrfachberechnungen auch Animationen herzustellen. Hierbei heben sich wiederum die umfangreichen Programmierungsmöglichkeiten positiv hervor. Als Beispiel diene hier mal wieder die rote Kugel (siehe Programmierung). Diese wird nun nicht im Koordinatenursprung, sondern an der Koordinate 6 auf der x-Achse positioniert. Mittels der POV-Ray-internen clock-Variablen kann man diese nun durch mehrfachen Aufruf von POV-Ray um die senkrechte y-Achse kreisen lassen:
sphere {
  <6, 0, 0>, 2
  texture {
    pigment { color Red }
    finish { phong 0.75 }
  }
  rotate <0, clock*360, 0>
}
Die Schrittweite der Rotation hängt von der gewünschten Bilderanzahl ab, die POV-Ray auf der Kommandozeile übergeben wird. Die Variable clock läuft dann von 0 (beim ersten Bild) bis 1 (beim letzten Bild).
Durch Verwendung mathematischer Funktionen (sin, cos, exp etc.) würden sich natürlich auch gedämpfte Bewegungen ausführen lassen, wodurch sich relativ realistische und komplexe Animationen erstellen ließen.
POV-Ray bietet eine Vielzahl von weiteren Animations-Optionen, auf die ich hier aber nicht weiter eingehen möchte (und mangels Kenntnis auch nicht kann...).
Als weitere kleine Beispiel seien hier auch die sich (hoffentlich) bewegenden Verweissymbole auf meiner Startseite genannt, die ich auch mit POV-Ray erzeugt habe.


© Friedemann Schmidt (zuletzt geändert am 06.09.97)