Die Seite Materialdatentypen hat die vier Möglichkeiten aufgezeigt, wie Daten im Material-Editor dargestellt werden. Um Materialien effektiv zu erstellen, muss man nicht nur diese Datentypen kennen, sondern auch wissen, wie man Daten manipuliert und die Art und Weise steuert, wie sich Informationen durch den Materialgraphen bewegen.
Zwei Themen werden in diesem Dokument besprochen.
- Manipulieren von Datentypen: Wie Floats in einem Mehrkanalvektor kombiniert werden und umgekehrt, wie man Informationen aus einem größeren Datentyp isoliert.
- Arithmetik im Materialdiagramm: Regeln und Vorgehensweisen zur Durchführung arithmetischer Operationen in einem Material mit unterschiedlichen Datentypen.
Manipulieren von Datentypen
Nur weil eine Information von einem bestimmten Datentyp stammt, heißt das nicht, dass sie so bleiben muss. Du kannst beispielsweise zwei Skalarparameter (Floats) anhängen oder in einem Zweikanalvektor (Float2) kombinieren, um sie an einen Input weiterzugeben, der Zweikanaldaten erfordert. Umgekehrt kannst du eine ComponentMask verwenden, um eine bestimmte Untergruppe von Kanälen aus einem größeren Vektor zu erhalten.
Die in diesem Abschnitt dokumentierten Materialausdrücke bieten Möglichkeiten, um Daten zu kombinieren oder zu trennen und die Art und Weise zu steuern, wie Informationen durch dein Materialdiagramm fließen.
AppendVector
Der Materialausdruck AppendVector kombiniert die Daten in Input A mit den Daten in Input B und gibt einen Mehrkanalvektor (Float2, Float3 oder Float4) aus. In diesem Beispiel werden zwei Konstanten aneinander gehängt, um einen float2 auszugeben: (1, 2).
Beispiel für einen Anwendungsfall
Der Knoten „Anhängen" ist oft nützlich, wenn du zwei Werte unabhängig voneinander ändern möchtest, aber diese in einen Input geben musst, der Mehrkanaldaten erfordert. Das folgende Diagramm gibt Künstlern die Möglichkeit, die Kachelung oder den UV-Maßstab einer Textur in einer Materialinstanz zu steuern, aber nur gleichmäßig.
Der Mangel in diesem Beispiel ist, dass das Materialdiagramm nur einen Parameter enthält, aber UV-Koordinaten besitzen zwei Kanäle. Mit dieser Lösung kannst du die Breite und Höhe der Textur nicht unabhängig steuern.
Du kannst dies lösen, indem du einen AppendVector verwendest. Erstelle für jede Achse einen separaten Skalarparameter und übergebe sie dann in den Knoten „Anhängen". Der Knoten „Anhängen" kombiniert die beiden Parameter zu einem float2, der dann mit den Texturkoordinaten multipliziert wird.
Da Kachelung X und Kachelung Y separat parametrisiert sind, kannst du nun die Breite und Höhe der Textur unabhängig voneinander steuern.
Anhängereihenfolge
Der Ausdruck AppendVector kombiniert Daten in der Reihenfolge, in der sie an den Knoten angehängt werden. Die Daten im Input B wird immer am Ende der Daten im Input A angehängt. Betrachte die beiden folgenden Bilder.

