O que é um arquivo DDS?

Um arquivo DDS é um contêiner DirectDraw Surface para dados de textura usados por sistemas gráficos. Ele pode conter mipmaps, mapas de cubo, texturas volumétricas e formatos de pixels comprimidos adequados para uso direto pela GPU.

Como funcionam os arquivos DDS

O DDS armazena dados de textura para GPU após uma assinatura de quatro bytes e um cabeçalho fixo que registra dimensões, formato de pixels, quantidade de mipmaps e recursos da superfície. Além de uma única imagem 2D, ele pode descrever cadeias de mipmaps, faces de mapas de cubo, texturas volumétricas e, com a extensão de cabeçalho do DirectX 10, arrays de texturas. Os dados de pixels ficam sem compressão ou comprimidos em blocos (DXT1 a DXT5, posteriormente chamados de BC1 a BC3, além de BC4 a BC7), uma forma que o hardware gráfico decodifica diretamente. Como o formato evoluiu por extensões, os arquivos diferem nos campos de cabeçalho e códigos de formato que usam, e o suporte das ferramentas varia conforme a variante.

Informações essenciais

  1. Um DDS começa com o valor de identificação DDS (0x20534444) e um cabeçalho de 124 bytes do tipo DDS_HEADER, portanto um leitor deve exigir pelo menos 128 bytes e verificar se o campo dwSize do cabeçalho é 124 e se o tamanho da estrutura DDS_PIXELFORMAT incorporada é 32. Quando o formato de pixels define DDPF_FOURCC com o FourCC DX10, um DDS_HEADER_DXT10 vem em seguida e o mínimo passa a ser 148 bytes. Esses mínimos cobrem apenas os cabeçalhos, não os dados de pixels. Essa extensão é necessária para arrays de texturas e para formatos DXGI que a estrutura legada de formato de pixels não consegue expressar, e a Microsoft observa que nem todas as ferramentas DDS oferecem suporte a ela.
  2. No Direct3D, os formatos comprimidos em blocos que um dispositivo aceita dependem de seu nível de recursos, não do contêiner: a Microsoft lista BC1 a BC3 (os antigos DXT1 a DXT5) como obrigatórios em todos os níveis de recursos, BC4 e BC5 a partir do Direct3D 10, e BC6H e BC7 apenas a partir do Direct3D 11. Para obter a maior compatibilidade possível com ferramentas, a Microsoft recomenda o cabeçalho legado de formato de pixels para dados RGB sem compressão e dados DXT1 a DXT5.
  3. Os níveis de mipmap comprimidos em blocos são armazenados como blocos 4×4 inteiros. Um nível menor que 4×4 texels ainda recebe preenchimento até completar um bloco (8 bytes para BC1 e BC4, 16 bytes para os outros formatos BC), portanto os tamanhos dos níveis devem ser calculados em blocos, e não em pixels; a fórmula da Microsoft para linhas, calculada com divisão inteira, é max(1, (width + 3) / 4) * block-size.
  4. Os campos de cabeçalho não são confiáveis entre diferentes gravadores. A Microsoft orienta os leitores a não dependerem de que os sinalizadores DDSD_CAPS, DDSD_PIXELFORMAT, DDSD_MIPMAPCOUNT, DDSCAPS_TEXTURE ou DDSCAPS_COMPLEX estejam definidos e a calcular o passo de linha em vez de confiar em dwPitchOrLinearSize. O alfa é descrito apenas parcialmente: o cabeçalho DX10 tem um campo de modo alfa (desconhecido, direto, pré-multiplicado, opaco ou personalizado), e um arquivo pode deixá-lo como desconhecido. Entre os arquivos legados, apenas os FourCCs DXT2 e DXT4 indicam alfa pré-multiplicado; outros arquivos legados não o especificam e normalmente se presume que usem alfa direto.

Quando os arquivos DDS são importantes

Use DDS quando um pipeline de renderização se beneficia de mipmaps pré-calculados ou de compressão de texturas nativa da GPU. Verifique o suporte ao formato na API e no hardware de destino, pois variantes não compatíveis exigem conversão ou descompressão.

Como a Transloadit ajuda com arquivos DDS

A referência de formatos de imagem da Transloadit, que abrange seus Robots de imagem baseados no ImageMagick, como /image/resize, lista DDS e as variantes DXT1 e DXT5 como compatíveis com leitura e gravação.

A referência registra apenas o suporte a leitura e gravação no nível do formato. Ela não informa quais variantes de cabeçalho DDS ou formatos BC são decodificados, e o ImageMagick documenta dxt1, dxt5 e sem compressão como suas opções de gravação DDS, portanto teste arquivos representativos antes de depender de texturas com cabeçalho DX10 ou BC7.

Explore os formatos de arquivo e os recursos de compressão da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente