Qu’est-ce qu’un fichier DDS ?

Un fichier DDS est un conteneur DirectDraw Surface destiné aux données de texture utilisées par les systèmes graphiques. Il peut contenir des mipmaps, des textures cubiques, des textures volumiques et des formats de pixels compressés adaptés à une utilisation directe par le GPU.

Fonctionnement des fichiers DDS

DDS stocke les données de texture du GPU après une signature de quatre octets et un en-tête fixe qui indique les dimensions, le format des pixels, le nombre de mipmaps et les capacités de la surface. Au-delà d’une image 2D unique, il peut décrire des chaînes de mipmaps, des faces de textures cubiques, des textures volumiques et, avec l’extension d’en-tête DirectX 10, des tableaux de textures. Les données de pixels sont soit non compressées, soit compressées par blocs (DXT1 à DXT5, renommés ensuite BC1 à BC3, ainsi que BC4 à BC7), une forme que le matériel graphique décode directement. Comme le format a évolué par extensions, les fichiers diffèrent par les champs d’en-tête et les codes de format qu’ils utilisent, et la prise en charge par les outils varie selon la variante.

Points clés

  1. Un fichier DDS commence par la valeur magique DDS (0x20534444) et une structure DDS_HEADER de 124 octets. Un lecteur devrait donc exiger au moins 128 octets et vérifier que le champ dwSize de l’en-tête vaut 124 et que la taille de sa structure DDS_PIXELFORMAT intégrée est de 32. Lorsque le format de pixels définit DDPF_FOURCC avec le FourCC DX10, une structure DDS_HEADER_DXT10 suit et le minimum passe à 148 octets. Ces minimums couvrent uniquement les en-têtes, pas les données de pixels. Cette extension est nécessaire pour les tableaux de textures et pour les formats DXGI que l’ancienne structure de format de pixels ne peut pas représenter, et Microsoft précise que tous les outils DDS ne la prennent pas en charge.
  2. Avec Direct3D, les formats compressés par blocs qu’un périphérique accepte dépendent de son niveau de fonctionnalités, pas du conteneur : Microsoft indique que BC1 à BC3 (anciennement DXT1 à DXT5) sont requis à tous les niveaux de fonctionnalités, BC4 et BC5 à partir de Direct3D 10, et BC6H et BC7 seulement à partir de Direct3D 11. Pour une compatibilité maximale avec les outils, Microsoft recommande l’ancien en-tête de format de pixels pour les données RGB non compressées et DXT1 à DXT5.
  3. Les niveaux de mipmap compressés par blocs sont stockés sous forme de blocs 4×4 entiers. Un niveau inférieur à 4×4 texels est tout de même complété jusqu’à former un bloc entier (8 octets pour BC1 et BC4, 16 octets pour les autres formats BC). Les tailles des niveaux doivent donc être calculées en blocs plutôt qu’en pixels ; la formule de Microsoft pour une ligne, évaluée avec une division entière, est max(1, (width + 3) / 4) * block-size.
  4. La fiabilité des champs d’en-tête varie selon les outils d’écriture. Microsoft conseille aux lecteurs de ne pas dépendre de l’activation des indicateurs DDSD_CAPS, DDSD_PIXELFORMAT, DDSD_MIPMAPCOUNT, DDSCAPS_TEXTURE ou DDSCAPS_COMPLEX, et de calculer le pas de ligne plutôt que de se fier à dwPitchOrLinearSize. Le canal alpha n’est décrit que partiellement : l’en-tête DX10 possède un champ de mode alpha (inconnu, non prémultiplié, prémultiplié, opaque ou personnalisé), qu’un fichier peut laisser à la valeur inconnue. Parmi les fichiers anciens, seuls les FourCC DXT2 et DXT4 indiquent un alpha prémultiplié ; les autres fichiers anciens ne le précisent pas et sont généralement considérés comme utilisant un alpha non prémultiplié.

Quand les fichiers DDS sont utiles

Utilisez DDS lorsqu’un pipeline de rendu bénéficie de mipmaps précalculées ou d’une compression de textures native pour le GPU. Vérifiez la prise en charge du format par l’API et le matériel cibles, car les variantes non prises en charge nécessitent une conversion ou une décompression.

Comment Transloadit vous aide avec les fichiers DDS

La référence des formats d’image de Transloadit, qui couvre ses Robots d’image basés sur ImageMagick comme /image/resize, répertorie DDS et les variantes DXT1 et DXT5 comme pouvant être lus et écrits.

La référence indique uniquement la prise en charge de la lecture et de l’écriture au niveau du format. Elle ne précise pas quelles variantes d’en-tête DDS ni quels formats BC peuvent être décodés, et ImageMagick documente dxt1, dxt5 et le mode non compressé comme options d’écriture DDS. Testez donc des fichiers représentatifs avant de vous appuyer sur des textures avec en-tête DX10 ou au format BC7.

Explorer les possibilités de Transloadit en matière de formats de fichiers et de compression

Références

Transformer vos connaissances sur les médias en une chaîne de traitement opérationnelle

Reliez les téléversements, le traitement, l’IA, le stockage et la diffusion via une seule API déclarative — la pile d’encodage, la montée en charge et l’évolution constante des formats sont prises en charge pour vous.

Essayer Transloadit gratuitement