| Новости/News | | Туториалы/Tutorials | | Форум/Forum | | ЧаВо/FAQ | | Файлы/Downloads | | Ссылки/Links | | Авторы/About |
Метод глобальной BSP-оптимизации для уровня типа здание* для Unreal Engine.
*Здесь имеются в виду уровни, которые состоят из смежных, крупных substract brushs. Примеры: DM-Deck-16, DM-Zeto, DM-Conveyor;
Литература
Для прочтения и понимания статьи Вам необходимы базовые знания UnrealEd, знание логики CSG, а также поверхностное понимание работы алгоритма BSPT.
Описание метода
- Разбиваем (правильнее сказать помещаем каждый браш в отдельную группу) все пространство уровня на Группы, используя Browser-Groups (как правило, совпадает с зонами). См. в DM-ULibrary группы Room1, Room21,....
- Внутренний интерьер комнат (semisolid brushs, лестницы, картины, и до кучи декор-меши) в группу - Interier. Причем каждый браш интерьера принадлежит двум группам: во-первых, группе-комнате в которой он находится и группе Interier.
- Смычки (двери, окна, проемы) между группами загоняем в отдельную группу - Doors. Причем если какой-нибудь браш находится внутри какого-нибудь такого проема, его придется включить в группу Doors, например ковровая дорожка проходит в дверь (это будет лучше понятно позднее).
- Портальные плоскости (те самые, которые разбивают Ваш большой уровень на небольшие зоны-группы-комнаты) помещаем в группу Portals.
- Оптимизируем каждую группу-комнату по отдельности. Скроем на время остальные группы. Активизируем опцию билдера only rebuild visible actors. Оптимизируем группу-комнату исходя из своего знания BSP и используя Order by Last. На этом этапе постоянно запускаем билдер (без BSP-оптимизации, флажок снят) и не вылезаем из режима Zone Portal View. Далее следуют рекомендации (для случая, если не хватает собственного опыта и интуиции) В начало CSG-списка помещаем самые крупные-простейшие (с малым числом вершин) Substract-браши, потом остальные Substract-браши, потом крупные простейшие Add-браши (между ними потом воткнутся браши группы Interier). Разумеется, это только рекомендации - нарушать логику CSG нельзя (если нужно вырезать дырку в колонне, то Substract так и будет идти после Add, а не как рекомендовано выше).
- Теперь займемся глобальной пересортировкой. Начнем со второй группы. Первая останется первой - ее не нужно сортировать. Выделяем все браши второй группы Select Actor in Group(s) (см. кнопку с красным пунктирным квадратом в Browser-Groups). Помещаем ее в конец (Order to Last). Снимаем выделение с этой группы (это не нужно забывать делать). Затем, то же самое со второй, третьей и т.д. до последней группы. Как определить порядок следования комнат? Нужно упорядочить комнаты в порядке их смежности. Т.е. нужно максимально избегать той ситуации, когда порядок групп-комнат A,B и C: A -> B -> C, но в пространстве комната C расположена между комнатами A и B. В этой ситуации скорее всего возникнут BSP-секущие от A к B, которые порежут С на ненужные части и создадут избыточные нодесы. Итак, начнем с одной крайней комнаты и закончим другой. В некоторых круглых уровнях-аренах найти такой порядок будет трудно - включи интуицию или реши перебором.
- Помещаем в конец CSG-списка группу Interier. Таким образом, браши группы Interier окажутся пересортированы дважды, первый раз в составе комнаты, в которую они входят, второй раз - на этом шаге.
- Теперь поместим в конец CSG-списка группу Doors(Select Actor in Group(s) + Order to Last). Она должна четко лечь на уже готовые BSP-отсечения И не создать новых отсечений.
- Поместим в конец CSG-списка группу Portals(Select Actor in Group(s) + Order to Last).
- Я забыл про группу Sky. Так как она обычно находится в стороне от карты, то не должна мешать BSP, но лучше поместить ее в начало списка (Order to First), перед первой комнатой.
- Все выше перечисленное нужно делать аккуратно - если ломает, то лучше и не начинать. Глобальная оптимизация завершена. Теперь можно забыть о дурацких BSP-отсечениях, HOM-эффектах и пр. гадости. Если не использовались Semisolid браши, то встроенную BSP-оптимизацию лучше не включать (опция билдера). Если использовались Semisolid браши, то включаем встроенную BSP-оптимизацию, выставляем Minimize-Cuts в 0-3, последний ребилд и наслаждаемся результатом.
Несколько банальных причин, по которым следует использовать Группы (Groups) и команды Hide actors
- Для того, что бы упростить вид в окне проекции. Все равно редактируются уровни по кусочкам. Скроем ненужные нам пока части. Резко уменьшилось число линий в окнах, в режимах проекций. Как следствие уменьшится время отклика редактора при перемещении в окне проекции;
- Для того, чтобы ускорить процесс ребилда. Использую опцию ребилдера only rebuild visible actors для сложного уровня можно ускорить этот процесс на порядок. Если Ваш уровень не очень большой или же Вы только начали делать свой уровень, возможно, Вам это и не пригодится. Но если Вы в конце большого уровня эту возможность не стоит упускать;
- Найти кривизну в геометрии. Если в Вашем уровне поселился HOM, то, скрывая то одну часть уровня, то другую и запуская ребилд, можно локализовать гада;
- Для метода глобальной BSP-оптимизации ;)
Автор
© 2001-2002 Александр Толмачев