Virtuelles Textur-Streaming (SVT) ist eine alternative Methode, um Texturen in Ihrem Projekt von der Festplatte zu streamen. SVT bietet im Vergleich zum bestehenden mip-basierten Textur- Streaming in der Unreal Engine mehrere Vorteile – aber auch einige Nachteile.
Traditionelles Mip-basiertes Textur-Streaming führt eine Offline-Analyse der Material-UV-Nutzung durch und entscheidet dann zur Laufzeit anhand der Objektsichtbarkeit und -entfernung, welche Mip-Levels einer Textur geladen werden sollen. Dieser Prozess kann einschränkend sein, da die gestreamten Daten die vollständigen Textur-Mip-Level berücksichtigen.
Bei der Verwendung von hochauflösenden Texturen kann das Laden eines höheren Mip-Levels einer Textur potenziell erhebliche Auswirkungen auf die Performance und den Speicherverbrauch haben. Außerdem trifft die CPU Mip-basierte Textur-Streaming-Entscheidungen unter Verwendung CPU-basierter Objektsichtbarkeit und -Culling.
Die Sichtbarkeit ist konservativer angelegt – das bedeutet, dass Ihr System mit höherer Wahrscheinlichkeit Elemente lädt – um zu vermeiden, dass Objekte plötzlich ins Sichtfeld „poppen“. Wenn also auch nur ein kleiner Teil des Objekts sichtbar ist, wird das gesamte Objekt als sichtbar eingestuft. Das Objekt wird einschließlich aller zugehörigen Texturen geladen, die möglicherweise gestreamt werden müssen.
Im Gegensatz dazu streamt das virtuelle Texturierungssystem nur die Teile der Texturen, die die UE für die Sichtbarkeit benötigt. Dies geschieht durch die Aufteilung aller Mip-Level in Kacheln einer kleinen, festgelegten Größe. Die GPU ermittelt, welche der sichtbaren Kacheln von allen sichtbaren Pixeln auf dem Bildschirm verwendet werden. Das bedeutet, wenn die UE ein Objekt als sichtbar einstuft, wird dies der CPU mitgeteilt, die dann die erforderlichen Kacheln in einen GPU-Speicher-Cache lädt. Unabhängig von der Größe der Textur berücksichtigt die festgelegte Kachelgröße der SVTs nur die sichtbaren Bereiche. Die GPU berechnet die Sichtbarkeit mithilfe standardmäßiger Tiefenpuffer, wodurch SVT-Anfragen nur für sichtbare Teile erfolgen, die Pixel beeinflussen.
Virtuelle Texturierung aktivieren
Aktivieren Sie im Bereich Projekteinstellungen unter Engine > Rendering > Virtuelle Texturen das Kontrollkästchen neben Unterstützung für virtuelle Texturen aktivieren.
Klicken Sie auf das Bild, um es in voller Größe zu sehen.
In den Projekteinstellungen unter Editor > Textur-Import > Virtuelle Texturen können Sie eine Mindestgröße für Texturen festlegen, ab der neu importierte Texturen für SVT berücksichtigt werden. Wenn eine Textur diese Mindestgröße erreicht, wird das Virtuelle Textur-Streaming für dieses Textur-Asset automatisch aktiviert.
Weitere Informationen zu diesen Einstellungen finden Sie auf der Seite Virtuelle Texturierung Referenz.
Konvertierung von Texturen und Materialien
Wenn Sie virtuelle Texturierung für Ihr Projekt aktivieren, müssen Texturen und Materialien entsprechend eingerichtet werden; die Textur muss die Unterstützung für Virtuelles Textur-Streaming aktivieren, und die Textur-Samples des Materials müssen einen virtuellen Sampler-Typ anstelle eines nicht-virtuellen verwenden.
Wählen Sie aus den folgenden Optionen, um Ihre Texturen und Materialien für die Verwendung mit SVT korrekt einzurichten.
Konvertierungsmenüoption
-
Wählen Sie im Inhaltsbrowser beliebige Textur-Assets aus, die Sie für die Verwendung mit SVT konvertieren möchten.
-
Klicken Sie mit der rechten Maustaste, um das Kontextmenü zu öffnen und wählen Sie In virtuelle Textur konvertieren.
Diese Menüoption ermöglicht es Ihnen auch, von einer virtuellen Textur in eine reguläre Textur zu konvertieren.
-
Das Fenster Konvertieren in listet alle Texturen auf, die Sie ausgewählt haben, sowie alle Materialien, die darauf verweisen.
-
Klicken Sie auf OK, um den Konvertierungsprozess zu starten.
Während des Konvertierungsprozesses wird für Textur-Assets in ihren Textur-Editor-Einstellungen das Virtuelle Textur-Streaming aktiviert. Bei Materialien, die auf die ausgewählte(n) Textur(en) verweisen, werden die Textur-Sample-Knoten so konvertiert, dass sie den virtuellen Sampler-Typ anstelle des nicht-virtuellen Sampler-Typs verwenden.
Manuelle Konvertierung
- Öffnen Sie den Textur-Editor für ein bestimmtes Textur-Asset durch Doppelklick im Inhaltsbrowser .
-
Aktivieren Sie im Details-Panel unter Textur die Option Virtuelles Textur-Streaming.
Wenn Sie dies aktivieren, ohne die Konvertierungsmenüoption oben zu verwenden, werden alle vorhandenen Materialien, die auf eine konvertierte Textur verweisen, sofort ungültig. Sie sollten alle Materialien öffnen, die sich auf die betreffende Textur beziehen, und für den Textursample-Knoten den korrekten virtuellen Sampler-Typ festlegen. Beispielsweise sollte eine virtuelle Textur einen Sampler-Typ Virtuelle Farbe anstelle von Farbe verwenden.
Wenn Sie auf einen Textur-Sample-Knoten stoßen, der nicht den korrekten Sampler-Typ verwendet, zeigt die UE eine Fehlermeldung im Stats-Panel und am unteren Rand des Knotens an, wie hier:
- Die Fehlermeldung identifiziert den falschen Sampler-Typ für den zugewiesenen VT-Textur-Sample-Ausdruck.
- Ändern Sie den Sampler-Typ des Textur-Samples zu einem der virtuellen Typen.
- Das VT-Textur-Sample wird korrekt dargestellt, erkennbar am „VT“ in der unteren rechten Ecke des Ausdrucks.
Wenn Sie eine virtuelle Textur zu einem Material-Diagramm hinzufügen, weist die UE den virtuellen Sampler-Typ automatisch zu. Sollten Sie den Ausdruck jedoch zu einem Textur-Sample-Parameter machen, den Sie in Material-Instanzen verwenden können, beachten Sie, dass das Basismaterial den virtuellen Sampler-Typ auf alle untergeordneten Instanzen anwendet. Beachten Sie, dass Sie keine virtuelle Textur einem Texturparameter-Slot zuweisen können, der im Basismaterial nicht bereits vom virtuellen Typ ist.
UDIM-Unterstützung
U-Dimension (oder „UDIM“) ist eine Textur-Benennungskonvention, die es ermöglicht, mehrere Texturbilder auf separate UV-Regionen eines Statisches-Mesh- oder Skelett-Mesh-Modells abzubilden. Bei Verwendung der UDIM-Namenskonvention importiert die UE Gruppen von Bilddateien als einzelnes virtuelles Textur-Asset.
Die Unterstützung der virtuellen Texturierung für UDIMs ist aus mehreren Gründen vorteilhaft:
- Es arbeitet mit vielen separaten, kleineren Texturen anstelle von extrem großen Texturen.
- Jedes UDIM-Bild kann eine unterschiedliche Auflösung haben, wodurch virtuelle Texturen mit nicht-einheitlicher Pixeldichte möglich sind.
Wenn Sie beispielsweise eine virtuelle UDIM-Textur importieren, die aus vier Bilddateien besteht – zwei 2048x2048- und zwei 128x128-Texturen – die in einem 2x2-Muster angeordnet sind, verarbeitet die virtuelle Textur diese Bilder logisch wie eine einzelne 4098x4098-Textur. Die UE dehnt die kleineren 128x128-Bilder aus, um denselben Bereich wie die größeren 2048x2048-Bilder zu füllen, ohne dass der Speicherverbrauch auf der Festplatte oder zur Laufzeit beeinflusst wird. Dass die kleineren 128x128-Texturen eine 2048x2048-Texturauflösung füllen, verbraucht in diesem Fall keinen zusätzlichen Speicher.
Weitere Informationen zu UDIM-Workflows finden Sie im Der UDIM-Workflow von The Foundry Tutorial.
Beginnen Sie mit der Verwendung von UDIM-Texturen mit virtueller Texturierung in Ihren eigenen Projekten, indem Sie diese Benennungskonvention verwenden:
BaseName.####.[Support Bildformat]
Zum Beispiel:
MyTexture.1001.png
Wenn die UE ein Bild mit dieser Namenskonvention importiert, durchsucht sie den Quellordner nach zusätzlichen Bildern, die dem gleichen BaseName mit einer anderen Koordinatennummer entsprechen. Für jedes gefundene Bild definiert die vierstellige Nummer den Bereich, in dem die UE das Bild zuordnen soll. Beim Import werden traditionelle Texturen im Bereich von 0-1 auf die Mesh-UVs abgebildet, UDIM-Bilder hingegen werden auf einen UV-Bereich von 0-1 basierend auf ihrer definierten UV-Koordinate abgebildet.
Während des Imports werden UDIM-Texturen vertikal gespiegelt, da beim Sampling von UVs in der Unreal Engine die Koordinaten oben links (0,0) sind. Die UVs von Meshs , die UDIM-Texturen verwenden, werden beim Import ebenfalls angepasst, um korrekt mit der Ausrichtung der importierten UDIM-Textur zu funktionieren. Nach dem Import in die Engine sehen die UVs für das Sampling von UVs wie bei der obigen Textur in einem Material folgendermaßen aus:
Performance und Kosten
Messen Sie die Performance und Kosten der virtuellen Texturierung in Ihrem Projekt anhand der folgenden Abschnitte:
Statistiken zur virtuellen Texturierung
Öffnen Sie die Konsole mit der Taste (`) und geben Sie die folgenden Befehle ein, um die Statistikinformationen zu aktivieren:
Verwenden Sie stat virtualtexturing, um Details zu den Kosten der virtuellen Texturierung in Millisekunden (ms) und Zählern für Seitentabellen anzuzeigen.
Verwenden Sie stat virtualtexturememory, um relevante Speicherzähler im Zusammenhang mit der Nutzung virtueller Texturierung in der aktuellen Szene anzuzeigen.
Visualisierung des virtuellen Textur-Streamings
Verwenden Sie den Konsolenbefehl r.VT.Borders 1, um ein Mip-Visualisierungsraster auf Materialien anzuzeigen, die virtuelles Textur-Streaming verwenden.
Verwenden Sie r.VT.Borders 0, um das Raster auszublenden, wenn Sie es nicht mehr benötigen.
Material-Suchen und Stapel
Das Sampling einer virtuellen Textur in Ihren Materialien ist aufwändiger als das Sampling einer herkömmlichen Textur. Die Kosten der virtuellen Texturierung lassen sich in zwei Kategorien unterteilen:
- Suchen entstehen für jede virtuelle Textur, die Ihr Projekt im Material-Diagramm abruft. Stapel kombinieren virtuelle Texturen, wenn Ihr Projekt dieselben UVs und Sampler-Quellen verwendet.
Virtuelle Texturen sind in jedem Fall ressourcenintensiver als herkömmliche Textur-Sampling-Methoden. Es werden immer mindestens zwei Texturabfragen und einige mathematische Berechnungen benötigt. Ein Teil dieser Kosten wird jedoch durch die Kombination der Stapel (bis zu 8) für VT-Textur-Samples mit gleichen UVs und Sampler-Quellen amortisiert.
In diesem einfachen Materialbeispiel sampelt die UE zwei VT-Textur-Sample-Ausdrücke mit Standard-UVs. Für jeden Zugriff auf diese Textur-Samples wird eine Virtuelle Textur-Suche hinzugefügt, und da beide einen einzelnen UV verwenden, werden sie in einem einzigen Virtuellen Textur-Stapel zusammengefasst:
Wenn Ihr Projekt jedoch unterschiedliche UVs verwendet, erhöhen sich die Kosten durch zwei Zugriffe auf den Virtuellen Textur-Stapel:
- Das erste Beispiel verwendet insgesamt drei Texturabfragen
- zwei Suchen und einen Stapel. Da die VT-Samples dieselben UVs verwenden, kombiniert die UE ihre Stacks, um einen Texturzugriff einzusparen. Im zweiten Beispiel gibt es insgesamt vier Texturabfragen
- zwei Suchen und zwei Stapel. Die VT-Textur-Samples verwenden unterschiedliche UVs für die Basisfarbe und Normal-Textur-Samples, was bedeutet, dass sie nicht in einem einzelnen Stapel kombiniert werden können.
Zusätzliche Material-Hinweise
- Die UE teilt virtuelle Streaming-Texturen in festgelegte Kachelgrößen für jede Textur auf, unabhängig von ihrer Größe. Dabei wird auch die niedrigste Auflösungs-Mip durch die Kachelgröße begrenzt. In vielen Fällen wird dies kein Problem darstellen, jedoch können Texturen mit viel Rauschen oder hohem Detailgrad Aliasing oder Moiré-Effekte aufweisen, da niedrig aufgelöste Mips fehlen. Beachten Sie, dass dies auch potenzielle GPU-Performancekosten mit sich bringt, auch wenn diese in der Praxis schwer zu messen sind.
Einschränkungen
Grundsätzlich sind virtuelle Texturen mit regulären Texturen austauschbar, wobei es einige Einschränkungen und zusätzliche Kosten gibt:
- Texturdimensionen müssen einer Zweierpotenz entsprechen, die UE erwartet jedoch nicht, dass sie quadratisch sind. Allerdings nutzen sie in der aktuellen Implementierung den Speicher effizienter.
- Die Unterstützung für trilineare Filterung zwischen Mips erfolgt auf stochastische Weise. Bei Verwendung von Temporalem Anti-Aliasing (TAA) ist es von regulärer trilinearer Filterung kaum zu unterscheiden, kann aber in manchen Fällen sichtbares Rauschen erzeugen.
- Die UE begrenzt die Unterstützung für anisotrope Filterung durch die Einstellung Kachelrahmen. Der Standardwert von 4 ermöglicht weniger anisotrope Filterung als für Texturen üblich, aber eine Erhöhung dieses Wertes steigert den Speicherverbrauch.
- VT-Streaming ist grundsätzlich reaktiv, was bedeutet, dass die CPU erst dann weiß, dass sie eine bestimmte VT-Kachel laden muss, nachdem diese bereits für einen gerenderten Frame benötigt wurde. Wenn sich die Kamera durch die Szene bewegt, kann daher ein sichtbares Aufpoppen auftreten, besonders wenn höher aufgelöste VT-Kacheln geladen werden.