Beim Erstellen von 3D-Assets wirst du möglicherweise feststellen, dass du verschiedene Oberflächenarten innerhalb des gleichen Materials definieren musst. Eine einfache und günstige Methode dazu ist die Verwendung einer Texturmaske, die definiert, welche Teile einer Oberfläche von welchem Abschnitt des Materials betroffen sein sollen.
Dieses Tutorial deckt ab, wie du die Texturmaskierung in den Unreal Engine-Materialien verwenden kannst.
Texturmasken
Eine Texturmaske ist eine Graustufentextur oder ein einzelner Kanal (R, G, B oder A) einer Textur, mit der der Bereich eines Effekts innerhalb eines Materials begrenzt wird.
Masken sind häufig in einem einzelnen Kanal einer anderen Textur enthalten, wie zum Beispiel der Alpha-Kanal der Streu- oder Normal-Map. In anderen Fällen enthält eine einzelne Bilddatei häufig die Masken „Rauheit“, „Metallisch“ und „Umgebungsverdeckung“, die jeweils einen einzelnen Kanal belegen.
Das wird als Channel-Packing bezeichnet und ist eine gute Methode zur Verbesserung der Materialleistung durch die Reduzierung der Anzahl Texturproben, die von dem Material benötigt werden. Technisch gesehen kann jeder Kanal jeder Textur als Texturmaske angesehen und als solche verwendet werden.
Hier sehen Sie ein Beispiel dafür, wie die Texturmaske für das statische Mesh SM_Chair aus dem Starter-Inhalt aussieht.
Diese Bilddatei enthält sogar eine andere Schwarzweiß-Maske in jedem der vier Farbkanäle (RGBA).
Erstellen einer Texturmaske
Du kannst eine Texturmaske in jedem Programm zur 2D-Bildbearbeitung erstellen. Du kannst auch Masken direkt aus der Geometrie in deinem Primärprogramm für die Inhaltserstellung baken oder mit einem speziellen Texturierungs-Werkzeug wie Marmoset Toolbag, Xnormal oder Substance Painter/Designer.
Wenn du Masken manuell erstellst, beginnst du normalerweise mit einem Bild, das das UV-Layout deines Mesh zeigt. In diesem Beispiel besteht der Zweck darin, die Sitzpolster zu maskieren. Die entsprechenden UVs sind in dem folgenden Bild hervorgehoben. Um einen bestimmten Teil des Modells zu maskieren, musst du diesen Bereich des Bildes reinweiß malen, während du alle anderen Bereiche schwarz belässt.
Wie oben gezeigt kannst du so spezifische Oberflächeneigenschaften auf den maskierten Bereich anwenden. In diesem Fall wird die Maske verwendet, um den Kissen eine orangene Farbe zu geben.
Beim Erstellen einer Texturmaske solltest du immer entweder Reinschwarz oder Reinweiß und nie Farbinformationen verwenden. Die Verwendung eines anderen Farbtyps könnte zu merkwürdigen Artefakten führen, wenn die Maske in Unreal verwendet wird.
Exportieren einer Texturmaske
Wenn du deine Maskentextur gemalt hast, kannst du sie entweder als einzelnes Bild exportieren oder mehrere Masken in den Kanäle R, G, B und A eines einzelnen Bildes paketieren und dies exportieren. Das wird im Allgemeinen als RGB-Channel-Packing bezeichnet und ist die bevorzugte Methode zum Erstellen von Masken, da es deutlich mehr Performance und Speicherersparnis mit nur wenig zusätzlicher Arbeit bietet.
Wenn du etwas in den Alpha-Kanal einer Textur packst, musst du sicherstellen, dass du daran denkst, den Alpha-Export in der von dir verwendete 2D-Bildbearbeitungssoftware zu aktivieren. Andernfalls besteht die Gefahr, dass der Alpha-Kanal nicht mit der Textur exportiert wird.
Verwendung von Texturmasken
Du kannst Maskentexturen im Unreal-Material-Editor auf verschiedene Arten verwenden. Gängige Verwendungen umfassen die Definition einer emissiven Lichtquelle, die Definition, welche Teile eines Mesh metallisch oder nicht metallisch sind, oder die Zuordnung unterschiedlicher Farben zu unterschiedlichen Teilen eines Modells, wie in dem Stuhl-Beispiel.
Im folgenden Abschnitt werden einige der gängigsten Methoden zur Verwendung der Texturmaskierung in Unreal Engine veranschaulicht.
Emissive Maskierung
Eine der gängigsten Verwendung für eine Maskentextur ist die Steuerung der emissiven Abschnitte eines Materials. Dazu wird im Allgemeinen zuerst eine emissive Maskentextur erstellt, die Reinweiß verwendet, um die Abschnitte des Materials zu definieren, die Licht ausstrahlen sollen. Eine emissive Maske wird normalerweise von zwei Parametern begleitet:
Um die Farbe der Lichtausstrahlung zu ändern, können Sie die emissive Maske mit einer Farbe multiplizieren, die durch einen Vektorparameter definiert wird.
Um die Intensität des emissiven Lichts zu ändern, können Sie es mit einem Skalarparameter multiplizieren. Erhöhe den Wert im Skalarparameter, um die Helligkeit der Ausstrahlung zu erhöhen.
Die vier in dem folgenden Diagramm hervorgehobenen Knoten zeigen eine emissive Maske, die mit den Parametern multipliziert wird, die die Farbe und Helligkeit des Lichts steuern. Die Kugel strahlt Licht nur in den Bereichen aus, die den weißen Teilen der emissiven Maske entsprechen. Der Rest der Kugel zeigt die Basisfarbentextur.
Materialmaskierung
Eine zweite gängige Verwendung der Texturmasken ist die Speicherung verschiedener Texturinformationen innerhalb der einzelnen R-, G-, B- und A-Kanäle. Das Material des statischen Mesh SM_Chair aus dem Starter-Inhalt ist ein perfektes Beispiel für diese Technik.
Sie finden SM_Chair und alle Inhalte, die dazu gehören, indem Sie zuerst den Ordner Starter-Inhalt im Inhaltsbrowser auswählen und dann „chair“ in das Suchfeld eingeben. Damit werden alle Inhalte angezeigt, die sich auf den Stuhl beziehen. Wenn du den Stuhl nicht siehst, hast du möglicherweise den Starter-Inhalt nicht in dein Projekt aufgenommen. Um das zu beheben, müssen Sie entweder ein neues Projekt erstellen oder den Stuhlinhalt mit dem Werkzeug zum Migrieren von Assets von einem anderen Projekt verschieben. in dieses verschieben.
Wenn wir das Stuhlmaterial M_Chair öffnen, sehen wir ein perfektes Beispiel eines Textur-Mapping in Aktion.
In diesem Material werden mit der Maskentextur T_Chair_ bestimmte Oberflächeneigenschaften den unterschiedlichen Bereichen des Mesh zugeordnet. Die Texturmaske hilft zu definieren, welche Abschnitte metallisch oder nicht metallisch sind, und wird auch genutzt, um den verschiedenen Stuhlteilen verschiedene Rauheiten und Farbwerte zuzuweisen.
In der folgenden Abbildung siehst du eine Aufgliederung, wie jeder Kanal in der Maskentextur verwendet wird. Auf der linken Seite befindet sich ein zusammengesetztes RGB-Bild bzw. wie das Bild aussehen würde, wenn man es als Textur anzeigen würde. Die mittlere Spalte zeigt die schwarzweißen Masken, die in jedem Farbkanal (R, G, B, A von oben nach unten) enthalten sind. Die Abbildungen ganz rechts zeigen, auf welchen Teil des Stuhls sich die Masken beziehen. Die weißen Teile des Stuhls entsprechen dem weißen Abschnitt der Maske.
Dies ist eine Aufgliederung, die zeigt, welche Informationsarten in dem jeweiligen Kanal der Stuhlmaskentextur gespeichert sind.
Roter Kanal: Informationen zur Umgebungsverdeckung. In dem Material werden sie verwendet, um subtile Kontaktschatten dort zu ergänzen, wo zwei Oberflächen aufeinandertreffen.
Grüner Kanal: Metallische Maske. In dem Material wird dies zur Definition verwendet, welche Teile metallisch sein sollen. Er wird außerdem verwendet, um zu definieren, welche Farbe das Metall haben soll.
Blauer Kanal: Nicht metallische Maske. In dem Material wird dies zur Definition verwendet, welche Teile nicht metallisch sind. Diese Maske hilft auch bei der Definition der Farbe der nicht metallischen Teile.
Alpha-Kanal: Gesamtobjekt-Maske. Dieser wird derzeit nicht von dem Material verwendet.
Wenn alle zusammengesetzt sind, sieht der Stuhl in einem Unreal-Level so aus:
Tipps und Tricks zur Maskierung
Die Texturmaskierung ist ein leistungsstarkes Werkzeug, insbesondere in Kombination mit anderen Werkzeugen von Unreal Engine. Im folgenden Abschnitt findest du einige Tipps und Tricks, um die Texturmaskierung in deiner Arbeit optimal zu nutzen.
Texturmaskierung und Material separat
Die Verwendung von Texturmaskierung und Materialinstanzen zusammen ist eine gute Methode, um nahezu endlose Varianz für alle Assets zu bieten. Du kannst zum Beispiel mit einer Texturmaske definieren, welche Bereiche bestimmte Eigenschaften haben sollen (z. B. Farbe), und dann andere Materialinstanzen verwenden, um diese Eigenschaften im Instanz-Editor anzupassen. Hier erfahren Sie mehr über die Materialinstanziierung.
Wenn Materialmasken zusammen mit der Materialinstanzierung verwendet werden, können Künstler schnell und einfach die Farbe und andere Werte innerhalb des Materials ändern. Dieses Verfahren produziert extrem anpassbare Assets, wie bei dem SM_Chair in der Abbildung oben zu sehen.
Maskierung und Kanalartefakte
Aufgrund einer Eigenart von DirectX bietet der grüne Kanal einer Textur häufig die beste Komprimierung. Wenn bei einer deiner Masken starke Komprimierungsartefakte auftreten, solltest du zuerst versuchen, die Informationen in dem grünen Kanal des Bildes zu platzieren, um zu sehen, ob das hilft. Wenn sich das Problem dadurch nicht beheben lässt, kannst du den Alpha-Kanal zur Speicherung der Maske verwenden.
Sei vorsichtig, wenn du versuchst, Maskeninformationen im Alpha-Kanal einer Textur zu speichern. Das Hinzufügen eines Alpha-Kanals zu einer Textur steigert stark den Speicherbedarf dieser Textur. Wenn du das übertreibst, verlierst du schnell alle Einsparungen, die du durch das Paketieren verschiedener Masken in den RGB-Kanälen der Textur erzielt hast.
sRGB- und Maskentexturen
Wenn mehre Maskentexturen in einer einzelnen Textur paketiert werden, solltest du sRGB im Textur-Editor deaktivieren, da bei Masken keine Gammakorrektur durchgeführt werden sollte.
Wenn du sRGB für eine Textur deaktivierst, die zuvor als Probe in einem Material verwendet wurde, wird der Probentyp in den bestehenden 2D-Textur-Sampler-Knoten nicht automatisch aktualisiert. Du musst sicherstellen, dass du den Knotentyp in allen bestehenden 2D-Textur-Sampler-Knoten anpasst. Wenn Sie den Probentyp nicht ändern, wird Ihr Material nicht kompiliert und die folgende Meldung wird im Statistikprotokoll angezeigt.
Um diesen Fehler zu beheben, musst du nur den Sampler-Typ vom Standard „Farbe“ zu „Lineare Farbe“ ändern. Daraufhin verschwindet die Warnung. Obendrein solltest du das Material erneut kompilieren, um sicherzustellen, dass die Änderungen erfolgreich waren. Nachdem dieser Schritt abgeschlossen ist, verschwindet die Warnung.
Fazit
Die Texturmaskierung ist ein sehr leistungsstarkes Konzept, mit dem du fast endlose Variationen mit sehr wenig Quellinhalt erzeugen kannst, wenn du es einmal gemeistert hast. Denk daran, dass dir in jeder Bilddatei nur vier Kanäle für Texturmaskierungen zur Verfügung stehen. Verwende daher jeden Kanal weise. Vergiss nicht, sRGB in deinen Maskentexturen zu deaktivieren, da dies die Schärfe der Maske deutliche steigern kann.