Wenn ein Material sehr nahe angezeigt wird, stellst du fest, dass die im Material verwendeten Texturen aufgelöst werden und verpixelt erscheinen. Um die Performance zu optimieren, werden Texturen oftmals auf eine Auflösung skaliert, die in moderaten Abständen gut aussehen, aber bei genauerer Betrachtung möglicherweise nicht standhalten.
Um dieses Problem zu beheben, kannst du eine sogenannte Detailtextur verwenden, um zu vermeiden, dass ein Material verpixelt erscheint, wenn es sehr nahe betrachtet.
Detailtexturierung
Mit der Detailtexturierung kannst du die Illusion von mehr Details in einer Textur erzeugen, indem du eine stark wiederholte diffuse und normale Textur über die ursprüngliche diffuse und normale Textur des Objekts legst. Dadurch entsteht die Illusion einer höheren Detailgenauigkeit bei einer geringen Entfernung, als normalerweise möglich wäre.
Hier siehst du ein Beispiel der Detailtexturierung in Aktion.
Auf der linken Seite (mit 1 beschriftet) verwendet das Material eine Detailtextur, um der Oberfläche weitere hochauflösende Details hinzuzufügen. Auf der rechten Seite (mit 2 beschriftet) verwendet das Material keine Detailtextur. Beachte, dass das Bild auf der linken Seite schärfer und detaillierter als das Bild auf der rechten Seite erscheint.
Aufschlüsselung des Knotens „Detailtexturierung"
Wenn du in der Palette oder im Kontextmenü nach „Detailtexturierung" suchst, findest du die Materialfunktion Detailtexturierung. Während dies nicht die einzige Möglichkeit ist, Detailtexturen auf Materialien anzuwenden, ist es aus Sicht des Arbeitsablaufs die schnellste, da die gesamte Logik in der Materialfunktion enthalten ist. Du musst lediglich Textureingaben machen.
| Eigenschaft | Beschreibung | |
|---|---|---|
| Skalierung (S) | Dies legt die Skalierung der Detailtexturen fest. Größere Zahlen resultieren in mehr Titling, kleinere Zahlen in weniger Titling. | |
| Streuung (V3) | Dies ist der Input der Diffuse Streutextur. | |
| DetailDiffuse (T2d) | Dies ist der Input der Streudetailtextur. | Dieser Input akzeptiert nur ein Texturobjekt. |
| DiffuseIntensity (S) | Dies steuert die Intensität der Streudetailtextur. | |
| Normal (V3) | Dies ist der Input für die Normal-Map-Textur. | |
| DetailNormal (T2D) | Dies ist der Input für die Normal-Map-Detailtextur. Dieser Input akzeptiert nur ein Texturobjekt. | |
| NormalIntensity (S) | Dies steuert die Intensität der Normal-Map-Detailtextur. |
Konvertieren von Textur-Samples in Texturobjekte
Damit die Materialfunktion „Detailtexturierung" korrekt funktioniert, musst du die Texturen, die du als Detailtexturen aus regulären Textur-Samples verwenden möchtest, in Texturobjekte konvertieren. Gehe wie folgt vor, um dies durchzuführen.
-
Suche das Textur-Sample, das du als Detailtextur verwenden möchtest.
-
Klicke mit der rechten Maustaste auf den Knoten „Textur-Sample" und wähle aus de, Kontextmenü Nach Texturobjekt konvertieren aus.
-
Das Textur-Sample wird in ein Texturobjekt konvertiert.
So verwendest du Detailtexturierung in deinem Material
Es gibt zwei Möglichkeiten, wie du ein Material konfigurieren kannst, um die Detailtexturierung zu verwenden und beide sind nachfolgend dokumentiert. Der Hauptunterschied zwischen den beiden Methoden besteht darin, ob die vorgefertigte Materialfunktion „Detailtexturierung" verwendet wird oder die Detailtexturierungslogik im Materialdiagramm manuelle erstellt wird. Keine der beiden Optionen ist besser oder schlechter, da sie am Ende die gleichen Ergebnisse produzieren. Die Methode, die du wählst, hängt von den Bedürfnissen des spezifischen Materials und vom Projekt ab.
Die gesamten, in den folgenden Abschnitten verwendeten Inhalte sind im Starter-Inhalt von Unreal Engine enthalten. Die hier gezeigten Techniken funktionieren mit allen Texturen. Wenn du folgen möchtest, vergewissere dich, dass dein Projekt den Starter-Inhalt enthält.
Erstelle zum Testen ein neues Material. Klicke mit der rechten Maustaste im Inhaltsbrowser und wähle im Abschnitt „Grundlegendes Asset erstellen" des Kontextmenüs den Eintrag Material aus. Gib dem Material einen aussagekräftigen Namen wie DetailTexturing.
Verwenden der Materialfunktion „Detailtexturierung"
-
Öffne das Material, indem du im Inhaltsbrowser auf das Asset doppelklickst. Der Material-Editor wird geöffnet.
-
Suche im Starter-Inhalt die folgenden vier Texturen. Ziehe sie vom Inhaltsbrowser in dein Materialdiagramm:
- T_Brick_Clay_Old_D
- T_Brick_Clay_Old_N
- T_Ground_Gravel_D
- T_Ground_Moss_N
Wenn du fertig bist, sollte dein Materialdiagramm in etwa wie folgt aussehen:
-
Klicke mit der rechten Maustaste in das Materialdiagramm und suche im Kontextmenü „Detailtexturierung". Klicke unter der Kategorie „Versch." auf DetailTexturing**, um deinem Diagramm die Materialfunktion hinzuzufügen.
-
Im Materialdiagramm wird die Materialfunktion DetailTexturing erstellt.
-
In diesem Beispiel werden T_GroundGravel_D und T_Ground_Moss_N als Detailtexturen verwendet. Um Detailtexturen mit Materialfunktionen zu verbinden, müssen sie in Texturobjekte konvertiert werden. Klicke mit der rechten Maustaste auf T_GroundGravel_D und T_Ground_Moss_N, um sie in Texturobjekte zu konvertieren.
-
Verbinde alle Knoten wie nachfolgend gezeigt. Die beiden Ziegelstein-Texturen sollten mit den Inputs Streuen und Normal und die zwei Texturobjekte sollten mit den Pins DetailDiffuse und DetailNormal verbunden werden. Gib den Output „Streuung" an die Basisfarbe und den Output „Normal" an den Input „Normal" auf dem Hauptmaterialknoten weiter.
-
Um die Skalierung und die Intensität der Texturen zu steuern, sind weitere Werte erforderlich. Du könntest entweder den Materialausdruck Konstant oder Skalarparameter für diese Inputs verwenden. Dieses Beispiel verwendet die drei Skalarparameter Skalierung, Streu-Intensität und Normale Intensität. Der Standardwert aller drei Knoten ist auf 1 festgelegt.
-
Verbinde die Skalarparameter mit ihren entsprechenden Inputs. Wenn du fertig bist, sollte dein Materialdiagramm in etwa wie folgt aussehen.
-
Indem du die Werte der Skalarparameter anpasst, kannst du das Aussehen der Detailtexturen ändern. Hier siehst du ein Beispiel, was passiert, wenn du die Skalierung auf den Wert 1, dann 5 und dann 10 festlegst. Die Detailtextur wird mehrmals über das Mesh gekachelt, was bedeutet, dass die Textur selbst kleiner oder feiner erscheint.
Manuelles Einrichten der Detailtexturierung
Wenn du aus irgendwelchen Gründen die Materialfunktion Detailtexturierung nicht verwenden kannst, kannst du diese Funktionalität mithilfe von Knoten des Typs „Materialausdruck" und den folgenden Anweisungen im Materialdiagramm erzeugen.
-
Dupliziere das erste Material im Inhaltsbrowser, indem du mit der rechten Maustaste auf die Miniaturansicht klickst und dann im Kontextmenü Duplizieren auswählst. Benenne das neue Material in DetailTexturing_02 um und doppelklicke darauf, um es im Materialeditor zu öffnen.
-
Lösche alles, bis auf die vier Texturen. Außerdem musst du die beiden Texturobjekte wieder in Textur-Samples konvertieren. Klicke mit der rechten Maustaste auf jeden Texturobjektknoten und wähle aus dem Kontextmenü In Textur-Sample konvertieren aus.
- Die folgenden Knoten vom Typ „Materialausdruck" sind zur manuellen Erstellung der Detailtexturierung erforderlich. Du kannst jeden von ihnen finden, indem du in der Palette suchst oder die Suchleiste im Kontextmenü für rechten Mausklick verwendest
- Textur-Koordinate x 1
- Klammer x 1
- Skalarparameter x 2
- Addieren x 2
- Multiplizieren x 3
Wenn du fertig bist, sollte das Materialdiagramm in etwa wie folgt aussehen:

