Настройка системы 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. Угол обзора headset (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 недели |
Стоимость определяется после анализа сцен проекта и целевых платформ.





