Модели

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

1.0 Введение

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


Начнём с того, что любая трёхмерная модель (кроме собранной из идентичных кубиков) состоит из треугольников, именуемых полигонами. Треугольники эти стыкуются своими углами — вершинами, — что позволяет создавать из них любые геометрические фигуры с поправкой на то, что округлые поверхности останутся угловатыми и единственное, что останется в такой ситуации — сделать поверхность из как можно меньшего размера и большего числа треугольников, углы и грани которых не будут особо бросаться в глаза. Вам не стоит перенапрягаться в раздумьях, как же сотворить идеальную сферу голыми руками, так как 3d-редакторы обладают разными автоматизированными средствами для подобных работ. Автор, будучи дилетантом, но любителем предметов геометрии и черчения, решил идти по самому ленивому пути, а именно — ручной работе со всеми треугольниками и углами для создания простеньких, low-poly (низкополигональных) моделек. Качество такой работы может вызывать сомнения и будет зависеть исключительно от прямоты рук без особой помощи со стороны программы. Подобная кропотливая выделка занимает много времени, но зато не требует изучения непереведённых туториалов для разных, несовместимых версий программ с мириадами функций, горячих клавиш и вечно сбоящими плагинами, а также позволяет сэкономить на качестве текстур если вы не мастер Фотошопа. В любом случае, если вы никогда не занимались моделированием и просто желаете опробовать в этом свои силы без особой для того подготовки — подобный метод вам подойдёт, тем более, что его более чем хватает для соответствия качеству моделей Ex Machina.


Под ваши нужды вам может хватить того же MS3D, на который мы сошлёмся в следующем разделе этого гайда. Для своих же нужд автор использует старенький ZModeler 1.07b. Данный редактор не умеет работать с моделью в 3d-окне, не может лепить формы «из пластилина» и вообще кромсать и вытягивать из сетки треугольников новые элементы, не способен прорезать сквозные отверстия и делать развёртку текстур. Зато умеет добытую кое-как развёртку нещадно ломать, втихаря удалять полигоны и вылетать при каждом удобном случае. Вот она, плата за леность! Манипулирование углами производится их смещением по осям XYZ в трёх окнах, отображающих сетку модели с трёх направлений (по две стороны на каждое: перед/зад и т.д.). Текстурирование происходит по принципу «выделить нужные треугольники и натянуть их на текстуру» и осложнено неудобным ручным выбором полигонов и ручной корректировкой их формы и положения в окне текстуры, где оси ведут себя по неведомым законам. Зачастую проще выделить целый мэш и без настроек прицепить его к сплошной текстуре «а-ля краска» — тогда полигоны мэша, под каким бы углом они не находились, будут одного цвета и на них не окажется видно растянутых вдоль пикселей новоиспечённой текстуры. Жалко, что неизменную спутницу любой постапокалиптической игры — ржавчину — так халтурно не сделать — смажется. Это всё информация для понимания примитивности «ленивых» методов. Если вы всё же решили использовать Z3D — за примером вы можете обратиться к YouTube и ролику «Ex Machina – Моделинг для чайников». В нём же вы найдёте информацию по «армейскому» созданию текстур и нижеописанным основным настройкам почти готовой модели.


1.1 Извлечение

Поскольку Ex Machina является игрой в вымышленном сеттинге и поиск или создание с нуля новых, подходящих по стилистике 3d-моделей — занятие не для всех, — в данном разделе гайда мы разберёмся с проверенными способами изъятия уже имеющихся в игре моделей для их скорого на руку изменения.


