|

Blender – Wie man eine Trim-Sheet Texture auf ein Objekt mappt und in die Unity Engine exportiert

Trim-Sheets bedeuten bessere Performance in Game-Engines – weniger Materials, weniger Draw Calls, flüssigeres Rendering. In diesem Artikel zeigen wir, wie man Trim-Sheets in Blender erstellt und in Unity einsetzt.

Hinweis:

In diesem Artikel geht es nicht darum, in Blender ein High-Poly Objekt für ein Trim-Sheet zu modellieren und zu texturieren, um es dann auf ein Low-Poly Objekt zu baken.
Hier geht es darum, ein fertiges Trim-Sheet in Blender zu importieren und die UVs eines 3D-Modells so anzupassen, dass sie gezielt auf bestimmte Bereiche dieser Textur zeigen. (UV Mapping).

Wir verwenden folgende Versionen und Settings:
Blender 4.4.3
Unity 6.000.0.47f
Unity Render Pipeline: URP

Trim-Sheet-Texture

Als Erstes brauchen wir eine Trim-Sheet-Textur.
Die können wir entweder direkt in Blender erstellen (wie im Hinweiskasten erwähnt), selbst malen – oder wir greifen auf eine der vielen 3D-Asset-Plattformen zurück. Dort findet man oft schon fertige Trim-Sheets, die nicht nur die Base Color (Albedo) mitbringen, sondern meist auch gleich alle wichtigen Maps für den PBR-Workflow: Normal, Metallic, Roughness, Ambient Occlusion, Height / Displacement.

In diesem Beispiel verwenden wir folgendes Pack von Sketchfab: https://sketchfab.com/3d-models/modular-wall-59e038f890d34725a34c25ac94802a43

Was ist eine Trim-Sheet-Texture?

Eine Trim-Sheet-Texture ist eine spezielle Art von Textur, die aus verschiedenen wiederverwendbaren Mustern, Kanten, Leisten, Details oder Materialien besteht – alle in einem einzigen Bild kombiniert. Diese Textur wird dann genutzt, um mehreren 3D-Objekten oder -Oberflächen gezielt bestimmte Bereiche zuzuweisen, ohne für jedes Objekt eine eigene Textur zu erstellen.

3D-Model vorbereiten

Jetzt benötigen wir ein 3D-Model, dessen Flächen wir dann nach dem UV Unwrapping auf das Trim-Sheet mappen können.

Modellierung

Für unser Beispiel würde eine Wand gut passen. Wichtig ist, dass wir für alle Teile, die wir auf unterschiedliche Positionen auf der Textur mappen wollen, eigene Flächen haben.

In unserem Fall halten wir es einfach und extrudieren die Wand oben und unten etwas und fügen zwei Loop-Cuts im mittleren Bereich hinzu. In einem Echte-Welt-Szenario kann das Modell auch gern etwas besser zum Trim-Sheet passen.

Dieses einfache 3D-Model einer Wand wollen wir mittels Trim-Sheet texturieren.

Skalierung übernehmen

Nach dem Modellieren und – ganz wichtig – vor dem UV Unwrapping sollten wir die aktuelle Skalierung unseres Objekts übernehmen, d.h. der Scale-Wert im Transformations-Panel wird wieder auf (1, 1, 1) zurückgesetzt. Dazu wählen wir im Object-Mode Object > Apply > Scale.

UV Unwrapping

Nach mehreren Bearbeitungsschritten wie Skalieren und Extrudieren ist das ursprüngliche UV-Layout meist nicht mehr brauchbar – Verzerrungen sind die Folge. In unserem Fall sieht man außerdem deutlich, dass das Modell auf einem Cube basierte.

Basis des Objekts war der Standard-Cube von Blender, der bereits eine UV Map hat. Im UV Editor erkennt man noch den Ursprung und die nun nicht mehr korrekte Ratio der Flächen.

Um das zu beheben, müssen wir den Prozess zum UV Unwrapping neu anstoßen. Dazu wählen wir im Menü des 3D Viewport UV > Smart UV Project. Es öffnet sich folgender Dialog.

Hier setzen wir das Häkchen bei Correct Aspect. Den Rest können wir auf den Standardeinstellungen lassen.

Smart UV Project liefert dank auch der Option „Correct Aspect“ meist die brauchbarsten Ergebnisse.

Das Ergebnis sieht dann so aus. Alle Flächen haben die korrekte Größe und Aspect Ratio.

Der UV Unwrapping Prozess ist abgeschlossen.

Texturen laden mittels Node Wrangler

Nun brauchen wir die Textur und um etwas zu sehen auch ein Material und einen Shader. Am einfachsten geht das mit dem Node Wrangler Add-On. Haben wir es aktiviert, wechseln wir in den Shading Tab. Standardmäßig ist dort bereits ein Principled BSDF Node vorhanden. Diesen wählen wir aus.
Nun drücken wir einfach die Tastenkombination Strg + Shift + T („Principled Texture Setup“).

Es öffnet sich der Dateiauswahl-Dialog. Hier suchen wir nun unsere Texturen.

