Was ist Rendern?

Das englische Wort "Rendern" [eng.: "übertragen, übersetzen, übergeben"] bezeichnet im Computerjargon, besonders im Bereich der Graphik, einen Prozess, in welchem ein Bild erzeugt wird. Anders als bei einer Fotografie [beispielsweise "Speichern" von Bildern auf einem Medium -> Negativ-Foto] oder einem Gemälde [Aufbringen von Farbe auf ein Medium [z.B. Leinwand oder Papier] und Abbilden eines realen oder imaginären Geschehens] erstellt der Computer beim Rendern reinen binären Daten [Nullen und Einsen] ein Bild.

Um dem Computer die erforderlichen Daten zu liefern, steht dem Benutzer ein sogenannter Modeller zur Verfügung, ein Programm, in welchem man das abzubildende Objekt in einem leeren dreidimensionalen Raum platziert (siehe: "Modellieren") und so eine komplette Szene kreiert.

Der Computer wandelt die erstellte Szene dann in reinen [für ihn lesbaren] Text um und erstellt daraus mit dem Renderer das fertige Bild. Der Renderer weist jedem Pixel [Bildpunkt] dabei lediglich eine Farbe zu er "malt" jedes Pixel also gewissermaßen aus.

In der Graphik werden Bildgrößen oft in der Einheit Pixel angegeben; gebräuchliche Formate sind beispielsweise: 800x600 Pixel, 1024x768 Pixel, 1280x1024 Pixel, usw. [Breite mal Höhe], wobei es dann natürlich bei z.B. 800x600 = 480 000 Pixel zu Berechnen gibt. Deshalb sind Rendervorgänge oft sehr zeitaufwändig. Ein solches Bild hätte also eine "Höhe" von 600 Linien mit jeweils eine Breite von 800 Pixeln.

Je nach zu berechnendem Objekt steigt die Zeit eines Rendervorgangs: Ein simpler Quader ist relativ schnell berechnet, eine silberne, spiegelnde und metallische Kugel hingegen benötigt schon mehr Zeit. Das Endprodukt eines solchen Rendervorgangs ergibt ein physikalisch korrektes und fotorealistisches Bild. Natürlich gibt es auch hier verschiedenene Arten und Stile des Renderns, die im Folgenden beschrieben werden.

Verschiedene Arten des Renderns

Die verschiedenen Renderarten werden auch als Algorithmen bezeichnet.

Das von uns verwendete Programm heißt "POV-Ray", ist kostenlos [im Gegensatz zu anderen] und primär zur Erstellung von Standbildern gedacht [Einzelbilrendering]. Zum Thema "POV-Ray" folgt jedoch noch ein eigener Punkt [Raytracing].

Grundsätzlich ist die Funktion eines Render-Algorithmus das entscheidende Kriterium für seine Verwendung:

Anwendungen, bei denen es Animationen ["bewegte Bilder"] oder gar komplexe Videos zu realisieren gilt [zum Beispiel: Computerspiele oder aktuelle Kinofilme] ist das Einzelbildrendering fehl am Platze.

Hier wird eine sogenannte "Rendering Pipeline" benutzt, d.h. der Computer berechnet nicht nur ein Bild und zeigt dieses dann an [was relativ perfekt und natürlich aussehen würde], sondern berechnet eine Folge von Bildern die schnell hintereinander angezeigt werden. Dies hat zur Folge, dass man nicht merkt dass es sich um Einzelbilder handelt sondern dass es aussieht, als hätte man ein flüssiges "Video" hergestellt. Dieses Verfahren nennt man "Scanline-Rendering", was wir in dieser Projektmappe nicht weiter beschreiben. Im Ganzen sieht dies jedoch natürlich nicht so perfekt aus wie das aufwändige Einzelbildrendering.

Was ist Raytracing?

Der Unterschied zu anderen Renderarten besteht darin, dass das Verhalten von Lichtstrahlen physikalisch korrekt nachgebildet wird. Dadurch ist es möglich, Spiegelungen sowie Brechungen als auch Schatten und Transparenz realistisch darzustellen. Darauf gehen wir im Folgenden ein:

Beim Auftreffen auf ein spiegelndes Objekt gilt für jeden Lichtstrahl, dass der Einfallswinkel auf eine Oberfläche gleich dem Ausfallswinkel ist, wobei es stärker und schwächer spiegelnde Objekte gibt und dem entsprechend die Intensität des reflektierten Lichtstrahls variiert wird. Reflektiertes Licht wird weiter verfolgt und physkalischen Gesetzen entsprechend adaptiert. Dies nennt man "rekursives Raytracing". Es können beliebig viele Lichtquellen frei im Raum platziert werden, wobei es verschiedene Arten von Lichtquellen, wie z.B. Punktlicht, Flächenlicht sowie schattenloses Licht etc. gibt, denen unterschiedliche Eigenschaften zugewiesen werden können, wie z.B. Richtung oder Farbe.

