Neden çoğu büyük oyun motoru animasyonlu dokular için gif kullanmıyor?


28

Animasyon Sayfalarını veya Gifleri kullanmak daha iyi ne olabilir? Gif’lerin Animasyon Sayfaları’nın bir avantajı, kodlarınızdan dolayı kodunuzun çok hızlı veya çok yavaş gittiğini ve uygun işaretlerle güncelleme yaptığınızı düşünmeniz gerekmemesidir.

Gifleri kullanmanın dezavantajları ve Animasyon Sayfalarının Giflere göre avantajları nelerdir?


7
O zaman belki de sorunuzu "Neden çoğu büyük oyun motorları animasyonlu dokular için gif kullanmıyor?" Yaygın olmadıkları için, en azından bildiğim kadarıyla, iyi sebeplerden dolayı. Bence neden kullanılmadıklarına ilişkin teknik puanlar verdim, hangisinin SE siteleri için uygun olmadığı daha iyi bir soru.
Coburn

39
One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slowNeden bu? Bu varsayımı yapmak için neye güveniyorsunuz? Bir kütüphane? Dosya formatı belirtimi? Bir gif dosyası hala sadece bir veridir, yorumlamak için hala koda ihtiyacınız var (doğru hızda yapın)
hoffmale

13
Hoffmale ne dedi? GIF'ler sihir değildir; animasyonlarının zamanlaması da dahil olmak üzere bazı yazılımlar tarafından kontrol edilmesi ve yürütülmesi gerekiyor ve bu durumda bu yazılım sizin tarafınızdan yazılıyor. Dürüst olmak gerekirse, Animasyon Sayfası işleme kodunuzun GIF işleme kodunuzdan büyük miktarda farklı olmasını beklemiyorum.
Monica ile Hafiflik Yarışları

12
E-tablo ile GIF kodunuz arasındaki tek fark, GIF kodunuzun GIF'i bir e-tabloya dönüştürmesi ve ardından e-tablo kodunu çağırmasıdır;)
MickLH 28:16

6
gif'in hiçbir avantajı yoktur. çerçeveler arası sıkıştırma istiyorsanız, gif uygun bir video kodeğinden yaklaşık 30 kat daha az verimli olurken, aynı zamanda daha kötü kalite verir (fotogerçekçi şeyler için).
Sarge Borsch

Yanıtlar:


91