Перво-наперво нужно знать, что в природе не существует программы, которая позволяла бы извлекать модели из Махины в их первозданном виде — поэтому, к сожалению, нам придётся пользоваться несколько костыльным методом, а именно так называемым «риппингом». Суть этого метода заключается в следующем: через программу-риппер мы запускаем программу (игру), способную воспроизводить и выводить на экран нужную нам модель. Необходимое условие — использование для этого методов DirectX, которые, благо, не применяются только в некоторых специфических программах. После появления модели на мониторе мы, нажатием зарезервированной клавиши, велим рипперу снять эдакий «трёхмерный скан» с отображаемой картинки, в результате чего должны получить модель в новом формате, а также текстуры к ней. Минусов у данного метода хватает: во-первых, мы не получаем такие элементы, как лоадпоинты и анимации; во-вторых, модель может отразиться, оказаться иного размера (кратного и зная значение которого можно всё восстановить), в другом положении, особенно когда состоит из нескольких частей, разъедущихся в итоге в стороны и, что очень обидно, может и вовсе разобрать модель на полигоны. Нет, сами по себе части модели останутся собранными, но испортятся нормали — настройка светотеней — из-за чего поверхность станет рубленной на вид, да и манипулировать углами, в случае работы с геометрией, придётся каждым по-отдельности. Также модель может неестественно перекосить, но это только в случае использования не слишком качественного риппера. В-третьих, если снимать модель с помощью игры — очевидно, что в «кадр» попадёт и множество других объектов, которые создадут нам много лишнего мусора, да настолько много, что ни один 3d-редактор не справится. С нашему счастью, в наличии у махинистов есть DirectX-программа, открывающая модели отдельно и даже позволяющая изменять их вид, что необходимо, например, в случае добывания моделей повреждений машин.


Самый проверенный риппер на данный момент — это Ninja Ripper за авторством Tosyk, в настоящий момент поддерживающий 32 и 64-битные программы под широким набором версий DirectX, а также обладающим импортером полученных моделей специально для 3DS Max. Автору же, по причине отсутствия у него последнего, привычнее использовать более старую версию. Далее вам потребуется программа для отображения модели — ей будет утилита от разработчиков Махины под кодовым названием GSMED, или, по-человечески, Targem Models Editor. Запускаем риппер, который в моей версии именуется injector.exe. В графе Exe указыжите путь к exe-файлу TME, в графе Dir можно указать директорию, в которую будет сохранена модель (по-умолчанию будет папка с указанной выше программой). Нажмите Run, после чего должен запуститься TME. Загружйте модель из игры в формате SAM или GAM и нажимаете «F10» — TME на мгновение провиснет. Поверните модель в окне мышью в качестве необходимой «пляски с бубном», после чего в указанной ранее папке для сохранения должны появиться папки _ripper/frames/frame00, в последней из которых и будет ваш рип вида mesh0000.rip и далее. Если вам нужно отснять модели повреждений — меняйте в TME значения групп повреждений машины (список вида Breakable1 и т.д.) и повторяйте съёмку — новые варианты модели буду последовательно появляться в папках frame01 и так далее. Теперь требуется программа, которая поймёт формат RIP. В нашем случае это будет MilkShape 3D, к которому имеется плагин-импортер, поставляемый вместе с моим риппером. Запускайте ms3d.exe, далее File > Import > RIP Importer 2. В графе Folder появившегося окна импортера указыжите путь к frame00, а в File(s) пропишите 00-99. Последнее определяет файлы RIP из папки, которые впоследствии и будут единовременно загружены в редактор. Жмите Import и получите одну или набор частей модели (мэши). Далее вы можете манипулировать этой моделью в данном редакторе или экспортировать её в другие форматы для работы с нею в других редакторах. На данном этапе вам достаточно будет знать, что данная версия Ninja Ripper’а отзеркаливает модели со стороны на сторону, опрокидывает их назад на 90 градусов и уменьшает размер в 100 раз.

Внимание! Ninja Ripper при повторном запуске начнёт свой отсчёт с frame00, заменяя содержимое папок, если оно там окажется. Удаляйте все риппы перед тем, как снова воспользоваться программой, чтобы не получить вместе кипы мэшей из совершенно разных моделей.

Внимание! Некоторые мэши Махиновских моделей могут иметь неведомое свойство приводить к ошибке при попытке загрузить их в последний, обязательный для использования редактор. Данное событие достаточно редко, однако в случае появления всё, что вам остаётся — это методом тыка и импортирования отдельных мэшей искать этого проказника, а после — заменить его своими силами.

