Was ist virtuelle Texturierung?

Virtuelle Texturierung ist eine Szenenmanagement-Technik, die ursprünglich in Spiel-Engines wie id Tech 5 (verwendet in Rage) populär gemacht wurde und später in Echtzeit-Rendering weit verbreitet wurde. Im Kern entkoppelt virtuelle Texturierung den logischen Texturadressraum vom physischen GPU-Speicher, was die Erstellung massiver Texturatlanten ermöglicht - manchmal Megatexturen genannt -, die ganze Spielwelten mit einzigartigen, sich nicht wiederholenden Details abdecken können. Anstatt die GPU zu zwingen, die gesamte Textur in VRAM zu halten, sind nur die Kacheln (oder Seiten) der Textur, die tatsächlich auf dem Bildschirm sichtbar sind, zu jeder Zeit im Speicher. Dieses seitenbasierte Streaming-System wird von einem virtuellen Texturierungs-Feedback-Mechanismus verwaltet: Die GPU meldet, welche Kacheln für den aktuellen Rahmen benötigt werden, und die CPU plant die entsprechenden Daten, die von der Festplatte oder einem Pool komprimierter Texturen gestreamt werden sollen.

Die Technik wurde ursprünglich entwickelt, um den traditionellen Kompromiss zwischen Textur-Speicherbudget und Oberflächenvielfalt zu umgehen. Bei konventionellem Mip-Mapping mussten Entwickler zwischen sich wiederholenden kleinen Texturen (die gekachelt und künstlich aussehen) oder einer Handvoll großer, einzigartiger Texturen wählen, die VRAM schnell ausschöpfen. Virtuelle Texturierung bietet einen Mittelweg: Sie behandelt die gesamte Umgebung als eine riesige Textur, die nur die Region von Interesse auf die entsprechende Mip-Ebene streamt. Dies ermöglicht es, jedem Quadratmeter einer Landschaft sein eigenes einzigartiges Aussehen zuzuweisen - jeder Stein, jedes Stück Gras und jeder Schmutzfleck kann ohne separate Texturzuordnungen pro Objekt unterschiedlich sein.

Wie virtuelle Texturierung funktioniert

Seitentabellen und Tile Streaming

Das Herzstück eines virtuellen Texturierungssystems ist eine Seitentabelle – eine von Hardware verwaltete Übersetzungsstruktur, die virtuelle Texturkoordinaten auf physische Speicherorte abbildet. Die GPU berechnet anhand der Seitentabelle, welche 128 × 128 oder 256 × 256 Pixel Kacheln der Textur im GPU-Speicher liegen und welche fehlen. Ein Feedbackpuffer zeichnet dann die Koordinaten aller Kacheln auf, die referenziert, aber nicht lokal sind, und diese Informationen werden an die CPU zurückgesendet. Die CPU wiederum plant Streaming-Anforderungen, manchmal aus einem Cache mit hoher Priorität, um die fehlenden Kacheln aus einer massiv komprimierten Texturdatei zu laden, die auf der Festplatte gespeichert ist.

Feedback und Streaming Granularität

Moderne Engines implementieren typischerweise eine dreistufige Streaming-Pipeline: (1) die GPU stellt eine niedrig auflösende Version des Bildes dar, während gleichzeitig Cache-Ausfälle protokolliert werden; (2) die CPU liest den Feedback-Puffer, prognostiziert zukünftige Kamerabewegungen und gibt Ladeanforderungen aus; (3) das I/O-System dekodiert komprimierte Kacheln und überträgt sie in den GPU-Speicher. Die Granularität der Kachelgröße wirkt sich direkt auf die Leistung aus: Größere Kacheln reduzieren den Overhead der Seitentabelle, erhöhen aber die Wahrscheinlichkeit, Daten zu laden, die nicht verwendet werden, während kleinere Kacheln eine feinere Kontrolle bieten, aber mehr CPU-Zyklen erfordern, um die Seitentabelle zu verwalten. Viele Implementierungen kompromittieren durch die Verwendung einer Kachelgröße von 128 bis 256 Pixel und nehmen eine virtuelle Texturauflösung an, die 128k × 128k Pixel oder höher erreichen kann.

Handhabung von Weichenketten

