Служебные объекты в модели

Материал из BestWay wiki
Перейти к: навигация, поиск

Объемы


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

К объемам предъявляется следующий набор обязательных требований:

  1. Объект должен быть выпуклым. Это может быть один из примитивов Box, Sphere, Cylinder или произвольный выпуклый Editable Mesh
  2. Не допускаются результирующая зеркализация объема, USc, NUSc. Под словом «результирующее» подразумевается, что недостаточно, чтобы только локальная трансформация объема была корректной. Вся цепочка до корневой кости в этом случае не должна содержать зеркализации или масштабирования
  3. Не допускается объектная (Pivot only) трансформация
  4. Для примитивов Sphere, Box, Cylinder не допускается никакая деформация кроме как изменением соответствующих параметров
  5. Рекомендуется использовать примитивы 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.

Зоны не являются костями. Типы зон (определяются по имени):

  1. interior# – зона внутренней части здания. Применяется при скрывании крыши, если союзный юнит проникает внутрь
  2. obstacle# – зона препятствия движению юнитов по поверхности земли (без соответствующего объема)

Зоны должны удовлетворять нескольким условиям:

  1. Зона должна быть выпуклой.
  2. Не допускается объектная (Pivot only) трансформация.
  3. Для примитивов Circle или Rectangle не допускается трансформация кроме как изменением соответствующих параметров.
  4. Рекомендуется использовать примитивы Circle или Rectangle везде, где это возможно для задания зоны. В противном случае зона экспортируется как наиболее медленно рассчитываемая полигональная зона.

Важно: всегда проверяйте зоны, полученные в результате экспорта (в том числе и автоматически сгенерированные), в редакторе включением режима отображения зон (Alt+A).



Патчи ландшафта и воды


В некоторых случаях в игре необходимы модели, по которым юниты могут перемещаться так же, как по земле. Это: мосты, различные площадки, элементы ландшафта сложной формы, которые невозможно или очень сложно создать средствами редактора. Для таких моделей в свойствах того объекта, который отвечает за формирование поверхности перемещения, указывается параметр Land. Такой объект именуется патчем ландшафта. Тип территории для данного патча прописывается после экспорта в .def вручную (см. Экспорт и базовая игровая настройка модели). Кроме параметра Land можно указать Ground – флаг, указывающий, что данный патч относится к слою ground, он принимает на себя тени, но не отбрасывает их в случае пониженной детализации теней (это важно учитывать при создании моделей различных мостов, которые впоследствии должны бросать тень под собой).

В игре карта высот по патчу строится по полигонам, с определенным шагом сетки. Исходя из этого, в патче не должно быть узких полигонов шириной меньше 0,5 м, чтобы не возникало ошибок.

Для создания водной поверхности используются плоские (статические или анимированные) полигональные сетки, у которых в параметрах указывается слой, к которому они должны принадлежать: «Layer=water». Водная поверхность набирается в редакторе из патчей потому, что в большинстве случаев водоемы имеют сложную форму и занимают немного места на карте. Кроме того, каждый патч воды создается с прозрачными краями, что позволяет замаскировать патчевую структуру водоема, а также создать плавное изменение прозрачности воды у берега.



Другие элементы


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

К часто употребляемым служебным костям относятся:

  1. attach# – место посадки человека в технику / здание / к орудию и т.п. Аттачей должно быть столько же, сколько предполагается линковочных мест в пределах данной модели (или отдельно экспортируемой части каркасной модели, далее именуем просто «отдельная часть»)
  2. window# – разбиваемое окно в здании/технике и т.п. Является одновременно полигональным видом. Окон может быть не более 24 (номера 0..23) в данной модели или ее отдельной части. К окну линкуется объем с соответствующими свойствами, и на том же уровне иерархии, что и данное окно, может присутствовать кость window#_x, являющаяся разбитой версией данного окна. Как правило, на ней другой материал, либо такого объекта просто нет, и тогда окно исчезает при разбивании (имеет смысл для окон из сплошного стекла без рамы)
  3. piece# – полигональный вид для куска разрушенной версии модели. Кусков может быть не более 16 (номера 0..15) в пределах модели или ее части, и они должны быть прикреплены к корневой кости. Каждый piece должен иметь объем минимальной сложности (если это обломок стены, то желательно делать его такой формы, чтобы достаточно было прикрепить к нему единственный box-объем)
  4. sub_piece# – аналогично piece, но при падении этих кусков на землю генерируется другой эффект столкновения и, вдобавок, кости sub_piece могут быть прикреплены к костям piece, в результате чего они будут падать сначала вместе с соответствующим piece, а затем, при падении на землю, отделяться и падать самостоятельно. Количество sub_piece – также не более 16 (номера 0..15) в пределах модели или ее части
  5. basis – кость, используемая как корневая для каркасной модели, в составе которой есть только дочерние кости для прикрепления частей модели и нет костей с полигональными видами. Пример иерархии для базиса здания, состоящего из 3 частей:
    Ошибка создания миниатюры: Не удаётся сохранить эскиз по месту назначения
    в свойствах кости basis указывается папка, куда будет экспортирован сам каркас, а части модели обычно (и желательно) экспортируются в подпапку этой папки, таким образом, части одной модели оказываются логически упорядоченными в ресурсах игры. Подробнее в Структурные объекты.
  6. exterior – полигональная кость (часто группа объектов, group в 3dsmax), которая перестает отрисовываться в игре (скрывается), если юнит игрока пересек границу зоны interior# данной модели или ее части. Проще говоря, исчезающая крыша.
  7. fix##– точка опоры или связь. Служит для принудительного разрушения текущей модели или ее части в случае, если была разрушена модель, в объем которой была «вставлена» кость fix## текущей модели. Детали см. в Связи между частями структурной модели
  8. 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. Можно добавить новый и задать пределы номеров. После добавления можно установить энумератор соответствующим моделями. Энумераторы сохраняются в миссии.