From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.
Warning
This page is old, so if you don't mind reading in English these are more up-to-date: Doc:Manual/Lighting/Radiosity, Doc:Manual/Lighting/Radiosity/Rendering, Doc:Manual/Lighting/Radiosity/Baking


Radiosity rendern

Wie Blender Radiosity berechnet

Zunächst etwas Theorie! Sie können diesen Teil überschlagen und zurückkommen, wenn sie noch Fragen haben sollten.

In den späten 80'er und frühen 90'er Jahren war Radiosity ein angesagtes Thema im Bereich der 3D Computergraphik. Viele verschiedene Methoden zur Berechnung wurden entwickelt, die erfolgreichste Lösung benutzte „progressive refinement“ (fortschreitende Verfeinerung) zusammen mit „adaptive subdivision“ (angepasster Unterteilung). Und diese Methode benutzt Blender. Um das Optimum aus der Blender Radiosity Methode herausholen zu können, sollte man folgende Prinzipien verstehen:

Finite Elemente Methode 

Viele Computergraphik oder Simulationsmethoden vereinfachen die Wirklichkeit mit der Methode der „finiten Elemente“. Um eine ansprechende (oder sogar wissenschaftlich richtige) Lösung zu erhalten, ist es nicht immer notwendig den Lichtweg auf molekularer Ebene zu betrachten. Stattdessen wird das Problem auf eine endliche (finite) Anzahl von repraesentativen und gut zu berechnenden Elementen reduziert. Normalerweise konvergieren diese Systeme schnell in eine stabile und verlässliche Lösung. Die Radiosity Methode ist ein typisches Beispiel einer finiten Elemente Methode. Jedes „face“ wird als ein finites Element betrachtet, und die Lichtemission als ganzes berechnet.

Patches und Elemente 

Bei der Radiosity Berechnung wird zwischen zwei Typen von Oberflächen (Faces) unterschieden:

  • Patches. Das sind Drei- oder Vierecke, die in der Lage sind Energie auszusenden. Um eine schnelle Lösung berechnen zu können, sollte man so wenig Patches wie möglich in der Szene haben. Um das Tempo zu erhöhen wird die Emission so berechnet, als wenn sie nur vom Zentrum des Patches ausgeht. Das Patch muss dann klein genug sein, eine realistische Energieverteilung zu ermöglichen. (Es ist beispielsweise so, dass ein kleines Objekt über dem Zentrum des Patches dieses vollständig blokiert, auch wenn die Fläche des Patches viel größer ist als das kleine Objekt! Dann muss der Patch unterteilt werden.)
  • Elemente: Elemente sind Drei- oder Vierecke welche Energie erhalten. Jedes Element ist einem Patch zugeordnet, Patches sind in mehrere kleine Elemente aufgeteilt. Wenn ein Element Energie empfängt, wird ein Teil davon absorbiert (je nach Farbe). Die restliche Energie wird dem Patch zugeführt, und von dort wieder abgestrahlt. Elemente sind die dargstellten Oberflächen, daher ist es wichtig, dass diese so klein wie möglich sind. Nur so können fein abgestufte Schattengrenzen und Lichtverläufe errechnet werden.
Progressive Refinement (fortschreitende Verfeinerung) 

Bei dieser Methode werden zunächst alle verfügbaren Patches untersucht. Das am stärksten „aufgeladene“ Patch schießt nun seine Energie in die Umgebung. Die anderen Elemente erhalten diese Energie, und fügen sie ihrer eigenen Energie hinzu. Dann beginnt der Prozess von vorne. Dies wird solange fortgesetzt, bis keine Energie mehr irgendwo empfangen wird, oder bis die unverbrauchte Energie einen bestimmten Wert erreicht hat.

Das Hemi-Cube Verfahren 

