Eu estive pesquisando texturas do PowerVR e encontrei várias texturas que aparentemente são 2 bits por pixel. Isso, francamente, confunde minha mente. Como obter preservação de cores decente pela metade, quando você tem apenas 4 estados possíveis por pi por pixel? Eu adoraria quaisquer recursos por aí que falem sobre a compressão por trás de tal feito. Obrigado!
textures
compression
Toji
fonte
fonte
Respostas:
A codificação PVRTC 2BPP, conforme apresentada neste documento, divide uma imagem em blocos de 8x4-texel e compacta cada bloco de modo que apenas duas cores RGB sejam armazenadas para cada trinta e dois blocos de texel.
Nenhum dos trinta e dois texels armazena uma cor própria - cada texel armazena apenas informações sobre como se misturar entre as duas cores RGB de seu bloco 8x4-texel.
Se a imagem de origem tiver um bloco texel 8x4 com um arco-íris de 32 cores, a compactação PVRTC 2BPP fará um trabalho muito ruim para manter sua qualidade, porque no PVRTC 2BPP cada bloco texel 8x4 tem apenas duas cores RGB para combinar.
fonte
A compactação de textura não compacta pixels. Comprime blocos de pixels. Quando um pixel individual é referenciado, a GPU calcula qual bloco representa o pixel. Em seguida, processa todo o bloco para obter a cor desse pixel.
Um exemplo
Vamos supor que o tamanho do bloco seja 4x4 pixels em uma textura RGB. Descompactado, cada bloco consome
4x4x3 = 48
bytes na memória de textura.Agora, o algoritmo de compactação calcula a média de cada canal (RGB) e a armazena no bloco (3 bytes). Agora vamos dar a cada pixel 2 bits para ajustar a média para que o pixel fique mais próximo da cor original. Isso é outro
4x4x2x3/8 = 12
bytes.O total de bytes usados por este compressor recém-inventado é de 15 bytes por bloco, uma taxa de compressão de 31,25%.
Meu compressor mítico usa 7,5 bpp. Isso não é tão bom quanto o pvrtc de 2 bpp pode alcançar, mas agora você tem uma idéia aproximada de como 2 bbp pode ser alcançado.
update:
Acabei de olhar a página da wikipedia para pvrtc . Parece que o pvrtc não usa compactação baseada em bloco tradicional. Aqui está o artigo que descreve como a compressão baseada em bloco funciona e como o pvrtc difere. Nota especial: Os filtros baseados em bloco podem produzir imagens com aparência decente usando 4bpp (sem alfa), enquanto o nvrtc pode fazê-lo com 2bpp.
fonte
@Toji, o site em que o jornal está é um pouco temperamental, mas funcionou para mim esta manhã. Caso contrário, se você tiver acesso ao ACM / SIGGRAPH, ele será hospedado aqui . Estranhamente, ele também estava no site do desenvolvedor do IMG / PowerVR (registro gratuito), mas não consigo encontrar a seção correta. :-(
[UPDATE] Ainda está no site IMG aqui [/ UPDATE]
@ BMCNET: PVRTC não quebra a textura em blocos como, por exemplo, ETC ou S3TC. FWIW, experimentei texturas baseadas em blocos, mas não consegui encontrar uma maneira de empacotar dados suficientes em blocos independentes e ainda assim obter os resultados desejados. Em vez disso, é um pouco mais de um sistema de compressão de textura 'global'. Ele possui 2 imagens de baixa resolução, que aumentam bilinearmente para a resolução desejada e, em seguida, as misturam em uma base de texel por texel.
fonte