Node Wrangler: Der Klick auf den Button Principled Texture Setup nimmt uns viel Arbeit ab.

Hinweis:

Node Wrangler erkennt anhand der Dateinamen, welche Textur welchen Typ hat (z. B. *_diffuse.*, *_normal.*, *_roughness.* usw.). Dateinamen müssen also den Namen der entsprechenden Material Map enthalten: Albedo, Normal, etc.
Für unser Vorhaben genügt es auch, nur die Albedo Textur zu laden.

Node Wrangler hat nun für uns den Prozess durchgeführt, mehrere Texture-Maps auf einmal korrekt in einen Shader zu laden und zu verbinden. Das sieht dann so aus.

Für jede Texture-Map wurde ein Knoten erzeugt und alles so verbunden, dass wir gar nichts sebst machen müssen.

In der Vorschau sollte man nun das Objekt mit der Textur sehen. Man sieht aber auch, dass das Mapping auf der Textur nicht passt. Das gehen wir als nächstes an.

Die Texturen sind geladen, sie passen aber noch nicht korrekt auf das Modell. Das behebt das UV Mapping.

Mein Shader Editor ist leer und der Node Wrangler Shortcut funktioniert nicht. Was mache ich falsch?

Wenn im Shading Editor der Knoten für den PBR Shader fehlt und Du auch keinen hinzufügen kannst, ist wahrscheinlich kein Material ausgewählt. Neu hinzugefügte Meshs haben erst mal kein Material.

Ist kein Material ausgewählt, fehlen im Shader Editor die Nodes.
Und man kann auch keine hinzufügen.

Man erkennt das auch in den Material Properties des Objektes.

In den Material Properties sieht man, ob dem Objekt ein Material zugeordnet ist.

Wir müssen also zunächst ein Material auswählen oder ein neues anlegen. Das kann man sowohl in den Material Properties des Objekts erledigen als auch direkt im Shader Editor. Blender legt standardmäßig ein Material an, dieses können wir auswählen oder über den New Button ein neues erstellen.

In den Material Properties lässt sich das Standard-Material auswählen oder ein neues erstellen.
Das gleiche kann man auch direkt im Shader Editor machen.

Nun können wir die Principled BSDF Node auswählen und Node Wrangler benutzen.

UV Mapping

Nun wechseln wir wieder in den UV Editing Tab.
Nach dem Node Wrangler Prozess sollte hier bereits die Albedo-Textur vorausgewählt sein. Ist das nicht der Fall, wählen wir diese aus.

Für das UV Mapping wählen wir die Albedo Textur aus.

Selektieren wir nun im Edit Mode des 3D Viewport alle Flächen des Objekts (Taste A), sehen wir im UV Editor die Verteilung der Flächen auf der Textur.

Die Flächen sind falsch auf die Textur gemappt.

Wir können nun einzelne oder mehrere Flächen selektieren und diese im UV Editor mittels der Transformierungs-Werkzeuge neu anordnen. Das machen wir nun mit allen Flächen unserer Frontansicht der Wand.

Diese Fläche haben wir auf einen passenden Bereich positioniert.

Oft ist es notwendig, dass man Flächen skaliert (S), rotiert (R) oder bewegt (G), damit man sie an die korrekte Position auf dem Trim-Sheet ausrichten kann.

Diese Fläche muss rotiert werden, damit sie auf das Trim-Sheet passt.

Flächen, die wir später wahrscheinlich nicht oder nicht primär sehen, können wir zusammen selektieren, im UV Editor klein skalieren (S) und mit einem Mal auf eine passende Stelle bewegen (G). Das habe ich in diesem Beispiel mit allen Seiten- und Rückflächen so gemacht.

Flächen lassen sich auch zusammen markieren, klein skalieren und dann in einem Rutsch verschieben.

Haben wie alle Flächen verteilt, sollte unser Wand-Model viel besser aussehen als zu Beginn.

Die Flächen sind nun besser verteilt, auch wenn unser Model nicht ganz perfekt auf die Trim-Sheet-Textur passt.

Unsere Wand ist nun bereit für den Export.

Export (FBX)

Wir exportieren unser Objekt zunächst als FBX. Dazu wählen wir im Menü File > Export > FBX (.fbx).

Meine Export-Einstellungen für die Weiterverarbeitung in Unity.

Für den Export und den Import in Unity benötigen wir nur das Mesh des ausgewählten Objekts. Wenn man mag, kann man schon hier beim Export die Transformation des Objektes festlegen, damit es in Unity besser passt. Ich erinnere an die unterschiedliche Interpretation der Achsenausrichtung bei 3D-Programmen.

Import in Unity (FBX)

Das ist einfach. Ins Projekt Rein ziehen und ggf. die Import Settings anpassen.

Wozu dient die Achsenausrichtung beim Export und was muss man beim Import beachten?

Haben wir beim Export die Achsenausrichtung schon korrekt für Unity angepasst, können wir diese per Bake Axis Conversation fest übernehmen. Vorteil hierbei ist, dass Unity das Objekt nicht mehr vorm Rendern Rotieren und ausrichten muss, was unserer Performance zuträglich ist.
Für unser Beispiel hier ist das aber irrelevant.