Mit Hilfe von „Hemicubes“ (Halbwürfeln) wird berechnet, wieviel Energie jedes Patch an ein Element abstrahlt. Jeder Hemicube besteht aus fünf kleinen Bildern der Umgebung, deren Zentrum im Patch Zentrum liegt. Für jedes Pixel dieser Bilder wird ein bestimmtes Element farbkodiert und die transmittierte Energie berechnet. Insbesondere mit Hilfe spezieller Hardware kann das Hemi-Cube Verfahren deutlich beschleunigt werden. In Blender wird die Berechnung allerdings in Software durchgeführt. Diese Methode ist eine Vereinfachung der richtigen Radiosity Formel (der Form-Faktor Berechnung). Deshalb ist die Auflösung des Hemicubes – also die Anzahl an Pixeln in seinen Bildern – immer nur eine Annäherung. Um Antialiasing Fehler zu vermeiden, muss diese Auflösung sorgfältig gewählt werden.

Adaptive Subdivision (angepasste Unterteilung) 

Die Größe der Patches und Elemente in einem Mesh bestimmen die Qualität der Radiosity Lösung. Deshalb wurden Methoden zur automatischen Unterteilung (Subdivision) in optimaler Größe der Patches und Elemente entwickelt. Blender besitzt zwei automatische Subdividing Methoden:

1. Subdividing der emittierenden Patches. Es wird Lichtenergie in die Umgebung geschossen, und der resultierende Hemicube Wert mit dem mathematisch korrekten Formfaktor verglichen. Dadurch kann bestimmt werden, ob der Patch feiner unterteilt werden muss. Dadurch werden die Patches kleiner, die Lösungszeit länger, aber das Ergebnis realistischer.
2. Subdividing der empfangenden Elemente. Wenn innerhalb eines Patches sehr starke Energieunterschiede (Gradienten) zwischen den Elementen gefunden werden, werden die Elemente dieses Patches einmal unterteilt. Das führt zu kleineren Elementen und einer längeren Lösungszeit, aber einer größeren Detailliertheit.
Darstellung und Nachbearbeitung 

Das Subdividing von Elementen in Blender ist „ausgewogen“, d.h. jedes Element ist höchstens 1-mal stärker subdivided als seine Nachbarn. Das ist wichtig, um beim Gouraud-Shading eine ansprechende und richtige Darstellung der Radiosity Lösung zu erhalten. Normalerweise besteht die Lösung aus tausenden kleiner Elemente. Wenn man diese filtert und doppelte Elemente entfernt, kann die Anzahl an Elementen drastisch reduziert werden, ohne die Qualität der Lösung zu verschlechtern. Blender speichert die Energiewerte als Gleitkommazahlen. Durch die Änderung der Multiply und Gamma-Einstellungen können daher extreme Beleuchtungen erreicht werden.

Radiosity zum Modellieren 

Als letzter Schritt können die Meshes durch die Radiosity Lösung ersetzt werden (Button Replace Meshes). Die Vertexfarben werden dann von Gleitkommadarstellung in die üblichen 24-bit RGB-Farben konvertiert. Die alten Meshes werden gelöscht und durch die neuen Meshes ersetzt. Mit Free Data können die Radiosity Daten gelöscht werden. Die neuen Objekte erhalten das Standard Material und können sofort gerendert werden. Zwei Einstellungen im Material sind wichtig, wenn man mit Vertexfarben arbeitet:

VCol Paint. Wenn diese Option eingeschaltet ist, werden die normalen RGB-Farben durch die Vertexfarben ersetzt. Jetzt müssen Lampen eingesetzt werden, um die Radiosityfarben zu sehen. Wie sonst auch kann man mit Licht und Schatten arbeiten, und hat trotzdem den Radiosity „look“.
VCol Light. Die Vertexfarben werden beim Rendern zum Licht addiert. Auch ohne Lampen kann man dieses Ergebnis sehen. Wenn diese Option aktiviert ist, werden die Vertexfarben mit den RGB-Farben multipliziert. Damit kann man die Menge an „Radiosity-Licht“ im Endergebnis beeinflussen.

