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 — стандарт для анализа рендер-пайплайна. Для VR проектов в Unity подключается через RenderDoc Integration или вручную через UnityEngine.Rendering.DebugManager. В Single Pass Instanced режиме в RenderDoc видны два viewport в одном draw call — это нормально, не стоит пугаться.
Что искать первым делом: Timeline view в RenderDoc показывает длительность каждого прохода в миллисекундах. В типичной VR сцене самые дорогие пассы — Shadow Map rendering, Opaque rendering, Transparent rendering. Если Shadow Map занимает 3+ мс при бюджете 8–9 мс на фрейм — это первая цель.
В Drawcall list ищем повторяющиеся паттерны: одни и те же вызовы, которые не батчатся. Если 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 в шейдере (fog по глубине) плюс несколько крупных particle-plane с тумановым текстурным атласом на ближних планах. GPU-время — с 4.2 мс до 0.3 мс. Визуально — практически неотличимо для конечного пользователя в VR, где восприятие деталей снижено из-за дистанции и движения.
Этапы работы
Профилирование начинается с определения платформы и установки инструментов. Для Quest — физический шлем в режиме разработчика, Snapdragon Profiler, ADB. Для PCVR — RenderDoc на целевой GPU. Сбор baseline метрик в нескольких репрезентативных сценах.
После анализа составляется приоритизированный список проблем: по вкладу в GPU-время и сложности устранения. Обычно 3–5 точек дают 60–70% прироста производительности. Остальное — работа по убывающей доходности.
| Этап | Сроки |
|---|---|
| Профилирование + отчёт с рекомендациями | 3–5 дней |
| Профилирование + устранение топ-3 проблем | 1–2 недели |
| Полный цикл оптимизации с верификацией | 3–5 недель |
Стоимость рассчитывается индивидуально после получения доступа к проекту и информации о целевой платформе.





