Zunächst etwas Theorie! Sie können diesen Teil überschlagen und zurückkommen, wenn sie
noch Fragen haben sollten.
In den späten 80er und frühen 90er Jahren war Radiosity ein angesagtes Thema im
Bereich der 3D Computergraphik. Viele verschiedene Methoden zur Berechnung wurden
entwickelt, die erfolgreichste Lösung benutzte
(angepasster
Unterteilung). Und diese Methode benutzt Blender. Um das Optimum aus der Blender
Radiosity Methode herausholen zu können, sollte man folgende Prinzipien verstehen:
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.
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:
-
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.
-
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.