Чому більшість основних ігрових двигунів не використовують gifs для анімаційних текстур?


28

Що краще використовувати анімаційні таблиці або Gif-картинки? Однією з переваг Gif-файлів у порівнянні з анімаційними таблицями є те, що вам не доведеться думати про те, що кадри йдуть занадто швидко або занадто повільно через ваш код та оновлення належних кліщів.

Які недоліки у використанні Gifs та переваг анімаційних аркушів у порівнянні з Gifs?


7
Тоді, можливо, вам слід переформулювати своє запитання на кшталт "Чому більшість основних ігрових двигунів не використовують gifs для анімаційних текстур?" як це не часто, принаймні те, що я знаю, з поважних причин. Я думаю, що це дасть вам технічні моменти щодо того, чому вони не використовуються порівняно з тим, що краще питання, що не підходить для сайтів 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Чому це? На чому ви розраховуєте зробити це припущення? Бібліотека? Специфікація формату файлу? GIF-файл - це лише дані, вам потрібен код для його інтерпретації (візуалізація з правильною швидкістю)
hoffmale

13
Що сказав гофмал. GIF - це не магія; їх анімацію все-таки потрібно контролювати і виконувати деяким програмним забезпеченням, включаючи його терміни, і в цьому випадку це програмне забезпечення написане вами. Чесно кажучи, я не очікував, що ваш код обробки анімаційного листа відрізнятиметься величезною кількістю від вашого GIF-коду обробки.
Гонки легкості з Монікою

12
Єдина відмінність вашого spritesheet від GIF-коду полягає в тому, що ваш GIF-код перетворить GIF в spritesheet і потім викличе код spritesheet;)
MickLH

6
gif не має жодних переваг. якщо ви бажаєте стиснення між кадрами, то gif приблизно в 30 разів менш ефективний, ніж власний відеокодек, а також дає гіршу якість (для фотореалістичних матеріалів).
Сардж Борщ

Відповіді:


91

Недоліки у GIF:

  • дуже обмежена палітра кольорів, як правило, 256 кольорів з некрасивим відшаруванням ( так, у анімованому GIF можна мати більше 256 кольорів , але це нечасто)
  • Графічні процесори не підтримують стиснення GIF в апараті (значить, вам доведеться розпакувати їх на процесорі в будь-якому випадку)
  • ви можете вибрати ОДИН колір для прозорості (якщо не реалізувати спеціальну обробку)
  • немає випадкового доступу. Всі попередні кадри GIF потрібно прочитати та розпакувати, щоб отримати доступ до кадру.
  • стискається. Вам потрібна спеціальна функція декомпресії в коді. Ви не можете вибирати різні (кращі) алгоритми стиснення. (так, нестиснуті GIF також існують , але це нечасто)

Завдяки власному формату всі ці елементи вирішуються дуже швидко. Ви маєте набагато більше контролю над форматом зображення, якістю, прозорістю, випадковим доступом і стисненням (включаючи формати, підтримувані GPU, так само як DXT). Ще краще, ви можете визначити пріоритетні функції, які вам потрібні.

Однією з переваг Gifs у порівнянні з анімаційними таблицями є те, що вам не потрібно думати про те, що кадри йдуть занадто швидко або занадто повільно через ваш код та оновлення належних кліщів.

Вищенаведене твердження вводить в оману. Синхронізація GIF в кадрі з фактичними іграми в секунду не сильно відрізняється, ніж синхронізація анімації спеціальних спрайтів. В обох випадках у вас є однакові налаштування - список кадрів, бажаний кадр та візуалізація подій. У GIF немає чарівного порошку - у будь-якому випадку вам доведеться розпакувати GIF у спрайсте, що перемагає мету.

Звичайно, деякі ігрові двигуни можуть приховувати деякі проблеми GIF за шторами, але тоді це можна зробити і з спрайтовими листами кращим чином.

Сказав це, є кілька випадків, коли GIF можуть працювати . Наприклад, графічні інтерфейси HTML / CSS, але вони досить рідкісні та потребують ресурсів самі по собі.


Я не розумію "одного кольору для прозорості". Що означає мати кілька кольорів для прозорості? Ви говорите про зміну значень альфа, як-от застосування градієнта прозорості для текстури?
Ерік

3
@Erik саме так. Загальний GIF підтримує до 256 кольорів, з яких лише 1 можна позначити прозорими. На відміну від інших форматів, де прозорість зазвичай має значно ширший діапазон.
Кромстер каже, що підтримує Моніку

@Kromster Насправді, на ресурсах, на яких знаходяться ресурси, використовується спеціальний механізм анімації для анімаційних зображень, наприклад, background-imageанімація позицій CSS, де анімація промальовується на одному великому зображенні, яке потім переміщується за допомогою компенсації.
Томаш Зато - Відновити Моніку

@ ТомашЗато Правда. Вибачте, я заявив інакше?
Кромстер каже, що підтримує Моніку

2
@ luk32 - це недолік, оскільки є набагато кращі методи стиснення, ніж старі компресії GIF. Таким чином, ви або використовуєте неоптимальне стиснення GIF або дістаєтесь до (де) стиснення двічі (зауважте, що стиснення вже стислих даних, як правило, дає і більший розмір).
Кромстер каже, що підтримує Моніку

32

Щоб використовувати будь-який файл зображення як текстуру в грі, повинна бути текстура, створена на графічному процесорі, і дані пікселів у файлі зображення повинні бути завантажені до цієї текстури.

Графічні процесори не підтримують багато функцій, які підтримують файли зображень на процесорах. Вони не підтримують стиснення JPG, вони не підтримують стиснення PNG, і, зокрема, посилаючись на GIF, вони не підтримують автоматичну анімацію .

Тож навіть якщо ви використовували GIF-файл, вам все одно доведеться написати власний анімаційний та тимчасовий код. GIF нічого не дає.


30
Зауважте, що "процесори" не підтримують ці речі, які роблять веб-браузери та операційні системи.
користувач253751

7
Що, ще ніхто не написав веб-браузер GPGPU?
Camille Goudeseune

7
@CamilleGoudeseune Ти смієшся. Я плачу.
3Dave

13

GIF має обмежену колірну палітру. (255) Вам також потрібно здійснити розбір і анімацію GIF. Таким чином, немає просування в часі, ні в технічних аспектах формату.


4
256, якщо вам не потрібна прозорість, 255 діє в іншому випадку.
CVn

@ MichaelKjörling Це все ще 256 з прозорістю - лише один з кольорів позначений "прозорим". Я вважаю, що інформація зберігається у заголовку.
3Dave

@DavidLively Отже, "ефективний". Колір все ще є, але його не можна використовувати як непрозорий колір.
CVn

@Kromster так. Видалено. Я можу мати хорошу математику.
3Dave
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.