Wer kennt das nicht:
Um einen Gegenstand spiegeln zulassen verwendet man ein Raytrace-Material
in der Szene, und schwupps: die Renderzeiten explodieren, man wartet
Ewigkeiten auf ein Ergebnis. Die Alternative das Refraktion/Reflektions-Map
zu verwenden scheitert meist daran, das die Reflektionen ungenau berechnet
werden, bzw. einfach nicht stimmen und unlogisch sind.
Um
Rechenzeiten bei einer "geraytraceten" Spiegelung zu verkürzen gibt
es zunächst eine einfache, wenn auch teure Lösung: Ein Dual-Board, mit
zwei Prozessoren. Dies beschleunigt den Rechenvorgang enorm, aber wie
gesagt, diese Lösung ist teuer, und somit nicht jedermanns Sache.
Es gibt aber noch
andere Methoden die Renderzeiten im Zusammenhang mit Raytrace-Materialien
zu verringern.
1. Antialiasing
ausschalten:
Im Materialeditor
bei den Raytrace-Parametern einmal auf "Options" geklickt, und schon
erscheint eine Palette zahlreicher Einstellmöglichkeiten, die sich sowohl
lokal (also speziell nur für das momentan ausgewählte Material) als
auch global (für alle Raytrace-verwendenden Materialien) ein- und ausschalten
lassen. Eine davon ist das Antialiasing, welches standardmäßig jedoch
sowieso meistens deaktiviert ist (global).
Das Bild oben zeigt
eine Szene mit 5 Kugeln (eine in der Mitte, die anderen vier außenherum),
einer Decke und einem Boden. Auf einem 450MHZ SingelPentiumII, mit 128
MB Arbeitsspeicher, hat es 2:28 Minuten Rendertime beansprucht. Dabei
war Antialiasing jedoch aktiviert. Ohne Antialiasing dauerte es nur
noch 0:30. In diesem Menü findet Ihr auch noch weitere Knöpfe für Eigenreflektionen,
ob Atmosphäreneffekte oder Nebel in Reflektionen einbezogen werden sollen.
Auch auf diese Dinge kann man zumeist verzichten.
2.
Den Raytrace-Falloff einschalten
Im Rollout "Attenuation"
kann der Falloff der Spiegelung eingeschaltet werden. Im ausgeschaltetem
Zustand werden selbst Objekte in der unmöglichsten Entfernung noch gespiegelt,
auch wenn sie dann nicht einmal mehr einen Pixel groß sind. Das ist
meist unnötig, da man sie sowieso nicht wahrnimmt. Also Falloff ein!
Es gibt mehrere Arten des Falloffs. Ich benutze meist den linearen,
ist er doch am einfachsten zu verstehten: Der unter "Range-End" eingegebene
Wert bedeutet, daß alle Objekte außerhalb eines Radius von x-Einheiten
sich nicht mehr in dem Material spiegeln werden. Der "Range-Start"-Wert
gibt den Beginn des "Refelktions-Verlustes" an. Spielt ruhig mal mit
diesen Werten herum, und ihr werdet feststellen, daß sich der Falloff
auch auf die Spiegelkraft des Materials auswirken wird (sprich die Reflektionen
werden dunkler). In unserem Beispiel jedoch verkürzt sich die Renderzeit
somit von 30 auf 20 sek (Bild rechts).
3.
Die Raytrace-Tiefe (Ray-Depth) runterschrauben
Unter den Globalen
Parametern des Raytrace-Maps läßt sich die Raytracetiefe regulieren.
Standardmäßig auf 9 eingestellt, wird der "Raytrace-Strahl" neun mal
an den spiegelnden Oberflächen reflektiert, bis der Rechner endlich
Ruhe gibt. Dadurch wird erreicht, wie in Bild 1 und 2 schön zu erkennen
ist, daß sich die Kugeln in den Kugeln wo sich die Kugeln nochmals in
den Kugeln und wiederum in den Kugeln spiegeln. Wer braucht das schon?!
Oft ist eine solche
Genauigkeit nicht notwendig, und das Herabsetzen dieses Wertes auf "1"
reduziert die Renderzeit auf 9 Sekunden (Bild links). Man sieht nun
aber deutlich den Verlust zusätzlicher Reflektionen. Die Kugeln spiegeln
sich gegenseitig nur noch einmal, dann ist Schluß. Je nach Situation
läßt sich dieser Wert also herabsetzen, nur muß man dabei eben einen
Kompromis zwischen Renderzeit und Realitätsgrad eingehen. Zu dieser
Methode sei noch gesagt, daß sie nur wirksam ist, wenn sich mehrere
Objekte gegenseitig spiegeln, oder ein einzelnes Objekt in der Lage
ist sich selbst zu spiegeln (z.B. das Innere eines Rohres). Bei einer
einzelnen Chrom-Kugel z.B. hat das Ändern der Raytracetiefe kaum eine
Auswirkung, jedoch bietet es sich hier erst recht an die Raytrace-Tiefe
auf 1 zu reduzieren, da in solchen Fällen keine Spiegelungen in den
Spiegelungen erwartet werden.
4. Objekte von
der Reflektion ausschliessen
Auch dies läßt
sich im Rollout "Raytrace-Parameters" einstellen, sowohl lokal als auch
global. Manchmal ist es einfach nicht notwendig jedes einzelne Objekt
in den Spiegelungen auftreten zu lassen. Das Ausschliessen mehrerer
Objekte kann die Renderzeit nochmals verkürzen. Bei unserem Kugelbeispiel,
macht es jedoch wenig Sinn.
FAZIT: In diesem
kurzen Beispiel haben wir nun die Renderzeit von 2:28 auf ganze 9 sek.
verringern können, jedoch auch einen herben Qualitätsverlust hinnehmen
müssen. Je nach Situation solltet Ihr eben abschätzen, inwiefern Ihr
die obengenannten Möglichkeiten einsetzen wollt.