Dadurch dass "Lichtstrahlen" bei dieser Render-Technik [Raytracing, eng.: "Strahlenverfolgung"] einzeln verfolgt werden, ist der Schattenwurf [besonders im Bezug auf die Kanten] sehr realistisch.

Es können auch "gläserne" Objekte dargestellt werden, indem die Lichtstrahlen nach den Fresnel'schen Formeln [Formeln, die die Lichtbrechung beschreiben, nach Jean A. Fresnel] beim Ein- und Austritt an den Kanten des Objektes gebrochen werden [dies nennt man "backward-raytracing", da die Strahlen von der Lichtquelle aus "verfolgt" werden]. Der Grad der Transparenz eines Objekts kann in seinen Parametern festgelegt werden, sodass es mehr odere weniger durchsichtig scheint. Damit lassen sich speziellere Objekte, wie z.B. eine Wasseroberfläche realisieren.

Die erstellte Szene wird durch eine virtuelle Kamera betrachtet ["Augpunkt"]. Diese bildet den dreidimensionalen Raum auf einer zweidimensionalen Fläche, dem fertigen Bild, wie bei einer normalen Kamera, ab. Das Bild ist jedoch nicht gleichmäßig, sondern in ein der Auflösung entsprechendes Raster eingeteilt. Durch jeden der bereits oben erwähnten Bildpunkte [Pixel] wird ein Strahl der Blickrichtung nach in den Raum gesandt, weiter verfolgt und seine Farbe berechnet (eine Technik, die wie bereits oben mit den Lichtstrahlen beschrieben, funktioniert, bloß, dass die Strahlen eben in umgekehrter Richtung berechnet werden [von der Kamera ausgehend]. Dies nennt man "forward-raytracing"].

Es ist mit diesem Render-Verfahren auch möglich, Video-ähnliche "Animationen", bestehend aus vielen Einzelbildern, zu erstellen. Für jedes dieser [jeweils leicht veränderten] Bilder muss jedoch der aufwendige Rendervorgang erneut durchgeführt werden, was extrem zeitaufwändig ist. In dieser Form werden auch Spezialeffekte in modernen Kinofilmen produziert. Da schon das Berechnen einzelner Bilder mit unserer Ausrüstung:

bereits sehr zeitintensiv war, war es uns nicht möglich, in der Kürze der Zeit eine Animation zu erstellen.

Modellierung

Generell

Das Render-Programm, welches wir benutzten, errechnet das Bild aus den Angaben, die als normaler Text in den Computer eingegeben werden. Dieser Text [Quell-Code der Szene] darf nur spezielle "Worte" enthalten, damit POV-Ray ihn verstehen kann.

Beim Erstellen eines Bildes ist es allerdings nicht hilfreich, wenn man nur unverständlichen Text vor sich hat, weswegen es Programme [Modeller] gibt, die dafür geschrieben wurden, den Quell-Code zu visualisieren und für POV-Ray zur Verfügung zu stellen und dabei helfen, eine Szene zu erstellen.

Dazu gibt es verschiedene Objekte, wie z.B. Quader, Kugeln, jedoch auch Ebenen oder eine Himmelskugel. All diese Objekte haben bestimmte Eigenschaften, die leicht im Modellierungsprogramm verändert oder teilweise sogar erstellt werden können. Die Eigenschaften eines Objektes können zum Beispiel Farbe, Muster, Reflexion, Brechung, Lichtdurchlässigkeit oder auch Krümmung oder Streckung des Objektes sein. Diese Einstellungen wirken sich natürlich dann auf das Endprodukt das Bild aus.

Alle Figuren werden in einem [vorerst] leerem Raum platziert, dann eventuell gedreht und / oder verzerrt, sodass sie die gewünschte Form annehmen und in die Szene passen. Später werden ihnen die Eigenschaften zugewiesen, die für das Objekt in der Szene realistisch erscheinen.

Im Modeller sehen diese Figuren während der Kreation der Szene allerdings anders aus als im fertigen [gerenderten] Bild. Normalerweise wird ein bestimmter Ausschnitt der Szene in drei verschiedenen Ansichten gezeigt: von oben, vorn und von der Seite. Die Objekte in der Szene sind durchsichtig, einzig ihre Kanten werden als farblose Drahtgitter dargestellt.

Zusätzlich stehen aber noch andere Optionen zur Verfügung, wie z.B. das Verschmelzen zweier oder mehrerer Objekte miteinander. Dabei wird aus vielen einzelnen Figuren eine einzige gemacht, die dann die äußere Form aller Beinhalteten hat. Die Subtraktionsmenge schneidet ein oder mehrere Figuren aus einer anderen heraus. Diese Möglichkeiten wirken sich natürlich nur auf das Bild aus, wenn sich diese Objekte im Raum überlappen!

