Zurück zum Blog
Grundlagen

Was ist Texturkomprimierung?

8 Min. gelesen

Texturkomprimierung ist eine grundlegende Technik in der modernen Grafikprogrammierung, die es Entwicklern ermöglicht, den Speicherverbrauch zu reduzieren und die Rendering-Leistung zu verbessern. In diesem Artikel wird untersucht, was Texturkomprimierung ist, warum sie wichtig ist und wie sie funktioniert.

Was ist Texturkomprimierung?

Die Texturkomprimierung ist eine spezielle Form der Bildkomprimierung, die speziell für die Verwendung mit Grafikhardware (GPUs) entwickelt wurde. Im Gegensatz zu Allzweck-Bildformaten wie JPEG oder PNG sind Texturkomprimierungsformate für den Echtzeit-Zufallszugriff durch die GPU während des Renderns optimiert.

Herkömmliche Bildformate müssen vor der Verwendung vollständig dekomprimiert werden, Texturkomprimierungsformate können jedoch im laufenden Betrieb von der GPU dekomprimiert werden, während sie Texel abtastet. Dadurch können komprimierte Texturen im GPU-Speicher komprimiert bleiben, wodurch die Speicherbandbreite und der Speicherbedarf erheblich reduziert werden.

Der Hauptunterschied besteht darin, dass Texturkomprimierungsalgorithmen so konzipiert sind, dass sie von dedizierter Hardware auf der GPU dekodiert werden, wodurch die Dekomprimierung im Hinblick auf die Leistung praktisch kostenlos ist.

Warum Texturkomprimierung verwenden?

Die Texturkomprimierung bietet mehrere entscheidende Vorteile für Grafikanwendungen:

Reduzierte Speichernutzung

Komprimierte Texturen können den Speicherverbrauch im Vergleich zu unkomprimierten Texturen um das Vier- bis Achtfache reduzieren und ermöglichen so detailliertere und abwechslungsreichere Inhalte.

Geringere Speicherbandbreite

Weniger Daten, die zwischen Speicher und GPU übertragen werden, bedeuten eine bessere Leistung und einen geringeren Stromverbrauch, was besonders wichtig für mobile Geräte ist.

Verbesserte Leistung

Reduzierter Speicherverkehr kann die Bildraten deutlich verbessern und die Rendering-Latenz in GPU-gebundenen Szenarien reduzieren.

Bessere visuelle Qualität

Durch die Speichereinsparungen können Entwickler Texturen mit höherer Auflösung oder mehr Texturvariationen bei gleichem Speicherbudget verwenden.

Gängige Texturkomprimierungsformate

Verschiedene Plattformen und GPUs unterstützen unterschiedliche Komprimierungsformate. Hier sind die am häufigsten verwendeten:

ETC1/ETC2 (Ericsson-Texturkomprimierung)

Standardformat für Android-Geräte und OpenGL ES. ETC1 unterstützt nur RGB, während ETC2 Alphakanal-Unterstützung und verbesserte Qualität hinzufügt.

Plattform: Android, OpenGL ES 3.0+

ASTC (Adaptive Scalable Texture Compression)

Modernes, flexibles Format, das mehrere Blockgrößen (4x4 bis 12x12) und Qualitätsstufen unterstützt. Bietet eine hervorragende Kontrolle des Qualitäts-Komprimierungs-Verhältnisses.

Plattform: Moderne mobile GPUs, Vulkan, OpenGL ES 3.2+

PVRTC (PowerVR-Texturkomprimierung)

Format, das hauptsächlich auf iOS-Geräten mit PowerVR-GPUs verwendet wird. Bekannt für gute Komprimierung, kann jedoch bei bestimmten Inhalten zu Artefakten führen.

Plattform: iOS, ältere Android-Geräte mit PowerVR-GPUs

DXT/BCn (S3-Texturkomprimierung/Blockkomprimierung)

Desktop-Standard, auch bekannt als BCn (Blockkomprimierung). DXT1/BC1 bis DXT5/BC3 sind am häufigsten, wobei BC6H und BC7 HDR und höhere Qualität bieten.

Plattform: Desktop (Windows, DirectX, OpenGL)

Basis Universal

Transkodierungsformat, das zur Laufzeit in jedes native GPU-Format konvertiert werden kann. Ermöglicht die Arbeit einer einzelnen komprimierten Datei auf allen Plattformen.

Plattform: Plattformübergreifend (Transkodierungen nach ETC, ASTC, DXT usw.)

So funktioniert die Texturkomprimierung

Die meisten Texturkomprimierungsalgorithmen funktionieren, indem sie das Bild in kleine Blöcke (typischerweise 4x4 Pixel) unterteilen und jeden Block unabhängig kodieren. Dieser blockbasierte Ansatz ermöglicht einen wahlfreien Zugriff – die GPU kann nur die Blöcke dekomprimieren, die sie für ein bestimmtes Texturbeispiel benötigt.

Innerhalb jedes Blocks speichert der Algorithmus normalerweise eine kleine Farbpalette (normalerweise 2–4 Farben) und Indexwerte, die angeben, welche Palettenfarbe jedes Pixel verwenden soll. Fortgeschrittenere Formate wie ASTC verwenden ausgefeilte Interpolationsschemata, um eine bessere Qualität zu erzielen.

Komprimierungsbeispiel

Eine 512x512 RGBA-Textur mit verschiedenen Komprimierungsstufen:

Unkomprimiert: 512 × 512 × 4 Byte = 1.048.576 Byte (1 MB)
Komprimiert (ASTC 6x6): 512 × 512 / (6 × 6) × 16 Bytes = 116.508 Bytes (~114 KB)
Komprimierungsverhältnis: 9:1 (89 % Größenreduzierung)

Best Practices

  • Wählen Sie das passende Format für Ihre Zielplattform – verwenden Sie ETC2/ASTC für Mobilgeräte, BCn für Desktops
  • Erwägen Sie die Verwendung mehrerer Komprimierungsqualitäten – höhere Qualität für wichtige Texturen, niedrigere für Hintergründe
  • Testen Sie verschiedene Blockgrößen (für ASTC), um die beste Balance zwischen Qualität und Dateigröße zu finden
  • Verwenden Sie unterschiedliche Formate für unterschiedliche Texturtypen – Normalkarten erfordern häufig andere Einstellungen als Farbkarten
  • Sehen Sie sich komprimierte Texturen immer in Ihrer Zielanwendung in der Vorschau an, um die visuelle Qualität zu überprüfen

Abschluss

Die Texturkomprimierung ist ein wesentliches Werkzeug für die moderne Grafikentwicklung und ermöglicht eine bessere Leistung, eine geringere Speichernutzung und eine höhere Bildqualität. Das Verständnis der verfügbaren Formate und ihrer Kompromisse hilft Ihnen, fundierte Entscheidungen für Ihre Projekte zu treffen.

Unabhängig davon, ob Sie für Mobil-, Desktop- oder Webplattformen entwickeln, kann die Texturkomprimierung die Effizienz und visuelle Wiedergabetreue Ihrer Anwendung erheblich verbessern. Mit unseren Online-Tools können Sie ganz einfach mit verschiedenen Formaten und Einstellungen experimentieren, um die perfekte Balance für Ihre Anforderungen zu finden.

Weiterführende Literatur und Referenzen

Erweitern Sie Ihr Wissen mit diesen kuratierten Ressourcen:

Probieren Sie unsere Tools aus