28
\$\begingroup\$

What is better to use Animation Sheets or Gifs? One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slow because of your code and updating in proper ticks.

What are the disadvantages to using Gifs and advantages Animation Sheets have over Gifs?

\$\endgroup\$
  • 7
    \$\begingroup\$ Then perhaps you should reword your question to something like "Why don't most major game engines use gifs for animated textures?" as they aren't commonly, at least that I know of, for good reasons. I think that'd give you technical points on why they aren't used versus a which is better question, which are not appropriate for SE sites. \$\endgroup\$ – Coburn Sep 27 '16 at 14:04
  • 39
    \$\begingroup\$ One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slow Why that? On what are you relying to make that assumption? A library? The file format specification? A gif file is still just data, you still need code to interpret it (render it at the correct speed) \$\endgroup\$ – hoffmale Sep 28 '16 at 3:37
  • 13
    \$\begingroup\$ What hoffmale said. GIFs aren't magic; their animation still needs to be controlled and executed by some software, including its timing, and in this case, that software is written by you. Honestly I wouldn't expect your Animation Sheet handling code to differ a huge amount from your GIF handling code. \$\endgroup\$ – Lightness Races in Orbit Sep 28 '16 at 10:25
  • 12
    \$\begingroup\$ The only difference between your spritesheet and GIF code, is that your GIF code will convert the GIF into a spritesheet and then call the spritesheet code ;) \$\endgroup\$ – MickLH Sep 28 '16 at 15:36
  • 6
    \$\begingroup\$ gif doesn't have any advantages. if you want inter-frame compression, then gif is approximately 30 times less efficient than a proper video codec, while also giving worse quality (for photorealistic stuff). \$\endgroup\$ – Sarge Borsch Sep 28 '16 at 15:50
90
\$\begingroup\$

GIF drawbacks:

  • very limited color palette, typically 256 colors with ugly dithering (yes, you can have more than 256 colors in animated GIF, but this is uncommon)
  • GPUs don't support GIF compression in hardware (means you will have to unpack them on CPU anyway)
  • you only get to pick ONE color for transparency (unless implementing custom processing)
  • no random access. All preceding GIF frames need to be read and decompressed to access a frame.
  • being compressed. You need dedicated decompression function in code. You can't choose different (better) compression algorithms. (yes, uncompressed GIFs exist too, but this is uncommon)

With custom format all these items get resolved very quickly. You have much more control over image format, quality, transparency, random access and compression (including GPU-supported formats alike DXT). Even better, you can prioritize features you need.

One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slow because of your code and updating in proper ticks.

Above statement is misleading. Syncing GIF fps with actual game fps is not much different than syncing custom sprites animation. In both cases you have exactly the same setup - a list of frames, desired framerate and render events. There is no magic powder in GIF - you will have to decompress GIF into spritesheet anyway, which defeats the purpose.

Of course some game engines may hide some of GIF issues behind the curtains, but then, same can be done with spritesheets in a better way.

Said that, there are some few cases where GIFs could kind of work. E.g. HTML/CSS GUIs, but these are quite rare and resource-hungry by themselves.

\$\endgroup\$
  • \$\begingroup\$ I don't understand "one color for transparency." What does it mean to have multiple colors for transparency? Are you talking about varying alpha values like applying a transparency gradient across a texture? \$\endgroup\$ – Erik Sep 28 '16 at 21:53
  • 3
    \$\begingroup\$ @Erik exactly that. Common GIF supports up to 256 colors, out of which just 1 can be marked to be transparent. Unlike other formats, where transparency typically has much wider range. \$\endgroup\$ – Kromster Sep 29 '16 at 4:16
  • \$\begingroup\$ @Kromster Actually, resource savvy sites use custom animation mechanism for animated images, such as CSS background-image position animation where the animation is palced on one big image, which is then moved by offsets. \$\endgroup\$ – Tomáš Zato Sep 29 '16 at 9:52
  • \$\begingroup\$ @TomášZato True. Sorry, did I state otherwise? \$\endgroup\$ – Kromster Sep 29 '16 at 10:36
  • 2
    \$\begingroup\$ @luk32 this is a drawback because there are much better compression methods than old GIF compression. So you either use suboptimal GIF compression or get to (de)compress twice (note that compressing already compressed data generally yields larger size too). \$\endgroup\$ – Kromster Sep 29 '16 at 11:02
33
\$\begingroup\$

In order to use any image file as a texture in a game, there must be a texture created on the GPU and the pixel data in the image file must be loaded to that texture.

GPUs do not support many of the features that image files on CPUs support. They don't support JPG compression, they don't support PNG compression, and with particular reference to GIFs, they don't support auto-animation.

So even if you did use a GIF file, you would still have to write your own animation and timing code anyway. GIF gives you nothing.

\$\endgroup\$
  • 30
    \$\begingroup\$ Note that "CPUs" don't support those things, web browsers and operating systems do. \$\endgroup\$ – immibis Sep 27 '16 at 21:33
  • 7
    \$\begingroup\$ What, nobody's written a GPGPU web browser yet? \$\endgroup\$ – Camille Goudeseune Sep 28 '16 at 20:52
  • 7
    \$\begingroup\$ @CamilleGoudeseune You laugh. I cry. \$\endgroup\$ – 3Dave Sep 29 '16 at 12:49
13
\$\begingroup\$

GIF has a limited color palette. (255) You have to implement parsing and animating the GIF too. So there is not a advancement in time nor in format's technical aspects.

\$\endgroup\$
  • 4
    \$\begingroup\$ 256 if you don't need transparency, 255 effective otherwise. \$\endgroup\$ – a CVn Sep 28 '16 at 15:17
  • \$\begingroup\$ @MichaelKjörling It's still 256 with transparency - just one of the colors is designated "transparent." I believe that information is stored in the header. \$\endgroup\$ – 3Dave Sep 29 '16 at 12:51
  • \$\begingroup\$ @DavidLively Hence "effective". The color is still there, but it can't be used as a opaque color. \$\endgroup\$ – a CVn Sep 29 '16 at 13:14
  • \$\begingroup\$ @Kromster yeah. Deleted. I can has good maths. \$\endgroup\$ – 3Dave Sep 30 '16 at 14:28

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.