GIF dezavantajları:

  • çok sınırlı renk paleti, çirkin renk taklidi ile tipik olarak 256 renk ( evet, animasyonlu GIF'te 256'dan fazla renge sahip olabilirsiniz , ancak bu nadir görülür)
  • GPU'lar donanımda GIF sıkıştırmasını desteklemez (onları yine de CPU'da açmak zorunda kalacağınız anlamına gelir)
  • şeffaflık için yalnızca BİR renk seçersiniz (özel işleme uygulanmadıkça)
  • rastgele erişim yok. Bir kareye erişmek için önceki tüm GIF karelerinin okunması ve sıkıştırılması gerekir.
  • Sıkıştırılmış olmak Kodda özel bir dekompresyon fonksiyonuna ihtiyacınız var. Farklı (daha iyi) sıkıştırma algoritmaları seçemezsiniz. (evet, sıkıştırılmamış GIF'ler de var , ancak bu nadirdir)

Özel formatla tüm bu öğeler çok çabuk çözülür. Görüntü formatı, kalite, şeffaflık, rastgele erişim ve sıkıştırma (DXT'de GPU destekli formatlar dahil) üzerinde çok daha fazla kontrol sahibi sizsiniz. Daha da iyisi, ihtiyacınız olan özelliklere öncelik verebilirsiniz.

Gif’lerin Animasyon Sayfaları’nın bir avantajı, kodlarınızdan dolayı kodunuzun çok hızlı veya çok yavaş gittiğini ve uygun işaretlerle güncelleme yaptığınızı düşünmeniz gerekmemesidir.

Yukarıdaki ifade yanıltıcıdır. GIF fps'yi gerçek oyun fps ile senkronize etmek, özel sprite animasyonlarını senkronize etmekten çok farklı değildir. Her iki durumda da aynı ayarlara sahipsiniz - bir çerçeve listesi, istediğiniz kare hızı ve oluşturma olayları. GIF'de sihirli bir toz yok - GIF'i zaten spritesheet'e sıkıştırmanız gerekecek, bu da amacı ortadan kaldırıyor.

Elbette bazı oyun motorları perdelerin arkasındaki GIF sorunlarından bazılarını gizleyebilir, ancak daha sonra spritesheets ile daha iyi bir şekilde yapılabilir.

GIF'lerin bir nevi iş yapabileceği birkaç durum olduğunu söyledi . Örneğin, HTML / CSS GUI'leri, ancak bunlar oldukça nadirdir ve kendi başlarına kaynaklara açlar.


"Şeffaflık için bir renk" anlamıyorum. Şeffaflık için birden fazla renge sahip olmak ne demektir? Bir dokuya saydamlık gradyanı uygulamak gibi değişen alfa değerlerinden mi bahsediyorsunuz?
Erik,

3
Tam olarak @Erik. Ortak GIF, yalnızca 1 tanesi saydam olarak işaretlenebilen 256 rengi destekler. Diğer formatların aksine, şeffaflığın tipik olarak daha geniş bir menzile sahip olduğu yerler.
Kromster Monica

@Kromster Aslında, kaynak bilgisine sahip siteler background-image, animasyonun tek bir büyük resim üzerine getirildiği CSS pozisyon animasyonu gibi animasyonlu görüntüler için özel animasyon mekanizmasını kullanır ve bu da daha sonra ofsetler tarafından taşınır.
Tomáš Zato -

@ TomášZato Doğru. Üzgünüm, başka türlü ifade ettim mi?
Kromster, Monica

2
@ luk32 bu bir sakıncadır çünkü eski GIF sıkıştırmasından çok daha iyi sıkıştırma yöntemleri vardır. Yani ya alt-GIF sıkıştırmasını kullanır ya da iki kez sıkıştırır (de). (Önceden sıkıştırılmış verilerin sıkıştırılmasının genellikle daha büyük boyutta olduğunu da unutmayın).
Kromster

32

Herhangi bir görüntü dosyasını bir oyunda doku olarak kullanmak için, GPU'da oluşturulan bir doku olmalı ve görüntü dosyasındaki piksel verileri bu dokuya yüklenmelidir.

GPU'lar yok CPU'lar desteğine Resim dosyalarının özelliklerinin çoğu destekler. JPG sıkıştırmasını desteklemezler, PNG sıkıştırmasını desteklemezler ve özel GIF referansları ile otomatik animasyonu desteklemezler .

Bu yüzden bir GIF dosyası kullansanız bile, yine de kendi animasyon ve zamanlama kodunuzu yazmanız gerekir. GIF size hiçbir şey vermez.


30
"İşlemciler" in bunları desteklemediğini, web tarayıcılarını ve işletim sistemlerini desteklediğini unutmayın.
user253751 27:16

7
Ne, kimse henüz bir GPGPU web tarayıcısı yazmadı mı?
Camille Goudeseune

7
@CamilleGoudeseune Gülün. Ağlarım.
3Dave

13

GIF'in sınırlı bir renk paleti var. (255) GIF'yi de ayrıştırma ve canlandırma uygulaması gerekiyor. Dolayısıyla, zaman içinde ve formatın teknik yönlerinde bir gelişme yoktur.


4
Saydamlığa ihtiyacınız yoksa 256, aksi halde 255 etkilidir.
bir CVn

@ MichaelKjörling Şeffaflığı hala 256 - renklerden sadece "şeffaf" olarak tanımlandı. Bilginin başlıkta saklandığına inanıyorum.
3Dave

@DavidLively Dolayısıyla "etkili". Renk hala orada, ancak opak bir renk olarak kullanılamaz.
bir CVn

@Kromster evet. Silindi. İyi matematik alabilirim.
3Dave
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.