CSG & BSP.
Взгляните на окружающий нас мир, согласно представлениям множества религий, бог сотворил его. Затем он добавил эту вселенную, землю, небо и все остальное, что нас окружает и о чем мы даже и не подозреваем.
Редактор для создания карт - UnrealEd представляет из себя инструмент для подобного строительства абстрактного мира. Создавая свой, виртуальный мир картостроитель идет по стопам создателя, сперва расчищая пространство для жизнедеятельности его созданий, а затем уже добавляя необходимые ему элементы антуража, будь то материя или скрытые механизмы бытия.
Расмотрим аспекты создания (строения) нашего абстрагированного мира.
Создатели Unreal engine предусмотрели свою концепцию построения мира -
Constructive Solid Geometry (CSG), которая представляет из себя
последовательность вырезаний или надстраиваний геометрии карты.
Загрузите
свой редактор, все, что вы видите перед глазами - это сплошное (solid)
пространство твердого мира и единствоенным логическим действием будет вытиснение
пространства для обеспечения "жизнедеятельности игрока" и последующего
наполнения окружением игрока. Эта процедура выполняется созданием
вырезающих/вычитающих/ брашей (Subtractive Brush ),
в редакторе эти браши отображаются желтым цветом. В полученное пространство вы
можете добавлять всевозможные надстройки, элементы декора и т.п. это выполняется
вторым типом брашей - добавляющим брашем (Additive Brush
),
он может быть трех типов, которые рассмотрим ниже, по умолчанию это синий браш.
Эти два типа CSG операций (вырезания/добавления) могут создавать достаточно сложную последовательность, смешиваясь и чередуясь. К примеру, вначале Вы можете вырезать пространство комнаты, затем добавить стену, разделяющую пространство на две части и, наконец, в этой перегородке вырезать дверной проем. В редакторе это будет выглядеть как три браша вложенных друг в друга - 2 желтых и 1 синий:
Последовательнось построения геометрии задавалась Вами в процессе создания карты, т.е. вытеснение, затем добавление, затем снова вытеснение. Если нарушить эту последовательность, то результат может стать совершенно иным, к примеру сперва добавим перегородку, затем вырежем окно, а затем вырежем все пространство комнаты в результате мы получим всего одну комнату без перегородки хотя в редакторе нам будет видно все три браша. Нарушить последовательность совершения CSG операций можно командами Order>ToFirst (порядок выполнения>первым) и Order>ToLast (порядок выполнения>последним) отдаваемые в контекстном меню вызванном путем клика правой кнопкой мыши по нужному брашу (группе брашей).
Расмотрим теперь другой понятие - Binary Space Partitioning (BSP) tree - это древовидная структура данных для сортировки и поиска вершин многоугольников в многомерном пространстве (в данном случае трехмерном). Это стандартное двоичное дерево (binary tree) используется для прорисовки 3D сцен, в которых позиции объектов жестко фиксированы и меняется только точка обзора пространства, типичным примером является симулятор полета. Как вы уже поняли, в U-движке BSP используется в качестве способа представления жесткой геометрии (CSG), естественно на муверы (Mover) и меши (Mesh) это не распространяется. От сложности структуры BSP tree естественно зависит скорость вывода геометрии на экран.
Итак, мы подошли к тому месту, когда наши браши накиданы в пространстве карты и мы компилируем ее, нажав на F8 - Rebuild (или Build All в UEd2.0). После расчета геометрии выполняется расчет BSP, здесь можно несколько подстроить параметры оптимизации дерева, но лучше воспользоваться стандартными установками, а в качестве оптимизации лучше с большим вниманием отнестись к изначальной геометрии карты, т.е. к нашим брашам. Ведь именно расположение, формы, типы брашей и являются предпосылками для аккуратных BSP вырезов - сечений (BSP cuts) которыми будет испрещена ваша карта после компиляции. Эти сечения Вы можете увидеть в соответсвующем режиме камеры - BSP cuts. Возьмем предыдущий пример, в режиме BSP cuts практически нет перепадов в яркости цвета, что указывает на несложную BSP картину, но здесь также присутствуют дополнительные сечения, в чем мы можем убедиться обжав карту единым рабочим брашем. Для того, что бы обжать карту, необходимо поместить всю комнату в строительный браш больший по размерам и выполнить команду deintersect.
Как Вы видите, на карте появились дополнительные вершины (nodes) не пренадлежащие вершинам брашей - дополнительные узлы BSP дерева. Как известно, количество этих вершин и есть самый большой враг произволительности FPS. Узнать количество нодесов в игре вы можете набрав в консоли STAT FPS, количество больше 200 начнет ощутимо притормаживать на слабеньких машинах, стандарт сейчас 200-350, естественно с увеличением мощностей, наблюдается тенденция к их увеличению. Внесение новых технологий аппаратного T&L в U движок позволяет на порядок перескочить через этот рубеж, но нам пока этот билд движка недоступен 8(.
Типы добавляющих (Additive) брашей.
Добавляющие браши имеют такое свойство как твердость, оно означает как взаимодействует с ними игрок и какими свойствами они обладает в рамках движка и при расчете BSP дерева. Добавляющие браши могут быть 3-х типов: твердый (solid), нетвердый (non-solid) и полутвердый (semi-solid).
Твердый браш
(синего цвета) является твердым для игрока и акторов, как это странно не звучит
;) Он также создает BSP вырезы и при необходимости дополнительные сечения.
Добавляет твердое (solid) пространство на предварительно вырезанном
пространстве и является простой ADD командой CSG. Используется повсевместно.
Нетвердый браш
(non-solid зеленого цвета) НЕ является твердым и не составляет из себя
препятствие для игрока, Он просто пустой внутри и НЕ создает BSP вырезы и
дополнительные сечения. Применяется для исключительно для декораций, к примеру
огня, стекол или поверхности воды. В связи с его свойством не создавать
препятствий для игрока и акторов, его применяют в качестве перегородок разных
зон (Zone
Portal).
Полутвердый браш
(semi-solid коричневого цвета) является чем-то средним между твердым и
нетвердым брашем. Он блокирует игрока и акторы, но в тоже время НЕ создает BSP
вырезов и дополнительных сечений, так-же он НЕ может являеться границей разных
зон (Zone
Portal). Применяется для декораций требующих жесткости, к примеру колонн,
карнизов, труб, нагромождения скал и т.п. За счет отсутствия BSP вырезов он
благоприятно сказывается на чистоте BSP картины не создавая дополнительных
нодесов.
Если браш представляет из себя плоский лист (sheet), несмотря на цветовую принадлежность к твердым или полутвердым брашам, он автоматически будет иметь свойства нетвердого (non-solid) браша и не сможет блокировать игрока и акторов, т.к. внутри него движек не сможет добавить твердое пространство за неимением такового. Это один из первых казусов встречающий новичков в редакторе, впоследствии все кажется вполне естественным и вполне укладывается в концепцию движка, а впрочем, и миропредставления как такового тоже, ведь лист бумаги для жесткости тоже должен имеет определенную толщину.
Грамотное использование типов брашей существенно разгружает BSP картину и посзволяет избавится он многих ошибок в обработке геометрии. При должном соблюдении гигиены браше-строительства черные порталы, HOM'ы будут вас беспокоить гораздо реже, что вам и пожелаем!