Отсечение по окклюзии
Отсечение объектов позволяет не отображать объекты, не попадающие в усеченную пирамиду видимости. В частности существуют следующие варианты отсечения по окклюзии:
- Окклюдеры: box, mesh.
- Запросы аппаратной окклюзии для объектов с тяжелыми шейдерами.
Окклюдеры#
Окклюдеры позволяют отсекать геометрию, которая не видна позади них. Есть 2 типа окклюдеров:
Тип используемого окклюдера определяется выбираемой геометрией.
Окклюдеры могут быть очень эффективны в сложных сценах, где есть много объектов, которые перекрывают друг друга и требуют больших затрат на рендеринг (у них много полигонов и / или тяжелых шейдеров).
Перед использованием окклюдеров проверьте следующее:
- Визуализация окклюдеров включена: в меню включен Rendering -> Occlusion Culling -> Occluders.
- Отрисовка теней от закрытых объектов отключена: в меню выберите Rendering -> Occlusion Culling и включите Shadows Culling.
При необходимости можно оставить включенным рендеринг теней.
Использование окклюдеров показано в видеоуроке Оптимизация контента .
Использование прямоугольного окклюдера#
Окклюдер - это прямоугольная форма, которая отсекает поверхности объектов, границы которых не видны позади них. Это самый простой тип окклюдеров, который следует использовать вместе с объектами в форме параллелепипеда, которые блокируют другие объекты. Например, вы можете добавить окклюдер, форма которого совпадает с границами здания, чтобы избежать рендеринга объектов позади этого здания.
Чтобы создать прямоугольный окклюдер, выполните следующие действия:
- В меню выберите Create -> Optimization -> Occluder и добавьте окклюдер в качестве дочернего узла к узлу, который должен перекрывать другие объекты.
- В разделе Common вкладки Node в окне Parameters установите положение окклюдера на родительский.
- В разделе World Occluder вкладки Node щелкните Edit Size, чтобы включить режим редактирования для окклюдера. Измените размер окклюдера, используя цветные прямоугольники по бокам окклюдера, чтобы он совпадал с размером родительского узла.
Вы также можете использовать параметр Size, чтобы установить размер по осям.
- Укажите Distance между камерой и окклюдером, при котором окклюдер ничего не закрывает и, следовательно, должен быть отключен, чтобы избежать негативного влияния на производительность.
Чтобы проверить, как работает окклюдер, отключите родительский узел, а затем попробуйте включить и выключить окклюдер:
По умолчанию передние грани окклюдера используются для отсечения объектов. Однако, если камера находится внутри окклюдера (например, внутри здания), отсечение окклюзии выполняться не будет. Чтобы избежать такой ситуации, включите параметр Back Face в разделе World Occluder вкладки Node.
Использование меш-окклюдера#
Меш-окклюдер основан на произвольном меше, который отсекает поверхности объектов, границы которых не видны позади Это. Меш-окклюдер используется вместе с геометрией, которую нельзя аппроксимировать прямоугольным окклюдером.
Чтобы создать окклюдер на основе меша, выполните следующие действия:
- Подготовьте низкополигональную сетку, которая будет использоваться для окклюдера.
Не рекомендуется использовать ту же подробную сетку, которая используется для узла, который должен перекрывать другие объекты: сетка для окклюдера должна быть как можно более простой, чтобы избежать потери производительности.
- В меню выберите Create -> Optimization -> Occluder Mesh и укажите подготовленную сетку.
Вы можете загрузить новую меш для окклюдера в любое время.
- Добавьте окклюдер в качестве потомка к узлу, который должен перекрывать другие объекты.
- В разделе Common вкладки Node в окне Parameters установите положение окклюдера на родительский.
- Укажите Distance между камерой и окклюдером, при котором окклюдер ничего не закрывает и, следовательно, должен быть отключен, чтобы избежать негативного влияния на производительность.
Запросы аппаратной окклюзии#
Еще один способ отсеять геометрию, которая не видна в окне просмотра камеры, - использовать запрос аппаратной окклюзии . Это позволяет пропускать рендеринг объектов, ограничивающие рамки которых закрыты другой непрозрачной геометрией. В результате количество отрисовываемых полигонов уменьшается, а производительность растет.
Чтобы запустить тест аппаратной окклюзии для сцены перед отправкой данных на GPU, включите флаг Rendering -> Occlusion Culling -> Occlusion Query в меню.
Чтобы запустить тест на окклюзию оборудования, выполните следующие действия:
- В меню включите флаг Rendering -> Occlusion Culling -> Occlusion Query, чтобы включить тестирование сцены перед отправкой данных на графический процессор.
- Для всех объектов, которые следует отсечь, включите флаг Culled by Occlusion Query на вкладке Node окна Parameters.
Только узлы с этим установленным флагом проверяются на аппаратное отсечение по окклюзии.
Если для объекта включена отсечение, для него отображается окно запроса окклюзии .
Поле запроса окклюзии совпадает с размером ограничивающего прямоугольника объекта. Когда это поле перекрывается (т.е. его нет в области просмотра камеры), оно подсвечивается красным , что означает, что тест на окклюзию не пройден и сетка не будет отрисована.
Тест запроса на окклюзию пройден |
Тест запроса окклюзии не прошел, Material ball не отображается |
Вы можете проверить эффект этой техники, включив второй каркасный режим, чтобы увидеть все треугольники в сцене. Введите в консоли render_show_triangles 2 и проверьте, как действуют закрытые многоугольники.
Пример использования запросов аппаратной окклюзии также доступен в видеоуроке Оптимизация контента .