Virtuelle Texturierung integriert sich auch in Mip-Mapping. Anstatt eine vollständige Mip-Kette für die gesamte virtuelle Textur zu speichern, enthält die Seitentabelle Kacheln aus jeder Mip-Ebene. Die GPU tastet die richtige Mip-Ebene anhand von Bildschirm-Space-Derivaten ab und derselbe Streaming-Mechanismus sorgt dafür, dass nur die benötigten Mip-Level-Kacheln lokal sind. Dies reduziert den gesamten I / O-Verkehr dramatisch, da entfernte, detailarme Teile der Welt weit weniger Daten benötigen als nahe gelegene, detailreiche Bereiche. Adaptive Streaming-Systeme können sogar Kacheln basierend auf der Geschwindigkeit und Richtung des Spielers vorab abrufen, wodurch sichtbare Pop-Ins minimiert werden.

Vorteile in großen Umgebungen

Virtuelle Texturierung glänzt am hellsten in Open-World-Spielen und massiven Simulationsumgebungen, in denen die Fläche in Quadratkilometern statt in Quadratmetern gemessen wird.

  • Einzigartige Details auf der ganzen Welt. Da die virtuelle Textur Terabyte groß sein kann, kann jeder Flecken des Bodens, jede Klippenwand und jede Gebäudewand ihr eigenes, unterschiedliches Aussehen haben. Die Kachelartefakte, die die konventionelle Texturierung plagen, sind vollständig eliminiert.
  • Reduzierte Komplexität beim Verfassen von Texten. Künstler malen eine einzelne hochauflösende Textur direkt auf das 3D-Modell oder die Landschaft oder verwenden Projektionstechniken, um mehrere fotografische Quellen zu verschmelzen. Es besteht keine Notwendigkeit, Hunderte von einzelnen Texturkarten manuell in einen gemeinsamen Atlas zu packen oder sich um sich überschneidende Texturkoordinaten zu sorgen.
  • Bessere Leistung auf begrenzter Hardware. Durch das Streamen nur sichtbarer Kacheln ermöglicht virtuelle Texturierung Szenen, die sonst 16-32 GB VRAM erfordern würden, um auf Hardware mit nur 4-8 GB zu laufen. Dies war ein kritischer Faktor im Original Rage, das auf Xbox 360 läuft (die nur 512 MB einheitlichen Speichers hatte).
  • Schnelleres Laden und niedrigerer Speicherfußabdruck für statische Geometrie. In Kombination mit effizienten Komprimierungsschemata wie verlustbehafteten blockbasierten Codecs (BCn oder ASTC) kann der gesamte Festplattenfußabdruck überschaubar gehalten werden, und der Laufzeitspeicher ist proportional zum View-Frustum, nicht zur Weltgröße.
  • Einfaches Streaming. Virtuelle Texturierung ergänzt natürlich das Level-of-Detail-Streaming für Geometrie. Beide Systeme können denselben Feedback-Mechanismus verwenden, was ein kohärenteres Ressourcenmanagement ermöglicht.

Implementierung in modernen Game Engines

Unreal Engine 4/5 – Virtuelles Textursystem

Epic Games führte Runtime Virtual Texturing (RVT) in Unreal Engine 4 ein und erweiterte es erheblich in UE5. RVT ermöglicht es, Landschafts- und statische Mesh-Materialien in Echtzeit in eine virtuelle Texturschicht einzubacken, die andere Materialien (wie vertex-blended landscape layers) dann auswerten können. Dadurch entfällt die Notwendigkeit, mehrere Materialeingaben pro Pixel während des Renderns zu mischen, was die Komplexität des Shaders massiv reduziert. Das Streaming-System in UE5 unterstützt bis zu 16 virtuelle Texturschichten mit Seitengrößen von 128 bis 1024 Pixeln und einer Gesamtauflösung von bis zu 16384 × 16384 Pixeln pro Schicht. Entwickler können auch das Virtual Heightfield Mesh System in Verbindung mit RVT verwenden, um hochdetailliertes Terrain ohne die traditionellen Dreiecksbudget-Einschränkungen zu erreichen. Weitere Details finden Sie in der offiziellen Unreal Engine RVT Dokumentation

Unity’s Advanced Texture Streaming

Unity verwendet einen anderen Ansatz namens Texture Streaming (Teil der Qualitätseinstellungen), der Mip-Map-Streaming anstelle von vollständiger virtueller Texturierung nutzt. Die Unity High Definition Render Pipeline (HDRP) enthält jedoch eine virtuelle Texturierungs-Experimentfunktion, die als tile-basiertes Feedback-System ähnlich wie herkömmliche Megatexturen funktioniert. Der Asset Store bietet auch Plugins von Drittanbietern wie Texture Atlas Creator und Virtual Texturing for Shader Graph, die die Technik der Seitentabelle implementieren. Unitys zukünftige Roadmap weist auf eine engere Integration von tile-basierten Streaming hin, insbesondere für mobile und AR / VR-Plattformen, bei denen die Speicherbudgets knapp sind. Sie können mehr über die Textur-Streaming-Pipeline von Unity lesen Sie im Unity Texture Streaming-Handbuch).

