Dlaczego większość głównych silników gier nie używa gifów do animowanych tekstur?


28

Co lepiej używać Arkuszy animacji lub Gifów? Jedną z zalet Gifów w porównaniu z Arkuszami Animacji jest to, że nie musisz myśleć o klatkach, które poruszają się zbyt szybko lub zbyt wolno z powodu kodu i aktualizacji w odpowiednich tikach.

Jakie są wady korzystania z Gifów i zalety Arkuszy animacji w porównaniu z Gifami?


7
Może powinieneś przeredagować swoje pytanie na coś takiego: „Dlaczego większość głównych silników gier nie używa gifów do animowanych tekstur?” ponieważ nie są one powszechne, przynajmniej o których wiem, z dobrych powodów. Myślę, że to dałoby ci techniczne wskazówki na temat tego, dlaczego nie są używane w porównaniu z lepszym pytaniem, które nie jest odpowiednie dla witryn 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 slowDlaczego to? Na czym polegasz, aby przyjąć takie założenie? Biblioteka? Specyfikacja formatu pliku? Plik gif to wciąż tylko dane, wciąż potrzebujesz kodu, aby go zinterpretować (renderować z właściwą prędkością)
hoffmale

13
Co powiedział hoffmale. GIF-y to nie magia; ich animacja nadal musi być kontrolowana i wykonywana przez niektóre oprogramowanie, w tym jej czas, w tym przypadku to oprogramowanie jest napisane przez ciebie. Szczerze mówiąc, nie spodziewałbym się, że kod obsługi arkusza animacji będzie się znacznie różnić od kodu obsługi GIF.
Wyścigi lekkości z Moniką

12
Jedyna różnica między twoim arkuszem sprite a kodem GIF polega na tym, że Twój kod GIF zamieni GIF na arkusz sprite, a następnie wywoła kod spritehe;)
MickLH

6
gif nie ma żadnych zalet. jeśli chcesz kompresji między klatkami, gif jest około 30 razy mniej wydajny niż odpowiedni kodek wideo, a jednocześnie daje gorszą jakość (w przypadku materiałów fotorealistycznych).
Sarge Barszcz

Odpowiedzi:


91

Wady GIF:

  • bardzo ograniczona paleta kolorów, zwykle 256 kolorów z brzydkim ditheringiem ( tak, animowany GIF może zawierać więcej niż 256 kolorów , ale jest to rzadkie)
  • Procesory graficzne nie obsługują sprzętowej kompresji GIF (oznacza to, że i tak będziesz musiał je rozpakować na procesorze)
  • możesz wybrać JEDEN kolor dla przejrzystości (chyba że zastosujesz niestandardowe przetwarzanie)
  • brak losowego dostępu. Wszystkie poprzednie ramki GIF muszą zostać odczytane i zdekompresowane, aby uzyskać dostęp do ramki.
  • być skompresowanym. Potrzebujesz dedykowanej funkcji dekompresyjnej w kodzie. Nie można wybrać różnych (lepszych) algorytmów kompresji. (tak, istnieją również nieskompresowane pliki GIF , ale jest to rzadkie)

W niestandardowym formacie wszystkie te elementy są rozwiązywane bardzo szybko. Masz znacznie większą kontrolę nad formatem obrazu, jakością, przezroczystością, losowym dostępem i kompresją (w tym formatami obsługiwanymi przez GPU, podobnie jak DXT). Co więcej, możesz ustawić priorytety potrzebnych funkcji.

Jedną z zalet Gifów w porównaniu z Arkuszami Animacji jest to, że nie musisz myśleć o klatkach, które poruszają się zbyt szybko lub zbyt wolno z powodu kodu i aktualizacji w odpowiednich tikach.

Powyższe stwierdzenie wprowadza w błąd. Synchronizowanie fps GIF z rzeczywistą fps gry nie różni się niczym od synchronizacji animacji niestandardowych sprite'ów. W obu przypadkach masz dokładnie taką samą konfigurację - listę ramek, pożądane liczby klatek na sekundę i zdarzenia renderowania. W GIFie nie ma magicznego proszku - i tak będziesz musiał zdekompresować GIF do arkusza sprite, co przeczy celowi.

Oczywiście niektóre silniki gier mogą ukrywać niektóre problemy GIF za zasłonami, ale to samo można zrobić z arkuszami sprite w lepszy sposób.

Powiedział, że istnieje kilka przypadków, w których GIF-y mogłyby działać . Np. GUI HTML / CSS, ale same w sobie są dość rzadkie i wymagają dużych zasobów.


Nie rozumiem „jednego koloru dla przejrzystości”. Co to znaczy mieć wiele kolorów dla przejrzystości? Czy mówisz o różnych wartościach alfa, takich jak zastosowanie gradientu przezroczystości do tekstury?
Erik

3
@Erik dokładnie to. Wspólny plik GIF obsługuje do 256 kolorów, z których tylko 1 można oznaczyć jako przezroczysty. W przeciwieństwie do innych formatów, w których przezroczystość zwykle ma znacznie szerszy zakres.
Kromster mówi o wsparciu Moniki

@Kromster W rzeczywistości strony z zasobami używają niestandardowego mechanizmu animacji dla animowanych obrazów, takich jak background-imageanimacja pozycji CSS, w której animacja jest umieszczana na jednym dużym obrazie, który jest następnie przesuwany przez przesunięcie.
Tomáš Zato - Przywróć Monikę

@ TomášZato True. Przepraszam, czy stwierdziłem inaczej?
Kromster mówi o wsparciu Moniki

2
@ luk32 jest to wadą, ponieważ istnieją znacznie lepsze metody kompresji niż stara kompresja GIF. Więc albo korzystasz z nieoptymalnej kompresji GIF, albo dwukrotnie kompresujesz (de) kompresję (pamiętaj, że kompresowanie już skompresowanych danych generalnie daje również większy rozmiar).
Kromster mówi o wsparciu Moniki

32

Aby użyć dowolnego pliku obrazu jako tekstury w grze, na GPU musi być utworzona tekstura, a dane pikseli w pliku obrazu muszą zostać załadowane do tej tekstury.

Procesory graficzne nie obsługują wielu funkcji obsługiwanych przez pliki obrazów na procesorach. Nie obsługują kompresji JPG, nie obsługują kompresji PNG, a zwłaszcza w odniesieniu do plików GIF, nie obsługują automatycznej animacji .

Więc nawet jeśli używałeś pliku GIF, i tak będziesz musiał napisać własną animację i kod czasowy. GIF nie daje ci nic.


30
Pamiętaj, że „procesory” nie obsługują tych rzeczy, tak jak przeglądarki i systemy operacyjne.
user253751

7
Co, nikt jeszcze nie napisał przeglądarki internetowej GPGPU?
Camille Goudeseune,

7
@CamilleGoudeseune Ty się śmiejesz. Płaczę.
3Dave

13

GIF ma ograniczoną paletę kolorów. (255) Musisz także wdrożyć parsowanie i animację GIF. Nie ma zatem postępu w zakresie czasu ani aspektów technicznych formatu.


4
256, jeśli nie potrzebujesz przejrzystości, 255 w przeciwnym razie.
CVn

@ MichaelKjörling Nadal jest 256 z przezroczystością - tylko jeden kolor jest oznaczony jako „przezroczysty”. Uważam, że informacje są przechowywane w nagłówku.
3Dave

@DavidLively Stąd „skuteczny”. Kolor jest nadal obecny, ale nie można go użyć jako koloru nieprzezroczystego.
CVn

@Kromster tak. Usunięte Potrafię mieć dobrą matematykę.
3Dave
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.