Совет! Конфигураций моделей повреждений много, но вам достаточно будет нескольких, так как каждая часть машины имеет совсем немного вариантов с разными повреждениями. Выберите каждый Breakable* и задайте ему вариант 1 — риппнув такую машину вы получите первый уровень повреждений. Задайте везде вариант 2 — это будет второй уровень, и так далее. При импорте риппов в редактор — проведите эту операцию последовательно со всеми frame**, и на выходе вы получите полный набор: целую машину и все варианты повреждений.


1.2 Предварительная настройка

Для конвертирования новой модели в игру вам потребуется 3d-редактор Alias Maya версии 6.5 или 7 с установленным на него плагином для возможности экспорта в игровой формат SAM. Автор использует 7.0 Unlimited с русскоязычной любительской локализацией. Перед нами профессиональный редактор, не чета всяким Милкшейпам.

Сначала вам необходимо удостоверится в верности размеров новой модели. Для этого хорошо использовать риппнутую модель из игры, для сравнения, но если её нет — после импорта модели выделите её и в окне справа (редактор атрибутов), в одной из вкладок будет блок «Атрибуты трансформации», где в графах Translate будет указано положение мэша относительно центра модели. Сдвиньте мэш в сторону, выбрав инструмент Move Tool в колонке у левого края экрана и тягая появившиеся у мэша осевые стрелки — вы увидите, как изменяются значения его положения. Запомните, что значения эти являются аналогом сантиметров в игре и делайте выводы исходя из этого. Для удобства оценки смешения модели в центральном окне картинку в нём можно поворачивать — просто зажмите для этого клавишу «Alt». После того, как вы убедились в правильности или неправильности размеров — откатите изменение положения «Отменой» или установлением нулевых значений в осях Translate. По необходимости вы можете изменить размер каждого мэша, меняя значение Scale в том же блоке в процентах, и если это нужно — лучше заняться этим сейчас. Rotate, методом исключения, отвечает за ротацию, то есть наклон.

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

Maya7 transform attributes.jpg

Transformation Attributes

Сохраните сцену и, в целях «танца с бубном», выйдите из редактора, после чего можете вернуться и продолжить работу. В левом столбце вы можете выбрать для удобства четырёхоконный вид — Four View — и увидеть свою модель в плоскости с трёх сторон, а если вас пугает сеточный вид модели — в каждом окне есть вкладка «Затенение», где можно выбрать вариант отображения «Размытые тени». Если какие-то мэши не желают отображаться в таком виде — отметьте пункт «Использовать стандартный материал». Также «тени» можно сделать полупрозрачными, отметив пункт «X-луч».


При работе в Maya у модели могут сами собой сломаться нормали (светотени) на некоторых полигонах, даже с учётом того, что полигоны эти могли быть соединены между собой. Чтобы исправить сие досадное недоразумение — обратитесь к списку в левом верхнем углу экрана, в котором по-умолчанию выбрана «Анимация», разверните его и переключитесь на «Моделирование» — это заменит некоторые категории меню в рамке окна программы. Выберите новопоявившуюся категорию «Редактировать Многоугольники > Перпендикуляры > Средние Перпендикуляры» — и вуаля, нормали исправлены.

Следующим пунктом должно быть прикрепление текстур, однако окно Hypershade, в котором предполагается проводить данные манипуляции, у автора работало только если брать за основу сцену (проект), в которой кто-то и когда-то этим окном уже успешно воспользовался (но у редактора он работает прекрасно). В принципе, в этом нет ничего страшного, ведь предполагается, что вы уже затекстурили модель ранее, а значит здесь это проявится лишь в одной локальной проблеме: не будет видно нарисованных, но не имеющих отдельного мэша или заметной геометрии деталей, на которые впоследствии потребуется расставлять лоадпоинты, как, например, в случае с позициями для установки оружия, выполненными в оригинальном, low-poly стиле.

