Spritesheets valem a pena? Um zip é uma boa alternativa?

Aug 19 2020

Eu estava me perguntando se as spritesheets valem a pena. Estou fazendo um jogo com pixi.js e pensando em otimização, começando com o carregamento de ativos. Atualmente, tenho um arraya de todos os arquivos e uso PIXI.loader, mas sei que isso não é bom porque fará uma solicitação da web para todos os arquivos que demora muito, então devo descobrir uma maneira de carregá-los em uma solicitação da web. A primeira coisa que pensei foi em um spritesheet, mas depois pensei "e se eu apenas compactasse tudo e carregasse com algo como JSZip?" Eu sabia que já era possível (a partir deste projeto que carrega texturas pixi de um zip) e listei o que eu acho que são coisas boas e ruins em potencial:

Pontos positivos do Zip:

  • Compressão significa carregamento mais rápido de ativos
  • Compressão significa menor tamanho de construção ao fazer uma construção com elétron

Zip pontos ruins:

  • Requer o carregamento de uma biblioteca separada, o que significa maior tempo de carregamento e uso de mais RAM
  • Requer descompressão na memória, o que significa maior tempo de carregamento

Pontos positivos da planilha:

  • Não tem os cabeçalhos de todos os arquivos de imagem individuais
  • É muito utilizada por isso é uma técnica comprovada

Pontos negativos da planilha:

  • Sem compressão (ou pelo menos não comparável a compactação)
  • Mais de uma chamada de rede devido a limitações do telefone, impedindo às vezes arquivos acima de 2024x2024px, tornando necessário dividir planilhas
  • Furos vazios, pois todas as imagens não são do mesmo tamanho e quase sempre há um pouco de espaço deixado na spritesheet, o que significa pixels inúteis que ainda são transferidos pela rede

Não sou um desenvolvedor muito experiente, então tenho algumas perguntas:

  1. Perdi um ponto acima?
  2. As spritesheets geralmente valem a pena?
  3. Qual técnica das duas vale mais a pena? Eu poderia fazer as duas coisas, mas quero me concentrar primeiro em uma e deixar a outra em uma boa lista de ter.

Respostas

4 Theraot Aug 19 2020 at 01:12

Em primeiro lugar, já existem formatos de imagem com compressão. Em particular, o formato PNG oferece suporte à compactação sem perdas. Além disso, embora seja verdade que pegar um monte de PNGs e compactá-los pode ser um ganho de tamanho, fazer um atlas de textura (spritesheet ou semelhante) também reduzirá o tamanho de maneira semelhante, em particular se você classificar o nível de compressão PNG ao exportar a imagem.

Portanto, um atlas de textura exportado adequadamente fornecerá os benefícios listados na compactação.

Isso significa que você deve transformar tudo em uma única spritesheet? Não. Você deve juntar coisas que devem ser carregadas juntas.

Também pode ser importante notar que as spritesheets funcionam melhor quando as imagens são pequenas e de tamanhos regulares. Pode ser que você esteja trabalhando em um cenário para o qual as spritesheets não são adequadas.

É esse o caso? Eu não sei. Faça experiências. Se você não estiver disposto a tentar ambas as técnicas para decidir, a abordagem de engenharia sugere ir com o método comprovado, e isso seria um atlas de textura.

Você também pode estar interessado em empacotar algoritmos que podem minimizar os buracos no atlas de textura.