Документация/Статьи/Обзор портальной системы
From NeoAxis Engine Wiki
| Language: | Status: | Approved |
Описание
Портальная система предназначена для оптимизации рендеринга закрытых пространств. Закрытые пространства - это обычно комнаты с коридорами; открытые - большие пространства, ландшафты. Потратив время на настройку портальной системы на вашей карте, вы уменьшите количество треугольников в кадре, и тем самым увеличите FPS.
Система порталов состоит из набора объектов трех типов:
- Зоны, обозначающие некие локальные пространства: например, комнаты.
- Порталы, обозначающие всевозможные проемы в зонах: например, окна, дверные проемы.
- Окклюдеры, обозначающие всевозможные выключатели порталов: например, двери.
Итак, рассмотрим устройство портальной системы. Система состоит из зон, которые связаны порталами (дверные проемы). Каждый портал соединяет либо две зоны, либо одну зону и открытое пространство. Наконец, для объектов, которые могут перекрыть порталы (дверные проемы), используются окклюдеры.
Урок - Настройка системы порталов
В этом уроке мы настроим портальную систему для небольшой карты. Из объектов нам понадобится комната из NeoAxis Engine SDK (Rooms.mesh, находящийся в "Data\Models\Rooms") и пара дверей (Door.type, находящийся в "Data\Types\Dynamic\Door").
Начнем с того, что создадим новый слой карты специально для портальной системы. Это необязательный шаг, но использование слоев облегчает редактирование сложных карт. Нажмем правой кнопкой на элемент Root Layer в списке Map Entities. Зададим имя новому слою: Portal System.
Когда слой выделен, объекты создаются именно в нем. Также слой можно назначить уже готовому объекту, с помощью параметра Layer блока Map Editor.
Разобравшись со слоями, можем приступить непосредственно к созданию портальной системы. Первым делом, добавим на карту зону. Выберем в списке Entity Types объект Zone в папке Base.
Разместим зону по центру нашего помещения. Теперь нам предстоит ювелирная работа по масштабированию зоны до размеров комнаты.
Вот что у нас должно получиться:
Помимо основного помещения, у Rooms.mesh есть небольшой коридор. Его тоже необходимо обозначить зоной. Сделаем это.
Необходимо помнить, что соседние зоны должны находиться как можно плотнее друг к другу. Впоследствии, мы выясним зачем это нужно.
Все имеющиеся на нашей карте закрытые помещения обозначены зонами и дело осталось за порталами. Порталы обозначают проемы в помещениях. В нашем помещении таких проема два, следовательно, нам понадобится два портала. Первый проем - это дверь между основным помещением и коридором, второй - дверь из коридора наружу.
В размещении порталов нет ничего сложного, но есть один нюанс, связанный с дверьми. Дверь - это окклюдер, т.е. выключатель портала. Портал выключается только тогда, когда полностью находится внутри окклюдера. В Door.type окклюдер взят с запасом - он чуть больше двери. Таким образом, наша задача сделать портал по размерам двери, тогда он будет полностью внутри окклюдера.
Приступим к практике. Добавим на карту портал. В списке Map Entities он расположен в папке Base.
Мы начали урок с того, что добавили на карту слой для портальной системы. Удобство использования слоев во всей красе показывает себя при добавлении на карту портала. Отключив отображение геометрии (нажав на изображение глаза рядом со слоем), мы можем беспрепятственно расположить портал.
Выше было сказано, что соседние зоны должны находиться как можно плотнее друг к другу. Эта необходимость связана с размещением порталов. Портал - это проем между двумя зонами (или зоной и открытым пространством), который должен одновременно находиться и в одной, и другой зоне. Если это условие не выполняется, то на экране редактора будет выведено сообщение 1 invalid portal.
Теперь расположим еще один портал на месте выходной двери.
Первый портал у нас связывал одно помещение с другим, а второй - помещение с открытым пространством. Эта разница существенна и мы обязаны указать параметр Outdoor у второго портала. Этот параметр как раз и отвечает за то, какие пространства связывает портал. Установим его в значение True, указывая, что портал связывает закрытое пространство с открытым.
Стрелки портала должны указывать в сторону открытого пространства. Кроме того, часть портала должна находиться в зоне, а другая - вне ее.
Чтобы протестировать портальную систему, расположим в коридоре статую зомби (Types -> Static Objects -> ZombieStatue).
Запустим карту в режиме симуляции.
Сначала перейдем в меню NeoAxis Engine, нажав клавишу Escape. Потом в меню Debug поставим галочку напротив пункта Wireframe, чтобы видеть выводимую геометрию.
Если статую зомби в коридоре не видно из помещения, значит портальная система настроена правильно.
Сам коридор отрисовывается, т.к. составляет с основным помещением единый меш.
Подойдем к двери, чтобы она открылась. Теперь статую зомби видно, это значит, что в работу включился портал, расположенный в двери.
Мы научились настраивать портальные системы, состоящие из зон и порталов. Но как быть с окклюдерами? Мы уже сталкивались с окклюдерами, когда размещали в них порталы для дверей. Добавить Occluder на карту, можно выбрав его в списке Base. Но гораздо удобнее работать с объектами, к которым уже прикреплен окклюдер. Примером такого объекта является Door.type. Этот тип состоит из двух прикрепленных объектов: меша двери и окклюдера. О том как работать с редактором игровых ресурсов, чтобы научиться создавать собственные типы объектов с окклюдерами, можно прочитать здесь.