В любом случае, видите вы текстуры или нет, но вам придётся настроить материал для их мэшей — группы, в которых все выделенные мэши объединятся под одной текстурой, а также набор свойств, ответственных за то, по какому алгоритму будет отображаться текстура в игре. Выделяйте нужный мэш и жмите на кнопку mel махиновского плагина, которую вы должны были установить ранее в качестве новой вкладки (или «полки») над рабочим окном. Справа, в окне редактора атрибутов, откройте последнюю вкладку, которая в случае с полностью новым проектом будет называться lambert1 — это стоковый материал, к которому сейчас принадлежат все мэши модели. Внизу, в блоке Extra Attributes, если вы правильно установили плагин и он втихаря не отключился, должен заработать список Shader. В нём вы выберите тип отображения текстуры.

Если на этапе выбора шейдера вы ошибётесь — ничего страшного, его можно будет поменять позже, уже в TME, просто там это займёт больше времени и может приводить к вылетам. Вот с чем напортачить сейчас нельзя — так это с материалами, ведь если они будут настроены неправильно — вы не сможете подключить определённые текстуры только к тем мэшам, которые им предназначены. Выделите все мэши, на которые будет предполагается накладывать одни и теже тексуры при одном и том же параметре Shader. Выделять элементы удобно в окне между обзорным и левой колонкой (переключитесь на отображение окон типа Persp/Outliner, если потеряли его). Манипуляции в списке объектов там осуществляются также, как и с обычными файлами: При зажатой клавише «Ctrl» выделяется/отпускается один дополнительный элемент, с клавишей «Shift» — выбирается список промеж двух кликов. Далее выберите наверху полку «Перевод», в которой вы обнаружите 5 «серых шаров»: анизотропный материал, материалы Блинна, Ламберта, Фонга и Е-Фонга. Вдаваться в смысл названий толку нет, они для нас ничего не значат и разница между ними только в, собственно, названиях, которые проще отличать друг от друга, чем единое под разными номерами. Нажав на какой-либо из этих материалов при выделенных мэшах — они объединятся под этим материалом. Если снова выбрать тот же материал — для выделенных в этот момент мэшей сменится его номер, поэтому рекомендуется для мэшей с разными текстурами выбирать материал с другим названием, чтобы сразу видеть разницу между ними. Новое название материала можно увидеть заместо lambert1 или любого другого в редакторе атрибутов. Учтите, что вы не можете изменить материал, вручную переписывая его название (оно обратится назад) — только выделение всех нужных мэшей и присвоение нового материала.

Maya7 hypershade.jpg

Hypershade

Maya7 extra attributes.jpg

Extra Attributes

  • diffuse — Самый простой. Обычная текстура, единственно достоверно поддерживающая «дыры» (модели Махины поддерживают только полную прозрачность и отображают так текстуры, прозрачные более чем на 50%).
  • bump — Простая текстура и bump-текстура, создающая светотеневой объём. Интенсивность «свечения» настраивается прозрачностью bump'а. Это как раз то, что обычно называют шейдерами.
  • BumpDiffuse_EnvAlphaGloss_Spec — Текстура с альфа-каналом, определяющим интенсивность отражений в разных зонах: чем выше прозрачность — тем меньше блеск. Для глянцевых кузовов оптимально 25% видимости, для хромированных деталей — 50%. Больше — теряется цвет. Далее bump-текстура и lobbycube — текстура самих псевдоотражений.
  • embm_mask — Вариант для М113, где скин можно раскрашивать в автомастерской. Сначала идёт альфа-текстура, на которой отображено то, что раскрашиваться не должно, а остальное чёрным, а также учёт интенсивности блеска через прозрачность. Потом обычная текстура, где чёрным закрашены предыдущие элементы, а всё остальное имеет красный, синий и зелёный спектры и будет раскрашиваться по этим трём категориям. Можно лепить bump, а вот lobbycube не нужен, так как отражения здесь применяются по-умолчанию.

Внимание! Плагины Махины, в том числе и с шейдерами, имеют свойство самостоятельно отключаться, поэтому в случае несрабатывания и появлении красной строки ошибки — зайдите в раздел «Окно > Установки/Настройки > Менеджер модулей расширения...» и включите нужные плагины. Фактически, вам пригодятся только DraftAtributes.mll и MayaDraftExporter.mll, а остальные можно отключить ради пущей оптимизации.


