Qual é o estado da arte no envio de gráficos de jogos, como muitos pequenos arquivos BMP? [fechadas]


9

Temos muitos arquivos BMP pequenos que eu acho que seriam mais fáceis de copiar se os tivéssemos combinados em um grande TAR / ZIP / qualquer que seja.

Qual é o estado da arte no envio de gráficos de jogos?

Estamos usando C # e estamos cientes do zlib. Basta fazer um brainstorming para ver se existem outras soluções melhores que o zlib.

Respostas:


7

Você também pode procurar no SharpZipLib ou no DotNetZip - o DotNetZip fornece acesso Streamdireto a um arquivo , o que é útil, pois a maioria das bibliotecas C # por aí pode carregar de fluxos (em vez de arquivos). Além disso, o DotNetZip usa o Ms-PL (tipo BSD), em vez da GPL, com uma exceção legalmente questionável.

Outra opção é usar atlas de textura - em vez de muitas imagens pequenas terem algumas grandes. Na verdade, eles carregam um pouco mais rápido e são um pouco mais rápidos no tempo de execução, se você ficar esperto com a maneira como os desenha.

Finalmente, você pode executar cada tipo de ativo através do compressor sem perdas relevante (PNG, FLAC etc.) e armazená-los em um arquivo simples (basicamente um arquivo zip com a compactação desativada). Lembre-se de evitar a compactação de dados compactados, pois isso aumentará o tamanho na maioria dos casos.

Alguma técnica anterior:

  • MPQ : Provavelmente, o melhor possível para os ativos de jogos, as pesquisas foram projetadas para serem rápidas (tabela de hash baseada em disco etc.). Cada tipo de arquivo (que é suportado) possui um compressor exclusivo.
  • Quake PAK : Essa é basicamente uma estrutura de arquivo simples.
  • Doom WAD : Um pouco específico para Doom, mas vale a pena investigar.

1

Uma opção é armazenar imagens no mesmo formato de compactação usado para criar texturas compactadas. Isso tem a vantagem de não ser convertido de um formato com perdas para outro, mas você armazena os dados em um formato com perdas. Dependendo das texturas, ainda pode haver algo a ganhar ao armazenar esses arquivos em um arquivo compactado.

Veja esta resposta para obter mais informações sobre texturas compactadas: https://gamedev.stackexchange.com/a/5177/3505


0

O ZLIB pode ser uma boa resposta, mas se você estiver ciente das pessoas que estão abrindo seus bens, também poderá criar seu próprio formato de arquivo para armazenar seus bens, embora não seja tão difícil assim.

Aqui está como você pode fazer isso.

Está em C, mas não deve ser tão difícil de aprender, pois C # é parecido com C e C ++.

Obviamente, as pessoas que ainda possuem mais conhecimento podem pegar seus recursos, você pode adicionar pouca criptografia, se quiser, sem muito esforço.

Isso pode ser muito útil, mas apenas juntará seus arquivos. Para compressão também, você tem duas opções.

  1. Crie todo o arquivo de recursos, compactá-lo e enviá-lo.
    Este método é fácil, mas não muito bom; descompacte tudo se desejar usar apenas um recurso.

  2. Compacte todos os recursos e adicione-os compactados ao arquivo de recurso.
    Isso também é bom, você terá um pequeno aumento no tamanho ao lado do método 1, porque cada arquivo é compactado separadamente, mas é melhor se você quiser flexibilidade.

Cada método tem suas próprias desvantagens, você deve escolher sabiamente. Geralmente, se o seu jogo possui um número bastante baixo de recursos, o método 1 deve ser melhor. Se você tiver MUITOS, o método 2 deve se adequar a você, porque o tamanho de todos os recursos juntos sobrecarregará o ganho extra.

Para bibliotecas de compactação, você tem:

  • O meio mais famoso, Zlib
  • Aquele com a descompressão mais rápida, LZO
  • A excelente taxa de compactação, 7-Zip

Eu iria com o LZO se eu quiser acesso rápido ao jogo, para que você não tenha medo de descompactar em tempo real, o 7-Zip se eu quiser que os arquivos sejam encolhidos MUITO ou o próprio Zlib, se eu quiser uma proporção e tamanho de descompressão equilibrados.
A escolha é sua: D

Ah, é claro que existem outros algoritmos para compactar dados, e você pode encontrá-los no Google .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.