Оптимізація графіки під частоту оновлення 72/90/120 Гц у VR

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1Усі 242 послуг
Оптимізація графіки під частоту оновлення 72/90/120 Гц у VR
Складний
~1-2 тижні
Часті запитання

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

Які етапи розробки гри?

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    696
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    879
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    504
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    543

Оптимізація графіки під частоту обновлення 72/90/120 Hz в VR

Пропущений кадр у VR – не просто заміна картинки. Це вестибулярний конфлікт: візуальна система говорить "ти стоїш", вестибулярний апарат говорить "ти рухаєшся". При регулярних дропах з'являється нудота. При 72 fps бюджет на кадр – 13.9 мс. При 90 – 11.1 мс. При 120 – 8.3 мс. Кожна мілісекунда на рахунку, та звичайні підходи до оптимізації "як у звичайній грі" тут не працюють.

Meta Quest 3 за замовчуванням запускається на 72 Hz – розробник повинен явно запросити 90 або 120 через OVRManager.display.displayFrequency. Але запросити мало: потрібно переконатись, що рендер-бюджет дозволяє не дропати кадри на обраній частоті, інакше система автоматично откатиться назад.

Де реально теряються мілісекунди

Найчастіша причина дропів – overdraw на прозорих матеріалах. VR рендерит два ока, та кожен напівпрозорий об'єкт малюється двічі. Ефекти частинок з десятьма шарами прозорості, які у звичайній грі коштують 1–2 мс, у VR легко стають 4–5 мс. RenderDoc дозволяє точно вимірити overdraw: у режимі Overdraw Heatmap одразу видно, де пікселі перерисовуються 8–12 разів.

Друга проблема – draw calls. На Quest 3 (Snapdragon XR2 Gen 2) GPU не так страшен, як CPU-overhead від великої кількості вызовів. 300 draw calls при неефективному батчингу – це 3–4 мс тільки на CPU-side. GPU Instancing працює добре для однакових мешей, Static Batching – для статики. Проблема в тому, що при Dynamic Batching геометрія трансформується на CPU, та це дорожче ніж просто окремий draw. Dynamic Batching у VR варто вимкнути та замінити ручним DrawMeshInstanced для динамічних об'єктів.

Третє – тіні. Real-time тіні у VR – роскіш. Навіть один каскадний Directional Light з Shadow Distance 30м на Quest коштує 3–5 мс. Стандартний підхід: запекати тіні в lightmap для статики, використовувати Blob Shadow Projector або псевдотіні для динамічних об'єктів. Якщо тіні необхідні – тільки один каскад, Shadow Distance не більше 10–15 м, PCF фільтрація замість VSM.

Fixed Foveated Rendering та Variable Rate Shading

FFR – головний інструмент оптимізації, яким не користуються за невіданням. Периферійне зрення людини значно менш чутливе до деталей, ніж центральне. FFR рендерит краї екрану з пониженою роздільністю – на Quest це налаштовується через OVRManager.fixedFoveatedRenderingLevel.

Рівні FFR від Low до HighTop: на High краї рендерються на 1/4 роздільності. Для більшості сцен непомітно – але економить до 20–30% GPU часу. Винятки: тонкий текст на периферії (UI-елементи по краях поля зору), тонкі лінії (проводи, решітки). Для цих об'єктів FFR можна вимкнути через OVROverlay – рендерити їх поверх основного шару без FFR-деградації.

Variable Rate Shading – більш гнучкий варіант, де швидкість шейдингу варіюється по тайлам екрану. У Unity 2022+ підтримується через ShadingRateImage API, але тільки на платформах з підтримкою VRS у залізі. Meta Quest 3 підтримує.

Процес оптимізації на практиці

Без даних – нема оптимізації. Перший крок завжди: профілювання через OVR Metrics Tool (для Quest) або Unity Profiler з підключенням до пристрою. Нас цікавить GPU time per frame, а не FPS – FPS може здаватися стабільним через Asynchronous SpaceWarp (ASW), який синтезує проміжні кадри при дропах. ASW маскує проблему, але не вирішує її.

Після профілювання – Frame Debugger для аналізу послідовності draw calls та RenderDoc для детального GPU capture. Зазвичай 80% GPU-часу займають 20% об'єктів. Оптимізуємо їх, а не все підряд.

Типовий результат роботи на реальному проекті: Quest 3, екшн-гра, старт – 68 fps при 72 Hz з періодичними дропами. Після аналізу: overdraw від particle systems (6 шарів ефектів сгоряння) – мінус 3.2 мс після замістити на атласні спрайти з 2 шарами. Тіні від трьох джерел світла – мінус 4.1 мс після заміни на запечені lightmaps. Dynamic Batching – вимкнено, додано GPU Instancing для дерев та каменів – мінус 1.8 мс CPU. Итог: стабільні 90 fps з запасом 2–3 мс.

Терміни

Обсяг оптимізації Терміни
Профілювання + рекомендації 2–3 дні
Оптимізація рендеру (тіні, batching, FFR) 1–2 тижні
Повна оптимізація під цільову частоту 3–6 тижнів

Вартість розраховується після аудиту проекту та визначення цільової платформи й частоти обновлення.