Die Radiosityeinstellungen werden in einem Datablock gespeichert, so wie alles andere in Blender. Jeder Datablock ist einer Szene zugeordnet, und jede Szene kann eigene Radiosityeinstellungen besitzen. Daher kann man komplexe Umgebungen in einzelne Szenen mit je eigenen Radiosityeinstellungen aufteilen.


Radiosity rendern

Angenommen Sie haben eine Szene erstellt, und wollen diese mit Radiosity Rendering berechnen lassen. Als erstes muss man verstehen, dass bei Radiosity keine Lampen notwendig sind. Meshes, deren Materialeinstellungen einen Emit-Wert größer Null haben, dienen als Lichtquellen.

Es ist nicht schwer eine Testszene zu bauen, wie sie in der Abbildung Die Szene für den Radiosity Test gezeigt wird. Benutzen Sie einen großen Würfel für den Raum und weisen den Seiten verschiedene Materialien zu. Dann fügen Sie zwei kleine Würfel hinzu, der eine wird in Z-Richtung verlängert und verschmälert. Eine Ebene mit einem Emit-Wert ungleich Null (ca. 0,3) kommt an die Decke, um eine ausgedehnte Lichtquelle zu simulieren. Die Würfelfläche, die der Kamera zugewiesen ist, bitte löschen (sonst sieht man den Würfel nur von außen).

Materialien werden wie üblich zugewiesen. Die RGB-Farbe des Materials bestimmt die Lichtfarbe. Der Emit-Wert bestimmt, ob ein Patch zu Beginn der Berechnung „aufgeladen“ ist. Der Emit-Wert multipliziert mit der Fläche des Patches ergibt den Anfangswert an vorhandener Lichtenergie. Der Amb-Wert bestimmt beim Radiosity rendern die Menge an Energie, die ein Material empfängt.

Emittierende Flächen
Überprüfen Sie die Anzahl an „emittors“ (sic!) auf der Konsole. Ist diese Null, kann nichts Interessantes geschehen. Man benötigt zumindest eine emittierende Fläche, damit das Licht angeschaltet ist und eine Lösung berechnet werden kann. Wenn die Helligkeit einer Fläche zu gering ist, erhöhen Sie den Amb-Wert.


Die Szene für den Radiosity Test.

Beim Erstellen eines Materials sollte man sich vergewissern, dass für jedes Material der Radio-Button im Shader-Panel der Material-Buttons gedrückt ist (Radiosity fähiges Material).

Radiosity fähiges Material im Shader-Panel der Material-Buttons.


Bitte beachten Sie: die Richtung der Lichtabgabe ist durch die Richtung der Flächennormalen bestimmt. Die Normale der lichtemittierenden Fläche muss nach unten, in den Raum hineinzeigen, die Flächennormalen des äußeren Würfels (des Raumes) müssen nach innen zeigen, also müssen sie jetzt „geflipt“ werden. Dazu den äußeren Würfel markieren, in den Edit-Modus schalten und unter Mesh Tools Flip Normal klicken. Um sich die Normalen anzeigen zu lassen, kann man unter Mesh Tools 1 Draw Normals einschalten.

Jetzt auf den Radiosity-Button Manual-Part-XII-RadButton.png klicken. Dieser wird sichtbar, wenn Sie die Shading-Buttons ausgewählt haben. Hier gibt es zwei Panel (Radiosity Buttons für das Radiosity Rendern.):

In Radio Render nimmt man die Einstellungen vor, wenn man Radiosity als Renderwerkzeug einsetzen will (so wie wir jetzt). Unter Radio Tool nimmt man die Einstellungen vor, wenn man Radiosity als Werkzeug zur Modellierung einsetzen will (das wird im nächsten Abschnitt behandelt).

Radiosity Buttons für das Radiosity Rendern.

