Создаём HOM, порталы и сектора — S.T.A.L.K.E.R. Inside Wiki

Создаём HOM, порталы и сектора

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Основная теория

Для работы нам понадобится X-Ray SDK.

Для начала, зачем оно нужно:

HOM - расшифровывается как Hierarchical Occlusion Mapping, или маппинг иерархических отсечений. Что это значит: упрощённо говоря, с помощью HOM, можно повысить производительность рендеринга сложных уровней на ~20%.

Как работает HOM: Не вдаваясь в технические подробности, объясню упрощённо: то, что закрыто от игрока Occlusion'ом - процессор не обрабатывает, а видеокарта не рендерит - а значит, система экономит свои ресурсы, производительность при этом, естественно, возрастает.

Секторы и порталы: про них - читаем здесь - разъяснено очень просто и доступно. Могу лишь добавить, что в X-Ray 3D Engine, геометрия уровня в построении секторов не участвует, он использует для этого HOM-объекты.

Вывод: Все эти заморочки позволяют практически двухкратно поднять производительность системы, и благодарные юзеры с не слишком сильными компами (а таких большинство), будут таскать вас на руках за такой шикарный подарок ;)

Lamp.gif Важные моменты
1. Делать всё это, актуально для действительно сложных и мощных карт, так как не только поднимет скорость в итоге, но и позволит напихать в карту, побольше всякой интересной геометрии.

2. Изложенные выше принципы, актуальны не только для сталкера, но и для подавляющего большинства современных игр. Например, лучше всего это всё дело с порталами и секторами продумано на играх на движке Sourse (Half-Life 2 и т. д.)


Итак, приступаем к креативу!

Допустим, есть у вас карта, на которой надо сделать всё вышеперечисленное. Как это сделать, я объясню на примере старого доброго кубика, сделаем ему HOM, поставим на карту, и создадим порталы с секторами.

Начнём с HOM.

Вот наша карта, на ней кубик, надо для него сделать HOM.

100.JPG

Чтобы сделать HOM, сбрасываем сцену, и идём в Библиотеку статической геометрии, находим там наш кубик. У меня он находится по адресу editor\shadertest_box, вы можете заюзать свой.

200.JPG

Теперь, этот кубик, там же, в библиотеке, экспортим в формат LWO, чтобы стереть все настройки материалов, на базе экспортированного объекта мы и сделаем HOM, и материалы с шейдерами ему ни к чему: обозвал я его shadertest_box_occ, (OCC - значит окклюдер, отсекатель).

300.JPG

Всё, экспортировали. Теперь импортируем его обратно, заходим в настройки объекта, в поле Object Type (тип объекта), меняем его тип со Static на HOM, выходим с настроек и сохраняем изменения. Тут же - видим, вид нашего кубика - изменился, теперь - он стал HOM-объектом.

400.JPG

Теперь - загружаем снова нашу карту, выбираем режим "объекты", в самом низу, жмём кнопку "обновить список", чтобы в нём появился новый объект, и добавляем наш окллюдер на карту, как обыкновенный объект.

500.JPG

Осталось только "подогнать" (двигая, вращая и т. д...) окклюдер под имеющийся кубик как можно точнее.

600.JPG

Всё! HOM-окклюдер для объекта успешно создан. Таким-же образом, можно (и нужно) поступить со всеми объектами на карте, но создавать окклюдеры лучше всего - ещё в 3DSMax, в виде неких "упрощённых муляжей" для создаваемых объектов. Хотя можно и так как я описал выше.

Секторы и порталы необходимо генерировать после того, как сборка карты закончена, все объекты на месте, окклюдеры установлены, и т.д. Короче, перед самой прекомпиляцией. Делаются они очень просто, так как в SDK - возможности по ним весьма убогие, а многие так и вообще "временно отключены". Но создавать их можно.

Итак:

Переходим в режим Секторы и создаём базовые порталы, нажав соответствующую кнопку. Если объектов много, целесообразно "проверить на правильность" одноимённой кнопкой. Сектора созданы.

700.JPG

Переходим в режим "порталы" и "вычисляем все порталы".

800.JPG

Всё. Occlusion Mapping - сделан, сектора созданы, а порталы к ним вычислены. Спасибо за внимание.

Важное дополнение по созданию секторов и порталов

Для того, чтобы создать сектора на уровне, необходимо сначала подготовить геометрию в 3Д редакторе. Разбивка уровня на секторы производится по отдельным мешам. Для этого в 3Д редакторе необходимо разбить геометрию на отдельные меши, чтобы потом в СДК сделать из каждого отдельного меша сектор. При разбивке геометрии на части необходимо придерживаться теории по секторам. После того, как разбили геометрию на отдельные меши необходимо экспортировать ее в СДК, также по отдельности каждый меш. Далее, в СДК начинаем создавать секторы. Для этого переходим в меню секторов и нажимаем Add (чайник). Появляется дополнительное меню. В нем выделяем Create New Single (From Mesh). И потом начинаем выделять свои отдельные меши. Каждый выделенный меш и является отдельным сектором. При выделении можно задать цвет сектору.

Sectors01.jpg

Sectors02.jpg

Sectors03.jpg

После того, как выделили и задали цвета всем своим мешам. Нажимаем Create Default. Создается базовый сектор.

Sectors04.jpg

После этого переходим в режим порталов. И нажимаем Compute All Portals. Выскакивает окно, в котором нажимаем Yes.

Sectors05.jpg

Все теперь остается ждать, когда все порталы высчитаются.

Теперь необходимо затронуть вопрос о том, когда в создаваемом секторе находятся объекты, которые были добавлены в СДК. Они ведь не относятся к мешу, который мы создали в 3Д редакторе. И если с ними ничего не делать, то в игре они станут невидимыми. Чтобы этого не случилось необходимо их включить в этот сектор. Для этого в дополнительном меню Секторов нажимаем +М, а затем Create New Single (From Mesh). И далее с зажатой кнопкой Ctrl выделяем все объекты, которые находятся внутри создаваемого сектора. Сектор надо тоже выделить.

Sectors06.jpg

Пояснительная часть

Cектора/порталы и HOM нужны только для улучшения производительности.

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

Красные области на картинке -- порталы, геометрия разных секторов окрашивается по-разному, но смотрите настройки LE.

Разбивка делается в LE (полу)автоматически при условии правильно подготовленной геометрии. что это значит, можно понять по любой декомпилированной с "-mode raw" карте (выбирайте небольшие вроде mp_bath).

Ещё вариант: mp_atp из ТЧ СДК. Достаточно заменить файлы sector.part и portal.part на их backup-копии (sector.~part и portal.~part соответственно).

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

Для ландшафта HOM вряд ли можно сделать отличным от ручного способом, а для зданий имеет смысл попробовать встроенный в майку огрубитель геометрии.

Также надо отметить очень важный нюанс для построения секторов в едином пространстве, без порталов они не имеют смысла! При отсутствии портала, просто будем наблюдать картину исчезновения части локации, которой был присвоен сектор без портала, собственно, перейти на эту часть можно, но будет скрываться из виду предыдущий сектор. То есть это некорректно! А нюанс порталов в том что они могут строится только в том месте где два сектора пересекаются в одной плоскости и только, то есть, самый простой способ раздела секторов есть по дверной раме или в другому плоскостном проеме.

Как убедиться, что HOM полезен на данной карте? Скажем, записав демку облёта карты и прогоняя её с level.hom и без.

Авторы

Статья создана: Haron
Коррекция: BAC9-FLCL
Дополнение: Kostya V, kalinin11, Аномальный
Пояснительная часть: bardak

Другие места
LANGUAGE