Hat man seine Szene fertig gestellt oder möchte sie zu Testzwecken im fertigen Bild betrachten, so wandelt das Modellierungsprogramm die erstellten Objekte mitsamt ihren Parametern in den oben erwähnten Quelltext um und übergibt ihn an das Render-Programm, welches ihn liest und dann schließlich für jeden Bildpunkt [Pixel] des Bildes eine Farbe berechnet [siehe Raytracing].

Modellierung des Bildes

Das Spiel mit den fünf Kugeln besteht prinzipiell aus einem Rahmen, den fünf Kugeln, ihren Fäden und einer Ebene, welche den Boden darstellt.

Die einzelnen Objekte, welche verwendet wurden, haben wir erst ohne jegliche Anpassungen eingefügt, d.h. ohne eine Textur [ein Bild, welches auf die Oberfläche des Objektes gelegt wird, um ihm eine Struktur zu geben], ein Muster oder eine Spiegelung einzufügen.

Als Erstes wurde die Fläche eingefügt, auf der das gesamte Spiel steht; eine Ebene, die sich [theoretisch] bis ins Unendliche erstreckt. Um sie zu erkennen haben wir sie rot gefärbt, da man eine schwarze Fläche in einem schwarzen Raum schlecht zu erkennen vermag!

Die nächste Aufgabe wurde schwieriger, da das Gerüst, an dem die Kugeln "aufgehängt" werden sollten, nicht aus nur einem Objekt wie die Fäden oder Kugeln besteht sondern sich aus vielen einzelnen geometrischen Figuren zusammen setzt.

Für die senkrechten Stangen haben wir Zylinder eingesetzt, sie im richtigen Abstand zu einander platziert und ihnen einen angemessenen Radius gegeben. Mit den waagerechten Stangen wurde genauso verfahren, d.h. ebenfalls Zylinder im gleichen Radius wie die Senkrechten verwendet. Die Verbindungsstücke zwischen den waagerechten und den senkrechten Zylindern sind normale Kugeln mit einem etwas größerem Radius, damit sie [wie im Bild zu sehen] etwas überstehen und markante Verbindungspunkte darstellen. Schlussendlich versahen wir die Enden der "tragenden" Stangen an ihren Berührungspunkten jeweils mit einem so genannten Torus, ein Objekt, das wie ein Kreis aussieht, wobei die Kreislinie in sich einen (einstellbaren) Radius hat [Donut-Form]. Diese Objekte wurden halb in der Ebene versenkt, sodass sie wie die "Füße" des Gestells aussehen.

All diese gerade aufgezählten Objekte sammelten wir in einer "Verschmelzungsmenge", welche die Objekte so miteinander verbindet, dass sie "weich" in einander übergehen. Da diese Verschmelzungsmenge ebenfalls wie ein normales Objekt gewertet wird, kann man ihr (und damit auch allen in ihr gesammelten Objekten) verschiedene Eigenschaften zuweisen. In diesem Fall gaben wir ihr eine Farbe [mittelgrau] und versuchten verschiedene realistische Werte für die Reflexionseigenschaften zu finden.

Nachdem nun das Gerüst stand, machten wir uns Gedanken über das Aussehen und die Größe der Kugeln und entschieden uns dann dafür sie dem Gerüst anzugleichen. Die Kreation der Kugeln ist nicht weiter umfangreich, da sie jeweils aus nur einem Objekt bestehen, welches nur mit den "Fäden" vereinigt ist.

Diese "Fäden" sind wieder Zylinder, weiß gefärbt, damit sie besser gesehen werden und haben ein sehr geringen Radius (da sie eben nur Fäden darstellen sollen) und auch keine Reflexionseigenschaften.

Das Bild wurde zwischen den jeweiligen Arbeitsschritten oftmals gerendert, um das Resultat geänderter Werte in Erfahrung zu bringen. Das Endprodukt dieser Bemühungen ergab das vorgestellte Bild, in welchem einzig die Fläche, auf der das Gebilde steht, rot gefärbt war.

Um diese Eintönigkeit zu verbannen starteten wir mehrere Versuche eine bunte oder im Schachbrettmuster gefärbte Fläche zu erstellen, jedoch gefielen uns die Ergebnisse nicht, da sie nicht in die Szene passten. Schließlich erstellten wir [nach vielen Versuchen] den bekannten Marmorboden und fügten ihn statt der bereits vorhandenen Fläche in das Bild ein.

Da der Rendervorgang [bei sehr hoch aufgelösten d.h. sehr großen Bildern mit vielen tausenden Pixeln] einige Zeit in Anspruch nimmt, machten wir uns die Funktion POV-Rays zu Nutze, welche das Bild in mehrere Einzelteile aufteilt, die separat berechnet werden können. Wir teilten es in zwei Teile ein, wobei jeder Einen berechnete.