Як змусити мобільну гру працювати на 60 кадрах/с? Методи рендерингу

Гра втрачає кадри на середніх пристроях, і гравці йдуть? Ми оптимізуємо рендеринг мобільної гри під ключ: знаходимо вузькі місця, перебудовуємо відмальовку та досягаємо рівної картинки без втрати якості. Повертаємося з оцінкою та планом робіт.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Як змусити мобільну гру працювати на 60 кадрах/с? Методи рендерингу
Складний
~3-5 днів
Часті запитання

Чому мобільна гра не тримає стабільні 60 кадрів/с

Просадки кадрів майже ніколи не пов'язані із «залізом» — вони є наслідком того, як гра використовує графічний конвеєр.

Оптимізація рендерингу мобільної гри починається з пошуку вузького місця: те саме падіння з 60 до 40 кадрів/с дають перемальовування інтерфейсу поверх сцени, зайві виклики відрисовування на кожен об'єкт, витоки пам'яті під текстури та важкі ефекти на кшталт прозорості й постобробки. Поки причину не локалізовано, будь-які правки — це вгадування.

Перемальовування інтерфейсу — найчастіший прихований винуватець. Кожен елемент HUD, що оновлюється в ігровому циклі, змушує перезбирати шар поверх сцени, і вартість зростає лінійно з кількістю таких елементів.

Зайві виклики відрисовування дають схожий ефект: сотні окремих об'єктів замість об'єднаних у пакети навантажують процесор сильніше, ніж сама геометрія.

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

У гравця це виглядає передбачувано: нагрівання пристрою, тротлінг через 10-15 хвилин, просадки в динамічних сценах і скарги на «гальмує на моєму телефоні». Розбираємо, як кожне з цих вузьких місць закривається на рівні рендерингу, а не костилями в ігровій логіці.

Що дає оптимізація рендерингу мобільної гри

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

На практиці це виглядає так: замість просідань на складних сценах — рівний графік, де час кадру тримається в межах, заданих частотою оновлення екрана.

Перше, що бачить гравець, — стабільна частота кадрів і передбачувана плавність анімації. Друге, що він відчуває, — час відгуку керування: натискання обробляється в тому самому кадрі, а не через два-три.

Це прямо впливає на утримання — у динамічних сценах затримка в пару кадрів сприймається як «гра гальмує», навіть якщо середній показник високий.

Далі — енергоспоживання гри. Коли рендер не робить зайвої роботи, пристрій менше нагрівається й рідше скидає частоти під навантаженням.

Це знімає головну причину «пливучої» продуктивності: телефон не йде в тротлінг через десять хвилин гри, і кадри не починають просідати до середини сесії.

І останнє за порядком, але не за важливістю — підтримка слабких пристроїв. Оптимізований рендер розширює список моделей, на яких гра йде комфортно, без окремого урізаного збірника під кожен клас.

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

Підходи до рендерингу: що вибрати під задачу

Вибір конвеєра рендерингу визначає стелю продуктивності всієї гри: змінити його на середині проєкту дорожче, ніж закласти правильний одразу.

Прямий конвеєр малює кожен об'єкт по черзі — передбачувано й дешево на сцені з сотнею об'єктів, але на щільній сцені впирається в кількість викликів відрисовки.

Пакетна відрисовка об'єднує однотипні об'єкти в один виклик і знімає це обмеження, а відкладена відрисовка переносить розрахунок освітлення в окремий прохід і тримає стабільний кадр там, де багато джерел світла.

Варіант Коли підходить Обмеження
Прямий конвеєр Прості сцени, 2D, ранній прототип Зростає кількість викликів відрисовки, просідання на щільних сценах
Пакетна відрисовка Багато однотипних об'єктів, мобільні 3D-сцени Потребує спільних матеріалів і текстур, складніше з прозорістю
Відкладена відрисовка Багато динамічного світла, складні сцени Вище навантаження на пам'ять, слабше на слабких пристроях

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

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

Розбираємо, як підібрати конвеєр під конкретну сцену й утримати частоту кадрів без просідань.

Як проходить оптимізація рендерингу мобільної гри

Оптимізація рендерингу — це не «поправити шейдери і стало швидше», а цикл: замір, пошук вузького місця, правка, повторний замір на живому пристрої. Нижче — як проходить така робота у наших інженерів.

  1. Знімаємо базові метрики. Заміряємо частоту кадрів і час відмалювання кадру на референсних пристроях — від бюджетних до флагманських. Фіксуємо не середній показник, а розподіл: просідання в 90-й перцентилі помітні гравцеві сильніше, ніж рівний середній кадраж.
  2. Профілюємо рендеринг. Розбираємо кадр за стадіями: підготовка сцени, відмалювання геометрії, робота з прозорістю, постобробка. Профілювальник показує, яка стадія з'їдає бюджет кадру, — далі працюємо точково, а не «оптимізуємо все».
  3. Шукаємо вузькі місця. Типові причини просідань: надлишкові виклики відмалювання, перемальовування пікселів поверх один одного, важкі шейдери, зайві джерела світла, неоптимальні текстури. Кожне підтверджуємо заміром, а не здогадкою.
  4. Правимо шейдери й матеріали. Спрощуємо обчислення в шейдерах, прибираємо зайві проходи, об'єднуємо матеріали, щоб скоротити число викликів відмалювання. Мета — укласти кадр у бюджет за цільової частоти.
  5. Перевіряємо на пристроях. Проганяємо збірку на реальному парку пристроїв: різні чипи, обсяги пам'яті, версії системи. Емулятор не покаже тепловий тротлінг і реальну деградацію — тільки живий прогін.
  6. Повторюємо цикл. Після правок знову знімаємо метрики й порівнюємо з базовими. Якщо просідання залишилися — повертаємося до профілювання, поки розподіл кадрів не стане рівним.
  7. Передаємо результат. Віддаємо заміри до/після, список правок і рекомендації, щоб команда могла підтримувати продуктивність при додаванні нового контенту.

Такий цикл закриває задачу не разово, а як процес: кожна правка підтверджена заміром, а не відчуттям «наче стало плавніше».

Що замовник отримує за підсумками робіт

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

  • Профілі якості графіки — набір перемиканих конфігурацій від «енергозбереження» до «максимум»: дальність промальовування, щільність тіней, рівень згладжування, роздільна здатність рендера. Кожен профіль прив'язаний до класу пристрою, тому на слабких моделях гра не провалюється в просідання, а на флагманах не виглядає урізаною.
  • Схема сцени — карта того, що і коли потрапляє в кадр: статична геометрія, динамічні об'єкти, ефекти, шари інтерфейсу. За нею видно, які вузли можна вимикати або підміняти на спрощені, не ламаючи картинку.
  • Політики якості — правила, за якими рушій сам знижує навантаження: пріоритети відмальовування, бюджети на кадр, поведінка при перегріві та розряді батареї. Гра тримає цільові 60 кадрів/с і не йде в перегрів на довгих сесіях.
  • Документація рендерингу — опис конвеєра, точок заміру та того, як кожне налаштування впливає на кадрову частоту. Інженер, який прийде в проєкт пізніше, розбереться без звернень до нас.
  • Регламент перевірки — чек-лист приймання: на яких пристроях і сценах замірюємо, які пороги вважаємо нормою, що фіксуємо у звіті. Регрес за кадрами ловиться до релізу, а не у відгуках.
  • Налаштовані налаштування графіки в меню — зрозумілі користувачеві перемикачі з чесними підписами, щоб він сам вибирав баланс між картинкою та часом роботи від батареї.
  • Скрипти замірів — автоматичний прогін сцен із записом кадрової частоти та часу кадру, щоб кожну збірку можна було порівняти з попередньою.

Комплект передаємо з розбором: показуємо, де були вузькі місця, що змінили і як перевірити результат своїми руками. Опишіть задачу — повернемося з оцінкою та планом робіт.

Кейс: як гра перестала втрачати кадри на середніх пристроях

Проєкт — казуальна гра з ізометричною сценою та десятками анімованих об'єктів. На середньому сегменті пристроїв частота кадрів просідала до 40–45, а на масових сценах — до 30, з регулярними пропусками: частка кадрів, відрендерених довше за бюджет, сягала чверті. Гравці скаржилися на «рване» керування, а не на графіку — просідання били по чутливості введення.

Ми почали з профілювання на реальних пристроях середнього сегмента, а не на флагманах: вимірювали час кадру, розподіл пропусків і навантаження на рендеринг по кадрах.

Виявилося, що вузьке місце — не кількість об'єктів, а надлишкові виклики рендерингу та перемальовування статичного фону кожен кадр.

Зібрали сцену в пакети за матеріалами, статику винесли в окремий шар, анімації перевели на спільний атлас, а фізику й логіку відв'язали від частоти рендерингу — тепер вони рахуються з фіксованим кроком і не «пливуть» при просіданнях.

Unity дав інструменти для пакетного рендерингу та профілювання, але вирішував не платформа, а порядок роботи: спочатку замір, потім зміна, потім повторний замір на тому самому наборі пристроїв.

