PKM- und ETC-Format: Vollständiger Leitfaden
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
- Laden Sie Ihr PNG-/JPG-Bild hoch (muss eine Potenz von 2 oder ein Vielfaches von 4 haben)
- Wählen Sie je nach Bedarf zwischen ETC1 RGB oder ETC2 RGB/RGBA
- Laden Sie die generierte .pkm-Datei herunter und integrieren Sie sie in Ihr Projekt
Dekodierung von PKM-Dateien
- Laden Sie Ihre .pkm-Datei hoch, um deren Inhalt zu überprüfen
- Sehen Sie sich die dekomprimierte Textur in der Vorschau an und überprüfen Sie die Qualität
- 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:
- ETC-Texturkomprimierung (Khronos) - Offizielle OpenGL ES-Spezifikation und Dokumentation zum ETC-Format
- Ericsson-Texturkomprimierung (Wikipedia) - Geschichte und technische Details der ETC-Komprimierungsalgorithmen
- Android-Grafik: Texturkomprimierung - Offizielle Android-Anleitung zu Texturkomprimierungsformaten
- Spezifikation des PKM-Dateiformats - Technische Spezifikation für das PKM-Containerformat