Mit dem quelloffnen Raytracer POV-Ray kann man sehr realitätsnahe Bilder erzeugen. Anders als bei den meisten anderen 3D-Grafikprogrammen arbeitet man hier nicht mit einer graphischen Oberfläche und Maus sondern beschreibt die Objekte textbasiert über dessen Positionen in einem Koordinatensystem.
[UPDATE]Artikel nochmals überarbeitet und Beispiel hinzugefügt.[/UPDATE]
Was ist Raytracing?
Raytracing ist eine Methode um Computergenerierte Bilder zu erzeugen. Der Unterschied zum Rendering besteht darin, dass keine Gittermodelle mit Texturen belegt werden und die Farbe dann mittels des Lichtes berechnet wird sondern eine Strahlenverfolgung statt findet, wodurch viel realistischere Bilder entstehen. Leider ist dieses Verfahren auch wesentlich rechenintensiver. Dafür bekommt man Schatten und Spiegelungen quasi geschenkt, was mit Rendering relativ schwer zu realisieren ist. (Siehe auch: http://de.wikipedia.org/wiki/Raytracing)
Einen guten Eindruck, was POV-Ray leisten kann bekommt man in der Galerie der POV-Ray Homepage.
Download und Installation
POV-Ray steht unter einer eigenen Lizenz, die zwar das Einsehen des Quelltextes, aber nicht die veränderte Weitergabe im Sinne freier Software erlaubt (was sich aber bald ändern soll, siehe Kommentare).
Das Programm ist für alle gängigen Betriebssysteme verfügbar und kann sogar in einem Cluster (also auf mehreren PC’s gleichzeitig) verwendet werden.
[UPDATE]POV-Ray kann unter Ubuntu mittels sudo apt-get install povray installiert werden.
Ansonsten kann man die Binärdateien von der Homepage beziehen[/UPDATE]
Grundsätzliche Funktionsweise
In einer Scenenbeschreibungssprache werden alle Objekte, Lichtquellen und die Kamera an 3D-Positionen im Raum definiert (z.B. Kugel an Stelle x,y,z mit Radius r und Farbe rot). Daneben gibt es noch viele weitere Optionen um bestimmte Materialien zu simulieren. Daraus wird dann das Bild berechnet.
Zitat:
Der Qualität und dem Anspruch der gerenderten Bilder sind keine theoretischen Grenzen gesetzt;
in der Praxis ist die zur Verfügung stehende Rechen- oder Computer-Zeit der begrenzende Faktor.
Quelle: http://de.wikipedia.org/wiki/Povray
Interessant ist Povray durch seine Scenenbeschreibungssprache auch wegen der Automatisierbarkeit.
z.B. ist EAGLE ein Programm um elektronische Schaltungen zu entwerfen und daraus entsprechende Boardlayouts zu konstruieren. Mittels eines Scripts kann man sich die Platine zu einem fertigen Layout vor dem eigentlichen Bau mit POV-Ray Rendern lassen um sich ansehen zu können, wie es später aussehen wird. (Macht sich sehr gut in Ausarbeitungen oder um vorab etwas präsentieren zu können.)
Übrigens ist der linke Teil meines Banners (oben auf der Seite) auch ein Teil einer mit POV-Ray gerenderten Platine. Der Rechte Teil ist ein Ausschnitt des EALGE Layouts, aus dem es generiert wurde.
Beispiel
Im folgenden Beispiel wird eine einfache Scene erstellt. Zuerst wird eine Datei mit Farbdefinitionen eingebunden, damit man nicht jede Farbe als RGB-Wert eingeben braucht. Danach wird eine Kamera definiert. Dabei gibt man die Position an, wo sie sich befinden soll und die Position, auf die die Kamera zeigen soll.
Als nächstes muss noch eine Lichtquelle definiert werden, damit man auch etwas sehen kann. Diese wird mit dem Schlüsselwort light_source eingeleitet und hat eine Position und eine Farbe. Nun können die einzelnen Objekte definiert werden.
Als Boden wird eine Ebene definiert, die schwarz-weiß kariert ist und waagerecht auf der Höhe -1 liegt. Die Koordinaten geben die Lage der Ebene an, die immer Senkrecht auf dem angegebenen Vektor liegt. Dahinter kann man ein Offset (der Abstand zum Nullpunkt), in diesem Fall also die Höhe angeben.
Die Farbe wird mit dem Schlüsselwort “pigment” angegeben. Da die Ebene Kariert sein soll nutzen wir hier die Option “checker” gefolgt von zwei Farbwerten.
Durch die Include-Anweisung am Anfang können hier die Namen der Farben verwendet werden. Ansonsten müsste man den RGB-Wert angeben.
Der Himmel wird durch ein “sky_sphere”-Objekt erzeugt, welches entlang der y-Achse (“gradient y”) von Hellblau nach Blau verläuft (“color_map”).
Nun kann man noch weitere Objekte auf der Ebene platzieren. Eine Kugel (sphere) besitzt einen Mittelpunkt und eine Durchmesser und natürlich auch eine Farbe.
Ein Kegel (cone) hat zwei Koordinaten, die den Mittelpunkte der beiden Enden entsprechen sowie je einen Durchmesser an jedem Ende.
Neben der Farbe kann auch noch die Oberflächenstruktur und -Politur definiert werden. Für die Struktur ist das Schlüsselwort “normal” zuständig, die Politur wird mittels “finish” angegeben. Im Beispiel wird der 2. Kugel eine reflektierende Politur gegeben, so dass sie die anderen Objekte spiegelt. (je höher der Reflektionswert, desto stärker die Spiegelung.
Nun der Code des Beispiels:
#include "colors.inc" camera { // Die Kamera location <2, 3, -6> look_at <0, 1, 2> } light_source { // Die Lichtquelle <3, 5, -4> color White } plane { // Eine Ebene <0, 1, 0>, -1 pigment { checker color White, color Black } } sky_sphere { // Der Himmel pigment { gradient y color_map { [0.0 color rgb <0.7,0.7,1.0>] [1.0 color blue 0.5] } } } sphere { // eine Kugel <-3, 1, 4>, 2 pigment { color Yellow } } cone{ // Ein Kegel <3,-1,3>,1,<2.5,4,4>,0 pigment{color Green} } sphere { // Eine reflektierende Kugel <0, 2.5, 10>, 3 finish{ reflection { 0.8 } } }
Sonstige Funktionen
POV-Ray kennt noch eine ganze Menge weiterer Objekte, die sich auch zusammenfassen lassen. Man kann auch – wie in der Mengenlehre – ein Objekt von einem anderen abziehen oder die Schnittmenge zweier Objekte berechnen (und anzeigen).
Auch bei den Farben und Oberflächenstrukturen bzw. -Polituren gibt es noch viele weitere Möglichkeiten und Optionen.
Die Objekte können skaliert (in der Größe geändert) rotiert und translatiert (verschoben) werden.
Es können auch Kontrollstrukturen wie bei Programmiersprachen genutzt werden. So kann man Variablen deklarieren, Schleifen und Verzweigungen nutzen sowie Funktionen (bei POV-Ray Makros genannt) definieren um automatisch eine Reihe von Objekten zu erzeugen und zu transformieren.
Man kann mit POV-Ray auch Animationen erstellen. Dafür werden per Script mehrere Bilder erstellt, wobei vor jedem Bild eine Variable verändert wird. Diese kann genutzt werden um die Kamera oder Objekte zu bewegen.
Hier einige Beispiele (auf Youtube gibt es noch jede Menge weitere)
Links
- http://www.povray.org – Offizielle Homepage von POV-Ray (englisch)
- http://hof.povray.org – Gallerie auf der Seite von POV-Ray. Sollte man sich in jedem Fall mal ansehen, auch wenn man sonst kein Interesse am Programm hat. (Die Bilder kann man durch einen Klick darauf vergrößert ansehen)
- http://de.wikibooks.org/wiki/Raytracing_mit_POV-Ray – Deutsches Buch über POV-Ray auf Wikibooks
- http://www.basti-info.de/pov-ray/inhalt.htm – Eine deutsche Einführung in POV-Ray
- http://www.f-lohmueller.de/pov_tut/pov__ger.htm POV-Ray – Tutorials auf deutsch
- http://de.wikipedia.org/wiki/Povray – Wikipedia Artikel zu POV-Ray
- http://www.oyonale.com/modeles.php?format=POV&lang=en – Einige freie Objekte für POV-Ray auf der Website von Gilles Tran
Folgende Beiträge könnten Dich auch interessieren:
- Keine ähnlichen Beiträge
Schlagworte: Computergrafik, POV-Ray, Raytracing, Rendering













Eagle-3D ist schon was feines
Hab auch einen gerenderten Entwurf einer µC Platine zu ner Dokumentation dazugegeben welche ich morgen abgeben muss.
Lg Patrick
EDT: Hmm, wenn ich das richtig erkenne ist da ein FT232 (BM?) auf deiner Schaltung.
Hab auch nen FT232RL verbaut, das war ein Spaß den zu löten
Hallo patrick2301,
). Ich hab das so gamcht, dass ich das Teil ausgerichtet hab und jemanden gebeten hab das Teil fest auf die Platine zu pressen. Dann hab ich 1-2 Pins angelötet, so dass der Chip fixiert war. Danach einfach dick Lötzinn drauf und mit Entlötlitze wieder runter genommen. Ich glaub so geht es echt am besten. Und sieht echt sauber aus.
das ist ein FT232BL (genau der gleiche wie in meinem Banner, dort kann man auch die Beschriftung erkennen
Viele Grüße
zimon
wenn ich das recht in erinnerung habe, wollen die entwickler a) bis zur nächsten version allen “schmutzigen” quellcode neuschreiben und damit das packet endgültig gpl-kombatibel machen, und b) endlich auch multithreading support einfügen … wenn man mittlerweile an einem level ist wo ein bild ca 2h dauert würde es einen doch wirklich erfreuen alle 4 kerne der cpu nutzen zu können, nicht nur einen
fetter_oml
Hallo fetter_oml,
das wären ja zwei hervorragende Neuigkeiten. Ich hoffe, dass dies bald geschieht.
Vielen Dank für die Info und viele Grüße,
zimon
Hallo !
Dieser nette Beitrag hat mich gerade dazu angeregt, mein Zimmer in Povray nachzubauen. Ich bin jetzt schon seit zwei Tagen dran…
Nette Sache, allerdings müsste ich mal ein wenig Struktur in das Script bekommen.
Sudo
Hallo Sudo,
klasse, dass ich Dich dazu anregen konnte.
Um Struktur ins Script zu bekommen empfiehlt es sich sehr, die einzelnen Objekte in einer eigenen Datei zu definieren und in der Hauptdatei diese nur noch zu instanziieren (also einzubinden) und ggf. zu skalieren, rotieren und verschieben. Dadurch kann man die Objekte auch sehr einfach für andere Bilder wiederverwenden.
Es gibt auch schon einige freie Objekte, die man nutzen kann (Bücher, Stühle, Gläser,…). Schau mal z.B. hier: http://www.oyonale.com/modeles.php?format=POV&lang=en (mit Google findet man bestimmt noch mehr).
Viele Grüße
zimon
Ich verstehe ja nicht soviel technisches darüber, aber die Galerie ist echt Krass. Ich beneide echt solche Künstler die mit so nem Programm umgehen können.
In diesem Artikel gibt es einen Link der nicht mehr korrekt ist, bzw. auf eine Werbe-Internetseite verweist. Die Domain “sebastian-rikowski.de” (4. von oben) muss mit “basti-info.de” ausgetauscht werden.
Viele Grüße
Sebastian
Hallo Sebastian,
vielen Dank für den Hinweis. Ich habe den Link korrigiert.
Viele Grüße,
zimon