Создание новых моделей юнитов для игры Napoleon: Total War

Данный тутор (руководство) создано специально для мододелов, желающих самостоятельно добавить в игру Napoleon: Total War новые игровые модели юнитов.

Введение

Первое, что нам нужно рассмотреть – это необходимый для наших коварных целей софт:
1) Программа для непосредственного открытия моделей формата .variant_part_mesh (формат моделей в игре) - MilkShape 3D и плагин для нее.
2) Более серьезная программа для редактирования 3Д графики (конечно, если вы являетесь настоящим мазохистом то вероятно можете обойтись лишь милкшейпом), я лично использую Autodesk 3ds Max 2010.
3) Программа для редактирования графики и текстур, желательно Photoshop CS3 или выше и плагин к нему для работы с DDS текстурами.
4) И самая важная программа для модификаций Napoleon: Total WarPackFileManager
Так же для работы с игрой наши иностранные коллеги создали огромное множество вспомогательных программ, о которых я напишу позже, ибо я ими не пользуюсь.


 

ЧАСТЬ 1. Теория

 

Итак, вы скачали все эти программы, теперь вам необходимо их установить и настроить. Здесь я расскажу о настройке MilkShape:
- файлы плагина из архива копируете в папку с установленной программой;
- запускаете программу;
- нажмите File – Preferences – закладка Misc и приводите свои значения в соответствие со скриншотом.



Отныне ваш MilkShape готов к импорту игровых моделей, самое время разобрать немного теории. Запустите PackFileManager и откройте variantmodels.pack.
Игровые модели хранятся в VariantModels – UnitParts, здесь есть папки euro и ottomans(понятно что в каждой находятся модели европейской и азиатской культур соответственно), открываем допустим euro и видим еще ряд папок: belts(ремни), torsos(тело) и т.д. Мы уже почти добрались до самих моделей, далее открываем допустим torsos и видим список папок уже с самими моделями. В каждой папке находится структурная модель в формате .variant_part_mesh и папка с текстурами tex. Если игра использует модели по этому адресу напрямую, то эти текстуры лежат здесь абсолютно бесцельно.

Далее найдем текстуры, которые использует игра. Они находятся в этом же паке по адресу VariantModels – units – atlas. В этой папке лежит огромное множество огромных (4000х4000 пикселей) текстур, пролистаем до russia. Все юниты , которые присутствуют у фракции Россия находятся на этих текстурах. Текстур для каждой фракции 4:

  • Russia_colour_mask.dds - отображает куда будет нанесен фракционный цвет.
  • Russia_diffuse.dds – отображает непосредственно основные цвета текстуры.
  • Russia_gloss.dds - отображает блеск (доспехи, кожа).
  • Russia_normal.dds – отображает карту нормалей (бампов).

У каждого из этих файлов есть текстовый файл в формате .atlas, в нем как раз хранится информация расположения конкретной текстуры на большой, её размеры и прозрачность.
Ориентироваться на этих текстурах просто даже на глаз (я лично на глаз делаю, так быстрее, т.к. не тратишь время на лишние операции с дополнительными программами): в двух верхних рядах расположены текстуры 512х512 пикселей, самая верхняя текстура имеет координаты х-0, у-0, следовательно вторая в верхнем ряду находится по координатам х-512, у-0 и т.д.

Более подробно сразу расскажу об структуре файла .atlas:
Выберите russia_diffuse.atlas. Здесь находится несколько столбцов, часть из них с координатами скрыты, их нужно растянуть как показано на криншоте (скрытые графы будут вытягиваться если ваш ползунок имеет 2 полоски, если он имеет одну жирную – то будут растягиваться видимые графы).

{gallery}tutors/NTW-model-maroder/2{/gallery}

Еще для импорта модели в MilkShape потребуется скелет, он хранится в другом паке. Откройте с помощью PackFileManager data.pack – animations – reference, здесь файл tpose.anim и есть тот самый скелет, экспортируйте его себе куда-нибудь в удобное место, поскольку его нужно будет использовать при каждом импорте модели в MilkShape.


ЧАСТЬ 2. Модели


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

1) Создайте собственный мод с новым юнитом. Помните, что файлы из папки db должны иметь в названии подпись «xxx_», чтобы не конфликтовать с оригинальными файлами игры, в моем случае все файлы начинаются с «cos_»
Прописываем мод по всем правилам и создаем в нем новый юнит (Надеюсь вы это умеете делать: читать )!

{gallery}tutors/NTW-model-maroder/3{/gallery}

