Le format de texture, Qu'est-ce que c'est ?
Petite explication sur le format de texture originale du jeu : Les textures originale du jeu sont au format DDS ( Direct Draw Surface ), c'est une méthode de compression DXTC qui permet d'utiliser plus de textures ou des textures plus grandes tout en réduisant l'espace mémoire que cela nécessite.
Si on réduit la charge en mémoire des textures, on augmente la rapidité d'éxecution des taches, d'où l'importance d'une bonne compression, mais une compression peut altérer le niveau de détail, il existe donc 5 types de compression Direct X différentes ( DirectXTextureCompression).
Un petit rappel : les couleurs sont souvent encodées en RGBA, c'est-à-dire en 4 composants distincts qui fournissent le taux de rouge (Red), de vert (Green), de bleu (Blue) et de transparence (Alpha). Lorsqu'on dit qu'une texture est encodée en RGB 5:6:5 ça veut dire que chaque pixel est encodé sur 16 bits : 5 bits pour le rouge, 6 bits pour le vert, 5 bits pour le bleu et 0 bit pour la transparence. Une image est décrite par ses dimensions (par exemple 640 sur 480 pixels) et par une série de valeurs RGBA qui correspondent à la couleur de chaque pixel.
L'idée du DXTC est de décomposer l'image, la texture en blocs de 16 pixels (4 pixels sur 4). Une texture de 256 pixels sur 256 sera composée donc de 4096 blocs (64 x 64 blocs). Chaque bloc est compressé et décompressé indépendamment des autres.
Le format DXT1 utilise des blocs de 64 bits. Chaque bloc n'est composé que d'un seul sous-bloc de 64 bits ne contenant seulement que les informations sur la couleur RGB des pixels, on appelle souvent ce sous-bloc le Color Block (bloc de couleur). On verra plus loin que les formats DXT2/3/4/5 utilisent en plus un Alpha Block qui comme son nom l'indique fournit en plus la valeur 'alpha' de chaque pixel.
Ce bloc de couleur se compose d'un en-tête (header) de 32 bits contenant deux couleurs de 16 bits (format RGB 5:6:5), et d'une matrice 4x4 de 16 pixels, chaque pixel ayant une valeur encodée sur 2 bits (32 bits + 16 x 2 bits donne bien un bloc de 64 bits).
Les formats DXT2/3/4/5 utilisent des blocs de 128 bits, composés de deux sous-blocs : un bloc alpha de 64 bits et un bloc de couleur de 64 bits.
Les formats DXT2 et DXT3 ont comme bloc alpha une matrice 4x4 de 16 pixels dont la valeur alpha est directement donnée par 4 bits (16 x 4 bits donne bien 64 bits).
Les formats DXT4 et DXT5 utilise un bloc alpha composé d'un en-tête de 16 bits fournissant deux valeurs alpha de 8 bits et une matrice 4x4 de 16 pixels chacun ayant sa valeur encodée sur 3 bits (16 bits + 16 x 3 bits donne bien 64 bits). Le principe de décompression d'un tel bloc est une interpolation linéaire dictée par 3 bits (et non 2) ce qui permet une plus grande précision.
La différence entre le DXT2 - DXT3 et le DXT4 - DXT5 se situe au niveau de l'interprétation des couleurs RGBA. En effet en DXT2 et en DXT4 les valeurs RGB du bloc de couleur ont été pré-multipliées par leur valeur alpha au moment de la compression;
les formats DXT2 et DXT4 sont relativement peu utilisés et sont même indisponibles en OpenGL.Ce qu'il faut donc retenir de ce petit cours :
Pour les textures
avec transparence : utiliser le format dds avec la
compression DXT5 Pour les textures
sans transparence : utiliser le format dds avec la
compression DXT1En effet, rajouter une couche alpha augmente le poids de la texture et donc la charge en mémoire, donc si vous n'avez pas de couche alpha autant ne pas surcharger la mémoire
Il faut également se rappeler que la compression en DXTC (dds), peut importe le type,
nécessite une taille de texture en puissance de 2, c'est à dire :
- 64*64/64*128/64*256/64*512/64*1024/64*2048 pixels
- 128*64/128*128/128*256/128*512/128*1024/128*2046 pixels
- 256*64/256*128/256*256/256*512/256*1024/256*2048 pixels
- 512*64/512*128/512*256/512*512/512*1024/512*2048 pixels
- 1024*64/1024*128/1024*256/1024*512/1024*1024/1024*2048 pixels
- 2048*64/2048*128/2048*256/2048*512/2048*1024/2048*2048 pixels
Si vous voulez plus d'info sur le format de compression DXTC :
http://www.onversity.com/cgi-bin/progarti/art_aff.cgi?Eudo=bgteob&P=a0103
Voici un texture viewer pour windows XP, développé par Nvidia (
ce n'est pas un logiciel de retouche d'image ! il vous permet juste de visionner les dds comme le fait l'aperçu d'image de windows pour les jpg) :
http://developer.download.nvidia.com/tools/wtv/WTV_0_86b.zipEt voici le plugin pour Photoshop qui permet d'importer/enregistrer les dds :
http://developer.download.nvidia.com/tools/texturetools/Photoshop_Plugins_8.23.1101.1715.exeLiens vers le site nvidia :
Pour le viewer :
http://developer.nvidia.com/object/windows_texture_viewer.htmlPour le plugin :
http://developer.nvidia.com/object/photoshop_dds_plugins.html