Spiel-Texturen haben spezielle Anforderungen, damit sie im Spiel ordnungsgemäß gerendert werden. Beim Erstellen von Texturen in Unreal Editor für Fortnite (UEFN) mit importierten Bildern musst du sicherstellen, dass die Quellbilddatei eine Zweierpotenz für Höhe und Breite verwendet. Das erhöht die Kompatibilität und Stabilität deiner Insel auf allen Plattformen.
Komprimierte Dateiformate für GPUs (Graphics Processing Units) müssen auf allen Konsolen, Computern und Mobilgeräten Texturen mit einer Zweierpotenz nutzen. Texturen, die nicht der Zweierpotenz-Regel entsprechen, werden bei Lower-End-Plattformen instabil und können zu Spielabstürzen führen. Die Zweierpotenz wird auch beim Textur-Streaming genutzt, um die Texturauflösung auf Plattformen mit weniger Speicher zu reduzieren.
Das Textur-Streaming hilft bei folgenden Punkten:
Änderung der Auflösung einer Textur
Bestimmung, wie schnell ein Spiel geladen wird
Steigerung der visuellen Qualität des Spiels
Einsparung von GPU-Speicher
Was ist die Zweierpotenz
Computer und Konsolen verwalten und verarbeiten Daten in eingeschränkten Gruppen und nicht alle gleichzeitig. Dies ist ein ähnliches Prinzip wie beim Rendern von Hintergründen mit World Partition.
Wenn die Datengruppen die Zweierpotenz-Regel befolgen, etablieren die Datengruppen einen Satz hartcodierter, physischer Beschränkungen für Medien. Wenn diese Einschränkungen nicht befolgt werden, verschwendet die Spiel-Engine wertevolle Ressourcen bei dem Versuch, die Assets ordnungsgemäß zu rendern.
Die Zweierpotenz ist eine Methode, um Spieldaten zu optimieren und Bilder zu rendern, um effizient ein visuelles Erlebnis darzustellen.
Beispiele für zulässige Bildgrößen sind: 256x256, 512x512 oder 1024x2048. Texturen, die nicht die Zweierpotenz verwenden, werden nicht optimiert und führen sowohl zu einer Instabilität als auch zu einer schlechten Performance der Insel.
Zweierpotenz-Texturen ermöglichen UEFN die Nutzung von drei Schlüsselfunktionen:
Texturkomprimierung: Reduziert die Speichergröße bei minimalen visuellen Kosten um das ungefähr Achtfache
Mipmapping: Die automatische Generierung von Varianten mit geringerer Auflösung
Textur-Streaming: Zeigt eine Variante mit niedrigerer Auflösung an, bevor Daten mit einer höheren Auflösung im Speicher gestreamt werden können
In Kombination ermöglichen diese Funktionen, dass sogar ein High-End-Asset mit 4K-Texturen auf jeder Plattform gerendert werden kann. Das liegt daran, dass die Texturen dann hochwertige Varianten mit einer reduzierten Auflösung haben.
Zum Beispiel wären für eine Textur mit 4000x4000 und ohne Alpha-Ebene 64 Megabyte Speicher erforderlich. Diese müsste auf einmal geladen werden und würde mit 4000x4000 angezeigt, auch wenn sie auf einer kleinen Reklametafel, die sich weit entfernt vom Spieler befindet, Aliasing erzeugt. Texturgrößen, die zu groß sind, können bei Geräten, die nicht über genug Speicher verfügen, zu Abstürzen führen.
Im Gegensatz dazu verbraucht die 4096x4096-Version einer Textur, welche die Standardkomprimierung verwendet, nur 8 Megabyte, die progressiv gestreamt werden und auf die Entfernung weniger Aliasing produzieren. Texturgrößen, die zu groß sind, erhöhen auch die Paketgröße, führen aber nicht dazu, dass das Gameplay abstürzt.
Texturvalidierung
Texturen müssen aus Performance-Gründen validiert werden, bevor sie in einem Projekt verwendet werden. Wenn eine Textur nicht validiert wird, verursacht sie folgende Probleme:
„Out of Memory“-Absturz (OOM), weil die Quelltexturen zu groß sind.
Plattform-Abstürze, weil gecookte Texturen zu groß sind
Probleme mit der Plattformleistung aufgrund nicht optimaler Texturen
Texturen, die die Validierung nicht bestehen, verhindern, dass ein Projekt veröffentlicht werden kann.
Validierungsregeln
Die Validierungsregeln umfassen eine allgemeine Regel, die für alle Assets gilt, und drei Hauptregeln, die nur für Texturen gelten.
Allgemeine Regel
Keine Quellabmessung darf größer als 4096 Texel sein.
2D-Texturen in der Benutzeroberfläche
Alle gecookten Texturen kleiner als 1.048.576 Texel (1024 x 1024) bestehen die Validierung automatisch.
2D-Texturen
Gecookte Texturen kleiner als 1.048.576 Texel (1024 x 1024) bestehen die Validierung automatisch.
Gecookte Abmessungen dürfen nicht größer als 2048 Texel sein.
Gecookte Abmessungen müssen eine Zweierpotenz sein.
Sie muss streambar sein und die Erstellung von Mips erlauben.
Cubemap-Texturen
Jede gecookte Textur (pro Fläche) kleiner als 1.048.576 Texel besteht automatisch die Validierung.
Gecookte Abmessungen dürfen nicht größer als 1024 Texel sein. Dies gilt für eine Fläche, nicht für das Asset.
Gecookte Abmessungen müssen eine Zweierpotenz sein.
Sie muss streambar sein und die Erstellung von Mips erlauben.
Finden ungültiger Texturen
UEFN hat strenge Größenanforderungen für Texturen. Um sicherzustellen, dass alle importierten Texturen die richtigen Größenbeschränkungen verwenden, enthält UEFN zusätzliche Validatoren, die über das hinausgehen, was Fortnite bietet. Diese Validatoren verwenden Regeln, um Probleme früher im Erstellungsprozess zu erkennen und aufzudecken, um zu vermeiden, dass Projekte hochgeladen werden, bei denen der Cook-Vorgang fehlschlagen wird.
Es gibt zwei Bereiche, in denen eine Textur validiert wird: während der Projektvalidierung und wenn sie zum Inhaltsbrowser hinzugefügt wird.
Projektvalidierung
Die Validierungsfehler der Textur werden angezeigt, nachdem ein Projekt den Validierungsprozess durchlaufen hat. Der Prozess verwendet immer die tatsächlichen Texturdaten (im Gegensatz zu Asset-Tags). Alle Ergebnisse werden mit dem Token „Auto Fix“ in das Nachrichten-Log geschrieben.
Inhaltsbrowser-Validierung
Die Textur-Miniaturansicht und der Tooltip zeigen ein Symbol bzw. eine Zusammenfassung an. Das Kontextmenü bietet die Option „Textur angleichen“. „Textur angleichen“ versucht, tatsächliche Texturdaten zu verwenden, und greift aus Performancegründen auf Asset-Tags zurück, wenn die Textur nicht geladen ist. Wenn es Asset-Tags liest, kann es etwas weniger genau sein, wenn bestimmte Tags fehlen. Wenn jedoch die eigentlichen Daten der Textur das nächste Mal validiert werden (Projekt Validierung, OnObjectTransacted), werden der Tooltipp und die Miniaturansicht genau aktualisiert.
Textur-Assets, die den oben genannten Anforderungen nicht entsprechen, werden im Inhaltsbrowser durch ein Fehlersymbol gekennzeichnet. Wenn du mit der Maus über das Asset fährst, werden oben im Tooltip weitere Details zum spezifischen Problem angezeigt:
Informationen zur Verwendung von „Textur angleichen“ findest du im Abschnitt Anpassen ungültiger Texturen weiter unten.
Anforderungen zur Größenänderung einer Textur für UEFN
Um sicherzustellen, dass alle Inseln auf allen Zielplattformen gut funktionieren, stellt UEFN bestimmte Anforderungen an Textur-Assets.
Wenn dein Projekt Texturelemente enthält, die diese Anforderungen nicht erfüllen, schlägt die Validierung dieser Texturen fehl und du kannst dein Projekt nicht hochladen.
Wenn deine Textur der UI-Texturgruppe zugewiesen ist, müssen ihre Abmessungen kleiner als die maximale Größe von 2048x2048 sein. Die Abmessungen der Textur müssen jedoch keine Zweierpotenzen sein. (UI-Texturen werden normalerweise nicht gestreamt, sodass sie immer so scharf wie möglich erscheinen.)
Wenn deine Textur _nicht_ der UI-Texturgruppe zugewiesen ist, müssen ihre Abmessungen kleiner als die maximale Größe von 4096x4096 sein. Wenn sie außerdem mehr Pixel enthält als der Mindestschwellenwert (1024 x 1024 oder 1048576), muss sie streambar sein. Das bedeutet Folgendes:
Jede ihrer Abmessungen muss eine Zweierpotenz sein (zum Beispiel 256 x 256, 512 x 512, 1024 x 1024 usw.).
Das Bild muss nicht quadratisch sein, solange jede Abmessung eine Zweierpotenz ist. z. B. 256 x 512, 512 x 1024, 256 x 1024 usw.
Die Eigenschaft Nie streamen der Textur muss deaktiviert sein.
Die Textur muss so eingestellt sein, dass Mipmaps generiert werden.
Die gesamten Speicherkosten aller Nicht-Streaming-Texturen in deinem Projekt müssen unter einem voreingestellten Maximalbudget liegen. Die Speicherkosten für dein Projekt werden ermittelt, indem die Speicherkosten aller Texturen addiert werden, deren Eigenschaft „Nie streamen“ aktiviert ist. Dazu gehören:
Alle Texturen, deren Abmessungen keine Zweierpotenzen sind (und die nicht mit der Eigenschaft „Auffüllen und Größenänderung“ auf Zweierpotenzen aufgefüllt oder gestreckt wurden). Für diese Texturen ist die Eigenschaft „Nie streamen“ immer automatisch aktiviert.
Alle anderen Texturen, deren Eigenschaft „Nie streamen“ manuell aktiviert wurde.
Jede Textur verfügt über eine Texturgruppeneinstellung, die ihre erwartete Verwendung angibt. Du kannst diese Gruppe und die anderen oben genannten Textureigenschaften festlegen, indem du im Inhaltsbrowser auf das Textur-Asset doppelklickst, um den Textur-Editor zu öffnen.
Ändern der Größe von Texturen
In UEFN können alte, importierte Texturen, die ungleichmäßige Abmessungen oder eine aufgeblähte Größe verwenden, gemäß der Zweierpotenz skaliert werden. Suche und korrigiere sich verschlechternde Texturen anhand der folgenden Schritte:
Öffne die Inhaltsschublade oder den Inhaltsbrowser und stelle sicher, dass der Stamminhaltsordner deines Projekts ausgewählt ist, der sich unter FortniteGame auf der linken Seite der Dateibaumansicht befindet.
Suche unter Alle den Ordner mit der Bezeichnung DeinProjektname Inhalt.
Gib in der Suchleiste oben in der Inhalts-Schublade
NeverStream==true&&TextureGroup!=UIein. Damit wird eine Abfrage ausgeführt, um alle betroffenen Assets zu identifizieren.
Alle Assets, die in dieser gefilterten Ansicht angezeigt werden, sind betroffen. Auch wenn ein wenig Zeit erforderlich ist, das zu korrigieren, verbessert es die Leistung deines Levels.
Es gibt zwei Methoden, um betroffene Texturen zu aktualisieren, die sich nicht in der UI-Gruppe befinden.
Option A verwendet die UEFN-Massenbearbeitung-Fähigkeiten, um Texturen zu gruppieren und in einem Schritt zu bearbeiten. Das ist die schnellste Methode, um deine Texturen automatisch zu korrigieren, indem sie auf das richtige Seitenverhältnis aufgefüllt werden. Dieses Auffüllen kann aber zu einer unnötigen Speicherverwendung führen.
Option B erfordert etwas mehr Zeit, nutzt das Speicherbudget aber optimal, wenn du mehrere betroffene Texturen auflösen musst. Mit dieser Option kannst du Texturen bearbeiten und erneut hochladen, um unnötiges Auffüllen zu vermeiden.
Option A
Klicke im Inhaltsbrowser auf das Hamburger-Menü neben der Suchleiste und wähle Texturen aus. Alle Texturen werden im Inhaltsbrowser isoliert.
Klicke auf das Einstellungen-Symbol und aktiviere Spalten. Alle Texturen werden jetzt in Spalten im Inhaltsbrowser aufgeführt.
Durchsuche die Spalte Abmessungen nach Assets, die keine Zweierpotenz-Größen verwenden.
Wähle alle Texturen aus, die nicht der Zweierpotenzregel entsprechen.
Klicke mit der rechten Maustaste in den Inhaltsbrowser und wähle Asset-Aktionen > Auswahl in Eigenschaftsmatrix bearbeiten. Damit wird das Tool zur Massenbearbeitung geöffnet, in dem alle ausgewählten Texturen auf dem Tab „Komponenten-Editor“ aufgegliedert sind.
Wähle alle Texturdateinamen im Stamm-Abschnitt aus.
Klicke auf das Bild, um es zu vergrößern.
Öffne die Option Textur auf dem Tab Angeheftete Spalten.
Wähle im Dropdown-Menü Auffüllen und Größenänderung die Option Auf Zweierpotenz auffüllen aus. Unten im Editor-Fenster wird ein Fortschrittsbalken angezeigt.
Die Texturen wurden alle in die Zweierpotenz konvertiert und funktionieren jetzt auf allen Plattformen.
Option B
Doppelklicke auf die Textur, um den Textur-Editor zu öffnen.
Gib in der Suchleiste oben im Details-Panel den Namen deiner Quelldatei ein. Das Ergebnis zeigt den Dateipfad auf deinem Computer, der als Originalquelldatei der Textur verwendet wird.
Klicke auf das Bild, um es zu vergrößern.
Skaliere die Textur mit einem Bildeditor wie GIMP oder Paint.NET 5 auf die nächste Zweierpotenz. Du kannst sogar Paint verwenden, wenn die Textur keine Alpha-Ebene benötigt.
Zu den Zweierpotenz-Größen gehören 256, 512, 1024 usw.
Zum Beispiel sollte eine Textur mit 500x500 die Größe 512x512 haben und eine Textur mit 600x256 die Größe 512x256.
Änderungen im Seitenverhältnis sollten keine nachteiligen Effekte auf deine Insel haben.
Klicke mit der rechten Maustaste auf die Textur im Inhaltsbrowser und wähle Reimportieren.
Wenn die Original-Texturdatei in deinen Dateien fehlt:
Klicke mit der rechten Maustaste auf die Textur im Inhaltsbrowser und wähle Asset-Aktionen > Exportieren, um eine neue Kopie zu erstellen.
Skaliere die Textur auf die nächste Zweierpotenz-Größe. Klicke dann mit der rechten Maustaste im Inhaltsbrowser auf die Textur und wähle die Option Mit neuer Datei reimportieren aus. Doppelklicke auf die Textur, um den Textur-Editor zu öffnen, wenn die Datei importiert wurde.
Gib in der Details-Suchleiste Nie streamen ein und setze die Option dann auf False. Wenn sie nicht auf False gesetzt werden kann, musst du sicherstellen, dass die Spezifikation Importiert oben anzeigt, dass dein Bild eine Zweierpotenz-Größe hat.
Such im Details-Panel nach der Option Mip-Generierungseinstellungen. Wähle dann im Dropdown-Menü die Option Aus Texturgruppe.
Suche im Details-Panel nach der Option Komprimierungseinstellungen und wähle dann im Dropdown-Menü die Option Standard (DXT1/5) aus.
Prüfe, sobald du diese Schritte abgeschlossen hat, ob du die eingeschränkte Textur erfolgreich entfernt hast, indem du in der Suchleiste des Inhaltsbrowsers erneut nach NeverStream==true&&TextureGroup!=UI suchst. Die von dir aktualisierten Assets sollten hier jetzt nicht mehr aufgeführt sein.
Ändern einer Einzeltextur
Befolgen die folgenden Schritte, wenn du nur eine Textur hast, die nicht der Zweierpotenz-Regel folgt.
Doppelklicke auf die Textur, um den Textur-Editor zu öffnen.
Klicke auf das Bild, um es zu vergrößern.
Gib in der Details-Suchleiste Zweierpotenz-Modus ein. Wähle dann im Dropdown-Menü Auffüllen und Größenänderung die Option Auf Quadrat auffüllen aus.
Suche nach der Option Nie streamen und setze sie auf False.
Suche nach der Option Mip-Generierungseinstellungen. Wähle dann im Dropdown-Menü die Option Aus Texturgruppe.
Suche nach der Option Komprimierungseinstellungen und wähle dann im Dropdown-Menü die Option Standard (DXT1/5) aus.
Prüfe, sobald du diese Schritte abgeschlossen hast, ob du die eingeschränkte Textur erfolgreich entfernt hast, indem du in der Suchleiste des Inhaltsbrowsers nach NeverStream==true&&TextureGroup!=UI suchst. Die von dir aktualisierten Assets sollten nicht mehr in der Liste aufgeführt sein.
Anpassen ungültiger Texturen
Die beste Möglichkeit, ungültige Texturen zu beheben, die du aus externen Dateien importiert hast, besteht darin, sie in der Originalanwendung zu bearbeiten, mit der du sie erstellt hast, und das Asset dann erneut zu importieren. Dazu kannst auch eine andere spezielle Bildbearbeitungsanwendung verwenden, um die Texturen zu bearbeiten, bevor du sie in UEFN importierst.
Stelle sicher, dass die Abmessungen jedes Bildes kleiner sind als die oben angegebenen Maximalabmessungen. Wenn du das Bild nicht für die Benutzeroberfläche verwendest, lege sowohl für die Höhe als auch für die Breite des Bildes Zweierpotenzen fest. Das Bild muss nicht quadratisch sein, solang jede Dimension eine Zweierpotenz ist.
Alternativ bietet UEFN eine integrierte Möglichkeit, deine Texturgrößen automatisch den UEFN-Anforderungen anzupassen. Befolge hierzu die folgenden Schritte:
Wähle im Inhaltsbrowser eine oder mehrere ungültige Texturen aus.
Klicke mit der rechten Maustaste auf die Miniaturansicht einer Textur und wähle Textur angleichen im Kontextmenü aus.
Der Editor versucht, die Eigenschaften der ausgewählten Texturen anzupassen, um Validierungsprobleme zu vermeiden, und schreibt seine Ergebnisse in das Output-Log.
Die Operation hat die folgenden Effekte:
Wenn sich die Textur in der UI-Texturgruppe befindet und ihre Abmessungen größer als das zulässige Maximum sind, wird die Einstellung Komprimierung > Erweitert > Maximale Texturgröße der Textur angepasst, um die maximale Auflösung der Textur zu begrenzen, die zur Laufzeit geladen werden kann.
Wenn sich die Textur nicht in der UI-Texturgruppe befindet und ihre Abmessungen größer als das zulässige Maximum sind, wird die Einstellung LOD-Ausrichtung der Textur so angepasst, dass die größten Mipmaps der Textur verworfen werden. Dies begrenzt wirksam die maximale Auflösung der Textur, die zur Laufzeit geladen werden kann.
Wenn sich die Textur nicht in der UI-Texturgruppe befindet und ihre Abmessungen keine Zweierpotenzen sind, wird die Einstellung Auffüllen und Größenänderung der Textur auf Dehnen auf Zweierpotenz gesetzt.
Wenn sich die Textur nicht in der UI-Texturgruppe befindet, ist ihre Einstellung Nie streamen deaktiviert.