С материалами и шейдерами покончили — теперь займёмся лоадпоинтами. Лоадпоинты (loadpoint/LP) необходимы для подключения к модели других элементов: частей машины, оружия, колёс, фар, дыма и прочего. Создаются они из осей для скелетных анимаций и представляют с собой точку, но с определённым направлением и возможными ограничениями. Найти это «Соединение» можно на полке «Анимация». Выбрав эту штуку и кликнув ей в окне с моделью — там появится небольшой шарик. В редакторе атрибутов, в блоке «Сустав» вы можете увеличить диаметр шара в строке Radius для лучшей видимости, хотя полезнее будет опуститься к блоку «Показать» и отметить в нем пункт Display Local Axis, который создаст у слишком абстрактной точки видимые оси. Запомните, что главной направляющей осью для нас будет служить зелёная — Y. Расставьте по модели все необходимые ей лоадпоинты, пример которых можно подсмотреть в TME – в нём также зелёные оси будут соответствовать Y’ку. Вращать объекты можно с помощью инструмента Rotate Tool, а перемещать картинку в обзорных окнах — также, как и с вращением клавишей «Alt», но уже вместе со средней, а не с левой кнопкой мыши.

Внимание! Снимайте выделение с оси перед тем, как создать новую, иначе они соединятся в кость и поменяют ротацию.


Если вы желаете, чтобы ствол в станке орудия не мог подниматься и опускаться как ему вздумается, или чтобы орудие на машине не поворачивалось «в тупик» — вы должны будете задать осям ограничение на вращение. Всё в том же редакторе атрибутов найдите блок «Огран. информацию» и в выпавшем блоке «Вращать» установите для конкретных осей максимально возможные градусы поворота. Если ось будет стоять вне полученного возможного угла — вы увидите, как она автоматически повернётся в подходящее положение.


Для того, чтобы ось превратилась в полноценный лоадпоинт — ей необходимо дать техническое имя, которое поймёт игра. Кликните с выделенными осями по полкокнопке mel, чтобы появился выбор имён из списка. Список представлен в редакторе атрибутов в блоке Extra Attributes и имеет название Transform Type. Теперь устанавливайте для каждой оси нужное имя, сверяясь с примерами в TME. Если требуемого имени в списке нет — не переживайте и выберите имя с, по возможности, тем же количеством символов. В будущем вы сможете вручную сменить символы на необходимые, найдя их в файле модели с помощью текстового редактора.

Совет! Список Transform Type можно подготовить самостоятельно, отредактировав файл TrTypes.txt, если последовательность имён в нём и их изрядное количество вас смущают, или если вы используете вариант, предоставленный разработчиками, в котором используются совершенно иные имена, несоответствующие именам лоадпоинтов и никому не понятные.


Следующая задача — разгруппировать всё по местам. Для начала разобьём на группы модели повреждений, если такие имеются. Выделите все «небитые» мэши и сгруппируйте их через «Ctrl+G», а если не срабатывает — через программную вкладку «Редактировать > Группировать». Выделите мэши с первым уровнем «битости», желательно сохраняя последовательность предыдущей группы, и также группируйте их. Продолжать можно до бесконечности, главное чтобы каждый следующий уровень повреждений оказался в следующей по порядку группе. А вы уже воздействовали на всё ваше богатство с помощью mel? Если нет — то пора бы это уже сделать. Далее выберите любую группу повреждений и последовательно, по порядку, возьмите в одном из блоков Extra Attributes (они присутствуют в нескольких различающихся экземплярах во вкладках редактора атрибутов), в списке Mesh Group названия модели повреждения для каждого битого (и НЕ битого обязательно тоже) мэша. Идёте по остальным группам и проделываете тоже самое. Необходимо чтобы каждый кусок машины, вне зависимости от его битости или её отсутствия, имел в этом списке одно и тоже название для каждого мэша, относящегося к этому куску. Если за определение нужного уровня повреждения отвечает последовательность созданных нами групп, то за определение того, какой именно мэш нужно заменить на другой мэш из следующей группы отвечает значение Breakable*, которое должно оставаться одним между этими двумя и более мэшами. Неповреждаемые элементы никаких групп и списков не имеют и стоят отдельно. Если вы хотите, чтобы вместе с мэшем при повреждении изменял положение, появлялся новый или исчезал старый лоадпоинт (эффект дыма из под капота или разбитой фары, например) — выделите необходимые лоадпоинты, после чего выделите последним, в довесок к ним, нужный мэш и нажмите «P» или «Редактировать > Предок» — лоадпоинты должны закрепиться под этим мэшем.