Ziehen wir unser Objekt nach dem Import in die Scene, stellen wir fest, dass die Texturen fehlen. Bei FBX sind diese nicht mit eingebunden.
Man erkennt das auch schon beim Blick auf das Material, das nur als graue Kugel dargestellt wird.

Graue Wand, leeres Material … wahrscheinlich fehlen die Texturen.

Texturen importieren

Wir müssen also die Texturen separat ins Projekt ziehen. Ist eine Normal-Map dabei, erhalten wir eine Warnung mit der Möglichkeit, die Ursache gleich zu fixen. Das tuen wir auch brav.

Unity will die Normal-Maps als solche markieren. Was gut ist, denn da müssen wir das nicht von Hand machen.

Schauen wir jetzt die Wand an, sehen wir unsere Texturen.

Unsere Wand ist nun bunt. Und wichtig: das UV Mapping wurde korrekt übernommen.

Das Material hat diese nach dem Import automatisch übernommen.

Im Projekt-Fenster erkennen wir, dass das Material nun Texturen enthält.

Hinweis:

Sind die Texturen gleich benannt wie die, die wir dem Modell in Blender zugeordnet haben, werden diese in Unity automatisch am Material gesetzt, nachdem sie ins Projekt importiert wurden.

Am Material erkennen wir also, dass Albedo und Normals automatisch zugeordnet wurden. Es ist aber readonly, da es sich innerhalb des importierten Objekts befindet. Das heißt, man kann die weiteren Texture Maps hier nicht direkt zuordnen.
Wir müssen das Material zuvor aus dem Objekt extrahieren.

Ist das Material readonly, können wir keine Änderungen vornehmen.

Readonly Material aus dem Objekt extrahieren

Das können wir in den Import-Settings des Objekts machen. Dazu wählen wir das Objekt aus und wechseln im Inspektor in den Import-Settings zu Materials. Dort gibt es den Button Extract Materials… .

In den Import-Settings des Objekts lassen sich die Materials extrahieren.

Alternative: Wir können in der Datei-Ansicht auch einfach eine Kopie vom Material machen (Ctrl + D). Diese liegt dann außerhalb des Objekts und wir können diese dem Modell in der Scene neu zuordnen (z.B. durch draufziehen). Das originale Material wird hier nicht extrahiert, es bleibt unberührt im Objekt enthalten.

Weitere Texture Maps zuordnen

Nun können wir die restlichen Texturen den entsprechenden Slots des Materials zuordnen (falls diese vom Material unterstützt werden). Für unser URP Projekt wird standardmäßig das Lit Material benutzt.

Unser Texture-Pack hat Texturen für die Material-Slots Metalic und Occlusion. Diese können wir zuordnen.

Und schon sieht unsere Wand auch in Unity recht schick aus.

Das Endresultat unserer Wand mit Trim-Sheet Texture.

Welcher PBR Workflow?

Es gibt zwei PBR-Standard-Workflows für Echtzeit-Rendering: PBR-Specular und PBR-Metallic. Beide nutzen dieselben Energieerhaltungssätze und dieselben grundlegenden BRDF-Funktionen.
An unserem URP Standard-Material können wir den Workflow auswählen.
Entsprechend der vorhandenen Texture-Maps können wir den passenden Workflow wählen.
Unser hier verwendetes Texture-Pack hat Maps für den Metalic Workflow.

In dem schon etwas älteren Artikel https://medium.com/gametextures/metallic-magic-2dce9001fe15 gibt es eine gute Beschreibung zu den Workflows und wie die Texturen aussehen müssen.

Der folgende Screenshot zeigt die Unterschiede sehr schön. Er ist auch aus dem Artikel.

Material wiederverwenden mittels Trim-Sheet

Der große Vorteil von Trim-Sheets ist, dass sich in der Game-Engine verschiedene Objekte das selbe Material teilen können, was sich extrem positiv auf die Performance auswirkt. Das wollen wir noch kurz an einem Beispiel demonstrieren. Dafür habe ich die Textur leicht bearbeitet, indem ich ein Strom-Symbol auf einen der Kachel-Bereiche gemalt habe.

Wir können nun in Blender verschiedene Varianten der Wand erstellen, in dem wir das UV Mapping anpassen und Flächen auf andere Bereiche der Trim-Sheet Textur positionieren.

Für eine andere Variante der Wand positionieren wir eine Fläche auf einen anderen Bereich der Textur.

Das angepasste Objekt exportieren wir wie oben beschrieben als FBX und importieren es in Unity.
Dann ziehen wir unser bereits vorhandenes Material drauf.
Wir sehen eine zweite Variante der Wand mit dem Strom-Symbol. Das neue Objekt verwendet aber das selbe Material wie das andere Objekt.

Selbes Material und selbe Textur aber eine neue Variante der Wand.

Ich hoffe wie immer, diese erstbeste Anleitung war hilfreich.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert