Por que a maioria dos principais mecanismos de jogos não usa gifs para texturas animadas?

28

O que é melhor usar folhas de animação ou gifs? Uma vantagem dos GIFs em relação às Folhas de animação é que você não precisa pensar em quadros indo muito rápido ou muito devagar por causa do seu código e atualizando-os em tiques adequados.

Quais são as desvantagens do uso de gifs e as vantagens das Folhas de animação sobre os gifs?

Arek Żyłkowski
fonte
7
Talvez você deva reformular sua pergunta para algo como "Por que a maioria dos principais mecanismos de jogos não usa gifs para texturas animadas?" como eles não são comumente, pelo menos que eu saiba, por boas razões. Eu acho que isso lhe daria pontos técnicos sobre por que eles não são usados ​​versus uma pergunta que é melhor, que não é apropriada para sites de SE.
Coburn
39
One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slowPorquê isso? Em que você está confiando para fazer essa suposição? Uma biblioteca? A especificação do formato do arquivo? Um arquivo GIF é ainda apenas de dados, você ainda precisa de código para interpretá-lo (torná-lo na velocidade correta)
hoffmale
13
O que hoffmale disse. GIFs não são mágicos; a animação deles ainda precisa ser controlada e executada por alguns softwares, incluindo o tempo e, nesse caso, esse software é escrito por você. Honestamente, eu não esperaria que o código de manipulação da Folha de animação diferisse muito do código de manipulação do GIF.
Lightness Races com Monica
12
A única diferença entre o seu spritesheet e código GIF, é que seu código GIF irá converter o GIF em um spritesheet e, em seguida, chamar o código spritesheet;)
MickLH
6
gif não tem nenhuma vantagem. se você deseja compactação entre quadros, o gif é aproximadamente 30 vezes menos eficiente que um codec de vídeo adequado, além de oferecer pior qualidade (para material fotorrealista).
Sarge Borsch

Respostas:

91

Desvantagens do GIF:

  • paleta de cores muito limitada, geralmente 256 cores com pontilhado feio ( sim, você pode ter mais de 256 cores em GIF animado , mas isso é incomum)
  • As GPUs não suportam compactação GIF no hardware (significa que você precisará descompactá-las na CPU de qualquer maneira)
  • você só escolhe uma cor para obter transparência (a menos que implemente o processamento personalizado)
  • sem acesso aleatório. Todos os quadros GIF anteriores precisam ser lidos e descompactados para acessar um quadro.
  • sendo comprimido. Você precisa da função de descompressão dedicada no código. Você não pode escolher diferentes (melhores) algoritmos de compactação. (sim, GIFs não compactados também existem , mas isso é incomum)

Com o formato personalizado, todos esses itens são resolvidos muito rapidamente. Você tem muito mais controle sobre o formato da imagem, qualidade, transparência, acesso aleatório e compactação (incluindo formatos compatíveis com GPU, DXT). Ainda melhor, você pode priorizar os recursos necessários.

Uma vantagem dos GIFs em relação às Folhas de animação é que você não precisa pensar em quadros indo muito rápido ou muito devagar por causa do seu código e atualizando-os em tiques adequados.

A declaração acima é enganosa. Sincronizar fps GIF com fps reais de jogos não é muito diferente de sincronizar animação de sprites personalizados. Nos dois casos, você tem exatamente a mesma configuração - uma lista de quadros, a taxa de quadros desejada e os eventos de renderização. Não há pó mágico no GIF - você terá que descompactar o GIF em planilha de qualquer maneira, o que anula o objetivo.

É claro que alguns mecanismos de jogo podem ocultar alguns dos problemas de GIF por trás das cortinas, mas o mesmo pode ser feito com as planilhas de forma melhor.

Dito isso, existem alguns casos em que os GIFs podem funcionar . Por exemplo, GUIs HTML / CSS, mas elas são bastante raras e exigem recursos por si mesmas.

Kromster diz apoio Monica
fonte
Não entendo "uma cor para transparência". O que significa ter várias cores para transparência? Você está falando sobre a variação de valores alfa, como a aplicação de um gradiente de transparência em uma textura?
Erik
3
@ Erik exatamente isso. O GIF comum suporta até 256 cores, das quais apenas 1 pode ser marcada para ser transparente. Ao contrário de outros formatos, onde a transparência normalmente tem um alcance muito maior.
Kromster diz apoio Monica
@Kromster Na verdade, sites com mais recursos usam mecanismos de animação personalizados para imagens animadas, como a background-imageanimação de posição CSS , onde a animação é destacada em uma imagem grande, que é movida por compensações.
Tomáš Zato - Restabelece Monica
@ TomášZato True. Desculpe, eu indiquei o contrário?
Kromster diz apoio Monica 29/09/16
2
@ luk32 isto é uma desvantagem, porque existem métodos de compressão muito melhores do que a compressão GIF antiga. Portanto, você usa a compactação GIF abaixo do ideal ou consegue (des) compactar duas vezes (observe que a compactação de dados já compactados geralmente também gera tamanho maior).
Kromster diz apoio Monica
32

Para usar qualquer arquivo de imagem como textura em um jogo, deve haver uma textura criada na GPU e os dados de pixel no arquivo de imagem devem ser carregados nessa textura.

As GPUs não suportam muitos dos recursos suportados pelos arquivos de imagem nas CPUs. Eles não suportam a compactação JPG, não suportam a compactação PNG e, com particular referência aos GIFs, não suportam a animação automática .

Portanto, mesmo que você tenha usado um arquivo GIF, ainda assim precisará escrever sua própria animação e código de tempo. O GIF não oferece nada para você.

Maximus Minimus
fonte
30
Observe que "CPUs" não suportam essas coisas, navegadores da web e sistemas operacionais.
user253751
7
O que, ninguém escreveu ainda um navegador da GPGPU?
Camille Goudeseune
7
@CamilleGoudeseune Você ri. Eu choro.
3Dave
13

O GIF tem uma paleta de cores limitada. (255) Você também deve implementar a análise e animação do GIF. Portanto, não há avanço no tempo nem nos aspectos técnicos do formato.

Piranha
fonte
4
256 se você não precisar de transparência, 255 será eficaz.
um CVn
@ MichaelKjörling Ainda é 256 com transparência - apenas uma das cores é designada "transparente". Eu acredito que as informações são armazenadas no cabeçalho.
usar o seguinte texto
@DavidLively Daí "eficaz". A cor ainda está lá, mas não pode ser usada como uma cor opaca.
a CVn
@Kromster yeah. Excluído. Eu posso ter uma boa matemática.
precisa saber é o seguinte