Variante de compressão de textura BC
Habilita a compactação do bloco em texturas cujo formato de pixel é uma variação de B8G8R8X8, B8G8R8A8 ou R8G8B8A8.
Interpretação
Os formatos de compactação em bloco, como BC1, BC2 e BC3, ocupam menos espaço na memória do que os formatos de imagem não compactados e, por isso, consomem menos largura de banda de memória. Quando compactado, o formato BC1 (anteriormente conhecido como DXT1) fica oito vezes menor que os formatos não compactados que usam 32 bits por pixel. Já o formato BC3 (anteriormente conhecido como DXT5) fica quatro vezes menor. A diferença entre os formatos BC1 e BC3 é que o BC3 é compatível com canal alfa com compactação em bloco e o BC1, não. Apesar da alta proporção de compactação, a redução da qualidade de imagem das texturas comuns é mínima. No entanto, a compactação do bloco de alguns tipos de textura — por exemplo, as texturas que têm variações de cor consideráveis em uma pequena área — pode apresentar resultados inaceitáveis.
Se as texturas forem adequadas para a compactação em bloco e não for necessário manter a fidelidade exata com as cores, você pode usar um formato compactado em bloco para reduzir o uso da memória e consumir menos largura de banda.
Comentários
Para compactar texturas, use um formato de compactação em bloco em cada chamada de ID3DDevice::CreateTexture2D, que cria uma textura de origem. As texturas são compactadas quando:
O objeto D3D11_TEXTURE2D_DESC apresentado a pDesc descreve um recurso do sombreador inalterável, ou seja:
O membro BindFlags tem apenas o sinalizador D3D11_BIND_SHADER_RESOURCE definido.
O membro Uso está definido como D3D11_USAGE_DEFAULT ou D3D11_USAGE_IMMUTABLE.
O membro CPUAccessFlags está definido como 0 (sem acesso à CPU).
O membro SamplerDesc tem seu membro Count definido como 1 (sem MSAA (suavização de amostra múltipla)).
Os dados iniciais são fornecidos para a chamada de CreateTexture2D.
Estes são os formatos de origem compatíveis e seus respectivos formatos compactados em blocos:
Formato original (de) |
Formato compactado (para) |
---|---|
DXGI_FORMAT_B8G8R8X8_UNORM |
BC1 (antigo DXT1) |
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB |
BC1 |
DXGI_FORMAT_B8G8R8X8_TYPELESS |
BC1 |
DXGI_FORMAT_B8G8R8A8_UNORM |
BC3 (antigo DXT5) |
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB |
BC3 |
DXGI_FORMAT_B8G8R8A8_TYPELESS |
BC3 |
DXGI_FORMAT_R8G8B8A8_UNORM |
BC3 |
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB |
BC3 |
DXGI_FORMAT_R8G8B8A8_TYPELESS |
BC3 |
Se o formato da sua textura não consta nessa tabela, a textura não foi modificada.
Restrições e limitações
No momento, algumas texturas criadas com formatos de imagens que são variações de B8G8R8A8 ou R8G8B8A8 não usam o canal alfa, mas a variante não tem como obter essa informação. Para manter a exatidão caso o canal alfa seja usado, a variante sempre codifica esses formatos em um formato BC3 menos eficiente. Você pode ajudar a Análise de quadros de gráficos a compreender melhor o potencial de desempenho de renderização de seu aplicativo com essa variante. Para isso, use uma variação do formato de imagem B8G8R8X8 quando não estiver usando o canal alfa para que a variante possa usar o formato BC1, que é mais eficiente.
Exemplo
Essa variante compacta as texturas em blocos no tempo de execução, antes da chamada de CreateTexture2D. Essa abordagem não é recomendada para códigos de produção porque as texturas não compactadas consomem mais espaço em disco. Além disso, a etapa adicional necessária pode aumentar consideravelmente o tempo de carregamento no aplicativo porque a compactação em blocos requer muitos recursos computacionais para realizar a codificação. Em vez disso, recomendamos que você faça a compactação das texturas quando não estiver conectado, usando um editor ou processador de imagens que faça parte do pipeline da sua compilação. Essas abordagens diminuem o espaço necessário em disco, eliminam a sobrecarga do tempo de execução no aplicativo e proporcionam mais tempo de processamento para que as imagens tenham a melhor qualidade possível.