Оптимізація Draw Calls мобільної гри: GPU, батчинг, FPS

Уявіть: ваша мобільна гра гальмує на Adreno 506, хоча графіка скромна. Frame Debugger показує 350 Draw Calls на кадр, а FPS падає до 35. Мета — стабільні 60 FPS. Оптимізація Draw Calls — перший і найефективніший крок. Ми знижуємо кількість викликів із середніх 300 до 150, підіймаючи FPS до 60 на mid

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Оптимізація Draw Calls мобільної гри: GPU, батчинг, FPS
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Уявіть: ваша мобільна гра гальмує на Adreno 506, хоча графіка скромна. Frame Debugger показує 350 Draw Calls на кадр, а FPS падає до 35. Мета — стабільні 60 FPS. Оптимізація Draw Calls — перший і найефективніший крок. Ми знижуємо кількість викликів із середніх 300 до 150, підіймаючи FPS до 60 на mid-range пристроях без втрати якості. Використовуємо батчинг, GPU Instancing, атласи текстур. За 5 років оптимізували 30+ проектів. Зв'яжіться з нами для аудиту вашого проекту — це зекономить ваші ресурси.

Чому Draw Calls критичні для мобільних ігор?

На мобільних GPU з тайловою архітектурою (Mali, Adreno, Apple GPU) кожен зайвий Draw Call дорожчий, ніж на десктопі. CPU витрачає час на підготовку даних, а GPU — на перемикання контекстів. У результаті при хаотичному рендерингу FPS падає нижче цільових 30 або 60 FPS. Оптимізація Draw Calls — один із найефективніших способів підвищити продуктивність без зміни контенту.

Звідки беруться зайві виклики

Три головні джерела.

Різні матеріали на схожих об'єктах. Кожен унікальний матеріал = мінімум один окремий Draw Call. Часто бачимо проекти, де монети, вороги та бонуси використовують різні текстури (PNG різних розмірів), упаковані в різні атласи. Batch для них неможливий.

Dynamic batching ламається непомітно. Unity батчить меші тільки якщо вони менші за 900 вершин, використовують один матеріал і не мають статичного флага. Додавання тіні (Shadow Casting = On) на динамічний об'єкт автоматично вибиває його з батча — це не очевидно з документації.

Skinned mesh без GPU Instancing. Анімовані персонажі з SkinnedMeshRenderer не беруть участі ні в static batching, ні в dynamic batching. Якщо на екрані 20 ворогів з однаковим мешем, але без GPU Instancing — 20 окремих Draw Calls.

Як знизити Draw Calls без втрати якості?

Sprite Atlas для 2D

Для 2D-ігор — SpriteAtlas (не застарілий Sprite Packer). Усі спрайти одного ігрового шару — в один атлас, один матеріал, один Draw Call для всього шару. Атлас має бути Include in Build, інакше в рантаймі підвантажаться окремі текстури. Максимальний розмір атласу на мобільних — 2048×2048 для більшості пристроїв, 4096×4096 допускається для Android API 26+ та iOS 12+. Використовуємо ASTC 6×6 для обох: хороша компресія без помітних артефактів.

GPU Instancing для 3D

Для повторюваних об'єктів (вороги, дерева, кулі) — Enable Instancing на матеріалі + шейдер з #pragma multi_compile_instancing. З Unity 2022+ можна використовувати BatchRendererGroup для повного контролю. GPU Instancing не працює з анімацією на CPU — для анімованих ворогів застосовуємо GPU skinning через AnimationInstancing або вертексні шейдери із запеченими анімаціями.

Static Batching

Статичні об'єкти (платформи, стіни) позначаємо як Static, вмикаємо Static Batching в Player Settings. Unity об'єднає меші в build time. Оверхед: збільшення пам'яті, тому не позначаємо статикою все підряд.

Забираємо зайві Shadow Casters

Тіні — дорого. На мобільних часто вимикаємо real-time тіні та замінюємо blob shadow (простий dark circle спрайт під об'єктом). Якщо тіні потрібні — обмежуємо дистанцію та переходимо на одну каскадну карту тіней замість чотирьох.

Цільові метрики

Пристрій Рекомендований максимум Draw Calls
Low-end Android (Adreno 505) 80–120
Mid-range Android (Adreno 618) 150–200
iPhone 12 / A14 200–300
iPhone 15 / A17 300–400

Ці цифри — для 60 FPS. Якщо таргет 30 FPS, бюджет вдвічі м'якший. GPU Instancing ефективніший за Dynamic Batching в 3–5 разів на мобільних.

Порівняння методів батчингу

Метод Застосовність Споживання пам'яті Складність налаштування
Dynamic Batching Об'єкти <900 вершин, один матеріал Низьке Мінімальна
Static Batching Статичні об'єкти Високе Низька
GPU Instancing Повторювані об'єкти Середнє Середня

Як діагностувати вузькі місця?

Unity Frame Debugger (документація) — перший крок. Показує кожен Draw Call у кадрі з поясненням, чому батчинг не відбувся. Snapdragon Profiler (для Android на Adreno) та Xcode GPU Frame Capture (iOS) дають детальну картину на реальному залізі, включаючи time per draw call. RenderDoc — для глибокого аналізу.

Типові помилки при оптимізації Draw Calls
  • Не дивитися на реальний пристрій — емулятор не покаже тайлову архітектуру.
  • Забувати вимкнути тіні при тесті батчингу.
  • Використовувати один великий атлас замість кількох по шарах.
  • Намагатися батчити анімовані об'єкти без GPU Instancing.

Що входить в роботу

  • Аудит Frame Debugger та Snapdragon Profiler
  • Впровадження Sprite Atlas та GPU Instancing
  • Оптимізація тіней та статичного батчингу
  • Тестування на 5+ реальних пристроях (low-end, mid-range)
  • Документація щодо підтримки оптимізацій
  • Гарантія 6 місяців на продуктивність (приріст FPS мінімум 20% на low-end)

Процес роботи

  1. Аналіз поточного стану (1 день)
  2. Пріоритизація проблем (1 день)
  3. Реалізація атласів/інстансингу/батчингу (2–5 днів залежно від складності)
  4. Тестування на low-end та mid-range пристроях (1 день)
  5. Фінальний звіт та передача правок

Терміни залежать від масштабу: проста 2D-аркада — два-три дні, 3D з анімованими персонажами — тиждень і більше. Оцінимо ваш проект за 1 робочий день. Зв'яжіться з нами — отримайте консультацію та комерційну пропозицію.