Unity. Occlusion Culling

А вы знаете, что когда вы играете в игру, существует только тот игровой мир, который видит камера!?

Конечно же, игровая локация полностью загружена в память, но отрисовывается только та часть, которая реально видна на вашем экране. Этот подход позволяет экономить массу ресурсов, чтобы не обрабатывать и не отрисовывать все то, что не попадает в кадр.

На видео ниже показано, как этот процесс работает в Зомботроне, на движке Unity.

 

Кстати, интересный факт: многие начинающие разработчики думают, что в Unity эта функция работает по умолчанию и ничего специально делать не нужно, чтобы получить такую оптимизацию. Но это не совсем так!

Чтобы Occlusion Culling заработал в Unity, вам нужно построить карту сцены, в которую будет добавлена вся необходимая информация об игровых объектах: какие объекты статические, какие динамические, какой размер объектов, каков размер вашего игрового мира и так далее.

Построить данные для Occlusion Culling не сложно. Когда закончите работу над игровой локацией, не важно какая у вас сцена 2D или 3D, просто откройте в меню Unity ▸ Window ▸ Rendering ▸ Occlusion Culling. В открывшемся окне перейдите на вкладку Bake и нажмите кнопку Bake внизу окна. Если у вас открыто сразу несколько сцен, то сцена, для которой вы «запекаете данные», должна быть активной!

Когда карта сцены для Occlusion Culling будет построена, вы можете перейти на вкладку Visualisation, после чего подвигайте камеру, чтобы увидеть, как работает усечение игровых объектов, выходящих за пределы фрустума камеры. Так же вы можете наблюдать за усечением игровых объектов и в Play Mode, находясь на вкладке Visualisation. Но не забывайте обновлять данные для Occlusion Culling каждый раз, когда вносите в сцену серьезные изменения в расстановке игровых объектов, в противном случае у вас может случаться странное: игровые объекты могут начать пропадать частично или полностью, находясь в кадре игровой камеры ;)

Эх… а когда-то, давным давно на Flash, мне пришлось писать самостоятельно похожую систему усечения игрового мира, выходящего за пределы экрана, чтобы не тратить ресурсы на отрисовку всего игрового мира, и это был лишь один из сотни способов оптимизации...