Создаём 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-объекты.
Вывод: Все эти заморочки позволяют практически двухкратно поднять производительность системы, и благодарные юзеры с не слишком сильными компами (а таких большинство), будут таскать вас на руках за такой шикарный подарок ;)
Итак, приступаем к креативу!
Допустим, есть у вас карта, на которой надо сделать всё вышеперечисленное. Как это сделать, я объясню на примере старого доброго кубика, сделаем ему HOM, поставим на карту, и создадим порталы с секторами.
Начнём с HOM.
Вот наша карта, на ней кубик, надо для него сделать HOM.
Чтобы сделать HOM, сбрасываем сцену, и идём в Библиотеку статической геометрии, находим там наш кубик. У меня он находится по адресу editor\shadertest_box, вы можете заюзать свой.
Теперь, этот кубик, там же, в библиотеке, экспортим в формат LWO, чтобы стереть все настройки материалов, на базе экспортированного объекта мы и сделаем HOM, и материалы с шейдерами ему ни к чему: обозвал я его shadertest_box_occ, (OCC - значит окклюдер, отсекатель).
Всё, экспортировали. Теперь импортируем его обратно, заходим в настройки объекта, в поле Object Type (тип объекта), меняем его тип со Static на HOM, выходим с настроек и сохраняем изменения. Тут же - видим, вид нашего кубика - изменился, теперь - он стал HOM-объектом.
Теперь - загружаем снова нашу карту, выбираем режим "объекты", в самом низу, жмём кнопку "обновить список", чтобы в нём появился новый объект, и добавляем наш окллюдер на карту, как обыкновенный объект.
Осталось только "подогнать" (двигая, вращая и т. д...) окклюдер под имеющийся кубик как можно точнее.
Всё! HOM-окклюдер для объекта успешно создан. Таким-же образом, можно (и нужно) поступить со всеми объектами на карте, но создавать окклюдеры лучше всего - ещё в 3DSMax, в виде неких "упрощённых муляжей" для создаваемых объектов. Хотя можно и так как я описал выше.
Секторы и порталы необходимо генерировать после того, как сборка карты закончена, все объекты на месте, окклюдеры установлены, и т.д. Короче, перед самой прекомпиляцией. Делаются они очень просто, так как в SDK - возможности по ним весьма убогие, а многие так и вообще "временно отключены". Но создавать их можно.
Итак:
Переходим в режим Секторы и создаём базовые порталы, нажав соответствующую кнопку. Если объектов много, целесообразно "проверить на правильность" одноимённой кнопкой. Сектора созданы.
Переходим в режим "порталы" и "вычисляем все порталы".
Всё. Occlusion Mapping - сделан, сектора созданы, а порталы к ним вычислены. Спасибо за внимание.
Важное дополнение по созданию секторов и порталов
Для того, чтобы создать сектора на уровне, необходимо сначала подготовить геометрию в 3Д редакторе. Разбивка уровня на секторы производится по отдельным мешам. Для этого в 3Д редакторе необходимо разбить геометрию на отдельные меши, чтобы потом в СДК сделать из каждого отдельного меша сектор. При разбивке геометрии на части необходимо придерживаться теории по секторам. После того, как разбили геометрию на отдельные меши необходимо экспортировать ее в СДК, также по отдельности каждый меш. Далее, в СДК начинаем создавать секторы. Для этого переходим в меню секторов и нажимаем Add (чайник). Появляется дополнительное меню. В нем выделяем Create New Single (From Mesh). И потом начинаем выделять свои отдельные меши. Каждый выделенный меш и является отдельным сектором. При выделении можно задать цвет сектору.
http://s53.radikal.ru/i141/0905/3e/6b137af4356e.jpg
http://s54.radikal.ru/i145/0905/7b/f9df7c807307.jpg
http://s53.radikal.ru/i140/0905/7a/1c54f14cafa0.jpg
После того, как выделили и задали цвета всем своим мешам. Нажимаем Create Default. Создается базовый сектор.
http://s53.radikal.ru/i140/0905/71/44c10fa031e7.jpg
После этого переходим в режим порталов. И нажимаем Compute All Portals. Выскакивает окно, в котором нажимаем Yes.
http://s39.radikal.ru/i083/0905/a4/60e6b2b70e96.jpg
Все теперь остается ждать, когда все порталы высчитаются.
Теперь необходимо затронуть вопрос о том, когда в создаваемом секторе находятся объекты, которые были добавлены в СДК. Они ведь не относятся к мешу, который мы создали в 3Д редакторе. И если с ними ничего не делать, то в игре они станут невидимыми. Чтобы этого не случилось необходимо их включить в этот сектор. Для этого в дополнительном меню Секторов нажимаем +М, а затем Create New Single (From Mesh). И далее с зажатой кнопкой Ctrl выделяем все объекты, которые находятся внутри создаваемого сектора. Сектор надо тоже выделить.
http://s50.radikal.ru/i130/0905/1e/ad297129270f.jpg
Авторы
Статья создана: Haron
Коррекция: BAC9-FLCL
Дополнение: Kostya V, kalinin11