Отдельно стоит упомянуть про последовательность группировки для удобного, а то и правильного текстурирования. Порядок этот определяется очерёдностью каждого первого мэша с новым материалом с списке объектов. То есть, например, если окромя мэшей, которым материал условно не требуется (логотипы и коллизии), первым в списке будет phong7, а за ним lambert3 – в списке на текстурирование они расположатся именно в таком порядке, а их номер; время, когда их создали; запрятанность в группы и узлы значения иметь не будут. Все объекты в списке можно перемещать по усмотрению, а смысл этого в том, что, во-первых, разным моделям с идентичной последовательностью материалов в последствии можно будет легко добавлять текстуры, шейдеры и скины, автоматически копируя их из единственной, настроенной вручную модели; а во-вторых, М113 для корректной работы скинов под embm_mask требует, чтобы первым материалом в модели был именно материал под «маску».


В последнем указанном блоке Extra Attributes помимо Mesh Group с повреждениями (и конфигурациями для персонажей) есть также Mesh Type, где можно указать свойство Logotip, собственно, мэшу под текстуру логотипа (если вы такую на него натянули), а также изменить физическую модель объекта. На последнем остановимся подробнее. Без отдельной установки коллизия — физическая модель — создаётся у модели самостоятельно и представляет собой ящик, растянутый до краёв модели. Этот ящик отвечает за взаимодействие с другими объектами и представляет собой «реальную» форму модели. Мы можем создать собственный ящик, используя хотя бы полку «Многоугольники» и выбрав в ней куб. Если растянуть его по своему усмотрению (инструмент Scale Tool) и задать ему в Mesh Type значение Box_geom — вы получите в игре соответствующую уже этому ящику коллизию. Динамические объекты, вроде машин и оружия, нормально приспособлены для использования лишь таких простых форм; статические, вроде зданий, могут иметь какую угодно коллизию, достаточно лишь обозначить мэш, который ею будет, значением Collision. Колёса генерируют шарообразную коллизию по диаметру колеса и не обращают внимания на форму повреждённых колёс. Разрушаемые физические объекты создаются с использованием у мэшей-предков (клавиша «P») их коллизионных «детей» со значениями Box_HierGeom.

Внимание! Оригинальная игра поддерживает только один Box_geom на модель, а М113 и Аркада — множество. Вы можете увидеть их через TME, включив отображение коллизий во вкладке опций.


Когда всё необходимое реализовано — можно приступить к экспорту модели. Выберите формат Draft Exporter (*.*) и извлекайте вашу модель из программы, отказавшись от конвертирования DDS. Поскольку Maya любит придираться к любым неосязаемым вещам — экспортируйте модель в то же место, где хранится файл её проекта. На выходе вы должны получить файл в формате SAM, обладающий весом(!).

Внимание! Не сохраняйте модель через «Сохранить Сцену Как...» — это может вызвать ошибки в проектах. Если вам нужно оставить бэкап или копию модели — скопируйте её файл вручную и сохраните в другом месте/с другим именем.

1.3 Анимации

Анимации для моделей создаются с помощью тех же самых точек, что и лоадпоинты, но с той лишь разницей, что теперь необходимо делать предком ось, за которой будет закреплён меш, а не наоборот, как в случае с лоадпоинтами на моделях повреждений.


