Video Tutorials
Interface
Essentials
Advanced
Полезные советы
UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Lighting
Landscape Tool
Using Editor Tools for Specific Tasks
Extending Editor Functionality
Программирование
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine Tools
GUI
Double Precision Coordinates
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Materials
Art Samples
Tutorials

Удаление окклюзии

Отсечение объектов позволяет не отображать объекты, не попадающие в усеченную пирамиду видимости. В частности существуют следующие варианты отсечения по окклюзии:

Примечание
Поскольку ограничивающий прямоугольник объекта используется для отсечения по окклюзии (проверяется, виден ли ограничивающий прямоугольник или нет), рекомендуется экспортировать объекты из программного обеспечения для компьютерной 3D-графики в локальных координатах, чтобы границы сетки были ближе к геометрии.

Окклюдеры#

Окклюдеры позволяют отсекать геометрию, которая не видна позади них. Есть 2 типа окклюдеров:

Тип используемого окклюдера определяется выбираемой геометрией.

Окклюдеры могут быть очень эффективны в сложных сценах, где есть много объектов, которые перекрывают друг друга и требуют больших затрат на рендеринг (у них много полигонов и / или тяжелых шейдеров).

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

Перед использованием окклюдеров проверьте следующее:

  • Визуализация окклюдеров включена: в меню включен Rendering -> Occlusion Culling -> Occluders.
  • Отрисовка теней от закрытых объектов отключена: в меню выберите Windows -> Settings -> Occlusion Culling и включите Shadows Culling.
    Примечание
    При необходимости можно оставить включенным рендеринг теней.

Использование окклюдеров показано в видеоуроке Оптимизация контента .

Использование прямоугольного окклюдера#

Окклюдер - это прямоугольная форма, которая отсекает поверхности объектов, границы которых не видны позади них. Это самый простой тип окклюдеров, который следует использовать вместе с объектами в форме параллелепипеда, которые блокируют другие объекты. Например, вы можете добавить окклюдер, форма которого совпадает с границами здания, чтобы избежать рендеринга объектов позади этого здания.

Прямоугольный-окклюдер внутри здания

Чтобы создать прямоугольный окклюдер, выполните следующие действия:

  1. В меню выберите Create -> Optimization -> Occluder и добавьте окклюдер в качестве дочернего узла к узлу, который должен перекрывать другие объекты.
  2. В разделе Common вкладки Node в окне Parameters установите положение окклюдера на родительский.

  3. В разделе World Occluder вкладки Node щелкните Edit Size, чтобы включить режим редактирования для окклюдера. Измените размер окклюдера, используя цветные прямоугольники по бокам окклюдера, чтобы он совпадал с размером родительского узла.
    Примечание
    Вы также можете использовать параметр Size, чтобы установить размер по осям.

  4. Укажите Distance между камерой и окклюдером, при котором окклюдер ничего не закрывает и, следовательно, должен быть отключен, чтобы избежать негативного влияния на производительность.

Чтобы проверить, как работает окклюдер, отключите родительский узел, а затем попробуйте включить и выключить окклюдер:

По умолчанию передние грани окклюдера используются для отсечения объектов. Однако, если камера находится внутри окклюдера (например, внутри здания), отсечение окклюзии выполняться не будет. Чтобы избежать такой ситуации, включите параметр Back Face в разделе World Occluder вкладки Node.

Использование меш-окклюдера#

Меш-окклюдер основан на произвольном меше, который отсекает поверхности объектов, границы которых не видны позади Это. Меш-окклюдер используется вместе с геометрией, которую нельзя аппроксимировать прямоугольным окклюдером.

Чтобы создать окклюдер на основе меша, выполните следующие действия:

  1. Подготовьте низкополигональную сетку, которая будет использоваться для окклюдера.
    Примечание
    Не рекомендуется использовать ту же подробную сетку, которая используется для узла, который должен перекрывать другие объекты: сетка для окклюдера должна быть как можно более простой, чтобы избежать потери производительности.

  2. В меню выберите Create -> Optimization -> Occluder Mesh и укажите подготовленную сетку.
    Примечание
    Вы можете загрузить новую меш для окклюдера в любое время.
  3. Добавьте окклюдер в качестве потомка к узлу, который должен перекрывать другие объекты.
  4. В разделе Common вкладки Node в окне Parameters установите положение окклюдера на родительский.

  5. Укажите Distance между камерой и окклюдером, при котором окклюдер ничего не закрывает и, следовательно, должен быть отключен, чтобы избежать негативного влияния на производительность.

Запросы аппаратной окклюзии#

Еще один способ отсеять геометрию, которая не видна в окне просмотра камеры, - использовать запрос аппаратной окклюзии . Это позволяет пропускать рендеринг объектов, ограничивающие рамки которых закрыты другой непрозрачной геометрией. В результате количество отрисовываемых полигонов уменьшается, а производительность растет.

Чтобы запустить тест аппаратной окклюзии для сцены перед отправкой данных на GPU, включите флаг Rendering -> Occlusion Culling -> Occlusion Query в меню.

Примечание
Отбор будет выполняться для всех объектов с флагом Culled by Occlusion Query, установленным на вкладке Node окна Parameters.

Чтобы запустить тест на окклюзию оборудования, выполните следующие действия:

  1. В меню включите флаг Rendering -> Occlusion Culling -> Occlusion Query, чтобы включить тестирование сцены перед отправкой данных на графический процессор.

  2. Для всех объектов, которые следует отсечь, включите флаг Culled by Occlusion Query на вкладке Node окна Parameters.
    Примечание
    Только узлы с этим установленным флагом проверяются на аппаратное отсечение по окклюзии.

Если для объекта включена отсечение, для него отображается окно запроса окклюзии .

Material ball и его окно запроса окклюзии
Примечание
Чтобы визуализировать такие блоки, включите опцию Helpers -> Occlusion Queries.

Поле запроса окклюзии совпадает с размером ограничивающего прямоугольника объекта. Когда это поле перекрывается (т.е. его нет в области просмотра камеры), оно подсвечивается красным , что означает, что тест на окклюзию не пройден и сетка не будет отрисована.

Тест запроса на окклюзию пройден
Тест запроса окклюзии не прошел, Material ball не отображается
Примечание
Запросы аппаратной окклюзии следует использовать только для объектов, использующих тяжелые шейдеры. В противном случае производительность будет снижаться, а не увеличиваться. Рекомендуется включить запросы для воды или объектов с отражениями.

Вы можете проверить эффект этой техники, включив второй каркасный режим, чтобы увидеть все треугольники в сцене. Введите в консоли render_show_triangles 2 и проверьте, как действуют закрытые многоугольники.

Пример использования запросов аппаратной окклюзии также доступен в видеоуроке Оптимизация контента .

Последнее обновление: 02.10.2020