A textura BC7 com alfa tem o mesmo tamanho que BC7 sem alfa

Então eu fiz uma textura. Salvei a textura RGB com compactação BC7, em seguida, adicionou o canal alfa [mapa especular] com vários níveis de tons de cinza e salvou o arquivo novamente como RGBA com compactação BC7. O arquivo resultante tem o mesmo tamanho que aquele sem alfa, mas contém informações adicionais – canal alfa. Como isso é possível? Você não pode comer bolo e comer bolo como eu entendo, então há algum compromisso para garantir o mesmo tamanho?

Estou usando o photoshop com o plugin Intel DDS.

Resposta

BC7 sempre codifica efetivamente 4 canais. Isso faz parte da natureza do formato. Ativar alfa significa que o compressor lerá e usará o valor alfa em sua imagem de origem, mas isso é tudo.

Todas as imagens compactadas BC7 de uma determinada dimensão têm o mesmo tamanho, já que BC7 compacta cada 4×4 grupo de texels em 128 bits. Mas isso não significa que eles tenham a mesma qualidade .

BC7 é um formato de codificação adaptável. Embora cada bloco tenha um tamanho fixo (tanto espacial quanto bit a bit), cada bloco armazena quantos canais aquele bloco realmente compacta e a maneira como eles se correlacionam. As especificidades são complexas , mas a vantagem geral é que o compressor descobre por bloco que tipo de compressão funciona melhor para um bloco específico. Se o compressor puder olhar para um bloco e ver que o alfa para todos os texels é 1.0, então ele pode gastar mais bits dos 128 bits nas cores e menos no alfa.

Como tal, uma textura " sem alfa " é exatamente como uma textura com alfa onde cada texel tem um alfa de 1. Esses blocos vão gastar a maior parte de seus bits nas partes não alfa dos texels, desperdiçando apenas alguns bits em um campo " modo " que permite ao descompressor saber que o alfa é uma constante 1.0.

Isso também significa que, se sua textura tem um alfa variável, mas partes dela têm um alfa constante, BC7 pode codificar essas áreas alfa constantes com menos bits, para que mais bits podem ser gastos na codificação de cores aprimorada.

Portanto, você não deve sentir que há um problema porque as duas chaves de compressão produziram o mesmo número de bytes.

Resposta

Aqui está um ar artigo sobre o formato BCn: clique aqui . Foi escrito por Nathan Reed, que é bastante ativo neste site. Ele provavelmente passará por aqui e responderá sua pergunta com mais detalhes, embora eu ache que o artigo explicará tudo o que você precisa saber.

A parte mais relevante para sua pergunta parece ser esta seção do artigo:

BC significa “compressão de bloco”, e os formatos BCn operam em termos de 4 × 4 blocos de pixels. Todas as imagens são divididas nesses pequenos blocos, e cada bloco é independente – os dados para decodificá-lo estão todos em um bloco contíguo na memória . Além disso, o tamanho de cada bloco compactado é fixo – 8 ou 16 bytes , dependendo de qual formato BCn está sendo usado. Isso representa uma taxa de compactação de 4: 1 ou 8: 1, se a imagem de origem estiver no formato RGBA de 8 bits.

Contanto que seu pixel a contagem não muda, o tamanho da textura também não muda. No entanto, quanto mais canais você usar (apenas 3 e 4 são suportados pelo BC7 de acordo com a documentação da Microsoft ), menos informações você pode armazenar por canal de cor em um quadra. Isso significa que você perde mais informações devido à compressão ao usar RGBA em vez de RGB.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *