Estou usando .png
s para minhas texturas e um sistema de arquivos virtual em um .zip
arquivo para o meu projeto de jogo. Isso significa que minhas texturas são compactadas e descomprimidas duas vezes. Quais são as soluções para esse problema de dupla compressão? Uma solução que ouvi falar é usar .tga
s para texturas, mas parece que há séculos atrás, desde que ouvi isso. Outra solução é implementar a descompressão no GPU
e, como isso é rápido, esquecer a sobrecarga.
textures
assets
compression
user1095108
fonte
fonte
Respostas:
O formato zip suporta vários algoritmos de compactação diferentes. Você pode usar um algoritmo diferente para cada arquivo no arquivo morto. Quando você deseja armazenar arquivos já compactados que não se beneficiam de compactação adicional (como PNG) em um arquivo compactado, é possível codificar esses arquivos com o algoritmo "armazenado" que não é compactado. A caixa de diálogo "Adicionar ao arquivo" do 7-zip permite que você escolha isso em "Força da compressão".
Mas quando você não possui apenas imagens, mas também outros recursos mais compactáveis em seus arquivos, pode ser bastante tedioso escolher o algoritmo para cada arquivo. Nesse caso, você pode optar por um formato de imagem não compactado em um arquivo compactado.
O formato TGA conhece vários modos diferentes, dos quais alguns são compactados e outros não. Quando você não deseja usar a compactação, escolha a opção correta nas opções de exportação do editor gráfico que está usando. Outro formato de imagem sem compactação é o BMP (Windows Bitmap).
Aqui está um teste que eu fiz. Adicionei a mesma imagem (um ativo do meu projeto atual) em diferentes formatos várias vezes a um arquivo zip, alguns com o algoritmo "deflate" na força normal e outro com "store". Desculpe pela GUI alemã. A segunda coluna é do tamanho descompactado, a terceira coluna é o algoritmo de compactação e a quarta coluna é do tamanho compactado.
Como você pode ver, a codificação deflacionada do PNG economizou apenas 0,3%, enquanto o BMP codificado pela deflação é reduzido para um décimo do arquivo original, que é ainda menor que a versão PNG. Isso me surpreendeu bastante. Eu esperava que o PNG fosse menor porque o método de compactação do PNG deve ser otimizado para dados de imagem, enquanto o ZIP não é. Uma explicação provável é que meu editor de imagens (GIMP) adicionou muitas metainformações aos arquivos PNG, o que não é feito para o BMP.
O TGA descompactado se comportou de maneira semelhante ao BMP em relação ao tamanho do arquivo antes e depois do zíper, enquanto a compactação do arquivo TGA compactado foi aprimorada ainda mais pelo ZIP, embora não tanto quanto as versões descompactadas.
Pode valer a pena experimentar com outros algoritmos que não desinflar e com outras configurações de força de compressão. Qual combinação terá os melhores resultados provavelmente dependerá do estilo de suas texturas. Mas você também pode avaliar o carregamento de ativos do seu jogo e fazer com que o desempenho da descompressão influencie sua decisão sobre qual configuração você usa.
Conclusão: quando você deseja evitar a compactação dupla e ainda ter um tamanho de arquivo baixo, use
PNG
com oStore
algoritmo zip ouBMP
com um algoritmo zip de compactação.fonte
Não se preocupe com isso.
Quando o algoritmo "desinflar" usado nos arquivos .zip encontra um bloco de dados que já está bem compactado, como os dados de pixel de uma imagem .png, ele descobre que não pode compactá-lo efetivamente e o armazena como literal dados não compactados. Isso leva muito pouca sobrecarga no final da descompressão para copiar.
http://en.wikipedia.org/wiki/DEFLATE
fonte
store
vez dedeflate
economizar tempo,deflate
tudo para compilar a versão.Parece que já foram dadas respostas muito boas, mas pensei em dar mais uma:
Solução: Não faça nada.
Fundamentação da petição: Não há nenhum problema declarado - sim, você está compactando as informações duas vezes, mas por que está preocupado com isso? O tamanho dos dados é muito grande? A descompressão é muito lenta? Isso é mais ou menos importante do que as dezenas de recursos que você pode adicionar, refinar, testar e / ou depurar neste momento?
fonte
Se você usar formatos especializados, como PNG e OGG, não precisará da compactação do ZIP.
PNG, OGG e outros formatos já compactados não ficarão muito menores compactando-os novamente como ZIP. 100 MB de PNG compactados ainda são ~ 100 MB.
Scripts, arquivos de configuração e outros formatos baseados em texto se beneficiam muito da compactação; no entanto, geralmente são pequenos em comparação, não armazenam muitos dados. Se o seu jogo é de 100 MB, os arquivos de texto podem gerar 1 MB de todo o jogo, mesmo que você possa torná-los 100 KB por compressão, você só ganhou 900 KB, menos de 1%, dificilmente vale o esforço.
Você pode até querer usar o sistema de arquivos diretamente, em vez de usar um sistema de arquivos virtual baseado em zip. Isso tornaria o patch muito fácil: você pode trocar os arquivos modificados.
fonte
.zip
ou não um arquivo. Por exemplo, na plataforma Android,.apk
é um.zip
arquivo que pode conter recursos.