Compression KTX

Manuel de la supercompression des textures

KTX2.0 est le conteneur standard pour les textures supercompressées (= compression en mémoire GPU) Basis Universal.

En pratique le conteneur propose deux formats basis: ETC1S et UASTC. On ne parle jamais de KTX1.0, qui a été remplacé avant toute adoption « grand public ».

Outils

On trouve parfois des référence à l’ancien outil toktx, maintenant remplacé par ktx, aussi édité par [Khronos]'https://www.khronos.org). Télécharger une distribution adaptée.

Description de l’outil ktx:

ktx compare - Compare two KTX2 files
ktx convert - Convert other texture file types to KTX2
ktx create - Create a KTX2 file from various input files
ktx deflate - Deflate a KTX2 file with zstd or ZLIB
ktx extract - Export selected images from a KTX2 file
ktx encode - Encode a KTX2 file
ktx transcode - Transcode a KTX2 file
ktx info - Prints information about a KTX2 file
ktx validate - Validate a KTX2 file
ktx help - Display help information about the ktx tools

Préparation

Les images doivent avoir une hauteur et une largeur qui soit un multiple de 4.

Pour optimiser les mipmaps, on préfère utiliser des multiples de 2, mais ce n’est ni plus ni moins requis que pour d’autres formats de textures. Si les sources ne s’y prêtent pas, il vaut mieux des mipmaps imparfaites que des textures inefficientes…

Encodage ETC1S

Meilleure compression, à privilégier pour les diffuse

ktx create --encode etc1s  --clevel 4 --qlevel 200 <input-file...> <output-file>

Optimisation utile: --format. En spécifiant R8G8B8_SRGB au lieu de R8G8B8A8_SRGB, on peut économiser ~25% de taille pour les textures sans alpha!