Pourquoi la plupart des principaux moteurs de jeux n'utilisent-ils pas de gifs pour les textures animées?

28

Quoi de mieux pour utiliser des feuilles d'animation ou des gifs? Un avantage des Gifs par rapport aux feuilles d'animation est que vous n'avez pas à penser que les images vont trop vite ou trop lentement à cause de votre code et de la mise à jour en ticks appropriés.

Quels sont les inconvénients de l'utilisation des Gifs et les avantages des feuilles d'animation par rapport aux Gifs?

Arek Żyłkowski
la source
7
Alors peut-être devriez-vous reformuler votre question en quelque chose comme "Pourquoi la plupart des principaux moteurs de jeux n'utilisent-ils pas de gifs pour les textures animées?" car ils ne le sont pas souvent, du moins à ma connaissance, pour de bonnes raisons. Je pense que cela vous donnerait des points techniques sur la raison pour laquelle ils ne sont pas utilisés par rapport à une meilleure question, qui ne convient pas aux sites 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 slowPourquoi ça? Sur quoi comptez-vous pour faire cette supposition? Une bibliothèque? La spécification du format de fichier? Un fichier gif n'est encore que des données, vous avez toujours besoin de code pour l'interpréter (le rendre à la bonne vitesse)
hoffmale
13
Qu'est-ce que Hoffmale a dit. Les GIF ne sont pas magiques; leur animation doit encore être contrôlée et exécutée par certains logiciels, y compris son timing, et dans ce cas, ce logiciel est écrit par vous. Honnêtement, je ne m'attendrais pas à ce que votre code de gestion de feuille d'animation diffère énormément de votre code de gestion GIF.
Courses de légèreté avec Monica du
12
La seule différence entre votre feuille de calcul et votre code GIF, c'est que votre code GIF convertira le GIF en feuille de calcul et appellera ensuite le code de feuille de calcul;)
MickLH
6
gif n'a aucun avantage. si vous voulez une compression inter-images, le gif est environ 30 fois moins efficace qu'un codec vidéo approprié, tout en offrant une qualité inférieure (pour les trucs photoréalistes).
Sarge Borsch

Réponses:

91

Inconvénients GIF:

  • palette de couleurs très limitée, généralement 256 couleurs avec un tramage laid ( oui, vous pouvez avoir plus de 256 couleurs en GIF animé , mais cela est rare)
  • Les GPU ne prennent pas en charge la compression GIF dans le matériel (vous devrez de toute façon les déballer sur le processeur)
  • vous ne pouvez choisir qu'une seule couleur pour la transparence (sauf si vous implémentez un traitement personnalisé)
  • pas d'accès aléatoire. Toutes les trames GIF précédentes doivent être lues et décompressées pour accéder à une trame.
  • étant compressé. Vous avez besoin d'une fonction de décompression dédiée dans le code. Vous ne pouvez pas choisir différents (meilleurs) algorithmes de compression. (oui, les GIF non compressés existent aussi , mais c'est rare)

Avec un format personnalisé, tous ces éléments sont résolus très rapidement. Vous avez beaucoup plus de contrôle sur le format d'image, la qualité, la transparence, l'accès aléatoire et la compression (y compris les formats pris en charge par GPU comme DXT). Encore mieux, vous pouvez hiérarchiser les fonctionnalités dont vous avez besoin.

Un avantage des Gifs par rapport aux feuilles d'animation est que vous n'avez pas à penser que les images vont trop vite ou trop lentement à cause de votre code et de la mise à jour en ticks appropriés.

La déclaration ci-dessus est trompeuse. La synchronisation des fps GIF avec les fps de jeu réels n'est pas très différente de la synchronisation des animations de sprites personnalisés. Dans les deux cas, vous avez exactement la même configuration - une liste d'images, la fréquence d'images souhaitée et les événements de rendu. Il n'y a pas de poudre magique dans GIF - vous devrez de toute façon décompresser GIF dans une feuille de sprites, ce qui va à l'encontre du but.

Bien sûr, certains moteurs de jeu peuvent masquer certains problèmes GIF derrière les rideaux, mais cela peut être fait de manière meilleure avec les feuilles de sprites.

Cela dit, il y a quelques cas où les GIF pourraient fonctionner . Par exemple, les interfaces graphiques HTML / CSS, mais elles sont assez rares et gourmandes en ressources.

Kromster dit soutenir Monica
la source
Je ne comprends pas "une seule couleur pour la transparence". Que signifie avoir plusieurs couleurs pour la transparence? Parlez-vous de la variation des valeurs alpha comme l'application d'un dégradé de transparence sur une texture?
Erik
3
@Erik exactement cela. Le GIF commun prend en charge jusqu'à 256 couleurs, parmi lesquelles une seule peut être marquée pour être transparente. Contrairement à d'autres formats, où la transparence a généralement une plage beaucoup plus large.
Kromster dit soutenir Monica le
@Kromster En fait, les sites connaissant les ressources utilisent un mécanisme d'animation personnalisé pour les images animées, comme l' background-imageanimation de position CSS où l'animation est palquée sur une grande image, qui est ensuite déplacée par des décalages.
Tomáš Zato - Reinstate Monica
@ TomášZato True. Désolé, ai-je dit le contraire?
Kromster dit soutenir Monica le
2
@ luk32 c'est un inconvénient car il existe de bien meilleures méthodes de compression que l'ancienne compression GIF. Donc, vous utilisez soit une compression GIF sous-optimale, soit vous pouvez (dé) compresser deux fois (notez que la compression de données déjà compressées donne généralement une taille plus importante).
Kromster dit soutenir Monica le
32

Afin d'utiliser n'importe quel fichier image comme texture dans un jeu, il doit y avoir une texture créée sur le GPU et les données de pixels dans le fichier image doivent être chargées dans cette texture.

Les GPU ne prennent pas en charge de nombreuses fonctionnalités prises en charge par les fichiers image sur les processeurs. Ils ne prennent pas en charge la compression JPG, ils ne prennent pas en charge la compression PNG, et avec une référence particulière aux GIF, ils ne prennent pas en charge l'auto-animation .

Donc, même si vous avez utilisé un fichier GIF, vous devrez quand même écrire votre propre code d'animation et de synchronisation. GIF ne vous donne rien.

Maximus Minimus
la source
30
Notez que les «CPU» ne prennent pas en charge ces choses, contrairement aux navigateurs Web et aux systèmes d'exploitation.
user253751
7
Quoi, personne n'a encore écrit de navigateur Web GPGPU?
Camille Goudeseune
7
@CamilleGoudeseune Vous riez. Je pleure.
3Dave
13

GIF a une palette de couleurs limitée. (255) Vous devez également implémenter l'analyse et l'animation du GIF. Il n'y a donc pas d'avancement dans le temps ni dans les aspects techniques du format.

Piranha
la source
4
256 si vous n'avez pas besoin de transparence, 255 efficace sinon.
un CVn du
@ MichaelKjörling C'est toujours 256 avec la transparence - une seule des couleurs est désignée "transparente". Je crois que les informations sont stockées dans l'en-tête.
3Dave
@DavidLively D'où "efficace". La couleur est toujours là, mais elle ne peut pas être utilisée comme couleur opaque.
un CVn le
@Kromster ouais. Supprimé. Je peux avoir de bons mathématiques.
3Dave