Після оптимізації частота кадрів на середніх пристроях вийшла на стабільні 58–60 у масових сценах, частка пропущених кадрів упала з чверті до поодиноких відсотків, а розкид між найкращим і найгіршим кадром скоротився в рази — рендеринг перестав «смикатися». На слабкому сегменті втримали 45–50 без візуальних спрощень, які помітив би гравець.

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

Чим відрізняється відкладене відображення від прямого?

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

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

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

Виграш — у скороченні перемикань станів і кількості викликів: однотипні об'єкти малюються підряд, прискорювач рідше простоює між змінами текстур і шейдерів. На сценах із сотнями однотипних об'єктів це помітно підвищує продуктивність рендерингу та стабілізує час кадру.

Вибір підходу впирається в профіль сцени, а не в «найкращий» метод. Пряме відображення виграє там, де об'єктів мало, але вони часто змінюють стан, або де потрібна передбачувана затримка введення.

Відкладене — де об'єктів багато, вони статичні за матеріалом і їх можна ефективно згрупувати. Змішаний варіант трапляється найчастіше: інтерфейс і ефекти малюються напряму, а фон і масові об'єкти — через буфер.

Обмеження методів теж дзеркальні. Пряме відображення впирається в стелю за кількістю викликів: чим більше об'єктів, тим вище навантаження на процесор і тим частіше кадр не вкладається в бюджет.

Відкладене додає пам'ять під буфер команд і затримку в один-два кадри, а також ускладнює роботу з прозорістю та порядком накладання — сортування за станом може конфліктувати із сортуванням за глибиною.

На практиці підхід не фіксують раз і назавжди: його обирають під конкретну сцену та перемикають між режимами за її профілем. Спочатку знімають заміри — де саме втрачається час кадру, на процесорі чи на прискорювачі, — і вже під це підбирають метод.

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

Часті технічні сумніви щодо оптимізації рендерингу

Перед стартом робіт замовники ставлять одні й ті самі питання: чи не зламається гра на старих пристроях, скільки це займе, що буде з геймплеєм. Нижче — прямі відповіді, без загальних слів.

Оптимізація не зламає рендеринг на слабких пристроях?

Ні, якщо будувати її на профілях якості, а не на єдиному пресеті.

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

Слабкі пристрої отримують стабільний кадр без просідань, флагмани — повну картинку. Сумісність перевіряємо до релізу, а не після скарг.

Скільки часу займає оптимізація рендерингу?

Залежить від масштабу сцени та кількості платформ. Первинний аудит із замірами та планом — кілька днів, далі ітерації по вузьких місцях. Якщо проблема в одному важкому ефекті, правки займають дні; якщо перебудовується весь конвеєр відмальовування — тижні. Точний термін називаємо після замірів, а не «на око».

Які ризики у змін і чи можна відкотитися?

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

Оптимізація змінить геймплей чи картинку?

Мета — зберегти ігровий досвід, прибравши зайве навантаження. Ми не ріжемо те, що гравець помічає: ключові ефекти, читабельність сцени, чутливість керування залишаються. Прибираємо приховані витрати — зайві виклики відмальовування, дублюючі матеріали, невидиму геометрію. Візуально гра виглядає так само, а йде рівніше.

Чи потрібно переписувати проєкт під нову платформу?

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

Якщо залишилися сумніви щодо вашого проєкту — опишіть задачу, повернемося з оцінкою та планом робіт.

Обговоримо ваше завдання з оптимізації рендерингу

Щоб повернутися з оцінкою та планом оптимізації, нам потрібен не абстрактний запит «гра гальмує», а зріз поточного стану рендера. Чим конкретніші вхідні дані, тим точніша оцінка робіт і менше ітерацій на узгодження.

Що надіслати для старту:

  • Профіль кадрів: запис із профайлера за типовою сценою — де саме просідає час кадру (відмальовування, логіка, фізика, завантаження ресурсів).
  • Цільові пристрої: моделі, на яких застосунок зобов'язаний тримати стабільні кадри, і поточні показники на них.
  • Список важких місць: сцени з максимальною кількістю об'єктів, ефектами, прозорістю, динамічним світлом.
  • Вихідні коди та доступи: репозиторій, гілка, збірка, доступ до систем аналітики та звітів про збої.
  • Обмеження: терміни, платформи, вимоги до сумісності зі старими пристроями.

Далі працюємо за етапами. Спочатку відтворюємо просідання на стенді та фіксуємо базові метрики — без цього будь-яка оптимізація перетворюється на вгадування.

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

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

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1009
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    902
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1331
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1179
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1106
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    713