-
Nachdem du deinem Diagramm alle Knoten hinzugefügt hast, beginnst du damit, sie wie gezeigt zu verbinden. Das folgende Bild zeigt die korrekte Konfiguration für den Basisfarbenbereich des Diagramms. Wenn du fertig bist, sollte das Materialdiagramm in etwa wie folgt aussehen:
Bild zum Vergrößern anklicken.
-
Die im Abschnitt „Basisfarbe" erstellte Logik zum Steuern der Texturskalierung kann in den Normal-Maps wiederverwendet werden. Verbinde die Knoten wie nachfolgend gezeigt.
Bild zum Vergrößern anklicken.
-
Da die Basisfarbe und die Normal-Map nun miteinander verbunden sind, kann das Material kompiliert, gespeichert und verwendet werden.
Bild zum Vergrößern anklicken.
Tipps und Tricks zur Detailtexturierung
Der folgende Abschnitt enthält einige Tipps und Tricks zu verschiedenen Möglichkeiten, die du zur Detailtexturierung in deinen Materialien verwenden kannst.
Abstandsbasierte Detailtexturierung
Beim Umgang mit großen Flächen, wie z. B. Terrain, kann es vorkommen, dass die Texturen zwar nahtlos aneinandergereiht werden, aber dennoch Wiederholungen auftreten, die das Erscheinungsbild der Textur beeinträchtigen, insbesondere wenn sie aus der Ferne betrachtet werden.
Um dies zu beheben, kannst du das zuvor erstellte Detailmaterial modifizieren, damit es eine Textur anzeigen kann, wenn die Kamera nahe ist und eine andere Textur, wenn die Kamera weit entfernt ist. Dies wird oft als abstandsbasierte Texturmischung bezeichnet. Befolge die nachstehenden Anweisungen, um dies zu implementieren.
-
Dupliziere zuerst das Material DetailTexturing_02 und benenne es in DistanceFade um. Öffne das Material.
-
Die kannst die meisten Knotenverbindungen aus dem ursprünglichen Material löschen, lösche jedoch nicht die vier Texturen. Du solltest außerdem den Abschnitt mit der Beschriftung Skalierungssteuerungen unten beibehalten. Suche nach und füge die folgenden Materialausdrücke deinem Diagramm hinzu.
- World_Position x 1
- Camera_Position_WS x 1
- Abstand x 1
- Dividieren x 1
- Potenz x 1
- Klammer x 1
- Konstante x 2
Wenn du fertig bist, sollte das Materialdiagramm in etwa wie folgt aussehen:
-
Ändere Werte in den beiden Materialausdrücken vom Typ Konstante auf 512 und 4 und verbinde dann die Knoten in der nachfolgend gezeigten Konfiguration. Der Abstand, in dem die Texturüberblendung stattfindet, wird über die erste Konstante gesteuert, die mit dem Materialausdruck Dividieren (im Beispielbild auf 512 festgelegt) verbunden ist. Das nachfolgend gezeigte Materialdiagramm stellt die gesamte Logik zum Mischen von Texturen basierend auf dem Abstand bereit.
-
Du kannst jetzt die Logik der Abstandsüberblendung mit dem Rest des Diagramms verbinden. Füge dem Diagramm zuerst zwei Knoten vom Typ Linearinterpolation (Lerp) hinzu. Der Alpha-Input in den Lerp-Knoten steuert den Übergang zwischen den beiden Texturen. Schließe die Verbindung mit dem Material wie unten gezeigt ab.
-
Um eine Vorschau des Effekts anzuzeigen, halte die rechte Maustaste im Viewport der Materialvorschau gedrückt und bewege die Maus nach oben und nach unten, um hinein- oder herauszuzoomen. Wenn die Kamera sich 512 Einheiten von der Kugel entfernt befindet, wechselt das Material von Ziegelstein zu Kies. Wenn du das nicht siehst, kannst du den Wert in der Konstanten ändern, die mit dem Knoten Dividieren verbunden ist. Das Reduzieren des Werts von 512 auf einen kleineren Wert lässt den Übergang früher auftreten.
Zusammenfassung
Die Detailtexturierung ist ein leistungsfähiges Werkzeug, das das Erscheinungsbild von Materialien verbessern kann, indem die Basistexturen mit hochgradig wiederholten Detailtexturen ergänzt werden. Denke daran, dass die Detailtexturierung nur bis zu einem gewissen Grad dazu beitragen kann, die Verpixelung zu verbergen, und dass die Vorteile der Detailtexturierung zunichte gemacht werden können, wenn die Kamera des Spielers bis zu einem unangemessenen Grad in Objekte hineinzoomt. Denke auch daran, dass durch das Hinzufügen von Detailtexturen zwei oder mehr zusätzliche Texturabfragen zu deinem Material hinzukommen können, was zu Performance- oder Speicherproblemen führen kann, insbesondere auf mobilen Plattformen.