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
- Um DDS começa com o valor de identificação
DDS(0x20534444) e um cabeçalho de 124 bytes do tipoDDS_HEADER, portanto um leitor deve exigir pelo menos 128 bytes e verificar se o campodwSizedo cabeçalho é 124 e se o tamanho da estruturaDDS_PIXELFORMATincorporada é 32. Quando o formato de pixels defineDDPF_FOURCCcom o FourCCDX10, umDDS_HEADER_DXT10vem 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. - 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.
- 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. - 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_TEXTUREouDDSCAPS_COMPLEXestejam definidos e a calcular o passo de linha em vez de confiar emdwPitchOrLinearSize. 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 FourCCsDXT2eDXT4indicam 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
- Microsoft Learn: guia de programação para DDS (estrutura do arquivo, variantes, cálculo do passo de linha)
- Microsoft Learn: estrutura DDS_HEADER
- Microsoft Learn: estrutura DDS_HEADER_DXT10
- Microsoft Learn: compressão de texturas em blocos no Direct3D 11 (formatos e níveis mínimos de recursos)
- Microsoft Learn: compressão em blocos (Direct3D 10), tamanho virtual versus tamanho físico
- Microsoft Learn: uso de texturas comprimidas (Direct3D 9), DXT1 a DXT5 e alfa pré-multiplicado
- ImageMagick: formatos de imagem, entrada DDS e definições dds:
- Manual do Pillow: formatos de arquivo de imagem, DDS (suporte a leitura e gravação por variante)