2) Мод у нас есть, теперь займемся подготовкой новой модели. Возьмите любую игровую модель части человека (все файлы моделей имеют имя mesh, отыскать нужный можно по названию папок) по адресу из первого урока и положите её в одном месте, совместно со скелетом tpose.anim.Запустите MilkShape, затем File – import – Napoleon. TW VPM.

{gallery}tutors/NTW-model-maroder/4{/gallery}

Первым делом в появившемся окне выбираем модель из игры, которую вы положили совместно со скелетом – mesh, выскочит диалоговое окно «Do you want to pick a skeleton?», нажимаете «OK» и в появившемся окне выбираете сам скелет - tpose.anim, нажимаете «Открыть» и модель загрузится!
(Как пользоваться интерфейсом программы MilkShape вы сможете узнать из наставления, мы же рассмотрим только функции по привязке вершин к скелету.)

3) Надеюсь у вас уже есть модель, которую вы хотите привязать к скелету, и следовательно у вас 2 пути: если вы полный мазохист, можете сразу свою модель импортировать в MilkShape и подгонять её под скелет, да чего уж там, можете с нуля её здесь создать ))). Ну а для нормальных людей предлагаю игровую модель, что вы загрузили в MilkShape, экспортировать в свой любимый формат (кнопка экспорта рядом с кнопкой импорта) и в своем любимом 3д редакторе подогнать свою модель под игровую.

4) После того как вы скоординировали модели в своем любимом 3Д редакторе, импортируйте её в MilkShape, где все еще открыта та игровая модель. И у вас во вкладке Groups должно быть вот так.

{gallery}tutors/NTW-model-maroder/5{/gallery}

5) Нужно удалить файлы LOD1, LOD2, LOD3, чтобы не мешались. И заходим во вкладку Joints, здесь находятся список костей нашего скелета(1), панель грубой привязки(2), панель мягкой привязки(3).

{gallery}tutors/NTW-model-maroder/6{/gallery}

6) Вам предстоит привязать свою модель также, как привязанная игровая. Для начала изучите привязку игровой модели. Для удобства вернитесь во вкладку Groups, выберите свою модель и нажмите кнопку Hide, это скрое вашу модель и на экране останется только игровая, вернитесь во вкладку Joints, поставьте галочку на «Draw vertex weights», после этого сила привязки кости-вертекса будет отображаться на модели.
Так же для удобства нажмите правой кнопкой на саму модель и поставьте галочки напротив Smooth shaded и Wireframe Overlay. Теперь можете понажимать на кости в списке костей и наблюдать как привязаны группы вершин к определенным костям.

{gallery}tutors/NTW-model-maroder/7{/gallery}

7) Ну что-же, вы запомнили например какие вершины привязаны к определенной кости и готовы воспроизвести это на своей модели. Возвращаемся во вкладку Groups, делаем невидимой игровую модель, а свою наоборот видимой, все той-же кнопкой Hide, переключаемся во Joints и выбираем какую-то группку вершин, я например возьму 2 ряда в левом локтевом суставе (помните, игра воспроизводит модели в зеркальном отражении, учитывайте это при привязке и при самом моделировании, т.к. части ваших моделей, которые вы рассчитывали справа в игре окажутся слева) и в меню «мягкой привязки» выбираю кости LeftArm и LeftForearm и выставляю значения влияние каждой из кости на эти вершины. (помните, каждую вершину можно привязать к 4 костям, но коэффициент влияния у вершины 100, и эти 100 должны делиться по всем костям), у меня кость руки будет действовать 60 %, а кость предплечья 40 %. После этого нажимаете в самом нижнем блоке Assing (привязать). Вот таким образом вы привязываете все вершины вашей модели к костям, сверяясь с привязкой игровой. 
И сохраняйтесь почаще (сохраняйтесь в разные файлы под разными именами).

{gallery}tutors/NTW-model-maroder/8{/gallery}


8) После того, как модель привязана, переходите во вкладку Groups и удаляете игровую модель LOD0. После чего свою модель переименовываете в LOD0. Затем двойным щелчком выбераете свою модель и нажимаете вверху пункт меню «Edit» и там «duplicate selection», делаете 3 копии своей модели и называете их LOD1, LOD2, LOD3.

9) После этого File – export – Napoleon TW. VPN и сохраняете в удобное для вас место.

10) Кладете эту модель в свой мод по такому адресу (Весь путь до папки torsos должен быть идентичен. Далее папку называйте как хотите, я назвал Cossack_Cuirass)

{gallery}tutors/NTW-model-maroder/9{/gallery}

Хоть у нас и нет текстуры, но вы можете уже посмотреть на свою модель в игре, для этого отряду, которому вы хотите выдать вашу новую модель пропишите в unit_variant.

{gallery}tutors/NTW-model-maroder/10{/gallery}

