Blender Dokumentation: Wie Blender Radiosity berechnet
Bezieht sich auf Blender v2.31
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 sind Drei- oder Vierecke, die in der Lage sind Lichtenergie auszusenden. Dazu muss ihre Reflektivität und/oder der Emit-Wert größer als Null sein. Patches werden mit Lichtenergie aufgeladen, entweder zu Beginn durch den Emit-Wert, oder dadurch, dass sie von Lichtstrahlen getroffen werden. 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 blockiert, auch wenn die Fläche des Patches viel größer ist als das kleine Objekt! Dann muss der Patch unterteilt werden.)
- 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 dargestellten 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.
Links
BearbeitenRadiosity bei Wikipedia
Die englischsprachige Vorlage für diese Übersetzung