У VR кадр потрібно рендерити двічі — для лівого та правого ока. На Quest 2 це 72 fps × 2 = 144 Draw Call-пачки в секунду. Якщо ваш проект не пройшов через Single Pass Instanced Rendering і у вас більше 100 batches на кадр, стереоскопічна сцена просто не вкладеться в тайм-слот GPU. Головний біль і нудота у користувачів — прямий наслідок dropped frames. Ми на практиці знаємо, як це виправити: за плечима десятки оптимізованих XR-проектів під різні платформи. Наша спеціалізація — оптимізація графіки під VR/AR пристрої.
AR-проекти на ARCore/ARKit додають поверх цього захват з камери, обробку площин та occlusion mesh. Пристрій вже завантажений CPU-завданнями трекінгу до того, як ваш шейдер зробив перший виклик. Ми допомагаємо вкластися в FPS-бюджет навіть на бюджетних пристроях. Замовте аудит — ми оцінимо ваш проект за 2 дні та надамо план оптимізації з конкретними метриками.
Як оптимізація графіки під VR/AR пристрої вирішує проблему dropped frames?
Ключові техніки — Single Pass Instanced Rendering, Fixed Foveated Rendering, GPU Instancing та оптимізація шейдерів. Single Pass Instanced дозволяє рендерити обидва ока за один прохід, знижуючи кількість Draw Calls вдвічі. Fixed Foveated Rendering зменшує навантаження на GPU на 15–30% без помітного погіршення картинки. GPU Instancing групує однакові об'єкти в один Draw Call. Разом ці методи забезпечують стабільні 72 fps навіть на мобільних XR-пристроях.
Чому стандартні методи оптимізації графіки не працюють в VR/AR?
Зниження полігонажу — це останнє, що ми робимо. Спочатку дивимось на те, що реально вбиває продуктивність на XR-пристроях.
Overdraw в мобільному VR
На Adreno та Mali GPU overdraw коштує непропорційно дорого — тайловий рендер не любить велику кількість напівпрозорих об'єктів. Стандартні партикл-системи з Additive-блендингом на фоні HDR-скайбокса — типовий вбивця frame rate на Quest. Frame Debugger в Unity покаже це миттєво: шукаємо червоні зони в overdraw view.
Неправильне налаштування Fixed Foveated Rendering
Fixed Foveated Rendering на Meta XR SDK знижує навантаження на GPU на 15-30% — але тільки якщо правильно обрано рівень (Low/Medium/High) під конкретний контент. В динамічних сценах зі швидким рухом камери High-рівень дає артефакти на периферії. Рекомендуємо Medium для більшості проектів: він дає до 20% приросту продуктивності без помітних артефактів.
Single Pass Instanced не працює з кастомними шейдерами
Якщо в проекті є хоча б один шейдер без UNITY_VERTEX_INPUT_INSTANCE_ID та UNITY_SETUP_INSTANCE_ID, весь рендер автоматично fallback'ається в Multi Pass. Це подвоює навантаження. Знаходимо через XR Plug-in Management → Rendering Stats. Ми гарантуємо, що після аудиту всі шейдери будуть коректно підтримувати Single Pass Instanced.
Як ми працюємо з XR-проектами
Починаємо з профілювання на цільовому залізі — не в Editor, а на пристрої. RenderDoc для Android, Xcode Instruments для iOS/visionOS, OVR Metrics Tool (частина Meta XR Best Practices Guide). Емулятор не покаже реальних затримок пам'яті та bandwidth.
З нашої практики: кейс клієнта
Проект під Quest 3 — архітектурна візуалізація, 8 кімнат, PBR-матеріали. Перший білд: 45 fps в центрі сцени, 28 fps при погляді у бік вікна. Аналіз через OVR Metrics Tool показав 340 Draw Calls та 4 overdraw-шари на віконних стеклах. Рішення: GPU Instancing для повторюваних меблів (стільці × 24 → 1 Draw Call), заміна стекол з Standard Transparent на кастомний шейдер з Surface Type Opaque + альфа в кліпі, включення Fixed Foveated Rendering рівня Medium. Результат: 72 fps стабільні, thermal throttling зник. Наші клієнти економлять до 30% часу на профілювання завдяки автоматизованим інструментам.
Для AR-проектів окремо опрацьовуємо occlusion — AR Foundation Environment Depth вимагає коректного налаштування глибини в шейдерах, інакше віртуальні об'єкти «просвічують» крізь реальні поверхні.
Інструменти, які ми використовуємо
- Unity Profiler + Frame Debugger (GPU Usage module)
- RenderDoc (Android Vulkan/OpenGL ES)
- Meta Quest Developer Hub + OVR Metrics Tool
- XR Interaction Toolkit Profiling Guidelines
- ARM Mobile Studio (Streamline) для Adreno/Mali deep-dive
Shader Graph оптимізуємо вручну — дивимось на instruction count в Preview вікні, прибираємо зайві sample операції, переносимо обчислення з Fragment в Vertex там, де допустима інтерполяція.
Етапи роботи над оптимізацією XR-графіки
Спочатку збираємо білд в Release-конфігурації та знімаємо baseline-метрики: fps, GPU time per frame, Draw Calls, memory footprint. Без baseline неможливо оцінити результат.
Потім — аудит сцени: ієрархія об'єктів, кількість унікальних матеріалів, налаштування освітлення (статичне/динамічне), наявність real-time тіней (на мобільному VR вони майже завжди під забороною), LOD-групи.
Після аудиту готуємо план оптимізації з пріоритетами за impact/effort. Реалізація йде ітераціями з проміжними вимірами — важливо не втратити baseline та розуміти, що саме дало приріст.
Фінальний етап — теплове тестування на пристрої 20-30 хвилин в умовах нагріву. Thermal throttling на мобільних чипах (Snapdragon XR2) починається раніше, ніж здається.
| Масштаб завдання | Орієнтовні терміни |
|---|---|
| Аудит + звіт без правок | 2–4 дні |
| Оптимізація однієї сцени (до 500 об'єктів) | 1–2 тижні |
| Повний проект (5–15 сцен, кастомні шейдери) | 3–6 тижнів |
| Портіювання PC VR → standalone Quest | 4–8 тижнів |
Вартість розраховується індивідуально після аудиту проекту та цільової платформи.
Порівняння методів оптимізації
| Метод | Impact (приріст FPS) | Effort |
|---|---|---|
| Fixed Foveated Rendering | 15-30% | Низький — включення в SDK |
| Single Pass Instanced | 40-50% | Помірний — правка шейдерів |
| GPU Instancing | 20-60% | Низький — групування об'єктів |
| Оптимізація текстур (mipmap, стиснення) | 10-20% | Низький — налаштування імпорту |
Що входить в роботу
- Аудит продуктивності на цільовому пристрої з baseline-метриками
- Оптимізація шейдерів та налаштування рендерингу (Single Pass Instanced, Foveated Rendering)
- Зниження Draw Calls через batching, Instancing, LOD
- Налаштування освітлення та тіней (baked lighting, blob shadows)
- Теплове тестування та фінальний звіт
- Документація щодо використаних технік та рекомендації щодо подальшого розвитку
Часті помилки при підготовці XR-графіки
- Real-time тіні на мобільному VR. Cascaded Shadow Maps з 4 каскадами на Quest — це гарантовані dropped frames. Замінюємо на запечені в Lightmap або Blob Shadow (простий проектор).
- Не вимкнений MSAA вище 4x. На тайлових GPU (Adreno) MSAA 8x ламає продуктивність. В XR Project Settings ставимо 4x максимум, у складних сценах — 2x.
- Текстури без Mipmap. В VR об'єкти можуть бути на різних відстанях від камери одночасно. Без Mipmap GPU бере повну роздільну здатність для далеких об'єктів — bandwidth зростає без причини.
- Physics Colliders складніші за необхідне. Mesh Collider на об'єктах інтер'єру там, де достатньо Box/Capsule. В VR physics tick теж впливає на frame time.
Замовте аудит вашого XR-проекту — ми оцінимо його за 2 дні та надамо план оптимізації з конкретними метриками. Single Pass Instanced ефективніший за Multi Pass вдвічі на однаковій сцені, а оптимізація може скоротити витрати на хмарні інстанси до 2 разів. Отримайте консультацію, щоб дізнатися, як наші рішення підходять вашому проекту.






