Служебные объекты в модели
Служебные объекты и модели
Объемы
Для взаимодействия с различными объектами в движке игры, к модели должны быть прикреплены специальные объекты, называемые объемами. Объемы не являются костями, поэтому они должны быть прилинкована к той кости, вместе с которой они будут двигаться.
К объемам предъявляется следующий набор обязательных требований:
- Объект должен быть выпуклым. Это может быть один из примитивов Box, Sphere, Cylinder или произвольный выпуклый Editable Mesh
- Не допускаются результирующая зеркализация объема, USc, NUSc. Под словом «результирующее» подразумевается, что недостаточно, чтобы только локальная трансформация объема была корректной. Вся цепочка до корневой кости в этом случае не должна содержать зеркализации или масштабирования
- Не допускается объектная (Pivot only) трансформация
- Для примитивов Sphere, Box, Cylinder не допускается никакая деформация кроме как изменением соответствующих параметров
- Рекомендуется использовать примитивы Sphere, Box, Cylinder везде, где это возможно для задания объема. При этом объект не должен быть преобразован в Editable mesh или Editable poly, поскольку произвольный полигональный объем – наиболее медленный в смысле расчет взаимодействия в игре. Но даже в случае необходимости задания полигонального объема количество полигонов на нем должно быть минимальным! Перечислим объемы в порядке увеличения времени расчета взаимодействия с ними: sphere, cylinder, box, mesh.
Для объемов желательно использовать в имени постфикс «_vol», который автоматически отбрасывается при экспорте. Например, объем с именем «Body_vol» будет экспортирован как «Body». Постфикс должен стоять в самом конце (после имени с номером), например «UpperTube7_vol».
Для того чтобы идентифицировать объем, необходимо в свойствах соответствующего объекта указать строку «Volume». Помимо этого в свойствах объекта могут указываться также следующие параметры объемов: Visible [= 1 | 0] – используется для проверки видимости и построения карты высот. По умолчанию = 1
Bullet [= 1 | 0] – реагируют на столкновение с пулей. По умолчанию = 1
Overlap [= 1 | 0] – присылает системные события пересечения с другими объектами в interaction (например кусты шевелятся при пересечении с солдатом)
Obstacle [= 1 | 0] – автоматически генерирует препятствие (зону типа obstacle). По умолчанию = 1
Contact [= 1 | 0] – реагирует на столкновение с другими объемами. По умолчанию = 1
Contact_ground [= 1 | 0] – рассчитывается физический контакт с поверхностью земли. По умолчанию = 1
Blast [= 1 | 0] – реагирует на взрывную волну. По умолчанию = 1
Select [= 1 | 0] – используется при выделении сущности. По умолчанию = 1
Hole [= 1 | 0] – вырезает дыру в другом объеме данной модели
Holed [= 1 | 0] – из данного объема можно вырезать дырку другим объемом со свойством hole
Touch [= 1 | 0] – курсор мыши меняет вид над данным объемом (на окнах, например)
Float [= 1 | 0] – объем может плавать на воде
Window [= 1 | 0] – объем разбиваемого окна
Clear – сброс свойств-по-умолчанию (для того, чтобы указать необходимый набор параметров вручную)
Tags [= body | attach,# ] – body – прописывается для объема, который может получать повреждения и отвечает за разрушение модели, attach,# – к данному объему при указании на него мышью, будет прилинкован юнит в игре (например, объем отверстия окна, куда становится снайпер), номер (#) соответствует номеру служебной кости attach#
Thickness = ## – «толщина» объема (условно в миллиметрах стали). Задается для расчета пробиваемости снарядами и влияет на прочность (чем выше значение, тем дольше модель будет сопротивляться повреждениям).
Кроме этого, некоторые свойства объемов определяются из их имени. Например: fire#_vol – объем «горения» – при поджоге объекта в игре, в этом объеме будет генерироваться заранее подготовленный эффект огня (на данный момент fx\smoke\smoke_fire_window)
smoke#_vol – объем «дыма»: аналогично предыдущему, но генерируется эффект дыма (на данный момент fx\smoke\smoke_black_window)
floor#_vol – объем для определения пола верхних этажей. Применяется при имитации отскока гранат от такого пола (спец. случай)
Замечание: для окон можно не создавать отдельный объем горения и дыма, а прописать это в свойствах объема самого окна (window#_vol), указав параметр Tags=fire или Tags=smoke.
Важноо: всегда проверяйте объемы, полученные в результате экспорта, в редакторе включением режима отображения объемов (Alt+V).
Зоны
Зоны для взаимодействия задаются плоскими объектами типа Shape. При этом объекты обязательно линкуются к корневой кости, поскольку в игре не поддерживается трансформация зон кроме как трансформацией всей модели. В свойствах соответствующего объекта указывается параметр Obstacle (зона непроходимости) или Area (прочие зоны). Для того чтобы зона перемещалась и поворачивалась с моделью в игре, в параметрах объекта необходимо указать Rotate. Если необходимо учитывать только перемещение, то в параметрах вместо Rotate указывается Move. Если указать Static, то зона никак не будет реагировать на изменение положения и ориентации модели. Как правило, указывается тип трансформации зоны Rotate.
Зоны не являются костями. Типы зон (определяются по имени):
- interior# – зона внутренней части здания. Применяется при скрывании крыши, если союзный юнит проникает внутрь
- obstacle# – зона препятствия движению юнитов по поверхности земли (без соответствующего объема)
Зоны должны удовлетворять нескольким условиям:
- Зона должна быть выпуклой.
- Не допускается объектная (Pivot only) трансформация.
- Для примитивов Circle или Rectangle не допускается трансформация кроме как изменением соответствующих параметров.
- Рекомендуется использовать примитивы Circle или Rectangle везде, где это возможно для задания зоны. В противном случае зона экспортируется как наиболее медленно рассчитываемая полигональная зона.
Важно: всегда проверяйте зоны, полученные в результате экспорта (в том числе и автоматически сгенерированные), в редакторе включением режима отображения зон (Alt+A).
Патчи ландшафта и воды
В некоторых случаях в игре необходимы модели, по которым юниты могут перемещаться так же, как по земле. Это: мосты, различные площадки, элементы ландшафта сложной формы, которые невозможно или очень сложно создать средствами редактора. Для таких моделей в свойствах того объекта, который отвечает за формирование поверхности перемещения, указывается параметр Land. Такой объект именуется патчем ландшафта. Тип территории для данного патча прописывается после экспорта в .def вручную (см. Экспорт и базовая игровая настройка модели). Кроме параметра Land можно указать Ground – флаг, указывающий, что данный патч относится к слою ground, он принимает на себя тени, но не отбрасывает их в случае пониженной детализации теней (это важно учитывать при создании моделей различных мостов, которые впоследствии должны бросать тень под собой).
В игре карта высот по патчу строится по полигонам, с определенным шагом сетки. Исходя из этого, в патче не должно быть узких полигонов шириной меньше 0,5 м, чтобы не возникало ошибок.
Для создания водной поверхности используются плоские (статические или анимированные) полигональные сетки, у которых в параметрах указывается слой, к которому они должны принадлежать: «Layer=water». Водная поверхность набирается в редакторе из патчей потому, что в большинстве случаев водоемы имеют сложную форму и занимают немного места на карте. Кроме того, каждый патч воды создается с прозрачными краями, что позволяет замаскировать патчевую структуру водоема, а также создать плавное изменение прозрачности воды у берега.
Другие элементы
Кроме чисто полигональных видов, объемов, зон и патчей ландшафта, в модели часто присутствуют некоторые служебные объекты, предназначенные для креплений к ним эффектов, указания мест для посадки людей в технику и т.п. Такие служебные объекты являются костями иерархии модели.
К часто употребляемым служебным костям относятся:
- attach# – место посадки человека в технику / здание / к орудию и т.п. Аттачей должно быть столько же, сколько предполагается линковочных мест в пределах данной модели (или отдельно экспортируемой части каркасной модели, далее именуем просто «отдельная часть»)
- window# – разбиваемое окно в здании/технике и т.п. Является одновременно полигональным видом. Окон может быть не более 24 (номера 0..23) в данной модели или ее отдельной части. К окну линкуется объем с соответствующими свойствами, и на том же уровне иерархии, что и данное окно, может присутствовать кость window#_x, являющаяся разбитой версией данного окна. Как правило, на ней другой материал, либо такого объекта просто нет, и тогда окно исчезает при разбивании (имеет смысл для окон из сплошного стекла без рамы)
- piece# – полигональный вид для куска разрушенной версии модели. Кусков может быть не более 16 (номера 0..15) в пределах модели или ее части, и они должны быть прикреплены к корневой кости. Каждый piece должен иметь объем минимальной сложности (если это обломок стены, то желательно делать его такой формы, чтобы достаточно было прикрепить к нему единственный box-объем)
- sub_piece# – аналогично piece, но при падении этих кусков на землю генерируется другой эффект столкновения и, вдобавок, кости sub_piece могут быть прикреплены к костям piece, в результате чего они будут падать сначала вместе с соответствующим piece, а затем, при падении на землю, отделяться и падать самостоятельно. Количество sub_piece – также не более 16 (номера 0..15) в пределах модели или ее части
- basis – кость, используемая как корневая для каркасной модели, в составе которой есть только дочерние кости для прикрепления частей модели и нет костей с полигональными видами. Пример иерархии для базиса здания, состоящего из 3 частей:Ошибка создания миниатюры: Не удаётся сохранить эскиз по месту назначенияв свойствах кости basis указывается папка, куда будет экспортирован сам каркас, а части модели обычно (и желательно) экспортируются в подпапку этой папки, таким образом, части одной модели оказываются логически упорядоченными в ресурсах игры. Подробнее в Структурные объекты.
- exterior – полигональная кость (часто группа объектов, group в 3dsmax), которая перестает отрисовываться в игре (скрывается), если юнит игрока пересек границу зоны interior# данной модели или ее части. Проще говоря, исчезающая крыша.
- fix##– точка опоры или связь. Служит для принудительного разрушения текущей модели или ее части в случае, если была разрушена модель, в объем которой была «вставлена» кость fix## текущей модели. Детали см. в Связи между частями структурной модели
- fx...... – кость, отвечающая за линковку определенных спецэффектов, срабатывающих в случае разрушения текущей модели или ее части. К таким костям относятся (количество дополнительных вариантов эффектов типа 1a, 1b,... может расширяться при необходимости):
- fx_smoke1, 1a,... 1c, 2, 2a,... 2c – дым, сила эффекта возрастает по номеру (1,2)
- fx_fire1, 1a,... 1c, 2, 2a,... 2c – огонь, аналогично
- fx_flue – дым из трубы на крышах домов (не для разрушения)
- fx_dust1, 1a, 2, 2a – пыль
- fx_wood1, 1a,...1c, 2, 2a – щепки и доски
- fx_stone1, 1a,... 1m, 2, 2a – обломки камней
- fx_haulm1, 1a,... 1c, 2, 2a – обрывки соломы
- fx_exp1, 1a, 2, 2a – взрыв
- fx_metall1, 1a – куски металла
- fx_sand1, 1a, 2, 2a – песок
Остальные служебные объекты будут описаны в каждом конкретном случае, поскольку их применение ограничено спецификой определенных моделей.
Номера на объектах
Существует возможность задавать индивидуальные номера на технике, домах и т.п. объектах (в принципе можно использовать на чем угодно). Нумерация работает следующим образом. По умолчанию модели присваивается трехзначный произвольный номер. Количество цифр фиксировано в коде. Номер можно отключить или изменить через панель свойств в редакторе.
Для функционирования такого номера нужно создать объект с именем «enumerator» и прилинковать его к базовой кости модели. На этом объекте должны быть Material ID 1,2,3 – соответствуют старшинству цифр (ID=3 должен быть на старшей цифре) и объекту должен быть присвоен мультиматериал с дочерними материалами, названными num_1, num_2, num_3 соответственно Material ID. Эти материалы должны ссылаться на текстуры Common/model/enumerator/*.dds (текстуры будут подставляться автоматически согласно номеру). Разумеется, на самом объекте должна быть раскладка текстуры такая, чтобы цифры выглядели должным образом. Если нужен двух- или однозначный номер, необходимо сделать только те Material ID и материалы, которые нужны. Кроме настроек геометрии/материалов модели нужно прописать в .def некоторые параметры (см. Дополнительные параметры в файле описания).
Возможно задание групп номеров с интервалами (например, для русской и немецкой техники). Для этого нужно вызвать редактор групп: F9/enumerators. Можно добавить новый и задать пределы номеров. После добавления можно установить энумератор соответствующим моделями. Энумераторы сохраняются в миссии.
Комментарии
Отправить комментарий