Вы здесь:

Total War моды

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

Создание новых моделей юнитов для игры 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 полоски, если он имеет одну жирную – то будут растягиваться видимые графы).

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


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


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

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



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



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

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

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



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



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



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


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

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

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



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



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


    ЧАСТЬ 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) у вас должно быть свое.



    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.
    Я специально расположил свою текстуру не в углу, чтобы более наглядно был виден принцип работы текстуры в игре.
    Далее очень важно зайти во вкладку слои и удалить заливку альфа-канала в тех местах, где находится ваша новая текстура.



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



    - 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).



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

    Спасибо за внимание и желаю успехов в ваших начинаниях!
    Буду рад услышать замечания и дополнения по тексту! Форум.

    Автор: Maroder22rus