id Tech und Megatextures

Das ursprüngliche Megatextur-Konzept wurde von John Carmack und id Software in Quake Wars: Enemy Territory (2007) entwickelt und in Rage (2010) perfektioniert. Die id Tech 5-Engine verwendete eine einzige gigantische Textur (bis zu 128k × 128k) für die gesamte Spielwelt, mit einer Hardware-Seitentabelle, deren Updates durch GPU-Feedback angetrieben wurden. Die praktischen Einschränkungen - insbesondere die hohe Bandbreite, die für das Hard-Disk-Streaming auf Konsolen-Hardware benötigt wird - wurden in späteren Iterationen teilweise durch die Reduzierung der Welttexturauflösung und die Verwendung aggressiverer Kompression angesprochen. id Tech 6 (Doom 2016) behielt das Konzept bei, wandte es jedoch selektiver an, indem es nur große statische Oberflächen verwendete und nicht die gesamte Szene. Diese Entwicklung zeigt, dass virtuelles Texturieren keine Einheitslösung ist; seine Wirksamkeit hängt stark von der Hardware-I / O-Geschwindigkeit

Herausforderungen und Lösungen

Streaming von Artefakten und Pop-In

Das sichtbarste Problem bei der virtuellen Texturierung ist das Auftreten von Kacheln mit niedriger Auflösung, während die High-Detail-Versionen geladen werden. Dieses "Pop-In" kann erschütternd sein, wenn das Streaming-System nicht mit der Kamerabewegung mithalten kann. Die Lösung besteht darin, dass sorgfältige Vorabholalgorithmen die Flugbahn der Kamera antizipieren und Kacheln lange bevor sie sichtbar werden. Viele Motoren verwenden auch eine "Blur" - oder "Fade-In" -Technik, bei der sich die eingehende hochauflösende Kachel mit der vorhandenen Kachel über ein oder zwei Frames vermischt und der harte Übergang eliminiert wird. Zusätzlich kann ein kleiner Satz konservativer Mip-Levels für jede Kachel dauerhaft gehalten werden, um sicherzustellen, dass es immer eine Fallback-Textur gibt, auch im Worst-Case-Streaming-Szenario.

Bandbreite und Storage

Da virtuelle Texturen enorm sind (oft Hunderte von Gigabyte auf der Festplatte), erfordern sie eine aggressive verlustbehaftete Kompression und ein effizientes On-Disk-Layout. Die meisten Implementierungen verwenden BCn (Blockkomprimierung) für Laufzeitdaten und ein höheres Komprimierungsschema (wie LZ4 oder Kraken) für die Archivdatei. Die Kompressionsdichte muss gegen die Notwendigkeit eines schnellen Zufallszugriffs auf der Kachelebene ausgeglichen werden. Ein Ansatz besteht darin, Kacheln in einem Dateisystem zu speichern, das einen räumlichen Hash verwendet, um benachbarte Weltraumkacheln dicht beieinander auf der Festplatte zu platzieren und das Suchen beim Streaming zu minimieren. Dies ist bei HDD-basierten Systemen kritisch, aber selbst bei NVMe-Laufwerken kann die Kachelabrufgeschwindigkeit zum Engpass werden, wenn die Anzahl der sichtbaren Kacheln zu schnell wächst.

Memory Overhead der Seitentabelle

Die Seitentabelle selbst verbraucht VRAM. Für eine virtuelle Textur mit 128k x 128k Pixeln und 128x128 Kachelngröße gibt es 1024 x 1024 Kacheln, was etwa 4 Millionen Seitentabelleneinträgen entspricht. Wenn jeder Eintrag 4 Bytes (eine physikalische Adresse) beträgt, verwendet die Tabelle 16 MB GPU-Speicher. Dies ist normalerweise akzeptabel, aber wenn die Engine mehrere virtuelle Texturen unterstützt (z. B. separate diffuse, normale und Rauheitstexturen), multipliziert sich der Seitentabellenspeicher. Einige Engines mildern dies durch die Verwendung einer mehrstufigen Seitentabelle (ähnlich dem virtuellen Speicher von OS), die die Gesamtmenge der residenten Einträge reduziert, oder indem sie eine einzelne Seitentabelle über mehrere Texturkanäle hinweg teilen, die zu einer RGBA-Kachel zusammengefasst sind.

