Compartilhar via


Recursos de textura compactada

Os mapas de textura são imagens digitalizadas desenhadas em formas tridimensionais para adicionar detalhes visuais. Eles são mapeados nessas formas durante a rasterização, e o processo pode consumir grandes quantidades do barramento do sistema e da memória. Para reduzir a quantidade de memória consumida por texturas, o Direct3D dá suporte à compactação de superfícies de textura. Alguns dispositivos Direct3D dão suporte a superfícies de textura compactadas nativamente. Nesses dispositivos, quando você cria uma superfície compactada e carrega os dados nela, a superfície pode ser usada no Direct3D como qualquer outra superfície de textura. O Direct3D lida com a descompactação quando a textura é mapeada para um objeto 3D.

Eficiência de armazenamento e compactação de textura

Todos os formatos de compactação de textura são potências de dois. Embora isso não signifique que uma textura seja necessariamente quadrada, significa que x e y são potências de dois. Por exemplo, se uma textura for originalmente 512 por 128 bytes, o próximo mipmapping seria 256 por 64 e assim por diante, com cada nível diminuindo em uma potência de dois. Em níveis mais baixos, onde a textura é filtrada para 16 por 2 e 8 por 1, haverá bits desperdiçados porque o bloco de compactação é sempre um bloco de texels de 4 por 4. As partes não utilizadas do bloco são acolchoadas.

Embora haja bits desperdiçados nos níveis mais baixos, o ganho geral ainda é significativo. O pior caso é, em teoria, uma textura 2K por 1 (2⁰ de potência). Aqui, apenas uma única linha de pixels é codificada por bloco, enquanto o restante do bloco não é usado.

Misturando formatos em uma única textura

É importante observar que qualquer textura única deve especificar que seus dados são armazenados como 64 ou 128 bits por grupo de 16 texels. Se blocos de 64 bits - ou seja, formato de compactação de bloco BC1 - forem usados para a textura, é possível misturar os formatos alfa opaco e de 1 bit por bloco dentro da mesma textura. Em outras palavras, a comparação da magnitude inteira sem sinal de color_0 e color_1 é executada exclusivamente para cada bloco de 16 texels.

Depois que os blocos de 128 bits são usados, o canal alfa deve ser especificado no modo explícito (formato BC2) ou interpolado (formato BC3) para toda a textura. Assim como acontece com a cor, quando o modo interpolado (formato BC3) é selecionado, oito alfas interpolados ou seis modos alfas interpolados podem ser usados bloco por bloco. Novamente, a comparação de magnitude de alpha_0 e alpha_1 é feita exclusivamente bloco a bloco.

O Direct3D fornece serviços para compactar superfícies que são usadas para texturizar modelos 3D. Esta seção fornece informações sobre como criar e manipular os dados em uma superfície de textura compactada.

Nesta seção

Tópico Descrição

Texturas opacas e alfa de 1 bit

O formato de textura BC1 é para texturas opacas ou com uma única cor transparente.

Texturas com canais alfa

Há duas maneiras de codificar mapas de textura que exibem transparência mais complexa. Em cada caso, um bloco que descreve a transparência precede o bloco de 64 bits já descrito. A transparência é representada como um bitmap 4x4 com 4 bits por pixel (codificação explícita) ou com menos bits e interpolação linear análoga ao que é usado para codificação de cores.

Compactação de bloco

A compactação de bloco é uma técnica de compactação de textura com perdas para reduzir o tamanho da textura e o volume de memória, proporcionando um aumento de desempenho. Uma textura compactada em bloco pode ser menor do que uma textura com 32 bits por cor.

Formatos de textura compactada

Esta seção contém informações sobre a organização interna de formatos de textura compactados. Você não precisa desses detalhes para usar texturas compactadas, pois pode usar funções do Direct3D para conversão de e para formatos compactados. No entanto, essas informações são úteis se você deseja operar diretamente em dados de superfície compactados.

 

Texturas