Hauptseite

POV-Ray – ein Raytracer

21. Juni 2009 von zimon
Ein mit POV-Ray generiertes Bild

Ein mit POV-Ray generiertes Bild

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.)

Das Board-Layout eines USB<->UART Konverters

Das Board-Layout eines USB<->UART Konverters

Das mit POV-Ray aus dem Board-Layout generierte Bild

Das mit POV-Ray aus dem Board-Layout generierte Bild

Ein Foto der fertigen Platine

Ein Foto der fertigen Platine (um 180° gedreht)

Ü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       
        }
    }
}
Das Ergebnis des Beispiels

Das Ergebnis des Beispiels

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)

YouTube Preview Image YouTube Preview Image

Links


Folgende Beiträge könnten Dich auch interessieren:

  • Keine ähnlichen Beiträge

Schlagworte: , , ,



10 Kommentare zu „POV-Ray – ein Raytracer“

  1. patrick2301 sagt:

    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

  2. patrick2301 sagt:

    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 :D

  3. zimon sagt:

    Hallo patrick2301,
    das ist ein FT232BL (genau der gleiche wie in meinem Banner, dort kann man auch die Beschriftung erkennen ;-) ). 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.

    Viele Grüße
    zimon

  4. fetter_oml sagt:

    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 :D

    fetter_oml

  5. zimon sagt:

    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

  6. Sudo sagt:

    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

  7. zimon sagt:

    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

  8. Base sagt:

    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.

  9. Sebastian sagt:

    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

  10. zimon sagt:

    Hallo Sebastian,
    vielen Dank für den Hinweis. Ich habe den Link korrigiert.

    Viele Grüße,
    zimon

Kommentieren

Kommentarlinks könnten nofollow frei sein.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de