После этого заходим в игру, выбираем «Начать сражение» и наблюдаем свою модель на данном юните!


ЧАСТЬ 3. Текстуры


Итак, у вас есть модель и теперь нужно включить для нее текстуру.
Как уже говорилось в разделе теории текстуры отдельных частей юнитов хранятся на общих текстурах фракции\длс и т.д. Для нашего ДЛС нам потребуются оригинальные текстуры фракции Россия. 

1) Извлеките из variantmodels.pack по адресу VariantModels – units – atlas текстуры Russia_colour_mask.dds, Russia_diffuse.dds, Russia_gloss.dds, Russia_normal.dds и их .atlas.

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

{gallery}tutors/NTW-model-maroder/11{/gallery}

3) После этого запустите эти текстуры в своем 2D редакторе (Photosop CS3), и добавлятей свою текстуру в каждый из файлов:
- cazac_colour_mask.dds – сделайте полностью черным, т.к. лишние заморочки вам не к чему и сохраните в формате .dds в режиме DXT5 ARGB.
- cazac_diffuse.dds – на него добавьте непосредственно саму свою текстуру. У меня текстура торса размерами 1024х1024, хотя стандартные размеры в игре 512х512, но здесь ничего страшного, потом в .atlas запишем что нужно. Я вставляю свою текстуру не в самом начале координат (началом координат является верхний левый угол, там х -0, у – 0), как вы поняли если я отступаю одну текстуру вправо то координаты моей текстуры будут х – 512, у – 0, и от этой координаты разметы 1024х1024.
Я специально расположил свою текстуру не в углу, чтобы более наглядно был виден принцип работы текстуры в игре.
Далее очень важно зайти во вкладку слои и удалить заливку альфа-канала в тех местах, где находится ваша новая текстура.

{gallery}tutors/NTW-model-maroder/12{/gallery}

- cazac_gloss.dds – Текстура блеска, в том же месте, где и на cazac_diffuse.dds располагаем свою текстуру и покрываем её в синий цвет (синий – отсутствие блеска, после чего металлические части выделяем и вырезаем со слоя синего цвета, как на скриншоте (я вырезал часть золотого ремня с кирасы, он будет блестеть, все остальное нет), таким образом вырезаете все, что вам хочется).

{gallery}tutors/NTW-model-maroder/13{/gallery}

- cazac_normal.dds – прогоняете свою текстуру через фильтр нормалей (думаю все знают как это делается) и добавляете её в тоже место на этой текстуре, только здесь загвоздка в том, что карту нормалей нужно еще скопировать на альфа-канал и там тоже расположить соответственно.
Все текстуры так и сохраняем в формате .dds в режиме DXT5 ARGB.

4) Отлично, наши текстуры готовы, осталось совсем небольшая но очень ответственная работа, нужно определить расположение нашей текстуры на общей в файлах .atlas.
Складываем все в архив и открываем вначале cazac_diffuse.atlas, выбираем любую понравившуюся строчку, можете самую первую (я же у себя запишу на второй, т.к. первая занята моими ремнями).
Итак, видим тут первые 2 колонки: String1 и String2 – это адрес текстуры, который должен соответствовать адресу где лежит ваша модель.
Адрес моей модели VariantModels/UnitParts/Euro/Torsos/Cossack_Cuirass/Mesh

Следовательно мои текстуры должны иметь адреса:
String1 - VariantModels/UnitParts/Euro/Torsos/Cossack_Cuirass/tex/texture
String2 - VariantModels/UnitParts/Euro/Torsos/Cossack_Cuirass/tex/texture_diffuse.dds

Далее идут колонки(которые нужно вытянуть, т.к. они скрыты Ч.1):
X1(PU) и Y1(PU) – это координаты нашей текстуры на глоб. текстуре. Я их заполняю 512 и 0 соответственно (почему – было написано и показано выше).
X2(PU) и Y2(PU) – это координаты заливки текстуры, ставьте их в значение размеров вашей текстуры, в моем случае 1024 и 1024 соответственно.
И следующее что нам нужно поменять Width(PU) Heigth(PU) – высота и ширина нашей текстуры, я ставлю 1024 и 1024 соответственно.

Данную процедуру проделать с остальными файлами .atlas.
После этого текстуры готовы игрой к употреблению.

Заходите в таблицу юнита unit_variant, которому мы выдали новую модель и в torsos меняем значение текстуры на новое (мой случай VariantModels/UnitParts/Euro/Torsos/Cossack_Cuirass/tex/texture).

{gallery}tutors/NTW-model-maroder/14{/gallery}

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

Спасибо за внимание и желаю успехов в ваших начинаниях!

Автор: Maroder22rus

Недостаточно прав для комментирования