- Auf der ersten Folie ist das angehängte Ergebnis (0.05, 0.2, 0.8) oder hellblau, wie die Knotenvorschau anzeigt.
- Auf der zweiten Folie ist das angehängte Ergebnis (0.8, 0.05, 0.2) oder rosarot, wie die Knotenvorschau anzeigt.
AppendMany
AppendMany ist eine Materialfunktion, die wie der Ausdruck AppendVector funktioniert, kann aber bis zu vier Fließkomma-/Skalarwerte in einem Mehrkanalvektor kombinieren.
Ein zusätzlicher Vorteil der Funktion AppendMany ist, dass sie über drei verschiedene Output-Pins verfügt. Dies ermöglicht dir den Zugriff auf einige oder alle angehängten Kanäle, je nachdem, was du in einer bestimmten Situation benötigst.
Der Knoten AppendMany akzeptiert nur Fließkomma-/Skalarwerte an seinen Inputs. Wenn du einen float2, float3 oder float4 am den Knoten AppendMany übergibst, werden alle, bis auf den ersten Wert verworfen.
Komponentenmaske
Der Materialausdruck Komponentenmaske dient dem entgegengesetzten Zweck der oben dokumentierten Knoten vom Typ „Hinzufügen". Anstatt Daten zu kombinieren, bietet eine Komponentenmaske eine Möglichkeit, Daten in seine Komponententeile oder Kanäle zu trennen.
A Komponentenmaske funktioniert wie ein Gate. Für alle mit dem Input verbundenen Daten kannst du genau wählen, welche Kanäle an den Output durchgereicht werden. Das folgende Bild zeigt einen Constant4Vector, der die Werte (0, 1, 0.7, 0.5) enthält. Wenn du den Knoten „Maske" im Diagramm auswählst, werden im Detail-Panel vier Kontrollkästchen angezeigt.
Diese Kontrollkästchen legen fest, welche Kanäle der Knoten ausgibt. Derzeit sind keine ausgewählt, deshalb gibt der Knoten „Maske" keine Informationen aus. Wenn du versuchst, ihn mit einem Downstream-Input zu verbinden, zeigt der Knoten einen Fehler an.
Diese Kontrollkästchen geben dir eine Möglichkeit, Informationen herauszufiltern und nur die Kanäle zu verwenden, die du benötigst.
Angenommen, du möchtest den Wert im A-Kanal verwenden, um die Opazität eines Materials zu steuern. Du würdest den A-Kanal aktivieren, indem du das Kontrollkästchen aktivierst, und dann den Output-Pin der Maske mit dem Opazitäts-Input verbinden.
Die Komponentenmaske verwirft die R-, G- und B-Kanäle, da sie nicht aktiviert sind, und gibt nur den Wert im A-Kanal aus – in diesem Fall 0.5.
Materialdiagrammarithmetik
Die zweite wichtige Methode zum Manipulieren von Daten in einem Materialdiagramm geschieht über mathematische Operationen. Alle allgemeinen arithmetischen Operationen sind im Material-Editor verfügbar.
Die vier arithmetischen Materialausdrücke. Weitere Informationen findest du auf der Seite „Materialausdrücke".
Der grundlegende Zweck der arithmetischen Knoten sollte relativ selbstverständlich sein. Wenn du beispielsweise konstante Werte von 0.3 und 0.2 mit einem Knoten Addieren verbindest, berechnet der Knoten „Addieren" 0.3 + 0.2 und gibt einen Wert von 0.5 aus. Arithmetik zwischen zwei konstanten Werten ist einfach und unkompliziert.
Jedoch bewegen sich Informationen nicht immer als individuelle Fließkommawerte durch das Materialdiagramm, wie auf der Seite „Datentypen" demonstriert. Daher ist es wichtig, die Regeln und Vorgehensweisen zur Durchführung arithmetischer Operationen in einem Material mit unterschiedlichen Datentypen zu verstehen. Es gibt zwei große Problembereiche.
- Nicht alle Datentypen sind für arithmetische Operationen untereinander kompatibel.
- Arithmetische Operationen funktionieren abhängig von den beteiligten Datentypen unterschiedlich.
Kompatible und Inkompatible Datentypen
Das Beispiel oben hat eine einfache Additionsoperation zwischen zwei Fließkommawerten, oder 0.3 + 0.2 = 0.5, gezeigt. Diese Operation funktioniert, da beide Werte vom gleichen Datentyp sind. Was passiert aber, wenn einem der Inputs ein anderer Datentyp übergeben wird? Diese drei Punkte fassen die Kompatibilität zwischen Datentypen zusammen:
-
Arithmetik zwischen gleichwertigen Datentypen ist immer zulässig. Zum Beispiel gibt float2 + float2 einen neuen float2 zurück.
-
Arithmetik zwischen einer Fließkommazahl und einer größeren Fließkommazahl ist zulässig. Zum Beispiel gibt float + float3 einen neuen float3 zurück.
-
Arithmetik zwischen zwei ungleichwertigen Datentypen ist unzulässig. Zum Beispiel ist float2 + float3 unzulässig und gibt einen Fehler zurück.
Mit anderen Worten: Arithmetik mit zwei verschiedenen Datentypen ist möglich, aber nur, wenn einer der Datentypen eine Fließkommazahl ist. In dem folgenden Diagramm ist die Operation 0.3 + (1,2) zulässig. Die Fließkommazahl wird zu beiden Werten im Float2 addiert und das Ergebnis ist ein neuer Float2 mit den Werten 1.3, 2.3).
Arithmetik zwischen den ungleichwertigen float2-, float3- oder float4-Daten gibt einen Fehler zurück.
Die folgende Tabelle fasst die Kompatibilität der Datentypen für Materialdiagrammarithmetik zusammen.
| Datentyp | Kompatible Datentypen für die Arithmetik |
|---|---|
| Float | Alle |
| Float2 | Float, Float2 |
| Float3 | Float, Float3 |
| Float4 | Float, Float4 |
Arithmetische Regeln zwischen Datentypen
Es ist außerdem notwendig zu verstehen, wie arithmetische Berechnungen zwischen unterschiedlichen Datentypen durchgeführt werden. Die beiden folgenden Szenarien demonstrieren, wie die Arithmetik funktioniert, wenn ein oder beide Datentypen größer als ein Float sind.
Arithmetik zwischen gleichwertigen Datentypen
Wenn Arithmetik zwischen gleichwertigen Datentypen (beispielsweise Float2 + Float2) stattfindet, wird jeder Wert in Input A durch den entsprechenden Wert in Input B verarbeitet. Das folgende Beispiel zeigt die Addition zwischen zwei Ausdrücken vom Typ Constant2Vector.
In der Langform sind es zwei getrennte Additionsoperationen. Die ersten Werte in jedem Knoten werden addiert: (1 + 2). Dann werden die zweiten Werte in jedem Knoten addiert: (3 + 3). Das Ergebnis ist ein neuer Float2: (2, 6).
Das folgende Diagramm zeigt ein arithmetisches Beispiel für jeden der vier Datentypen.
| Input A, Input B | Input-Daten | Math. Notation | Resultierende Daten |
|---|---|---|---|
| Float, Float | (4) / (2) | 4 / 2 = 2 | 8 |
| Float2, Float2 | (1, 3) + (2, 3) | (1 + 2), (3 + 3) | (3, 6) |
| Float3, Float3 | (3, 2, 0.5) * (2, 1, 2) | (3 x 2), (2 x 1), (0.5 x 2) | (6, 2, 1) |
| Float4, Float4 | (2, 2, 2, 3) - (1, 1, 2, 2,) | (2 - 1), (2 - 1), (2 - 2), (3 - 2) | (1, 1, 0, 1) |
- Arithmetik zwischen einem Float und einem Vektor.
Wenn Arithmetik zwischen einem Float und einem größeren Datentyp stattfindet, wird der Float für jede separate Berechnung wiederholt verwendet. In folgendem Bild werden eine Konstante und ein Constant3Vector multipliziert.
Wie in der Abbildung gezeigt, wird der Wert in der Konstanten mit jedem Wert im Constant3Vector multipliziert. Es gibt drei separate Multiplikationsausdrücke: (2 3), (2 1) und (2 *2). Das Produkt ist ein Float3: (6, 2, 4).
Ob sich der Float in Input A oder Input B befindet, spielt bei der Multiplikation und Addition keine Rolle, wohl aber bei der Division und Subtraktion.
Im Bild oben wird der Wert in der Konstanten (2) von jedem Wert im Constant3Vector (6, 4, 3) subtrahiert. Ausgeschrieben in mathematischer Notation: (6 – 2), (4 – 2), (3 – 2). Der resultierende Float3 ist (4, 2, 1).
Wenn du Reihenfolge des Inputs umkehrst, bekommst du andere Ergebnisse.
Da der Float nun die oberste Zahl im Subtraktionskonten ist, wird jede arithmetische Operation invertiert: (2 - 6), (2 - 4), (2 - 3). Der resultierende Float3 ist (-4, -2, -1).
Zusammenfassung
Die Konzepte und Techniken auf dieser Seite sind eine Schlüsselkomponente der meisten Materialdiagrammlogiken, die du zum Erstellen von Materialien verwenden wirst. Die unten verlinkten Referenzseiten können dir dabei helfen, dein Verständnis für mathematische Operationen und Datenmanipulation im Material-Editor zu verbessern.