Die Bedeutung der einzelnen Regler:

  • Hemires: Hemicube resolution; die Auflösung der farbkodierten Bilder die benutzt werden, um diejenigen Flächen zu finden welche von einem aufgeladenen Patch sichtbar sind. Diese Flächen erhalten Lichtenergie. Hemicubes werden nicht gespeichert, werden aber jedesmal für jeden aufgeladenen Patch neu berechnet. Dieser Wert bestimmt die Radiosity Qualität und trägt wesentlich zur Renderzeit bei.
  • Max Iterations: Die Maximale Anzahl an Radiosity Iterationen. Wenn es auf Null gesetzt ist, wird die Berechnung so lange fortfahren, bis das Konvergenz-Kriterium erreicht ist (unter Umständen viele 1000). Es wird empfohlen, Max Iterations auf eine von Null verschiedene Anzahl zu setzen, normalerweise größer als 100. Insbesondere bei verschachtelten Räumen kann es viele Iterationsschritte dauern, bis das Licht "um die Ecke" geleuchtet hat.
  • Mult:, Gamma: Der Farbraum der Radiosity Lösung ist viel genauer als der übliche 24 Bit RGB Farbraum. Wenn Elemente in Flächen konvertiert werden, werden ihre Energiewerte unter Benutzung der Mult und Gamma Werte in eine RGB-Farbe konvertiert. Mult multipliziert den Energiewert, mit Gamma kann der Kontrast geändert werden.
  • Convergence: Wenn die Menge an unverbrauchter Energie in einer Szene kleiner ist als dieser Wert, hört die Berechnung auf. Die Anfangsenergie wird mit der Fläche der Patches multipliziert. Während jeder Iteration wird etwas Energie absorbiert oder verschwindet, wenn es sich nicht um einen geschlossenen Raum handelt. Im Standardkoordinatensystem von Blender hat ein typischer Emitter (wie im Beispiel) eine relativ kleine Fläche. Daher wird der Convergence Wert vor dem Testen durch den Faktor 1000 geteilt.

Stellen Sie Max Iterations: auf 100 und wechseln Sie in die Render-Buttons (F10). Lokalisieren Sie den Radio Button (Radiosity in den Render Buttons anschalten.) im Render Panel und stellen Sie ihn an. Jetzt mit (F12) ein Bild rendern lassen.

Radiosity in den Render Buttons anschalten.

Das Rendern dauert länger als sonst, außerdem sieht man einen Zähler laufen (die Anzahl der Iterationen). Das Ergebnis ist noch ziemlich schlecht (Radiosity rendering mit groben Netzen, links), denn die Auflösung der Meshes wird nicht automatisch verfeinert. Das machen wir jetzt von Hand.

Wählen Sie die Meshes eins nach dem anderen aus, und subdividen Sie diese im Editmodus mindestens drei mal. Der Raum sollte sogar vier mal subdivided werden, da er größer ist als die anderen Meshes. Den Max Iterations Wert etwas erhöhen, so auf 300 oder mehr. Wieder rendern (F12). Jetzt dauert das Rendern etwas länger (ca. die dreifache Zeit), aber das Ergebnis ist viel schöner, mit weichen Schatten und colour leakage. (Radiosity rendering mit feinen Netzen, rechts).


Tip
Subdivision Surfaces
Das gleiche Ergebnis erhält man, wenn man SubSurfaces benutzt. Dann braucht man noch nicht einmal die Geometrie zu verändern.


Radiosity rendering mit groben (links) und feinen Netzen (rechts).
Hinweise
Beim Radiosity Rendern verhält sich Blender wie sonst auch, Texturen, Kurven, Oberflächen und auch mit Dupliframes erstellt Objekte werden normal behandelt. Der Specularity-Wert wird ignoriert. Andere Lichtquellen funktionieren wie gewöhnlich, werden aber nicht in die Radiosity Berechnung mit einbezogen. Wollen Sie Licht durch ein Fenster scheinen lassen, und damit z.B. einen Innenraum beleuchten, müssen Sie beim Radiosity Rendern für das Fenster auf dem Shaders Panel den Radio Button ausschalten. Das funktioniert beim Radiosity Modellieren nicht. Dort müssen Sie das Fenster von Collect Meshes ausnehmen.