Warum verwenden die meisten großen Spiele-Engines keine Gifs für animierte Texturen?


28

Was ist besser, um Animationsblätter oder Gifs zu verwenden? Ein Vorteil von Gifs gegenüber Animationsblättern besteht darin, dass Sie nicht daran denken müssen, dass Frames aufgrund Ihres Codes zu schnell oder zu langsam werden und in den richtigen Ticks aktualisiert werden.

Was sind die Nachteile bei der Verwendung von Gifs und welche Vorteile haben Animationsblätter gegenüber Gifs?


7
Dann sollten Sie Ihre Frage vielleicht umformulieren zu "Warum verwenden die meisten großen Spiele-Engines keine GIFs für animierte Texturen?" Zumindest das weiß ich aus guten Gründen. Ich denke, das würde Ihnen technische Hinweise geben, warum sie nicht verwendet werden, im Gegensatz zu einer besseren Frage, die für SE-Sites nicht geeignet ist.
Coburn

39
One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slowWarum das? Worauf verlassen Sie sich, um diese Annahme zu treffen? Eine Bibliothek? Die Dateiformatspezifikation? Eine GIF-Datei ist immer noch nur Daten, Sie benötigen immer noch Code, um sie zu interpretieren (mit der richtigen Geschwindigkeit rendern)
hoffmale

13
Was hoffmale gesagt hat. GIFs sind keine Zauberei. Ihre Animation muss noch von einer Software gesteuert und ausgeführt werden, einschließlich des Timings. In diesem Fall wird diese Software von Ihnen geschrieben. Ehrlich gesagt würde ich nicht erwarten, dass Ihr Code für die Bearbeitung von Animationsblättern erheblich von Ihrem Code für die Bearbeitung von GIFs abweicht.
Leichtigkeit Rennen mit Monica

12
Der einzige Unterschied zwischen Ihrem Spritesheet und dem GIF-Code besteht darin, dass Ihr GIF-Code das GIF in ein Spritesheet konvertiert und dann den Spritesheet-Code aufruft;)
MickLH

6
gif hat keine vorteile. Wenn Sie eine Interframe-Komprimierung wünschen, ist GIF ungefähr 30-mal weniger effizient als ein geeigneter Videocodec, bietet aber auch eine schlechtere Qualität (für fotorealistische Inhalte).
Sarge Borsch

Antworten:


91

GIF-Nachteile:

  • Sehr begrenzte Farbpalette, normalerweise 256 Farben mit unschönem Dithering ( ja, in animiertem GIF können mehr als 256 Farben verwendet werden , dies ist jedoch ungewöhnlich)
  • GPUs unterstützen keine GIF-Komprimierung in der Hardware (dh Sie müssen sie ohnehin auf der CPU entpacken)
  • Sie dürfen nur EINE Farbe für die Transparenz auswählen (es sei denn, Sie implementieren eine benutzerdefinierte Verarbeitung).
  • kein wahlfreier Zugriff. Alle vorhergehenden GIF-Frames müssen gelesen und dekomprimiert werden, um auf einen Frame zuzugreifen.
  • komprimiert werden. Sie benötigen eine spezielle Dekomprimierungsfunktion im Code. Sie können keine anderen (besseren) Komprimierungsalgorithmen auswählen. (Ja, es gibt auch unkomprimierte GIFs , aber dies ist ungewöhnlich.)

Mit dem benutzerdefinierten Format werden all diese Probleme sehr schnell behoben. Sie haben viel mehr Kontrolle über Bildformat, Qualität, Transparenz, Direktzugriff und Komprimierung (einschließlich GPU-unterstützter Formate wie DXT). Darüber hinaus können Sie die von Ihnen benötigten Funktionen priorisieren.

Ein Vorteil von Gifs gegenüber Animationsblättern besteht darin, dass Sie nicht daran denken müssen, dass Frames aufgrund Ihres Codes zu schnell oder zu langsam werden und in den richtigen Ticks aktualisiert werden.

