DXT

S3TC, popularmente conhecido como DXT, e também referido como DXTC ou BCn (no DirectX 10), é uma família de algoritmos e codecs de compressão de mapas de pixels, ou melhor, de imagens. A família 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.

Como dito já de início, S3TC se trata de uma família de muitos algoritmos e codecs diferentes para os diversas necessidades, porém aqui trataremos especificamente dos mais populares, com DXT1, DXT3, e DXT5 sendo estes.

Tecnologia

S3TC NÃO é um formato de arquivo, mas um formato de dados contidos em arquivos. Arquivos armazenam e estruturam dados, e o produto de algoritmos S3TC são coleções de pixels, isto é, dados. Arquivos que alojam os dados de S3TC são (por exemplo) DirectDraw Surface (.dds), DirectDraw Texture (.ddt), e RW Texture Dictionary (.txd).

Os algoritmos S3TC tratam imagens como coleções de blocos de pixels denominados ‘texels’. Para todo texel, o algoritmo seleciona duas cores do texel, cada qual determinando um fim de um escopo de 4 cores, onde as duas cores intermediárias são interpoladas. Os texels são então associados a um índice que mapeia-os ao escopo de cor.

Alpha

E o que acontece quando a imagem tem um canal alpha (provavelmente transparência)? É 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, então formatos S3TC 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 tais algoritmos é a perca de qualidade. Aplicar a compressão S3TC sobre uma imagem é uma ação destrutiva. O que é processado por algum algoritmo DXT nunca será o mesmo como a imagem original, e em determinado grau isto pode 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 se usa DXTs como formato de edição e arquivamento; usam formatos como Targa, por exemplo.

Limitação

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

Algoritmos

Não há um valor em números da possível e provável quantidade de versões do S3TC que possa haver sido desenvolvidas, mas como apenas 3 delas se foram amplamente adotadas, facilita nosso artigo pois vamos nos limitar a DXT1, DXT3 e DXT5.

NomeCanaisBPPCompressãoAlpha
DXT1c (DC1)RGB48:1Não-suportado
DXT1a (DC1)ARGB48:1Suportado (1 bit)
DXT3 (DC2)ARGB84:1Explícito
DXT5 (DC3)ARGB84:1Interpolado

Se uma imagem não requer um canal alpha, então o algoritmo DXT1 (sem alpha) deveria ser usado, o qual usa a mesma compressão que DXT3 e DXT5 para informação de cor, porém sem alpha, o que reduziria o tamanho do arquivo.

O algoritmo DXT3 para armazenar alpha é melhor que o DXT1 (qualquer diabo é 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 é o algoritmo preferencial atualmente para a maioria das imagens que incluem um canal alpha. O custo é dobrado no tamanho do arquivo em comparação ao optar por DXT1. Quem não necessita de um canal alpha lindo pode usar DXT3; e se não houver um canal alpha, pode usar DXT1.

Postagens relacionadas

Comentários