Профілювання використання GPU ресурсів у VR іграх

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

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

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

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Профілювання використання GPU ресурсів у VR іграх
Середня
~3-5 робочих днів
Часті питання

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

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

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

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

tags: [vr-ar]

Профілювання використання GPU ресурсів у VR іграх

Коли VR гра не утримує цільову частоту кадрів, перше, що роблять розробники — зменшують розрішення або прибирають об'єкти. Це допомагає, але не вирішує проблему: після наступного спринту з новим контентом все повторюється. Правильний підхід — знайти конкретні GPU вузькі місця через профілювання та усунути саме їх.

Специфіка VR: на Quest без підключення до ПК немає повноцінного GPU capture. Інструменти потрібно підбирати під платформу. Для standalone Quest — OVR Metrics Tool та Snapdragon Profiler. Для PCVR (SteamVR, OpenXR на PC) — RenderDoc, NVIDIA Nsight або AMD Radeon GPU Profiler. Для Quest через Link — гібридний варіант.

RenderDoc: як правильно читати GPU capture у VR

RenderDoc — стандарт для аналізу рендер-pipeline. Для VR проектів у Unity підключається через RenderDoc Integration або вручну через UnityEngine.Rendering.DebugManager. У Single Pass Instanced режимі у RenderDoc видні два viewport в одному draw call — це нормально, не варто лякатися.

Що шукати першим ділом: вид Timeline у RenderDoc показує тривалість кожного проходу в мілісекундах. У типовій VR сцені найдорожчі pass-и — Shadow Map rendering, Opaque rendering, Transparent rendering. Якщо Shadow Map займає 3+ мс при бюджеті 8–9 мс на кадр — це перша ціль.

У списку drawcall шукаємо повторюючі паттерни: одні й ті ж вызови, які не батчаться. Якщо Mesh Renderer відрисовується 50 разів окремими вызовами замість одного інстансованого — це CPU-overhead, не GPU. Вони видні по іконці у RenderDoc та по тому, що часи маленькі, але вызовів багато.

Для пошуку GPU bottleneck використовуємо PIX markers (у Unity встановлюються через CommandBuffer.BeginSample/EndSample) — вони розбивають frame на іменовані блоки та одразу показують, скільки GPU-часу займає кожен блок. Без маркерів доводиться гадати, до якої ділянки коду належить конкретний draw call.

Snapdragon Profiler для Meta Quest

RenderDoc не працює безпосередньо на Android-based Quest без PCVR Link. Тут основний інструмент — Snapdragon Profiler від Qualcomm. Підключається до Quest через ADB (adb connect), вимагає режиму розробника на шлемі.

Ключові метрики у Snapdragon Profiler: GPU Busy %, Fragment ALU Instructions/Vertex, Textures Fetches per Cycle, L2 Cache Hit Rate. Якщо GPU Busy постійно 95–100% — GPU-bound. Якщо нижче 70% при дропах — CPU-bound, і оптимізувати GPU безглуздо.

Overdraw у Snapdragon Profiler показується як Visibility Ratio — співвідношення відрисованих пікселів до фінально видимих. Для мобільного VR нормою вважається 1.5–2x. Вище 3x — серйозна проблема з сортуванням прозорих об'єктів або з draw order непрозорої геометрії.

Тайлова архітектура GPU на Quest (Tile-Based Deferred Rendering) принципово відрізняється від desktop GPU. Записи у render target не зберігаються у RAM одразу, а буферизуються у on-chip tile memory. Якщо шейдер або постобробка порушують цей потік (наприклад, читають з render target, у який щойно писали), відбувається tile flush — дані вивантажуються у RAM та знову завантажуються. Це дорого. У Snapdragon Profiler це видно по spike у Tile Flush Count.

Кейс: 43% GPU-часу на один ефект туману

Проект — пригодницька VR-гра для Quest 2. Скарга: стабільно 60–65 fps при цільових 72, без явних важких об'єктів у сцені.

Профілювання через Snapdragon Profiler виявило: 43% GPU-часу у outdoor-сценах йде на volumetric fog. Ефект був портований напрямку з PC-версії: full-screen ray marching з 64 кроками на піксель. На Quest це катастрофа — кожен піксель робить 64 выборки текстури.

Рішення: заміна volumetric fog на псевдооб'ємний туман через Depth Fog у шейдері (туман за глибиною) плюс кілька крупних particle-plane з туманною текстурною атласом на ближніх планах. GPU-час — з 4.2 мс до 0.3 мс. Візуально — практично невідрізне для кінцевого користувача у VR, де сприйняття деталей знижено через дистанцію та рух.

Етапи роботи

Профілювання починається з визначення платформи та встановлення інструментів. Для Quest — фізичний шлем у режимі розробника, Snapdragon Profiler, ADB. Для PCVR — RenderDoc на цільовому GPU. Збір базових метрик у кількох репрезентативних сценах.

Після аналізу складається пріоритизований список проблем: за внеском у GPU-час та складністю усунення. Звичайно 3–5 пунктів дають 60–70% приросту продуктивності. Решта — робота за спадною дохідністю.

Етап Строки
Профілювання + звіт з рекомендаціями 3–5 днів
Профілювання + усунення топ-3 проблем 1–2 тижні
Повний цикл оптимізації з верифікацією 3–5 тижнів

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