Создайте ось, закрепите за ней нужный мэш и попробуйте изменить положение оси — меш сместится вместе с ней. Внизу окна программы Maya вы можете увидеть линейку проигрывания анимации. Выделите на ней нужный кадр, после чего установите все мэши для этого кадра в необходимое положение и нажмите «S» либо, если не работает, вкладку «Анимировать > Назн. ключ» — теперь этот кадр является единственным положением модели при анимации. Добавляя новые кадры на линейке мэши будут плавно перемещаться в промежутках между ними. О скорости проигрывания задумываться не стоит, поскольку она настраивается уже после конверта модели и сейчас нам важно только соотношение расстояний между ключевыми кадрами. Добавить или удалить пустые кадры, а также удалить ключевые можно нажатием правой кнопки мыши по анимационной линейке и выбором нужного пункта в разделе «Ключи» всплывшего окна.

Внимание! Если вы подготовите мэши для нового кадра и только после этого выберите нужное им место на линейке, поставив между других ключевых кадров — эти мэши займут положение перехода между старыми кадрами, сбросив ваши подготовительные манипуляции с моделью для создания нового ключа.


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


Для создания полноценных скелетных анимаций, таких как, например, анимации человечков, необходимо соединить кости с мэшами при помощи не родительства, а вкладкой «Кожа > Изгиб скелета», выбрав там нужный вариант. Мягкий изгиб способствует плавному перемещению вершин мэшей вслед за костями, а упругий даёт растягивать только наиболее близко прилегающие к осям полигоны, сохраняя остальную сетку жёсткой. Для мягких изгибов предусмотрена возможность менять степень влияния осей на вершины: полка «Анимации», инструмент «Рисование Пропорций Кожи». При воздействии этим инструментом на разные участки модели можно освободить их от связи с суставами, если такого не предполагалось.

Внимание! Кости соединяются в иерархической последовательности, то есть при манипуляциях в 3d вы сможете поворачивать только далее стоящие участки скелета, но не предыдущие.


Следующим пунктом идёт вопрос того, как совместить несколько анимаций в одной модели, если их линейка только одна? Для этого вам потребуется создавать дубликаты файла модели и в каждом записать отдельную анимацию. Крайне важно, чтобы кроме анимации эти модели, или, скорее, файлы, ничем не различались между собой. Создайте в директории со всеми готовыми файлами моделей текстовый файл с названием anims.txt и последовательно пропишите в него необходимые анимации по примеру:

STAND1 my_model_a.mb 24
MOVE1 my_model_b.mb 36
Внимание!

При использовании "табуляции" вместо пробелов - анимация экспортироваться НЕ будет!
Обязательно используйте пробелы для отступов между "словами" в файле anims.txt

В данном примере сказано, что анимация из файла my_model_a.mb будет проигрываться по запросу STAND1 или, попросту, при стоянии на месте. Число 24 указывает конечное число кадров в анимации. К скорости проигрывания это всё ещё не имеет никакого отношения, а лишь позволяет обрубить с конца лишние кадры или добавить новые, пустые. Если вам нужна модель с положением «без анимации» — добавьте в этот список и её, даровав ей всего один кадр. Всего в игре существуют такие типы анимаций, которые запускаются либо автоматически при совершении с моделью определённых действий, либо принудительно посредством скриптов:

  • STAND1
  • STAND2
  • MOVE1
  • MOVE2
  • ATTACK1
  • ATTACK2
  • PAIN1
  • PAIN2
  • DEATH1
  • DEATH2
  • BLOCK1
  • BLOCK2
  • RESERVED1
  • RESERVED2
  • RESERVED3
  • RESERVED4


Откройте первый файл из своего списка для анимации и экспортируйте его: если всё сделано правильно, Maya, найдя поблизости от файла модели список anims.txt, последовательно проэкспортирует анимации из всех указанных в нём файлов и объединит их в одной модели игрового формата SAM.


1.4 Игровая настройка