Integration mit Deferred Rendering

Deferred Renderer erfordern mehrere Texturen (GBuffer) pro Pixel. Die virtuelle Texturierung muss individuell auf jede dieser Texturen angewendet werden, was die Anzahl der Streaming-Kanäle multipliziert. Eine Alternative besteht darin, die Material-ID in einer virtuellen Textur zu speichern und dann die Materialeigenschaften aus einem separaten Kachelsatz zu entnehmen. Dies entkoppelt die Komplexität und ermöglicht es dem Streaming-System, sich auf die bandbreitensensiblesten Kanäle zu konzentrieren. Die RVT von Unreal Engine macht genau das: Die erste virtuelle Texturschicht hält die Grundfarbe und normal, während zusätzliche Schichten Rauheits-, Metall- und Untergrunddaten enthalten, je nach Bedarf.

Virtual Texturing Hardware Unterstützung

Moderne GPUs von NVIDIA (beginnend mit der 9-Serie und insbesondere der Turing-Architektur) beinhalten Hardware-Unterstützung für Seitentabellen und fliesenbasierte virtuelle Texturierung über die Virtual Memory Management Einheit. Die GPU kann nun direkt mit Seitenfehlern umgehen, indem sie einen Fehler an den Treiber sendet, anstatt dass die CPU einen Feedbackpuffer abfragen muss. Dies reduziert die Latenz und entlastet die Arbeit von der CPU. Die RDNA-Architektur von AMD unterstützt auch ähnliche Funktionen durch ihre DMA-Engine und die Multi-Level Page Table Fähigkeiten. Spiele-Engines können diese Hardware-Funktionen nutzen, indem sie NVIDIAs Virtual Texturing SDK verwenden oder benutzerdefinierte Seitenfehler-Handler schreiben, die in die residente Seitenliste der GPU integriert sind.

Virtuelle Texturierung jenseits von Spielen

Die Prinzipien der virtuellen Texturierung werden zunehmend auch außerhalb des Echtzeit-Entertainments angewendet. In der Architekturvisualisierung ermöglicht die virtuelle Texturierung Durchläufe von Stadtmodellen, bei denen jede Gebäudefassade über ein eigenes hochauflösendes Foto verfügt. In Flugsimulatoren wie dem Microsoft Flight Simulator 2020 ist das Streaming-System eine massive virtuelle Textur aus Satellitenbildern und Höhendaten. Obwohl es nicht mit der klassischen Megatexturtechnik identisch ist (der Simulator streamt ganze Geometriekacheln asynchron), teilt es die gleiche Kernidee: Nur der interessierende Bereich wird in voller Auflösung geladen, der Rest bleibt als Low-Detail-Proxydaten.

In der Filmindustrie wird virtuelle Texturierung in Echtzeit-Vorvisualisierungstools und virtuellen Produktionsstufen (z. B. das in verwendete Volumen) verwendet. Die LED-Wände zeigen riesige Umgebungen an, die tatsächlich in Echtzeit auf Spielmaschinen gerendert werden; die Texturdetails werden durch Kachel-Streaming verwaltet, um die Bildraten aufrechtzuerhalten. Ohne virtuelle Texturierung wäre der Speicherbedarf eines extrem hochauflösenden Panoramas, das auf Hunderten von LED-Panels angezeigt wird, nicht machbar.

Wissenschaftliche Simulationen wie Klimamodelle oder digitale Zwillinge von Städten profitieren ebenfalls. Diese Anwendungen müssen Phänomene oft über mehrere Skalen hinweg visualisieren – von der globalen Übersicht bis hin zur einzelnen Gebäudeebene – ohne wiederholt Datensätze zu laden und zu entladen. Eine virtuelle Texturdatenstruktur, die räumlich-zeitliche Datenkacheln abbildet, kann nahtlose Zoom- und Panning-Maßnahmen über Petabytes von Sensordaten hinweg ermöglichen.

Die Zukunft des virtuellen Texturierens

AI-Driven Texture Generation und Streaming

Eine der spannendsten Entwicklungen ist der Einsatz von Machine Learning-Modellen (wie Super-Auflösungs- oder Diffusionsmodellen), um Texturkacheln im laufenden Betrieb zu erzeugen oder hochzuskalieren. Anstatt hochauflösende Kacheln von der Festplatte zu streamen, könnte die Engine eine komprimierte latente Darstellung streamen und dann ein effizientes neuronales Netzwerk auf der GPU betreiben, um die vollauflösende Textur zu rekonstruieren. Dies würde den Speicher- und Bandbreitenbedarf drastisch reduzieren. Unternehmen wie NVIDIA erforschen bereits solche "neuronalen Texturen" und ihre Anwendung im Echtzeit-Rendering. Die Herausforderung besteht darin, Echtzeit-Inferenzgeschwindigkeiten mit geringem Stromverbrauch zu erreichen, was mit zunehmender dedizierter KI-Hardware praktikabler wird.

