Dieses Dokument ist eine Übersicht des ursprünglichen Materialschichten-Arbeitsablaufs, der Materialfunktionen verwendet, um komplexe Ebenenüberblendungen zu erzeugen. Informationen zu der neueren *Materialebenen-Funktion im Materialinstanz-Editor findest du hier.
Materialschichten bietet eine Methode, um ein einzelnes Material zu erstellen, das über eine Reihe von Teilmaterialien (oder Ebenen) verfügt, die du auf der Oberfläche deiner Objekte mit Pro-Pixel-Vorgängen wie Masken platzieren kannst. Sie eignen sich perfekt für die Handhabung komplexer Überblendungen zwischen einmaligen Oberflächenarten. In dem Bild der Raketen unten verwendet die Rakete ganz rechts eine separate Ebene für die Chrom-, Aluminium- und Kupferteile der Rakete. Diese werden auf einer Pro-Pixel-Basis für das gesamte Material überblendet.
Als Funktion sind die Materialschichte eine Erweiterung der Materialfunktionen. Materialfunktionen sind ein eigenständiges Knotennetzwerk, das eine bestimmte Operation vornimmt, wie eine komplexe mathematische Gleichung. Du kannst diese Funktionen dann in beliebig vielen Materialien wiederverwenden. Durch die Knoten [Materialattribute erstellen]designing-visuals-rendering-and-graphics/materials/material-expressions/material-attributes#MakeMaterialAttributes) und Materialattribute auflösen kannst du einen ganzen Materialattributsatz innerhalb einer Materialfunktion definieren. Dann kannst du diese Materialfunktionen in einem Basismaterial aufrufen und mit den Materialebenen-Überblendungsfunktionen eine Überblendung zwischen ihnen erzeugen.
Die Abbildung oben zeigt ein einfaches Chrommaterial, das vollständig in einer Materialfunktion mit dem Knoten Materialattribute erstellen definiert wurde. Du kannst diese Funktion als Ebene in deinem Basismaterial verwenden und sie mit anderen Materialfunktionen (Ebenen) überblenden.
Du musst dir bewusst sein, dass du jede Materialfunktion-Ebene in ein Standard-Basismaterial einfügen musst, das du dann auf statische Meshes anwenden kannst, da Materialfunktionen nicht direkt auf eine Fläche angewendet werden können. Du kannst mit Materialfunktionen so viele Ebenen erstellen, wie du möchtest, und sie beliebig überblenden.
Detailliert sieht der Arbeitsablauf wie folgt aus:
- Erstelle eine neue Materialfunktion und bearbeite das Knotendiagramm wie gewünscht. Diese Funktion fungiert als eine Ebene, wenn du sie in deinem Basismaterial aufrufst.
- Verbinde dein Knotennetzwerk mit einem neuen Materialattribute erstellen-Knoten und verbinde ihn mit dem Funktions-Output.
- Speichere die Materialfunktion.
- Wiederhole diesen Prozess für alle anderen Materialfunktionsebenen, die du erstellen möchtest.
- Erstelle ein neues Material und öffne es im Material-Editor.
- Ziehe deine Materialfunktionen aus dem Inhaltsbrowser in das neue Material, um sie als Ebenen zu verwenden.
- Überblende mehrere Materialfunktionen mit den Materialebenenüberblendung-Funktionen.
Das endgültige Objekt kann jetzt mehrere individuelle Materialien haben, die auf seiner Oberfläche überblendet werden.
Hauptvorteile
Mit Materialschichten kannst du etwas erstellen, das ansonsten ein sehr kompliziertes Material wäre, und es im Hinblick auf die künftige Bearbeitbarkeit viel besser handhaben.
So ist es zum Beispiel möglich, den Effekt von Materialschichten mit einem konventionellen Materialdiagramm (ohne Ebenen oder Funktionen) zu erzielen. Das würde aber komplexe Netzwerke für die Überblendung zwischen verschiedenen Texturen und Werte für jeden Material-Input erfordern. Da die meisten Materialien mehrere Inputs nutzen, würde ein derartiges Material extrem komplex werden.
Sieh dir die Komplexität des folgenden Netzwerks an, das keine Materialebenen verwendet und eine Überblendung eines Chrom- und Kupfereffekts verwendet, wie in der Rakete oben zu sehen.
Ein traditionelles Materialdiagramm ohne Ebenen.
Bild zum Vergrößern anklicken.
Bei Materialschichten ist jeder einzelne Materialtyp in seinem eigenen Knoten enthalten. Damit wird die Überblendung viel einfacher, ebenso wie die Bearbeitung und das Debuggen. Mit den Knoten Materialattribute erstellen* und Materialattribute auflösen** kannst du jede der Materialfunktion-Ebenen direkt verbinden, ohne dir über die Verknüpfung einzelner Eigenschaften Sorgen machen zu müssen.
Das Netzwerk unten erzielt das gleiche Ergebnis wie das oben, aber die Chrom- und Kupfermaterialien sind in ihren eigenen Materialfunktionen modularisiert.
Dies ist das gleiche Material, das Materialfunktionen als Ebenen verwendet.
Bild zum Vergrößern anklicken.
Ein anderer Vorteil des Materialschichten-Ansatzes besteht darin, dass jede Ebene wiederverwendet werden kann, da sie Materialfunktionen verwenden. So kannst du eine Bibliothek mit Materialvorbildern oder Materialien einrichten, die einen Oberflächenbasistyp aus der realen Welt definieren. Du kannst zum Beispiel Ebenen erstellen, die generische Oberflächen wie Aluminium, Stahl, Leder, Kunststoff, Gummi und so weiter darstellen. Dann kannst du sie mit Materialschichten überblenden. Das ist sehr praktisch, wenn du ein detailliertes Objekt, wie zum Beispiel einen Charakter, erstellen möchtest, ohne dass du immense Materialien erstellen musst, um sie separat auf die Oberfläche anzuwenden.
Überblendungsarten
Innerhalb der Materialfunktionen-Liste in der Material-Editor-Palette befindet sich eine Liste verschiedener Materialebenenüberblendung-Funktionen. Diese sollen dir helfen, Materialien zu überblenden, ohne dass dazu jedes Mal komplexe Knotendiagramme neu erstellt werden müssen. Unterschiedliche Arten ermöglichen spezialisierte Überblendungsarten, wie zum Beispiel mit der Möglichkeit, bestimmte Materialmerkmale außer Kraft zu setzen.
| Materialebenenüberblendung-Funktionen | |
|---|---|
| Materialebenenüberblendung_AO | Diese Option erstellt eine Überblendung der Umgebungsverdeckungskarte (AO) über der Fläche, um Reflexionen zu entfernen. |
| Materialebenenüberblendung_Basisfarben-Override | Diese Option ermöglicht das Austauschen der Basisfarbe. |
| Materialebenenüberblendung_Basisfarben-Bruch | Diese Option gibt die Basisfarbe einer eingehenden Materialebene aus. |
| Materialebenenüberblendung_Normalbruch | Diese Option gibt die Normale einer eingehenden Materialebene aus. |
| Materialebenenüberblendung_Decal | Diese Option überblendet einen Decal-Bogen mit dem Material unter Verwendung des zweiten UV-Kanals. |
| Materialebenenüberblendung_Decal_UV3 | Diese Option überblendet einen Decal-Bogen mit dem Material der Materialebene unter Verwendung des dritten UV-Kanals. |
| Materialebenenüberblendung_Emissiv | Diese Option überblendet eine emissive Textur mit der Materialebene. |
| Materialebenenüberblendung_GlobaleNormale | Diese Option überblendet eine normale Textur mit der Materialebene. |
| Materialebenenüberblendung_LightmassErsetzen | Diese Option ersetzt die Basisfarbe in einer Lightmass und ermöglicht Änderungen an den Ergebnissen der indirekten Beleuchtung. |
| Materialebenenüberblendung_RauheitModellieren | Diese Option multipliziert die Rauheit der Materialebene mit einer eingehenden Textur. Damit erzielst du im Allgemeinen ein „fettiges" Aussehen. |
| Materialebenenüberblendung_NormaleÜberblendung | Diese Option überblendet eine normale Textur auf der Oberfläche, aber durch eine Maskentextur kannst du kontrollieren, wo die Normale angezeigt wird. |
| Materialebenenüberblendung_NormaleAbflachen | Diese Option reduziert den Effekt der Normal-Map. |
| Materialebenenüberblendung_Rauheit-Override | Diese Option ersetzt die Rauheittextur einer Materialebene. |
| Materialebenenüberblendung_Einfach | Diese Option bietet eine einfache Linearinterpolation (Lerp)-Überblendungslösung für zwei Materialebenen. Die Normale wird nicht überblendet. Stattdessen wird die Normale des Basismaterials beibehalten. |
| Materialebenenüberblendung_Fleck | Diese Option überblendet das oberste Material als Fleck mit dem Basismaterial, was bedeutet, dass nur die Werte für Basisfarbe und Rauheit des obersten Materials verwendet werden. |
| Materialebenenüberblendung_Standard | Diese Option überblendet alle Attribute von zwei Materialebenen. |
| Materialebenenüberblendung_Farbton | Diese Option ermöglicht eine Tönung einer Materialebene, indem eine Tönungsfarbe und eine Maske zur Kontrolle der Tönungsposition eingegeben werden. Das ist praktisch, um Teiländerungen der Farbe vorzunehmen. |
| Materialebenenüberblendung_AlleKanäleTönen | Diese Option ähnelt der Tönung, sie wirkt sich aber auch auf Spiegelungen aus. Das ist eine Funktion für einen sehr speziellen Fall. Im Allgemeinen wirst du sie nicht verwenden. |
| Materialebenenüberblendung_ObersteNormale | Diese Option überblendet alle Attribute beider Materialien, verwendet aber nur die Normale des obersten Materials. |
Instanziierung von Materialschichten
Da Materialschichten im Grund Materialfunktionen sind, ist für ihre Parametrisierung zur Instanziierung eine gewisse Vorarbeit erforderlich. Um Skalar und Vektorparameter besser nutzen zu können, kannst du einen Funktions-Input-Ausdruck als Teil einer Materialebene erstellen. Dann kannst du einen Parameter vom Material der obersten Ebene mit diesem Input verbinden. Weitere Informationen findest du in der Übersicht Materialfunktionen.
Der Ablauf funktioniert in ungefähr so:
- Materialparameter (Skalarparameter, Vektorparameter usw.)
- Materialebene (Funktion)
- Funktions-Input-Ausdruck
- Ein Netzwerk zur Definition der Materialebene
- Funktions-Output
- Endgültiges Material
Einige hilfreiche Tipps:
- Ersetze alle Parameter durch entsprechend benannte Funktions-Input-Knoten, wenn du deine Materialausdrücke in eine Funktion einfügst, um deine Ebene zu erstellen.
- Verbinde neue Parameterknoten in den Inputs, wenn du deine neue Materialfunktion in ein Material implementierst.
- Du kannst das endgültige Material nun instanziieren. Deine Parameter steuern die entsprechenden Aspekte deiner Ebenen.
- Stelle sicher, dass du Standardwerte für deine Funktions-Inputs bereitstellst. Das beschleunigt den Arbeitsablauf für alle, die keine Änderungen vornehmen müssen.
Warnungen
Auch wenn Materialschichten praktisch für den Umgang mit Konfigurationen mit mehreren Materialien sind, musst du bei ihrer Verwendung vorsichtig sein. Sie können in Bezug auf die Performance sehr kostspielig sein, insbesondere wenn die in den Ebenenfunktionen verwendeten Materialien selbst komplex sind.
Beachte, dass alle deine Ebenen gleichzeitig gerendert und dann überblendet werden. Wenn du zum Beispiel vier Ebenen in einem Material verwendest, muss die Engine für jedes Pixel in deinem Objekt testen, welche der vier überblendet werden und dann alle nicht verwendeten zurückweisen. Diese zusätzliche Berechnung macht das Material leistungsintensiver.
Dein erster Impuls mag darin bestehen, jedes Mal Materialschichten zu verwenden, wenn du bei einem Objekt mehrere Oberflächentypen verwenden möchtest. Zum Beispiel könntest du bei einem Auto eine spezielle Ebene für die Farbe, eine andere für Stahl, Gummi, Glas und so weiter verwenden. Stattdessen ist es effizienter, viele dieser Ebenen auf der geometrischen Ebene zu separieren. Das erzeugt mehr Materialelemente in deinen Objekten, was wiederum die Zeichnen-Calls steigert, aber es ist im Allgemeinen deutlich effizienter. Kurz gesagt: Wenn du mehrere Materialien anstelle von Materialschichten verwenden kannst, solltest du das tun. Wenn du eine Pro-Pixel-Kontrolle darüber benötigst, wo Materialien platziert werden, verwende Materialschichten-Funktionen oder Materialebenen.
Obwohl die Komprimierung mehrerer einzelner Materialien zu einem einzigen die Zeichnen-Calls reduziert, sind die resultierenden Materialschichten im Allgemeinen zu schwer, als dass sie auf Mobilplattformen verwendet werden könnten.