Blender Dokumentation: Environment Maps
bezieht sich auf Blender v2.37a
Blenders "Scanline Renderer" hat - aus Prinzip - einige große Nachteile. Das Modell, das zur Berechnung der Bilder eingesetzt wird, berücksichtigt keine Spiegelungen. Außerdem wird die Lichtbrechung in Glas oder anderen durchsichtigen Objekten nicht berechnet.
Benutzt man hingegen Raytracing, kann man Spiegelungen und Brechung realistisch berechnen lassen. Wozu also noch Environment Maps? Vor allen Dingen deswegen, weil sie um ein Vielfaches schneller sind! Insbesondere bei günstiger Objektform und wenn in einer Animation nur die Kamera bewegt wird, lassen sich Spiegelungen und Brechung ohne jeden zusätzlichen Zeitaufwand rendern.
Wie funktionieren Environment Maps?
[Bearbeiten]So wie das Licht gerendert wird, das die Sichtebene erreicht, indem man die Kamera als Standpunkt benutzt, kann das Licht gerendert werden, welches die Oberfläche eines Objektes erreicht (und von dort aus wieder in die Kamera reflektiert wird).
Es werden 6 virtuelle Fotos von der Umgebung des Objektes geschossen, die zu einem Würfel zusammengesetzt werden. Das Objekt befindet sich in der Mitte dieses Würfels. Wenn diese Fotos auf die Oberfläche des Objektes mit den Refl Input Koordinaten aufgebracht werden, erzeugen sie den Eindruck von Spiegelungen.
Aussehen geht vor Realismus
Das Ziel dieser Technik ist nicht die physikalisch exakte Darstellung der Reflexionsgesetze. Das Bild soll glaubhaft aussehen. Unser Auge (bzw. unser Gehirn) benötigt keine Simulation des Lichtweges, man muss es nur davon überzeugen, dass die Szene real ist, indem man die nötige Komplexität erzeugt. CG Bilder fallen wegen ihrer Sterilität auf, nicht wegen physikalischer Unkorrektheiten.
Erzeugung von Environment Maps
[Bearbeiten]Als erstes definieren wir den Standpunkt, von dem aus die Bilder für das Environment Mapping erzeugt werden sollen. Benutzen Sie hierfür ein Empty. Dieses muss an der Stelle positioniert werden, wo sich die an der Oberfläche gespiegelte Kamera befinden würde.
Das ist praktisch nur für ebene Spiegel möglich, aber wenn die Objekte relativ klein und komplex sind (z.B. Kugeln), kann man das Empty einfach nahe dem Zentrum des Objektes positionieren. Eigentlich müsste man ja eine eigene Environment Map für jedes Face eines Objektes erzeugen, aber das ist natürlich zu umständlich.
Das Empty nennen wir env, unter diesem Namen nehmen wir Bezug auf das Objekt in den Environment Map Einstellungen.
Als Beispiel werden wir eine spiegelnde Kugel über einer spiegelnden Ebene erzeugen (Abbildung 2).
Das Empty "env" befindet sich direkt unter der Kamera, im gleichen Abstand von der reflektierenden Ebene. Das ist genau die gespiegelte Position.
Einige Lampen werden hinzugefügt, die Kugel bleibt ohne Material. Verschieben Sie die Ebene auf einen anderen Layer (M-Taste). Da sich in der Voreinstellung alle Objekte auf Layer 1 befinden, verschieben Sie die Ebene auf Layer 2. Das ist deswegen nötig, damit das Empty gleich eine Environment Map ohne die Ebene selbst rendern kann.
Die Ebene bekommt jetzt ein Material mit niedrigen Ref und Spec Werten. Fügen Sie eine Textur in Kanal 2 hinzu. Übernehmen Sie die Einstellungen aus Abbildung 3 für das Material.
Beachten Sie besonders das Refl Mapping (in Map Input) und die Einstellung für Cmir (in Map To). Wir benutzen hier Kanal 2, da wir Kanal 1 später noch brauchen.
Wir wechseln mit F6 in die Texture buttons. Die neu erzeugte Textur bekommt den Texture Type EnvMap. Die rot markierten Einstellungen habe ich verändert. Beachten Sie das Ob: Feld mit dem Namen des Emptys. Die Auflösung mit der die Environment Map gerendert wird, wird mit CubeRes eingestellt. Filter lässt die Reflexion leicht unscharf erscheinen, das funktioniert aber nur, wenn OSA angeschaltet ist.
Und die Einstellung Don't render layer ist wichtig! Die Ebene selbst darf nicht mitgerendert werden, sonst sieht man nichts von der Kugel.
Mit F12 wird das Rendern gestartet. Zunächst werden 6 verschiedene quadratische Bilder gerendert, das ist die Environment Map. Wenn dies beendet ist, wird das endgültige Bild gerendert, die Kugel wird von der Ebene reflektiert (Abbildung 5).
Das ist noch nicht sehr spektakulär, daher fügen Sie bitte einen schönen Welthintergrund hinzu. In das Zentrum der Kugel setzen Sie ein weiteres Empty und verschieben die Kugel auf Layer 3. Nun geben Sie der Kugel Material und EnvMap Textur genauso wie der Ebene, aber diesmal darf Layer 3 nicht gerendert werden (sonst "sieht" das Empty nur das innere der Kugel).
Vor dem Rendern drücken Sie bitte Free Data für die Textur der Ebene. Dann berechnet Blender die Environment Map neu.
Nun werden 12 Bilder berechnet. Das Ergebnis sehen Sie in Abbildung 6. Ich habe die Kameragröße etwas verändert, damit man mehr von den Kugeln sieht.
Aber es gibt offensichtlich noch ein Problem. Die Kugel reflektiert die Ebene, aber die Ebene reflektiert eine graue Kugel. Das ist natürlich so, weil die Environment Map der Ebene vor der Environment Map der Kugel berechnet wird.
Um dieses Problem zu beheben, gehen Sie zum Depth Button im Envmap Panel der Texture buttons. Setzen Sie ihn für beide Texturen auf 1. Damit werden beide Maps zweimal berechnet. Das Ergebnis ist in Abbildung 7 dargestellt.
Einige Wellen
[Bearbeiten]Jetzt kommen wir zum Einsatz für unseren ersten Textur Kanal. Fügen Sie in Kanal 1 eine neue Textur zur Ebene hinzu, Map Input auf Glob, Map To Nor mit einer Intensität von 0.25 (Abbildung 8).
Die neue Textur auf den Typ Stucci einstellen, die Noise Size auf 0.15. Jetzt sieht das Ergebnis aus wie gekräuseltes Wasser (Abbildung 9). Die Bumpmap muss auf dem Kanal vor der Environment Map liegen, da die Texturen nacheinander angewandt werden. Würde man das anders herum machen, wäre die Reflexion durch Wellen gebrochen.
Die Kugel reflektiert auch die Wellen, das kann man hier nur nicht so gut erkennen.
Weitere Einstellungen
[Bearbeiten]Die Environment Maps können gespeichert und mit Hilfe des Load Buttons auch wieder geladen werden. Sie können natürlich ihre eigene Map malen und diese benutzen. Dazu platzieren Sie sechs Bilder in zwei Reihen zu je drei Bildern übereinander (Abbildung 10).
Blender ermöglicht drei Typen von EnvMaps (Abbildung 4).
- Static: Die Map wird nur einmal während einer Animation oder nach dem Laden der Datei berechnet.
- Anim: Die Map wird bei jedem Rendervorgang neu berechnet. Sich bewegende Objekte werden in den spiegelnden Oberflächen richtig dargestellt.
- Load: Eine gespeicherte EnvMap wird geladen. Dies erlaubt das schnellste Rendern.
Wellen animieren
Sie können das Wasser aus dem vorigen Beispiel animieren, wenn Sie ein IPO für die osfX und ofsY Werte der Wellentextur benutzen. Beim Rendern der Animation sehen Sie dann sich bewegende Wellen auf der Oberfläche, wobei sich die Reflexionen entsprechend mitändern.
Die EnvMap der Ebene müssen Sie nur einmal berechnen, wenn sich sonst nichts bewegt. Daher kann sie vom Typ Static sein. Die EnvMap der Kugel dagegen muss vom Typ Anim sein, da sich sonst die Änderungen in den Reflexionen auf dem Wasser nicht widerspiegeln würden.
Wenn die Kamera das einzige sich bewegende Objekt ist, und Sie eine spiegelnde Ebene haben, muss sich das Empty ebenfalls bewegen, d.h. Sie brauchen Anim EnvMaps. Ist das Objekt aber klein, und das Empty sitzt in dessen Zentrum, kann die EnvMap Static sein, sogar wenn das Objekt rotiert (da sich das Empty nicht mitbewegt). Bewegt sich allerdings das Objekt, muss das Empty folgen und die EnvMap muss vom Typ Anim sein.
Zum Schluss noch die anderen Einstellungen:
- Filter: Die Schärfe bzw. Unschärfe der Reflexion wird hier eingestellt (nur wenn OSA an ist).
- Clipsta, ClipEnd: Diese Werte bestimmen den Abstand, in dem Objekte noch "sichtbar" sind.
Die Berechnung der EnvMaps kann global durch den Button EnvMap im Render Panel der Scene Buttons (F10) abgestellt werden.
Fresnel
[Bearbeiten]Blickwinkelabhängige Reflexionen sind auch mit EnvMaps möglich. Im Wesentlichen wird die Reflexion einfach bei direkter Draufsicht ausgeschaltet. Aber bitte die Einschränkung beachten: wir machen hier keinen wirklichen Fresnel Effekt, denn er ist nicht wirklich vom Blickwinkel abhängig, sondern vom Kamerawinkel. Er funktioniert aber wie Fresnel, solange das Objekt weit von der Kamera weg, bzw. klein gegenüber der Kamera ist. Der Blickwinkel darf sich bei einer Kameraeinstellung über das Objekt nur wenig ändern.
In der obigen Einstellung funktioniert das nicht!
Und was ist jetzt mit der Brechung?
[Bearbeiten]Die wird im Abschnitt Solide und hohle Glasgegenstände erklärt.
Links
[Bearbeiten]Die englischsprachige Vorlage dieses Textes
Die Blend-Datei für Abbildung 1