Zurück zum Blog
Formate

PKM- und ETC-Format: Vollständiger Leitfaden

10 Min. gelesen

PKM ist ein einfaches Containerformat für ETC-komprimierte Texturen, das häufig auf Android- und OpenGL ES-Plattformen verwendet wird. Dieser Artikel bietet eine vollständige Anleitung zum Verständnis der PKM-Formatstruktur, der ETC/ETC2-Komprimierungsversionen und deren effektiver Nutzung.

Was ist das PKM-Format?

PKM (kurz für „PoKeMon“, benannt nach Ericsson) ist ein einfaches Containerformat, das speziell für die Speicherung von ETC-komprimierten Texturdaten entwickelt wurde. Im Gegensatz zu komplexen Formaten wie KTX oder DDS hat PKM eine minimale Struktur mit nur einem 16-Byte-Header, gefolgt von komprimierten Bilddaten.

Das Format wurde entwickelt, um eine einfache Möglichkeit zum Speichern und Laden von ETC-komprimierten Texturen auf mobilen Geräten zu bieten. Aufgrund seiner Einfachheit ist es einfach zu implementieren und zu analysieren, wobei über die komprimierten Texturdaten selbst hinaus praktisch kein Overhead entsteht.

PKM-Dateistruktur

  • 16-Byte-Header: Magic Number (PKM), Version, Format, Abmessungen
  • Komprimierte Texturdaten: Rohe ETC/ETC2-Blöcke

ETC-Komprimierungsversionen

Es gibt zwei Hauptversionen der ETC-Komprimierung mit jeweils unterschiedlichen Funktionen:

ETC1 (Ericsson Texture Compression 1)

Der ursprüngliche ETC-Standard, der nur RGB-Farbkanäle mit einem festen Komprimierungsverhältnis von 4:1 unterstützt. Wird seit OpenGL ES 2.0 weithin auf Android-Geräten unterstützt.

Unterstützung: Alle OpenGL ES 2.0+-Geräte

Kompressionsverhältnis: 4:1 fest (4 Bit pro Pixel)

ETC2 (Ericsson Texture Compression 2)

Verbesserter Nachfolger von ETC1, mit RGBA-Unterstützung und mehreren Formatoptionen. Bietet bessere Qualität und Alpha-Kanal-Unterstützung bei gleichzeitiger Wahrung der Abwärtskompatibilität.

Unterstützung: OpenGL ES 3.0+, Vulkan

Kompressionsverhältnis: 4:1 bis 8:1 je nach Format

PKM-Formatvarianten

PKM kann verschiedene ETC-Formattypen enthalten:

ETC1 RGB

Originalformat, nur RGB, kein Alphakanal

ETC2 RGB

Verbesserte RGB-Komprimierung mit besserer Qualität als ETC1

ETC2 RGBA

Volle RGBA-Unterstützung mit 8:1-Komprimierung (8 Bit pro Pixel)

ETC2 RGB + Punch-Through Alpha

RGB mit 1-Bit-Alpha unter Beibehaltung der 4:1-Komprimierung

Vorteile von PKM/ETC

Universelle Android-Unterstützung

ETC1 wird garantiert auf allen Android-Geräten unterstützt und ist damit das portabelste Komprimierungsformat für die Android-Entwicklung.

Festes Komprimierungsverhältnis

Vorhersehbare Speichernutzung mit konsistenten Komprimierungsverhältnissen von 4:1 oder 8:1, was die Berechnung des Speicherbudgets vereinfacht.

Gutes Verhältnis von Qualität zu Größe

ETC2 bietet für die meisten Texturtypen eine hervorragende visuelle Qualität, vergleichbar mit Desktop-Formaten wie DXT/BCn.

Hardware-Dekodierung

Direkte GPU-Dekomprimierung ohne CPU-Overhead beim Rendern, was ein effizientes Textur-Sampling ermöglicht.

Einschränkungen und Überlegungen

ETC1-Qualitätsgrenzen

ETC1 kann sichtbare Artefakte auf Texturen mit hochfrequenten Details oder glatten Verläufen anzeigen. Erwägen Sie die Verwendung von ETC2 für eine bessere Qualität.

Kein Alpha in ETC1

ETC1 unterstützt keine Alphakanäle. Sie müssen ETC2 RGBA verwenden oder Alpha separat speichern, wenn Sie auf OpenGL ES 2.0-Geräte abzielen.

Eingeschränkte erweiterte Funktionen

PKM unterstützt keine Mipmaps, Cubemaps oder Texturarrays. Verwenden Sie für diese erweiterten Funktionen die Formate KTX oder KTX2.

So verwenden Sie das PKM-Format

Die Verwendung von PKM-Dateien in Ihren Projekten ist unkompliziert:

Kodierung in PKM

  1. Laden Sie Ihr PNG-/JPG-Bild hoch (muss eine Potenz von 2 oder ein Vielfaches von 4 haben)
  2. Wählen Sie je nach Bedarf zwischen ETC1 RGB oder ETC2 RGB/RGBA
  3. Laden Sie die generierte .pkm-Datei herunter und integrieren Sie sie in Ihr Projekt

Dekodierung von PKM-Dateien

  1. Laden Sie Ihre .pkm-Datei hoch, um deren Inhalt zu überprüfen
  2. Sehen Sie sich die dekomprimierte Textur in der Vorschau an und überprüfen Sie die Qualität
  3. Exportieren Sie nach PNG, wenn Sie die Textur bearbeiten oder überprüfen müssen

Best Practices

  • Verwenden Sie ETC1 RGB für maximale Kompatibilität auf allen Android-Geräten (OpenGL ES 2.0+)
  • Bevorzugen Sie ETC2 RGBA, wenn Sie auf moderne Geräte (OpenGL ES 3.0+) abzielen, die Alphakanäle benötigen
  • Stellen Sie sicher, dass die Texturabmessungen ein Vielfaches von 4 (ETC1) oder eine Zweierpotenz sind, um die beste Qualität zu erzielen
  • Für Texturen, die auf älteren Geräten Alpha erfordern, sollten Sie die Verwendung separater Graustufentexturen in Betracht ziehen
  • Testen Sie komprimierte Texturen auf tatsächlichen Zielgeräten – die Wahrnehmung der Qualität variiert je nach Inhaltstyp

Abschluss

PKM mit ETC/ETC2-Komprimierung ist die Standardwahl für die Android- und mobile OpenGL ES-Entwicklung. Seine universelle Unterstützung, vorhersehbare Leistung und gute Qualität machen es zu einem hervorragenden Standard für die mobile Texturkomprimierung.

Unsere Online-PKM-Encoder- und Decoder-Tools erleichtern die Arbeit mit ETC-komprimierten Texturen, ohne Befehlszeilentools oder SDKs installieren zu müssen. Unabhängig davon, ob Sie neue Texturen erstellen oder vorhandene überprüfen, helfen Ihnen diese Tools bei der Optimierung Ihrer mobilen Grafikpipeline.

Weiterführende Literatur und Referenzen

Erfahren Sie mehr über die ETC- und PKM-Formate:

Probieren Sie unsere Tools aus