Carlos Calzada Über den Autor:
Inhalt:
|
Zusammenfassung:
In diesem zweiten Artikel über RenderMan wird die Konfigurierung und Positionierung der Kamera diskutiert, sowie Spezialeffekte betrachtet, die dadurch erreicht werden können. Obwohl die Positionierung nicht ganz so intuitiv wie bei Pov-Ray ist, weist sie Vorteile bei der Beschreibung der Bewegungen der Kamera auf. Dieser letzte Punkt wird zum Teil auch im dritten Artikel über RenderMan behandelt.
Wie im vorhergehenden Artikel beschrieben, muß Folgendes für das Rendern eines Bildes eingegeben werden:
rendrib fichero.ribfür die Ausgabe in eine Datei
rendrib -d fichero.ribfür die Bildschirmausgabe.
Nun wird die Positionierung der Kamera betrachtet. Es ist nur logisch, vorallem für Benutzer von Pov-Ray, dafür die Kamera zu bewegen. Um die Szene von einer weiter entfernten Position zu betrachten, müßte die Kamera auf die Position (0,0,-20) gesetzt werden. Dies entspricht einer Rückwärtsbewegung der Kamera. Bei RenderMan wird diese Kamerabewegung durch das Kommando Translate 0 0 -20 realisiert und zwar vor dem WorldBegin:
Allerdings hat das Kommando die Kamera vorwärts bewegt! In Wirklichkeit war es nicht die Kamera sondern das Koordinatensystem, daß bewegt worden ist, nach hinten verschoben wurde und so die Kamera nach vorn gebracht hatte. Also muß das genaue Gegenteil getan werden, wenn die Kamera nach hinten bewegt werden soll: eine Bewegung nach vorne. Dies sollte man sich nicht als Kamerabewegung, sondern als Verschiebung des Koordinatensystemes vorstellen (mittels Translate 0 0 20).
Nun befindet sich die Kamera genau an der gewünschten Stelle. Von nun an beziehen sich alle Veränderungen der Geometrie der Szene auf das gegenwärtige Koordinatensystem. Im nächsten Beispiel bleibt das Modell im Ursprung, allerdings rotiert die Kamera um das Objekt:
Die RIB Datei mit den geometrischen Transformationen der Kamera sieht wie folgt aus:
Display "camara_default2.tif" "file" "rgb" Projection "perspective" "fov" 45 Format 320 240 1 LightSource ämbientlight" 1 "intensity" 0.3 "lightcolor" [1 1 1] LightSource "distantlight" 2 "intensity" 1.0 "from" [10 10 -10] "to" [0 0 0] Translate 0 0 20 Rotate 45 1 0 0 Rotate 135 0 1 0 WorldBegin Color 1 1 1 # Background blanco Sphere 10000 -10000 10000 360 # Objeto de la escena TransformBegin Color 1 0 0 Sphere 3 -3 3 360 TransformEnd TransformBegin Rotate -90 1 0 0 Translate 0 0 2 Cone 3 3 360 Disk 0 3 360 TransformEnd TransformBegin Rotate -90 0 1 0 Cylinder 1 -4 4 360 Disk 4 1 360 Disk -4 1 360 TransformEnd WorldEnd |
Es gibt eine Verschiebung (Translate 0 0 20) und
zwei Rotationen, eine um die X Achse (Rotate 45 1 0 0) und eine
um die Y Achse (Rotate 135 0 1 0). Es kann durchaus sein,
daß Pov Ray Benutzer von der Abfolge der Operationen in diesem Beispiel
irritiert sind, da sie gewohnt sind, daß Operationen in der Reihenfolge
ihres Erscheinens angewandt werden. Jedoch ist dies bei RenderMan anders.
Viemehr werden die Operationen in einer Warteschlange
gehalten, bis ein entsprechendes Token gefunden wird (in diesem Beispiel
WorldBegin).
Erst dann werden die Operationen wirklich auf die Szene angewandt. Aufgrund
der Art und Weise der Verwaltung der Schlange werden die Operationen in
der umgekehrten Reihenfolge ausgeführt, d.h. die zuletzt aufgeführte
Operation wird als erste angewandt. Deshalb sollten die geometrischen Operationen
des Beispieles wiefolgt interpretiert werden:
Es sollte nie vergessen werden, daß alle Änderungen des gegenwärtigen Koordinatensystemes (Rotationen und Verschiebungen) immer relativ zu der Kamera sind. Deswegen sollte eine Rotation um die X Achse als "Rotation um die X Achse der Kamera" verstanden werden.
Nun kommt der interessanteste Teil des Artikel, nämlich, wie das RenderMan
Kameramodell benutzt werden kann, um Spezialeffekte zu erzeugen.
Der Effekt wird durch das Einfügen des Befehles Shutter 0 1 in den Teil der Beispieldatei, der für die Kameraspezifikationen zuständig ist, erzeugt. Dieses Kommando simuliert die Belichtungszeit, in diesem Fall die Öffnung des Verschlusses zum Zeitpunkt 0 für genau eine Zeiteinheit. Die Werte 0 1 für die Blende sind dabei recht allgemein, sodaß diese Parameter in Zukunft benutzt werden, da sie nur einen bestimmten Teil des Kameraverhaltens in RenderMan beeinflußen.
Als nächstes müssen die Objekte gewählt werden, die in der Szene bewegt werden sollen. Dafür wird das Befehlspaar MotionBegin/MotionEnd eingesetzt. Die folgenden Abbildungen zeigen das Beispiel eines sich bewegenden Balles (und die dazugehörige RIB Datei), und zwar von den Koordinaten 0 10 5 zum Zeitpunkt 0 zu den Koordinaten 5 10 0 zum Zeitpunkt 1. Die Anweisung MotionBegin [0 1] in der RIB Datei gibt RenderMan an, zu welchem genauen Zeitpunkt die Transformationen gehören (Instanz 0 korrespondiert zu Ersterem, Instanz 1 zu Letzterem) und die Werte müssen mit denen des Shutter Abschnittes übereinstimmen. Die Abbildung zeigt ganz klar, wie realistisch der Effekt wirkt; in einer Animation verstärkt sich dies natürlich noch.
Die Operationen, die zwischen MotionBegin und MotionEnd stehen dürfen, beschränken sich natürlich nicht nur auf Verschiebungen. RenderMan kann nicht-lineare Bewegungen in Verbindung mit Motion Blur rendern. Im nächsten Beispiel wird eine Rotationen der Koordinatenachsen um 25 Grad um die Y Achse demonstriert:
Normalerweise bewegen sich nur die Objekte einer Szene. RenderMan jedoch bietet zusätzlich die Möglichkeit, die Kamera selbst zu bewegen, wodurch der Effekt des Motion Blur auch auf die Kamera angewandt werden kann. In diesem Beispiel wird die Kamera 5 Einheiten nach rechts bewegt (z.B. durch Bewegen des Koordinatensystemes um 5 Einheiten nach rechts), und alle Objekte in der Szene werden unscharf. Natürlich muß ein Paar MotionBegin/MotionEnd in der RIB Datei innerhalb der Kamerasektion stehen:
Beim ersten Bild wird DepthOfField 2.0 1.0 10 benutzt, wodurch alle Objekte, die 10 Einheiten von der Kamera entfernt sind, fokussiert sind (die rote Kugel):
Im zweiten Fall wird DepthOfField 2.0 1.0 20 eingesetzt. Nun ist die grüne Kugel, 30 Einheiten von der Kamera entfernt, im Fokus:
Damit zum Schluß auch die letzte Kugel fokussiert wird (30 Einheiten entfernt), muß DepthOfField 2.0 1.0 30 angegeben werden:
Die erreichten Effekte geben den erzeugten Bildern einen größeren Realismus. Natürlich steigt durch sie die für die Bilder benötigte Rechenzeit, beide Effekte, Motion Blur und Depth of Field erfordern mehrere Durchgänge des Renderers.
Webpages maintained by Miguel Ángel Sepúlveda
© Carlos Calzada 1998 LinuxFocus 1998 |