DXTn

DXT, também referido como DXTC ou BCn (no DirectX 10), oficialmente denominado S3TC, é um conjunto de algoritmos e codecs de compressão aplicados sobre mapas de pixels de imagens. O conjunto converte blocos de 4×4 pixels (1024 bits) para até 64 ou 128 bits, dependendo do codec. Os algoritmos foram originalmente desenvolvidos pela S3 Graphics, notoriamente herdando desta sua denominação, porém muitas alternativas não-autenticadas existem agora, todas apresentando perda irrecuperável de dados.

Há muitos algoritmos e codecs diferentes para os diversos modelos, porém aqui trataremos especificamente dos mais populares, sendo estes: DXT1, DXT3, e DXT5.

Lembre-se, DXT NÃO é um formato de arquivo, mas um formato de dados contidos em arquivos, tais como DDS, DDT, TXD, etc.

Operação

Os algoritmos DXT tratam imagens como coleções de blocos de 4×4 pixels denominados ‘texels’. Para todo texel, o algoritmo seleciona duas cores do texel, cada qual determinando um fim de um escopo de 4 cores, onda as duas cores intermediárias são interpoladas. Os 16 pixels do texel são então associados a um índice de 2 bits (entre 0 e 3) que os mapeia ao escopo de cor.

Ainda as duas cores representativas são armazenadas como valores RGB de 16 bits (R5 G6 B5), assim sendo, cada texel requer 2×16 bits para as cores, mais 16×2 bits para os índices, resultando num total de 64 bits para cada texel, o que equivale a 4 bits por pixel. Assim, para qualquer conjunto de imagens havendo as mesmas dimensões, o tamanho comprimido será sempre o mesmo.

Alpha

E o que acontece quando a imagem tem um canal alpha (provavelmente transparência)? E nessa questão que entendemos efetivamente quais são os diferenciais dos codecs. Usando DXT5, o canal alpha é codificado usando um segundo conjunto de 64 bits para cada texel. DXT5 armazena informação de alpha dum jeito que é quase o mesmo para informação de cor.

Para armazenar informação do canal alpha, dois valores são selecionados e usados como os extremos para um alcance de valores de transparência, são estes valores representados em 8 bits cada, e os índices de alcance por 3 bits cada, permitindo gradientes de até 8 tons.

Vantagens e desvantagens

A principal vantagem de usar é a economia de tempo de carregamento. Formatos DXTs de texels são usados nativamente por sistemas de desenho e exibição de gráficos e podem ser lidos diretamente para dentro da VRAM com pouca sobrecarga e processos preparatórios. Em situações onde os muitos arquivos estão sendo dinamicamente alternados para dentro e fora das unidades de gráficos, o uso desta tecnologia pode render economias substanciais e reduzir o lag, especialmente com arquivos enormes de texturas.

A principal desvantagem de usar é a perca de qualidade. Aplicar a compressão ST3C sobre uma imagem é uma ação destrutiva. O que é processado por algum algoritmo DXT nunca será o mesmo como a imagem original, e em algum grau isso podem não ser sequer próximo.

Imagens com alto contraste, tais como impressões, provavelmente gerarão artefatos, particularmente com resoluções muito pequenas. Então não use DXTs para como formato de edição e arquivamento, use o formato Targa, por exemplo.

Limitação

Imagens comprimidas com DXT podem ser de qualquer dimensão expressada em potência de dois até o limite virtual ou física do seu software ou hardware, porém 4 é o limite mínimo; e provavelmente 2048 será o máximo. Assim sendo, 1024×512 está okey, mas 2048×2 pode até quebrar a aplicação. Isso porque, desde que DXT trabalha com texels, e texels são blocos de 4×4 pixels, 4 é o limite mínimo que DXT pode trabalhar numa imagem.

Codecs

A compressão DXT vem em muitos sabores. Felizmente a maioria são para situações comuns, você apenas necessitaria de considerar três deles, os três mais populares, como supracitado. DXT1, DXT3, e DXT5 formam a trindade DXT.

DXT1

  • RGB, 4 bits por pixel, sem canal alpha ou 1 bit (preto ou branco) de canal alpha. (aka DXT1a)
  • DXT1 é um raio fixo 8:1 de compressão.

Se sua imagem não requer um canal alpha, use o DXT1 sem alpha. Isso usa a mesma compressão que DXT3 e DXT5 para informação de cor, porém sem alpha, lhe oferecerá reduzir o tamanho do arquivo.

DXT3

  • ARGB, 8 bits por pixel, com canal alpha explícito.
  • DXT3 é um raio fixo 4:1 de compressão.

O método de DXT3 para armazenar alpha é melhor que o do DXT1 (como qualquer desgraça é melhor que DXT1) para arquivos que têm claramente delineado regiões e valores de alpha. Pode resultar em artefatos se usado em imagens com regiões suaves de alpha; neste caso, use DXT5.

DXT5

  • ARGB, 8 bits por pixel, com alpha interpolado.
  • DXT5 é o mesmo raio 4:1 de compressão do DXT3.

DXT5 é o codec na-dúvida-vem-comigo para a maioria das imagens que incluem um canal alpha. O custo é dobrado no tamanho do arquivo em comparação ao optar por DXT1. Se você não necessita de um canal alpha lindo, use DXT3. E se não houver um canal alpha, use DXT1.

Relacionado

Go Horse

Hoje, venho falar da metodologia Go Horse, que, para mim, é um estilo de vida. A metodologia Go Horse se aplica a tudo no universo,…

GTA San Andreas

GTA San Andreas é um game de ação aventureira combativa e condução veicular em terceira pessoa desenvolvido pela Rockstar North e publicado pela Rockstar Games…

Responses