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:
-
MD:
- MSI-6318-MBoard
- PIII 900MHz @ 990.2Mhz
- 640MB SD-RAM @ 110MHz
- Riva TNT2 Pro @ 143/166MHz / 32MB SD-VRAM
- 350W
-
RR:
- Asus A7N8X-Deluxe
- AMD Athlon XP 2400+ @ 2002MHz
- 512MB Dual-Channel DDR-RAM @ 166MHz
- ATI Radeon 9500 Pro/9700 / 128MB DDR-VRAM
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.