Редактирование моделей

From Perimeter Community Wiki
Revision as of 18:33, 10 May 2024 by Deltadesign (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Установка и настройка инструментария

Для работы с моделями необходим плагин meshexp.DLE для 3Ds max 5:

  1. Поместить файл meshexp.dle в папку plugins графического редактора 3DS Max;
  2. Открыть менеджер дополнительных утилит через меню Customize/Plug-in Manager;
  3. Найти в нем строчку MESHEXP.DLE (в колонке Name). Обратите внимание, напротив имени утилиты в колонке Status стоит deferred. Необходимо загрузить плагин;
  4. Щелчком левой кнопки мыши выделить строчку с названием экспортера и, нажав правую кнопку, вывести меню, в котором выбрать пункт Selected Plug-in/Load. Зеленая точка в графе Status указывает на то, что плагин подключен, и можно приступать к работе.

Для просмотра моделей в игровом формате необходимо:

  1. Поместить файл WinVG.exe в папку с моделями (в игре это каталог установки Периметра\resource\models\main\);
  2. Запустить exe-файл;
  3. После запуска выбрать пункт меню File->Set effect directory и указать путь: каталог установки Периметра \RESOURCE\FX\;
  4. Просматривать файлы можно, открывая их через пункт меню File->Open или, выбирая модели в списке в правой части экрана;
  5. Повернуть модель в экране просмотра можно, зажав левую клавишу мыши и перемещая мышь. Перемещать модель в экране просмотра можно, зажав правую клавишу мыши, и перемещая мышь.

Экспортирование модели в игровой формат

Изменив модель в 3Ds Max 5, необходимо сохранить ее для использования в игре:

  1. Выбрать пункт меню File/Export;
  2. В окне сохранения выбрать тип файла M3D ver2.0 (*.M3D);
  3. Нажать кнопку Save;
  4. В появившемся окне Export Scene to .M3D File необходимо указать информацию об анимации (если она используется). Для этого необходимо нажать кнопку Add и заполнить поля:
  • Name - имя анимационной цепочки
  • start frame - номер первого кадра анимационной цепочки (для первой 0)
  • finish frame - номер последнего кадра анимационной цепочки
  • number frame - количество кадров анимации, чем больше, тем точнее. Не имеет смысл ставить цифру больше чем (finish-start).
  • precision vertex - минимальное число, при котором цепочка считается константной. (Скорее всего никогда не придется менять его.)
  • bump scale - влияет на рельефность бамп текстуры.
    При создании модели следует обратить внимание чтобы в ней были те же самые ноды 
    group* и logic* с аналогичной иерархией.
    В зданиях так-же должен быть объект _base_.

Если вы хотите изменить игровую модель, вы можете произвести экспорт в файл модели с заменой. При экспорте с заменой нет надобности указывать Name, start frame, finish frame, number frame, эти параметры будут заполнены автоматически.

Текстуры

В версии игры 3+ появилась возможность вместо bump map использовать Normal map. Для этого нужно Положить рядом с bump текстуру, приписав к ней _normal. Приоритет загрузки: _normal используется, если существует, иначе _bump, если существует.

Анимация моделей

Периметр - система анимации
v1.0 / 21.03.2006

Анимация юнита задаётся в виде графа, связями между узлами в нём являются анимационные цепочки. Сами узлы обозначают начало и конец цепочек. У зацикленных цепочек начало и конец совпадает. При запросе какой-либо цепочки по графу ищется путь до её начала от текущего положения (конец включённой в данный момент цепочки), затем цепочки согласно этому пути переключаются.

Кроме цепочки, из кода может быть запрошен и просто узел графа, работает это аналогично запросу цепочки.

Список цепочек:

идентификатор значение тип
CHAIN_SWITCH_ON включение общие
CHAIN_SWITCHED_ON включено общие
CHAIN_SWITCH_OFF выключение общие
CHAIN_SWITCHED_OFF выключено общие
CHAIN_UPGRADE_PREPARE подготовка апгрейда общие
CHAIN_UPGRADE апгрейд общие
CHAIN_BUILD[N] этап строительства здания
CHAIN_UNBUILD[N] деконструкция этапа строительства здания
CHAIN_CLOSED закрыто общие
CHAIN_OPEN открытие общие
CHAIN_OPENED открыто общие
CHAIN_CLOSE закрытие общие
CHAIN_FIRE стрельба оружие
CHAIN_FIRE_PREPARE подготовка к стрельбе оружие
CHAIN_RESET сброс оружие
CHAIN_CHARGE зарядка общие
CHAIN_CHARGED заряжено общие
CHAIN_DISCHARGE разрядка общие
CHAIN_DISCHARGED разряжено общие
CHAIN_DETACHED фрейм отсоединён от энергосистемы фреймы
CHAIN_ATTACHED фрейм подсоединён к эренгосистеме фреймы
CHAIN_DETACH отсоединение фреймы
CHAIN_ATTACH присоединение фреймы
CHAIN_DETACHED_INPUT заезд в отсоединённый фрейм фреймы
CHAIN_DETACHED_OUTPUT выезд из отсоединённого фрейма фреймы
CHAIN_ATTACHED_OUTPUT выезд из присоединённого фрейма фреймы
CHAIN_ATTACHED_INPUT заезд в присоединённый фрейм фреймы
CHAIN_PRODUCTION производство заводы
CHAIN_DIE смерть общие
CHAIN_MOVE движение юниты
CHAIN_STOP остановка юниты
CHAIN_TAKEOFF взлёт лётные
CHAIN_LANDING посадка лётные

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

Список узлов:

идентификатор узла значение
CHAIN_NODE_SWITCHED_ON включено
CHAIN_NODE_SWITCHED_OFF выключено
CHAIN_NODE_OPENED открыто
CHAIN_NODE_CLOSED закрыто
CHAIN_NODE_UPGRADE_START начало апгрейда
CHAIN_NODE_BUILD[N] этап строительства
CHAIN_NODE_CHARGED заряжено
CHAIN_NODE_DISCHARGED разряжено
CHAIN_NODE_FIRE стрельба
CHAIN_NODE_DETACHED отсоединено от энергосистемы
CHAIN_NODE_ATTACHED присоединено к энергосистеме
CHAIN_NODE_DETACHED_OPENED отсоединено от энергосистемы / открыто
CHAIN_NODE_ATTACHED_OPENED присоединено к энергосистеме / открыто
CHAIN_NODE_DEAD смерть
CHAIN_NODE_GROUND юнит на земле
CHAIN_NODE_FLIGHT юнит в воздухе
CHAIN_NODE_UNDERGROUND юнит под землёй


Используемые из кода узлы обозначены серым, это делается только у фреймов и ядер/трансмиттеров.

Для обычных юнитов при движении включается CHAIN_MOVE, при остановке – CHAIN_STOP. Подземным юнитам под землёй тоже включается CHAIN_STOP.

Зданиям при строительстве включается CHAIN_BUILD[N], в построенном сотоянии – CHAIN_SWITCHED_ON. Есть исключения – фреймы, ядра/трансмиттеры, порталы анимируются по-своему, см. в коде. Заводам при производстве включается CHAIN_PRODUCTION, по окончании производства – CHAIN_OPEN.

Скверна анимируется по-своему, в зависимости от типа, см. в коде.

Для боевых юнитов стрельба визуализируеттся в отджельной анимационной группе, если в оружии установлен флаг WEAPON_HAS_FIRE_CONTROLLER или в корневой анимационной группе, если установлен флаг WEAPON_ROOT_FIRE_ANIMATION. При стрельбе включается CHAIN_FIRE, по окончании стрельбы - CHAIN_SWITCHED_OFF. Если надо визуализировать зарядку оружия (установлен флаг WEAPON_NEED_CHARGE), то во время зарядки включается CHAIN_PRODUCTION.

Хранится анимация в AttributeLibrary, “Описание анимации”. Цепочки там объединены в анимационные группы, для независимой анимации частей объекта.

идентификатор группы значение
ANIMATION_GROUP_ROOT корневая группа, для основной анимации
ANIMATION_GROUP_CITY фрейм – анимация города
ANIMATION_GROUP_PILLAR фрейм – анимация колонн
ANIMATION_GROUP_ANIMATE фрейм – анимация для оживления в подключенном состоянии
ANIMATION_GROUP_LIGHTING ядра – источник света на колонне
ANIMATION_GROUP_CHARGING ядра – визуализация зарядки
ANIMATION_GROUP_FIRE оружие – отдельная группа для визуализации стрельбы

Редактируемые параметры цепочки:

параметр значение
chainID идентификатор цепочки
chainName имя цепочки в 3D модели
phase начальная фаза цепочки, [0, 1]. Для цепочек, проигрываемых в обратном направлении ставить 1, для обычных 0
period длительность цепочки, мс. Для цепочек, проигрываемых в обратном направлении ставить отрицательную
begin идентификатор начала цепочки
end идентификатор конца цепочки
periodDeviation разброс длительности, если ненулевой, то period += rnd(perionDeviation), phase = rnd(1)
enableReverse если = 1, то при запросе обратной по отношению к текущей цепочки (т.е. у них одинаковые начало и конец, но разное напревление) переход на неё происходит сразу (сделано исключительно для корректного отображения зарядки у ядер)
counter служебные данные
soundID идентификатор звукового события, привязанного к цепочке

Подключение готовой модели в игру

Для интеграции модели в игру необходимо:

  1. Положить текстуру в каталог установки Периметра \resource\models\main\textures;
  2. Дополнительно положить текстуру в каталог расы:
    1. каталог установки Периметра \resource\models\main\Empire - для Империи
    2. каталог установки Периметра \resource\models\main\Exodus - для Исхода
    3. каталог установки Периметра \resource\models\main\Harkbackhood - для Возврата
  3. Поместить в каталог установки периметра\resource\models\main файлы *.m3d (модели) и *.l3d (набор логики).

Текстуры могут иметь любой размер. Можно добавлять свои, дополнительные текстуры. Текстур обычно две RGB текстура и текстура микрорельефа – Bump. Normal Mapping не поддерживается.

Требования к моделям

При создании модели следует четко придерживаться иерархии сцены, с которой можно ознакомиться в прилагаемых примерах. Обязательно наличие объектов group* и logic* с аналогичной иерархией. В зданиях также должен быть объект _base_. Иерархия строится на основе привязок (в 3Ds Max 5 на главной панели слева третий значок “Select and Link” 2hEDihQmgiw.jpg) Dummy объектов и мешей модели. Правильную иерархию можно посмотреть не только в прилагаемых к Золотому Изданию игры исходных моделях, а так же в программе для просмотра моделей WinVG.exe. Логика иерархии прописана в коде игры, поэтому следует четко придерживаться иерархии. Каждый элемент под названием Group, это Dummy в 3DsMax с тем же названием. Иерархия древовидная.

Ограничения по анимации - не поддерживается скелетная анимация и морфинг, можно только двигать, вращать, масштабировать объект целиком (масштабировать можно по всем или по одной оси).

Кроме этого, есть анимация прозрачности материала, координат материала и видимость-невидимость. Можно использовать и анимировать источники света “Omni” и некоторые его параметры.

Спецификация формата моделей и логики

(скачать m3dl3d.docx: drive dropbox) (автор - @!!ex)

Статья по модификации моделей (автор GREM)

{Итак, я все же собрался ее написать. Только не судите строго, а если чего неправильно - критикуйте.}

Будем рассматривать пример Лимо, так как он мной лучше всего изучен.

Допустим, что у вас уже есть какая-то модель, осталось только затекстурировать и вставить в игру. И тут я обнаружил первое ограничение - можно нанести карту только на весь объект (в 3д максовском смысле, то что в одном габаритном контейнере) сразу, на части наносить разные карты нельзя, хотя проекций можно использовать много. Всякие карты отражений и рельефности надо включать в один материал. Далее, те участки модели, которые будут изменять цвет в зависимомти от вашего выбора (в сражениях или сетевой игре цвет можно выбрать, я про него говорю) надо вынести в отдельные объектs. А вот как этот объект отделить от остальных, чтоб он действовал, я пока не знаю, но это связано с материалом.
С текстурами у меня все...
Теперь как организовать анимацию...
Чтоб модель вообще работала, нужно насоздавать объектов dummy со следующими именами и привязаны друг к другу они должны быть так (тут же я укажу и привязку модели к логическим объектам, обозначение:

"обект 1" > "объект 2" > "объект 4"
 :
> "объект 3"

означает: объект 4 зависит от объекта 2, который зависит в свою очередь от объекта 1, обеъкт 3 также непосредственно зависит от объекта 1):
logic center > logic bashnia > logic dulo > logic fire > logic targeting a > logic targeting b

> logic bound {это простой бокс, охватывающий всю модель}

Теперь объекты, управляющие моделью:

group center > group bashnia > group dulo > group fire > omni01 {источник света, который нужен для вспышки лазера}
: : :
: : > group targeting a > group targeting b
: : :
: : > [имя ствола]
: :
: > [имя башни лимо]
:
> [имя корпуса лимо]

Рекомендую логические объекты с названиями, отличающимися только словами logic и group создавать в одних и тех же координатах.
Надо отметить, что корпус, или башня, или ствол могут состоять из нескольких частей, тогда все части прицепляются либо друг к другу, либо "параллельно".
Что бы всышка лазера была, я объект omni01 копировал просто из оригинальной модели, я ее вам тоже дам.
И еще тонкость: чтоб ствол вращался в правильном направлении, group dulo надо повернуть на 180 в любую сторону.
Анимацию лучше оставить какая была, для этого сохраняем оригинальные файлы limo.m3d и limo.l3d куда нибудь в безопасное место, а свою работу сохраняем повер старых (как сохранить вы должны знать, если у вас есть плагин meshexp.dle). Старая анимация отобразится при сохранении в диалоге экспорта.

Статья по модификации моделей (Игромания)

Статья Игромании