Чому в 2d іграх використовують розкадрування, а не gif анімацію stack overflow російською

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

Під час роботи зі своїм форматом, то всі питання вирішуються швидко. У вас більше контролю над форматом зображення, якістю, прозорості, довільним доступом і стисненням (включаючи DXT, які підтримують GPU). Крім того ви можете визначити пріоритети потрібних вам функцій.

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

Мабуть єдине місце, де не потрібно переживати за кадри - HTML / CSS GUI. але і вони зараз застосовуються там досить рідко. ну і ресурсомісткі вони

А якщо персонаж повинен рухатися то швидко, то повільно (наприклад slow mo). А якщо персонаж робить серію ударів (комбо), причому зупиниться може на будь-який з серії ударів, а також кожна анімація у перерваної комбінації своя (приклад комбінації: UMK3 ultimate - Liu Kang - 4-ри удару ногами. Анімація повернення ноги - різна). Питання: нарізати всілякі комбінації GIF.

До того ж, де повинен відбуватися процес відтворення гіф-анімації? У грі відбувається процес перемальовування сцени. Близько 60 раз в секунду (плюс / мінус). Де саме повинна розташовуватися GIF. щоб починати анімацію з того ж моменту, з якого була перервана після поновлення рендеринга сцени? Або як повинна синхронізуватися? Все це виливається в великий головний біль.

невеликий переводік з відсебеньками gamedevSE

Питання некоректне. Не існує взаємовиключних методів "раскадаровка" і "GIF-анімація". Немає ніякого "а не". Це ортогональні поняття. Правильно питання поставити так:

Чому в 2D іграх не зберігають розкадрування в форматі GIF?

Розкадрування - це кілька зображень (зазвичай кадрів анімації), які можуть як перебувати на одній текстурі (однієї "площині" байтів), так і на кількох. Розташування графіки на одній текстурі необов'язково, але має деякі переваги, наприклад, більш раціональне впіхіваніе в апаратно оптимальні розміри текстури.

GIF - це формат зберігання даних на диску. Умовно він містить кадри і затримки між ними, але взагалі-то це мудрований формат з порядковим зберіганням даних і різноманітними алгоритмами переходу між кадрами (наприклад, "відкотити стан до попереднього кадру, накласти наступний з прозорістю і інший палітрою"). Цей формат не має нічого спільного з тим, як дані відображаються в сучасних комп'ютерах на сучасному залозі.

Іноді створюється враження, що GIF "просто працює". Це не так. Усередині програм знаходяться компоненти, які витягують кадри в апаратний вид і згідно з алгоритмами виводять їх на екран за таймером.

Коли ви пишете гру, ви всім керуєте самі. У вас більше немає разрознённих "анімацій", у вас є чітке стан кожного об'єкта разом з усіма кадрами всіх елементів в кожен окремий момент часу, в кожен кадр. У вас повний контроль над тим, який кадр анімації відображається при початку стрибка після бігу.

Тепер по суті: GIF-анімація може використовуватися для розкадровки, але це рідко робиться через жахливих обмежень формату GIF. які перераховані в іншому відповіді.

У сучасному світі зазвичай використовуються формати, які зберігають графіку прямо в апаратній вигляді. Це дозволяє робити завантаження дуже швидкою, але вимагає досить багато пам'яті, тому що стиск слабке. Деякі ігри можуть йти альтернативним шляхом, наприклад, Braid зберігає графіку в JPEG, причому канал прозорості в окремому файлі. Якщо ви хочете оптимізувати місце на диску, поджертвовав часом завантаження, і ваша графіка найкраще стискається GIF, причому без втрат, то використання GIF для зберігання кадрів анімації може бути раціональним.

Окремо треба відзначити движки на базі HTML. Там GIF дійсно працює "з коробки". Однак навіть там продовжують діяти обмеження GIF: як обмеження формату у вигляді обмеженої палітри, так і обмеження в контролі над потрохами у вигляді відсутності контролю над поточним кадром і так далі. Навіть в HTML використовувати GIF має сенс в дуже обмежених випадках: якщо зображення ідеально лягає в обмеження формату, а точний контроль не потрібен. Це трапляється рідко, в складних іграх - ніколи.