¿Qué es un archivo DDS?
Un archivo DDS es un contenedor DirectDraw Surface para datos de texturas utilizados por sistemas gráficos. Puede contener mipmaps, mapas de cubo, texturas de volumen y formatos de píxeles comprimidos aptos para su uso directo en la GPU.
Cómo funcionan los archivos DDS
DDS almacena datos de texturas para GPU después de una firma de cuatro bytes y una cabecera fija que registra las dimensiones, el formato de píxeles, la cantidad de mipmaps y las capacidades de la superficie. Además de una sola imagen 2D, puede describir cadenas de mipmaps, caras de mapas de cubo, texturas de volumen y, con la extensión de cabecera de DirectX 10, arrays de texturas. Los datos de píxeles están sin comprimir o comprimidos por bloques (de DXT1 a DXT5, posteriormente denominados de BC1 a BC3, además de BC4 a BC7), una forma que el hardware gráfico decodifica directamente. Como el formato creció mediante extensiones, los archivos difieren en los campos de cabecera y códigos de formato que utilizan, y la compatibilidad de las herramientas varía según la variante.
Datos clave
- Un DDS comienza con el valor mágico
DDS(0x20534444) y una estructuraDDS_HEADERde 124 bytes, por lo que un lector debería exigir al menos 128 bytes y comprobar que el campodwSizede la cabecera sea 124 y que el tamaño de su estructuraDDS_PIXELFORMATintegrada sea 32. Cuando el formato de píxeles estableceDDPF_FOURCCcon el FourCCDX10, a continuación aparece una estructuraDDS_HEADER_DXT10y el mínimo pasa a ser de 148 bytes. Estos mínimos solo abarcan las cabeceras, no los datos de píxeles. Esa extensión es necesaria para los arrays de texturas y para los formatos DXGI que la estructura de formato de píxeles heredada no puede expresar, y Microsoft señala que no todas las herramientas DDS la admiten. - En Direct3D, los formatos comprimidos por bloques que admite un dispositivo dependen de su nivel de funciones, no del contenedor: Microsoft enumera BC1 a BC3 (los anteriores DXT1 a DXT5) como obligatorios en todos los niveles de funciones, BC4 y BC5 a partir de Direct3D 10, y BC6H y BC7 solo a partir de Direct3D 11. Para lograr la mayor compatibilidad con las herramientas, Microsoft recomienda la cabecera de formato de píxeles heredada para datos RGB sin comprimir y datos DXT1 a DXT5.
- Los niveles mip comprimidos por bloques se almacenan como bloques 4×4 completos. Un nivel menor de 4×4 texeles sigue rellenándose hasta completar un bloque (8 bytes para BC1 y BC4, 16 bytes para los demás formatos BC), por lo que los tamaños de los niveles deben calcularse en bloques en lugar de píxeles; la fórmula de fila de Microsoft, evaluada con división entera, es
max(1, (width + 3) / 4) * block-size. - Los campos de cabecera no son fiables entre distintos programas de escritura. Microsoft aconseja a los lectores no depender de que estén activadas las banderas
DDSD_CAPS,DDSD_PIXELFORMAT,DDSD_MIPMAPCOUNT,DDSCAPS_TEXTUREoDDSCAPS_COMPLEX, y calcular el paso de fila en lugar de confiar endwPitchOrLinearSize. El alfa solo se describe parcialmente: la cabecera DX10 tiene un campo de modo alfa (desconocido, no premultiplicado, premultiplicado, opaco o personalizado), y un archivo puede dejarlo como desconocido. Entre los archivos heredados, solo los FourCCDXT2yDXT4indican alfa premultiplicado; los demás archivos heredados no lo especifican y normalmente se supone que usan alfa no premultiplicado.
Cuándo son relevantes los archivos DDS
Usa DDS cuando un pipeline de renderizado se beneficie de mipmaps precalculados o de compresión de texturas nativa de la GPU. Verifica la compatibilidad del formato en la API y el hardware de destino, porque las variantes no compatibles requieren conversión o descompresión.
Cómo ayuda Transloadit con los archivos DDS
La referencia de formatos de imagen de Transloadit, que abarca sus Robots de imagen basados en ImageMagick, como /image/resize, enumera DDS y las variantes DXT1 y DXT5 como aptos para lectura y escritura.
La referencia solo registra la compatibilidad de lectura y escritura a nivel de formato. No indica qué variantes de cabecera DDS o formatos BC se decodifican, e ImageMagick documenta dxt1, dxt5 y sin comprimir como sus opciones de escritura DDS, así que prueba archivos representativos antes de depender de texturas con cabecera DX10 o BC7.
Explora los formatos de archivo y las capacidades de compresión de Transloadit
Fuentes
- Microsoft Learn: Guía de programación de DDS (estructura del archivo, variantes y cálculo del paso de fila)
- Microsoft Learn: estructura DDS_HEADER
- Microsoft Learn: estructura DDS_HEADER_DXT10
- Microsoft Learn: Compresión de texturas por bloques en Direct3D 11 (formatos y niveles mínimos de funciones)
- Microsoft Learn: Compresión por bloques (Direct3D 10), tamaño virtual frente a tamaño físico
- Microsoft Learn: Uso de texturas comprimidas (Direct3D 9), DXT1 a DXT5 y alfa premultiplicado
- ImageMagick: Formatos de imagen, entrada DDS y definiciones dds:
- Manual de Pillow: formatos de archivos de imagen, DDS (compatibilidad de lectura y escritura por variante)