Format PKM et ETC : Guide complet
PKM est un format de conteneur simple pour les textures compressées ETC, largement utilisé sur les plateformes Android et OpenGL ES. Cet article fournit un guide complet pour comprendre la structure du format PKM, les versions de compression ETC/ETC2 et comment les utiliser efficacement.
Qu’est-ce que le format PKM ?
PKM (abréviation de « PoKeMon », nommé par Ericsson) est un format de conteneur simple conçu spécifiquement pour stocker des données de texture compressées par ETC. Contrairement aux formats complexes comme KTX ou DDS, PKM a une structure minimale avec seulement un en-tête de 16 octets suivi de données d'image compressées.
Le format a été créé pour fournir un moyen léger de stocker et de charger des textures compressées ETC sur des appareils mobiles. Sa simplicité le rend facile à implémenter et à analyser, avec pratiquement aucune surcharge au-delà des données de texture compressées elles-mêmes.
Structure du fichier PKM
- En-tête de 16 octets : nombre magique (PKM), version, format, dimensions
- Données de texture compressées : blocs ETC/ETC2 bruts
Versions compressées ETC
Il existe deux versions principales de la compression ETC, chacune avec des fonctionnalités différentes :
ETC1 (Compression de texture Ericsson 1)
La norme ETC d'origine, prenant en charge uniquement les canaux de couleur RVB avec un taux de compression fixe de 4:1. Largement pris en charge sur les appareils Android depuis OpenGL ES 2.0.
Soutien: Tous les appareils OpenGL ES 2.0+
Taux de compression: 4:1 fixe (4 bits par pixel)
ETC2 (Compression de texture Ericsson 2)
Successeur amélioré d'ETC1, ajoutant la prise en charge RGBA avec plusieurs options de format. Fournit une meilleure qualité et une prise en charge du canal alpha tout en conservant la rétrocompatibilité.
Soutien: OpenGL ES 3.0+, Vulkan
Taux de compression: 4:1 à 8:1 selon le format
Variantes du format PKM
PKM peut contenir différents types de formats ETC :
ETC1 RGB
Format original, RVB uniquement, pas de canal alpha
ETC2 RGB
Compression RVB améliorée avec une meilleure qualité que ETC1
ETC2 RGBA
Prise en charge complète de RGBA avec compression 8:1 (8 bits par pixel)
ETC2 RVB + Punch-through Alpha
RVB avec 1 bit alpha, maintenant une compression 4:1
Avantages du PKM/ETC
Prise en charge Android universelle
ETC1 est garanti d'être pris en charge sur tous les appareils Android, ce qui en fait le format de compression le plus portable pour le développement Android.
Taux de compression fixe
Utilisation prévisible de la mémoire avec des taux de compression cohérents de 4:1 ou 8:1, simplifiant les calculs du budget mémoire.
Bon rapport qualité/taille
ETC2 offre une excellente qualité visuelle pour la plupart des types de textures, comparable aux formats de bureau comme DXT/BCn.
Décodage matériel
Décompression GPU directe sans surcharge du processeur pendant le rendu, permettant un échantillonnage de texture efficace.
Limites et considérations
Limites de qualité ETC1
ETC1 peut afficher des artefacts visibles sur des textures avec des détails haute fréquence ou des dégradés fluides. Pensez à utiliser ETC2 pour une meilleure qualité.
Pas d'Alpha dans ETC1
ETC1 ne prend pas en charge les canaux alpha. Vous devez utiliser ETC2 RGBA ou stocker l'alpha séparément si vous ciblez des appareils OpenGL ES 2.0.
Fonctionnalités avancées limitées
PKM ne prend pas en charge les mipmaps, les cubemaps ou les tableaux de textures. Utilisez les formats KTX ou KTX2 pour ces fonctionnalités avancées.
Comment utiliser le format PKM
L'utilisation de fichiers PKM dans vos projets est simple :
Encodage en PKM
- Téléchargez votre image PNG/JPG (doit avoir des dimensions puissance de 2 ou multiples de 4)
- Choisissez entre ETC1 RGB ou ETC2 RGB/RGBA en fonction de vos besoins
- Téléchargez le fichier .pkm généré et intégrez-le dans votre projet
Décoder les fichiers PKM
- Téléchargez votre fichier .pkm pour vérifier son contenu
- Prévisualisez la texture décompressée et vérifiez la qualité
- Exportez au format PNG si vous devez modifier ou inspecter la texture
Meilleures pratiques
- Utilisez ETC1 RGB pour une compatibilité maximale sur tous les appareils Android (OpenGL ES 2.0+)
- Préférez ETC2 RGBA lorsque vous ciblez des appareils modernes (OpenGL ES 3.0+) qui ont besoin de canaux alpha
- Assurez-vous que les dimensions de la texture sont des multiples de 4 (ETC1) ou une puissance de 2 pour une qualité optimale.
- Pour les textures nécessitant un alpha sur les appareils plus anciens, envisagez d'utiliser des textures en niveaux de gris distinctes
- Testez les textures compressées sur les appareils cibles réels : la perception de la qualité varie selon le type de contenu.
Conclusion
PKM avec compression ETC/ETC2 est le choix standard pour le développement Android et mobile OpenGL ES. Sa prise en charge universelle, ses performances prévisibles et sa bonne qualité en font un excellent défaut pour la compression de textures mobiles.
Nos outils d'encodage et de décodage PKM en ligne facilitent le travail avec des textures compressées ETC sans installer d'outils de ligne de commande ou de SDK. Que vous créiez de nouvelles textures ou inspectiez celles existantes, ces outils vous aident à optimiser votre pipeline graphique mobile.
Lectures complémentaires et références
En savoir plus sur les formats ETC et PKM :
- Compression de texture ETC (Khronos) - Spécification officielle d'OpenGL ES et documentation du format ETC
- Compression de texture Ericsson (Wikipédia) - Historique et détails techniques des algorithmes de compression ETC
- Graphiques Android : compression de texture - Guide officiel Android des formats de compression de texture
- Spécification du format de fichier PKM - Spécification technique pour le format de conteneur PKM