Die obige Aussage ist irreführend. Das Synchronisieren von GIF-Bildern pro Sekunde mit tatsächlichen Spiel-Bildern pro Sekunde unterscheidet sich nicht wesentlich vom Synchronisieren benutzerdefinierter Sprites-Animationen. In beiden Fällen haben Sie genau das gleiche Setup - eine Liste mit Frames, gewünschter Framerate und Renderereignissen. Es gibt kein magisches Pulver in GIF - Sie müssen GIF ohnehin in ein Spritesheet dekomprimieren, was den Zweck zunichte macht.

Natürlich verbergen einige Spiele-Engines möglicherweise einige GIF-Probleme hinter den Kulissen, aber das Gleiche lässt sich mit Spritesheets besser tun.

Gesagt, es gibt einige wenige Fälle, in denen GIFs funktionieren könnten . ZB HTML / CSS-GUIs, aber diese sind an sich recht selten und ressourcenhungrig.


Ich verstehe "eine Farbe für Transparenz" nicht. Was bedeutet es, mehrere Farben für Transparenz zu haben? Sprechen Sie über das Variieren von Alpha-Werten wie das Anwenden eines Transparenzgradienten auf eine Textur?
Erik

3
@Erik genau das. Common GIF unterstützt bis zu 256 Farben, von denen nur eine als transparent markiert werden kann. Im Gegensatz zu anderen Formaten, bei denen Transparenz normalerweise einen viel größeren Bereich aufweist.
Kromster sagt Unterstützung Monica

@Kromster Tatsächlich verwenden ressourcenschonende Websites einen benutzerdefinierten Animationsmechanismus für animierte Bilder, z. B. eine CSS- background-imagePositionsanimation, bei der die Animation auf ein großes Bild aufgeteilt wird, das dann um Offsets verschoben wird.
Tomáš Zato - Wiedereinsetzung von Monica

@ TomášZato Richtig. Entschuldigung, habe ich etwas anderes angegeben?
Kromster sagt Unterstützung Monica

2
@ Luk32 Das ist ein Nachteil, weil es viel bessere Komprimierungsmethoden als die alte GIF-Komprimierung gibt. Sie können also entweder die suboptimale GIF-Komprimierung verwenden oder die Komprimierung zweimal rückgängig machen (beachten Sie, dass die Komprimierung bereits komprimierter Daten im Allgemeinen auch zu einer größeren Größe führt).
Kromster sagt Unterstützung Monica

32

Um eine Bilddatei als Textur in einem Spiel verwenden zu können, muss auf der GPU eine Textur erstellt werden und die Pixeldaten in der Bilddatei müssen in diese Textur geladen werden.

GPUs unterstützen nicht viele der Funktionen, die Image-Dateien auf CPUs unterstützen. JPG-Komprimierung wird nicht unterstützt, PNG-Komprimierung wird nicht unterstützt, und unter besonderer Berücksichtigung von GIFs werden automatische Animationen nicht unterstützt .

Selbst wenn Sie eine GIF-Datei verwenden würden, müssten Sie trotzdem Ihre eigene Animation und Ihren eigenen Timing-Code schreiben. GIF gibt dir nichts.


30
Beachten Sie, dass "CPUs" diese Funktionen nicht unterstützen, wie dies bei Webbrowsern und Betriebssystemen der Fall ist.
user253751

7
Was, noch hat niemand einen GPGPU-Webbrowser geschrieben?
Camille Goudeseune

7
@CamilleGoudeseune Du lachst. Ich weine.
3Dave

13

GIF hat eine begrenzte Farbpalette. (255) Sie müssen auch das Parsen und Animieren des GIF implementieren. Es gibt also keine Fortschritte in Bezug auf die Zeit und die technischen Aspekte des Formats.


4
256, wenn Sie keine Transparenz benötigen, 255, wenn Sie keine Transparenz benötigen.
einen Lebenslauf vom

@ MichaelKjörling Es sind immer noch 256 mit Transparenz - nur eine der Farben wird als "transparent" bezeichnet. Ich glaube, dass Informationen in der Kopfzeile gespeichert sind.
3Dave

@DavidLively Also "effektiv". Die Farbe ist noch vorhanden, kann jedoch nicht als undurchsichtige Farbe verwendet werden.
einen Lebenslauf vom

@Kromster ja. Gelöscht Ich kann gute Mathe haben.
3Dave
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.