Налаштування системи occlusion culling для скриття невидимої графики
Occlusion culling—один з небагатьох інструментів оптимізації, який дає помітний приріст продуктивності у VR майже безкоштовно. Суть: не рендерити об'єкти, які знаходяться за іншими об'єктами та фізично не можуть бути видимі. На складних VR-сценах з кількома кімнатами або закритими просторами це скорочує кількість draw calls у 2–5 разів.
Де occlusion culling дає результат, а де непотрібний
Occlusion culling ефективний у закритих просторах з непрозорою геометрією: коридори, кімнати, будівлі, печери. Стіна між двома кімнатами—відмінний occluder. Камера дивиться в одну кімнату, все в сусідній не рендерить.
Відкриті простори, природні сцени, ландшафти—occlusion culling майже не допомагає. Коли горизонт відкритий, більшість об'єктів потрапляє у frustum та нічого їх не закриває. Здесь працює frustum culling (вже вбудований у Unity), LOD groups та portals.
У VR особливість: у гравця два ока та два frustum. Кут обзору гарнітури (100–110° при FOV Meta Quest 3) більший, ніж у стандартного монітора. Це означає, що ефективність culling трохи менша, ніж у настільних іграх з вузьким FOV—у кадр потрапляє більше об'єктів. Тим важливіше правильний bake.
Налаштування Umbra у Unity
Unity використовує Umbra як рушій occlusion culling. Налаштування через Window → Rendering → Occlusion Culling. Ключові параметри bake:
Smallest Occluder—мінімальний розмір об'єкта, який враховується як occluder. Значення за замовчуванням 5 одиниць—для VR-ігр з детализованими інтер'єрами часто потрібно знижувати до 1–2, інакше тонкі стіни та колони не стають occluder-ами. Якщо стіна товщиною 0.3 м не блокує рендер кімнати за нею—перевірте цей параметр.
Smallest Hole—розмір прохода, через який occluder «видить» геометрію за собою. Занадто мале значення—дверні проєми та вікна дають утечку, об'єкти за ними все рівно рендерять. Занадто велике—occluder ігнорує реальні просвіти.
Backface Threshold—наскільки агресивно спрощується PVS-граф. Значення 100 = максимальна агресивність (менше даних, ризик pop-in артефактів). Для VR краще 25–50: pop-in у VR помітніший, ніж на плоскому екрані.
Критично: всі статичні об'єкти-occluder повинні бути помічені як Occluder Static та Occludee Static в Inspector. Якщо хоч одна крупна стіна не помічена—дірка у culling.
Динамічні об'єкти та occlusion culling
Occlusion culling у Unity працює лише зі статичною геометрією на стороні occluder-ів. Динамічні об'єкти (вороги, предмети, частинки) не можуть бути occluder-ами—не беруть участі в bake. Але вони самі можуть culling-тися статичними occluder-ами, якщо правильно помічені як Occludee.
Для VR-ігр з великою кількістю динамічних об'єктів у закритих просторах—додатково розглядаємо Portal-based culling через користувацькі скрипти або сторонні рішення типу SECTR або Portals & Rooms у Unity. Portal culling працює з явно заданими порталами (дверні проєми) та дає більш передбачуваний результат, ніж Umbra у складних випадках.
Перевірка коректності налаштувань
Після bake—обов'язкова візуалізація через Occlusion Culling → Visualization у Scene View. Видна PVS (Potentially Visible Set) для будь-якої позиції камери: які об'єкти вважаються видимими з поточної точки.
Типовий артефакт—occluder занадто агресивно срізує геометрію на краях: гравець видить, як об'єкт з'являється з повітря при повороті голови. У VR це особливо неприємно. Виправляється збільшенням Smallest Hole або додаванням додаткових occluder-ів у перехідних зонах.
Інструмент перевірки продуктивності: Unity Frame Debugger після bake—дивимось на кількість об'єктів у Render.OpaqueGeometry для кожної позиції камери до та після culling.
| Масштаб сцени | Орієнтовні строки налаштування |
|---|---|
| 1–3 закриті приміщення | 1–2 робочих дня |
| Багаторівнева локація (10–20 кімнат) | 3–5 робочих днів |
| Повний проект з ітераційним налаштуванням | 1–3 тижні |
Вартість визначається після аналізу сцен проекту та цільових платформ.