Если модель экспортирована без эксцессов, вы сможете открыть её в TME для последующей настройки. В блоке анимаций модно указать скорость проигрывания оных посредством изменения значения fps, а также указать возможную зацикленность анимации. Чтобы модель работала в игре — требуется подключить ко всем её материалам какие-нибудь текстуры. Добавляйте текстуры соответствующей кнопкой и выбирайте тип каждой из них из списка ниже. Разбор списка приведён здесь:

  • DIFFUSE — Обыкновенная текстура.
  • BUMP — Bump-текстура.
  • LIGHTMAP
  • CUBEMAP — Lobbycube-отражение.
  • DETAIL
  • MASK — Текстура для раскраски М113.


Форматы текстур могут быть такими:

  • TGA
  • DDS
  • BMP
  • JPG
  • PNG


А возможно и такими:

  • PPM
  • DIB
  • HDR
  • PFM


Там же можно отредактировать MASK_COLORS — расцветку скинов ботов М113, а также сменить шейдеры, если установленные вами оказались неподходящими. Обратите внимание, что цветные текстуры для маски должны иметь в окончании своих названий _mw и _mt для камуфляжа и гражданской раскраски соответственно, и желательно, чтобы скины шли именно в таком порядке. Шейдеры же располагаются в папке data/shaders. Добавление скинов позволяет использовать разные варианты расцветок и отображения вообще. Вы можете загрузить скины из другой модели SAM через вкладку «Файл» и получить их нормальное отображение при условии, что число материалов совпадает, а их последовательность не перепутает текстуры между собой. С другой стороны, используя текстуры с именами одной длинны — вам не составит никакого труда заменить их на другие с помощью текстового редактора прямо в коде модели, поскольку их названия там «не шифруются». Главное в таком случае — сохранить изначальное количество символов в коде модели. Вы можете поэкспериментировать с удалением лишних «символов-пробелов» или добавляя оные если решите изменить длину названия текстур для модели после её настройки в TME. И не забудьте проверить модели повреждений, если делали таковые.

Внимание! Сохраняйте модель в TME во время её редактирования как можно чаще, так как программа при любых манипуляциях с текстурами очень нередко крашится и вылетает.


Теперь вам необходимо прописать пути к вашим моделям в файле data/models/animmodels.xml, а также, по необходимости, добавить обращение к этому файлу из карт, на которых эта модель должна использоваться. Делается это в файле commonservers.xml в папке моделей, если использование модели предполагается в любом случае, вне зависимости от карты; либо в servers.xml в папке каждой карты, где модель должна работать — такая избирательность позволяет оптимизировать нагрузку на движок игры. Схема взаимодействия с моделью получается, грубо говоря, такой: Обращение игры > Прототип объекта > Проверка Servers карты > Поиск в Animmodels > Модель. Также для оригинальной игры требуется вписать все номера скинов, которые должны корректно работать на конкретной карте.

servers.xml:

        <Item 
            id="bugCab01" 
            file="data\models\AnimModels.xml"   
            params = "skins: 0 1 2 4 8;" /> — Скины для продажи на r1m1
                                           (8 — скин гибели, не продаётся)


Дальнейшая настройка сводится к привязке эффектов отдельных лоадпоинтов для конкретных действий или анимаций. В animmodels.xml указывают, например, что и откуда должно светить и/или дымить при определённых действиях с моделью — плотный выхлоп на газу, стоп-сигналы при торможении, фары при их включении, вспышки при стрельбе и так далее. Помимо этого в условных анимациях DEATH1 и DEATH2 в этом файле необходимо указать номер скина уничтоженной машины.

animmodels.xml:

    <model
        id="bugCab01"
        file="data\models\vehicles\bug\cab01.gam"
        shadow="1"
        shadowVolume="1"
        windwavy="0"
        trans="0">
        <action
            name="DEATH1" — Анимация при гибели
            skin="8" /> — Скин при гибели

        <action
            name="DEATH2"
            skin="8" />

        <action
            name="STAND1"> — Анимация при движении
            <lp
                id="LP_EXH01" — Лоадпоинт выхлопной трубы
                effect_id="ET_PS_EXHAUST_SMOKE1" — Эффект дыма
                restartOnAnimationChange="0"
                ImmediateRemove="0" />