¿Por qué la mayoría de los motores de juegos principales no usan gifs para texturas animadas?

28

¿Qué es mejor usar hojas de animación o gifs? Una ventaja que los Gif tienen sobre las hojas de animación es que no tienes que pensar en que los fotogramas vayan demasiado rápido o demasiado lento debido a tu código y a la actualización en los tics adecuados.

¿Cuáles son las desventajas de usar Gifs y las ventajas que tienen las hojas de animación sobre Gifs?

Arek Żyłkowski
fuente
77
Entonces, tal vez deberías reformular tu pregunta a algo como "¿Por qué la mayoría de los motores de juegos principales no usan gifs para texturas animadas?" como no son comunes, al menos que yo sepa, por buenas razones. Creo que eso le daría puntos técnicos sobre por qué no se usan versus una pregunta que es mejor, que no son apropiadas para los sitios 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 slow¿Por qué eso? ¿En qué confías para hacer esa suposición? ¿Una biblioteca? La especificación del formato de archivo? Un archivo gif sigue siendo solo datos, aún necesita código para interpretarlo (renderizarlo a la velocidad correcta)
hoffmale
13
Lo que dijo hoffmale. Los GIF no son mágicos; su software aún necesita ser controlado y ejecutado por algún software, incluido su tiempo, y en este caso, ese software está escrito por usted. Honestamente, no esperaría que su código de manejo de la Hoja de animación difiera mucho de su código de manejo de GIF.
Lightness compite con Monica el
12
La única diferencia entre su hoja de sprites y su código GIF es que su código GIF convertirá el GIF en una hoja de sprites y luego llamará al código de la hoja de sprites;)
MickLH
66
GIF no tiene ninguna ventaja. si desea la compresión entre cuadros, entonces el gif es aproximadamente 30 veces menos eficiente que un códec de video adecuado, a la vez que ofrece una peor calidad (para material fotorrealista).
Sarge Borsch

Respuestas:

91

Inconvenientes de GIF:

  • paleta de colores muy limitada, típicamente 256 colores con tramado feo ( sí, puede tener más de 256 colores en GIF animado , pero esto es poco común)
  • Las GPU no admiten la compresión GIF en el hardware (de todos modos, tendrá que descomprimirlas en la CPU)
  • solo puede elegir UN color para la transparencia (a menos que implemente un procesamiento personalizado)
  • sin acceso aleatorio Todos los marcos GIF anteriores deben leerse y descomprimirse para acceder a un marco.
  • siendo comprimido Necesita una función de descompresión dedicada en el código. No puede elegir diferentes (mejores) algoritmos de compresión. (sí, también existen GIF sin comprimir , pero esto es poco común)

Con un formato personalizado, todos estos elementos se resuelven muy rápidamente. Tiene mucho más control sobre el formato de imagen, la calidad, la transparencia, el acceso aleatorio y la compresión (incluidos los formatos compatibles con GPU por igual DXT). Aún mejor, puede priorizar las funciones que necesita.

Una ventaja que los Gif tienen sobre las hojas de animación es que no tienes que pensar en que los fotogramas vayan demasiado rápido o demasiado lento debido a tu código y a la actualización en los tics adecuados.

La declaración anterior es engañosa. Sincronizar GIF fps con fps reales del juego no es muy diferente a sincronizar sprites personalizados de animación. En ambos casos, tiene exactamente la misma configuración: una lista de fotogramas, velocidad de fotogramas deseada y eventos de representación. No hay polvo mágico en GIF: de todos modos, tendrá que descomprimir el GIF en una hoja de sprites, lo que frustra el propósito.

Por supuesto, algunos motores de juegos pueden ocultar algunos de los problemas de GIF detrás de las cortinas, pero entonces, lo mismo se puede hacer con las hojas de sprites de una mejor manera.

Dicho esto, hay algunos pocos casos en los que los GIF podrían funcionar . Por ejemplo, GUI HTML / CSS, pero estos son bastante raros y requieren muchos recursos por sí mismos.

Kromster dice que apoya a Mónica
fuente
No entiendo "un color para la transparencia". ¿Qué significa tener múltiples colores para la transparencia? ¿Estás hablando de diferentes valores alfa como aplicar un gradiente de transparencia a través de una textura?
Erik
3
@Erik exactamente eso. GIF común admite hasta 256 colores, de los cuales solo 1 se puede marcar para que sea transparente. A diferencia de otros formatos, donde la transparencia generalmente tiene un rango mucho más amplio.
Kromster dice que apoya a Mónica el
@Kromster En realidad, los sitios expertos en recursos utilizan mecanismos de animación personalizados para las imágenes animadas, como la background-imageanimación de posición CSS , donde la animación se ubica en una imagen grande, que luego se desplaza mediante desplazamientos.
Tomáš Zato - Restablece a Mónica el
@ TomášZato True. Lo siento, ¿dije lo contrario?
Kromster dice que apoya a Mónica el
2
@ luk32 esto es un inconveniente porque hay métodos de compresión mucho mejores que la compresión GIF anterior. Por lo tanto, puede usar una compresión GIF subóptima o puede (des) comprimir dos veces (tenga en cuenta que la compresión de datos ya comprimidos generalmente también produce un tamaño más grande).
Kromster dice que apoya a Mónica el
32

Para usar cualquier archivo de imagen como textura en un juego, debe haber una textura creada en la GPU y los datos de píxeles en el archivo de imagen deben cargarse en esa textura.

Las GPU no admiten muchas de las funciones que admiten los archivos de imagen en las CPU. No admiten la compresión JPG, no admiten la compresión PNG y, con referencia particular a los GIF, no admiten la animación automática .

Por lo tanto, incluso si usara un archivo GIF, de todos modos tendría que escribir su propia animación y código de tiempo. GIF no te da nada.

Maximus Minimus
fuente
30
Tenga en cuenta que las "CPU" no admiten esas cosas, los navegadores web y los sistemas operativos sí lo hacen.
user253751
77
¿Qué, nadie ha escrito un navegador web GPGPU todavía?
Camille Goudeseune
77
@CamilleGoudeseune Te ríes. Lloro.
3Dave
13

GIF tiene una paleta de colores limitada. (255) También debe implementar el análisis y la animación del GIF. Por lo tanto, no hay un avance en el tiempo ni en los aspectos técnicos del formato.

Piraña
fuente
44
256 si no necesita transparencia, 255 en caso contrario.
un CVn
@ MichaelKjörling Sigue siendo 256 con transparencia: solo uno de los colores se designa como "transparente". Creo que la información se almacena en el encabezado.
3Dave
@DavidLively Por lo tanto, "eficaz". El color todavía está allí, pero no se puede usar como un color opaco.
un CVn
@Kromster sí. Eliminado Puedo tener buenas matemáticas.
3Dave