Vollständig virtuelle Materialsysteme

Die Grenze zwischen virtueller Texturierung und virtueller Schattierung ist verschwimmend. Das gleiche Seitentischkonzept kann erweitert werden, um nicht nur Farbtexturen, sondern auch Materialgraphen, Shader-Nutzlasten und sogar Geometriekacheln (über virtuelle Geometrie) zu speichern. Unreal Engine’s Nanite ist ein direktes Beispiel für virtuelle Geometrie mit einer ähnlichen Seitentischorganisation. Ganze Szenenbeschreibungen – Geometrie, Materialien, Texturen und Beleuchtung – können künftig als einheitlicher virtueller Ressourcenstrom verwaltet werden, bei dem die GPU genau die Daten anfordert, die sie aus aktueller Sicht benötigt, und das System automatisch Detailebenen über alle Dimensionen hinweg anpasst.

Hardware-Fortschritte und Standardisierung

Da virtuelles Texturieren immer häufiger wird, werden GPU-Hardware-Anbieter wahrscheinlich die Seite-Tabelle-Schnittstelle standardisieren. Derzeit implementiert jede Engine das virtuelle Texturieren etwas anders, was die Portierung und Optimierung erschwert. Direct3D 12 und Vulkan haben beide Erweiterungen (z. B. VK EXT texture compression astc hdr oder D3D12 GPU VIRTUAL ADDRESS), mit denen benutzerdefinierte virtuelle Texturierungssysteme erstellt werden können, aber ein einheitlicher Standard würde eine handelsübliche Middleware und ein einfacheres Async-Streaming ermöglichen. Die Microsoft DirectStorage API in Kombination mit GPU-Dekomprimierung macht bereits die Art von hochbandbreitem Tile-Streaming, die virtuelle Texturierung benötigt, auf Windows und Xbox viel effizienter.

Größere Akzeptanz in Mobile und XR

Mobile GPUs haben enge Speicherbudgets (3-6 GB gemeinsam genutzter System-RAM) und begrenzte Speicherbandbreite. Virtuelle Texturierung kann hier einen Spielwechsler darstellen, so dass mobile Spiele komplizierte Umgebungen anzeigen können, ohne die Speicherbeschränkungen zu überschreiten. Apples Metal-Framework unterstützt das auf Kacheln basierende verzögerte Rendering und kann für virtuelle Texturierung über Shader-Level-Feedback angepasst werden. Der Aufstieg von Augmented Reality (AR) auf Mobiltelefonen, bei denen das Gerät hochdetaillierte digitale Objekte über die reale Welt rendern muss, wird wahrscheinlich die weitere Einführung von Streaming-Textursystemen vorantreiben. Das gleiche gilt für VR-Headsets, die eine hohe Auflösung bei hohen Bildwiederholraten erfordern und sich keine Textur-Pop-In leisten können; die Fähigkeit der virtuellen Texturierung, Kacheln basierend auf Blickverfolgung vorab abzurufen, könnte ein wichtiger Faktor für komfortable VR-Erlebnisse werden.

Schlussfolgerung

Virtuelle Texturierung hat sich von einer Nischentechnik entwickelt, die in einer Handvoll fortschrittlicher Engines verwendet wird, zu einem grundlegenden Baustein für groß angelegte 3D-Umgebungen. Indem die Welt als eine einzige, streambare Textur behandelt wird, eliminiert sie Speicherdecken, ermöglicht beispiellose Details und reduziert die Arbeitsbelastung von Künstlern. Die Herausforderungen des Streamens von Artefakten, Bandbreite und Seitentisch-Overhead wurden weitgehend durch sorgfältige Engineering- und Hardware-Unterstützung überwunden. Mit dem Aufkommen von KI-gesteuerten Generationsmethoden, einheitlichen virtuellen Ressourcensystemen und immer schnelleren I / O-Pipelines wird virtuelle Texturierung weiterhin ein Eckpfeiler sein, wie wir bauen und interagieren mit expansiven digitalen Welten. Entwickler, die es ernst meinen, die Grenzen der Umwelttreue in Spielen, Simulationen und virtuelle Produktion sollten in die Beherrschung dieser wichtigen Technologie investieren.