Форум HeroesWorld-а - Показать сообщение отдельно - Руководство по добавлению в игру HoMMV новой модели, анимации и существа
Показать сообщение отдельно
#48
Старый 19.02.2020, 18:30
  #48
^
zahar0z
 
Аватар для zahar0z
📖
Регистрация: 09.06.2017
Сообщения: 588
Регистрация: 09.06.2017
Сообщения: 588
Восклицание
Re: Руководство по импорту модели со скиннингом и анимацией в игру герои 5.

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



Как при помощи новой структуры быстро заменить любое существо в игре?
Или быстро создать новое NCF существо?


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

Закиньте болванку "Z_TestCreature.pak." в папку "data" в корне игры.

Скачайте файл с заготовкой Z_TestCreature.pak.

Переместите скачанный файл "Z_TestCreature.pak" в папку "data" внутри папки с игрой герои 5.
Путь будет примерно такой "C:\Program Files\Nival Interactive\Heroes of Might and Magic V - Tribes of the East\data".
Помните что файл формата ".pak", это обычный архив. Его можно открыть и редактировать архиватором WinRAR или WinZip.


пример 1 Замена любого существа в игре, тестовой визуалом из "Z_TestCreature.pak,"
или создание нового NCF существа, использующего этот визуал.

(Тестовая визуал выглядит как обычный крестьянин в жёлтой рубашке.)


Найдите внутри папки с игрой герои 5, в папке "data" архив "data.pak".
Для начала предположим, что вы хотите заменить мечников из ордена порядка, тестовым визуалом.
Внутри архива "data.pak", найдите файл "Footman.xdb", по пути "GameMechanics\Creature\Creatures\Haven\Footman.xdb ".
Извлеките его из архива, сохранив структуру папок. Затем снимите в свойствах файла галку с "только чтение".
Далее, внутри архива "data.pak", найдите файл "Footman.xdb", но уже по пути "MapObjects\_(AdvMapObjectLink)\Monsters\Haven\Foot man.xdb".
Извлеките и этот файл из архива, снова сохранив структуру папок. Затем снимите в свойствах и этого файла галку с "только чтение".
Закиньте два эти файла (сохранив структуру папок) в архив "Z_TestCreature.pak" в папке "data".


Весь процесс делается в четыре простых шага.
Шаг1.
Откройте файл "GameMechanics\Creature\Creatures\Haven\Footman.xdb " внутри архива "Z_TestCreature.pak".
Найдите в нём строчки "MonsterShared" и "Visual"

замените в них оригинальные пути, на пути к файлам тестового существа.
т.е.
замените путь к "MonsterShared"
/MapObjects/Haven/Footman.(AdvMapMonsterShared).xdb
на
/new_creatures/test_fraction/test_creature/creature.(AdvMapMonsterShared).xdb
а путь к "Visual" с
/GameMechanics/CreatureVisual/Creatures/Haven/Footman.xdb
на
/new_creatures/test_fraction/test_creature/creature.(CreatureVisual).xdb

(скопировать эти строчки можно из изменённого, для нужд тестовой болванки, файла крестьянина
т.е. файл "GameMechanics\Creature\Creatures\Haven\Peasant.xdb " внутри архива "Z_TestCreature.pak")

Шаг2.
Далее откройте файл "MapObjects\_(AdvMapObjectLink)\Monsters\Haven\Foot man.xdb" внутри архива "Z_TestCreature.pak".
замените в нём, в третьей строчке, путь к "AdvMapMonsterShared"
т.е.
замените
/MapObjects/Haven/Footman.(AdvMapMonsterShared).xdb
на
/new_creatures/test_fraction/test_creature/creature.(AdvMapMonsterShared).xdb


Шаг3.
Удалите из архива "Z_TestCreature.pak"
файл "GameMechanics\Creature\Creatures\Haven\Peasant.xdb "
и файл "MapObjects\_(AdvMapObjectLink)\Monsters\Haven\Peas ant.xdb"
чтобы этот же тестовый визуал не заменял вместе с мечником и крестьянина.

Шаг4.
Далее внутри архива "Z_TestCreature.pak" найдите файл
"/new_creatures/test_fraction/test_creature/creature.(AdvMapMonsterShared).xdb"
в нём замените строчку с ID существа на ID мечника.
т.е.
заменяем CREATURE_PEASANT
на CREATURE_FOOTMAN



Теперь тестовый визуал (крестьянин в жёлтой рубахе) заменит в игре мечника.

Как заменить не мечников а другое существо?
По аналогии, с описанным в основном тексте примера1.
Просто нужно скопировать из архива "data.pak"
из папок "GameMechanics\Creature\Creatures" и "MapObjects\_(AdvMapObjectLink)\Monsters"
вместо файлов мечника, файлы отвечающие за существо, которое хотите заменить.
ID вашего существа, который нужно прописать вместо "CREATURE_PEASANT" в файл "creature.(AdvMapMonsterShared).xdb"
можно узнать поискав в файлах в папке "GameMechanics\Creature\Creatures".
Или загуглить, этот ID используется в скриптовых командах, поэтому в сети есть информация по этому вопросу.

Как понять какие файлы отвечают за какое существо? Включить голову.
Если очень тяжело с английским можно пользоваться переводчиком.

Как добавить NCF существо?
По аналогии, с описанным в основном тексте примера1.
Только заменять нужно пути в файлах отвечающих за NCF существо.
Ну и конечно, у вас должно быть установлено ядро NCF.

Как изменить описание и имя существа?
Замените текст в файлах.
для имени
"/new_creatures/test_fraction/test_creature/icon_text/name.txt"
для описания
"/new_creatures/test_fraction/test_creature/icon_text/description.txt"


Как изменить иконку существа?
Отредактируйте, или замените файл
"/new_creatures/test_fraction/test_creature/icon_text/icon.(Texture).dds"

Редактировать .dds можно через Adobe Photoshop с установленным dds плагином.

Вот, более или менее оптимальные настройки для сохранения dds под HoMMV.

Для иконок существ и прочих элементов интерфейса MIP maps лучше отключать.
Для текстур которые будут использоваться на модели, MIP maps должны быть включены.

psatkha написал хорошее руководство по вопросу редактирования иконок.


Как изменить игровые характеристики существа, добавить ему заклинание, телепорт и т.д.?
Игровые характеристики прописаны в файле (на примере мечника) "GameMechanics\Creature\Creatures\Haven\Footman.xdb ".
По аналогии, скопируйте и редактируйте файл с характеристиками существа, которое изменяете/добавляете.

Например, для того, чтобы сделать существо стрелком нужно вписать количество выстрелов в графу "Shots"


А вот так выглядит прописанные существу заклинание, на примере магов гномов.


Мне не хватит сил, объяснять что значит каждая цифра и каждый параметр в файлах с существами.
Поэтому исследуйте это самостоятельно, рассматривая оригинальные файлы со статами существ,
лежащие в папке "GameMechanics\Creature\Creatures".
Или гуглите дополнительную информацию в интернете (она есть, и её много).

Есть только небольшой нюанс, а именно, телепорт.
Если вы хотите чтобы ваше существо использовало телепорт при передвижении (это не даёт ему автоматически способность "летающее существо")
то вам нужно редактировать файл "/new_creatures/test_fraction/test_creature/creature.(CreatureVisual).xdb"
Конкретно кусок "TeleportingMove". В "Use" нужно вместо "False" (не верно) вписать "True" (верно).

А в строчках ниже можно опционально выбрать эффект телепорта.
После того как вы сделали существо телепортирующимся, оно будет использовать анимации "moveStart" и "moveEnd" вместо "move".


Как изменить положение камеры во внутреигровом меню просмотра существа?
Для этого, вам нужно скопировать из архива "data.pak" к вам в архив файл отвечающий за камеру выбранного существа.
Например у крестьянина это "Cameras/Interface/HireCreatures/Peasant.xdb" уже отредактированный в архиве "Z_TestCreature.pak".
Править камеру очень муторно т.к. приходится править цифровые значения, а результат можно просмотреть только в игре.
Поэтому, зачастую быстрее скопировать содержимое файла более подходящей камеры от другого существа, в файл с камерой от вашего существа.

Например, крестьянин в болванке "Z_TestCreature.pak" на самом деле используют камеру от мечников.


Как добавить эффект к анимации существа?
В архиве "Z_TestCreature.pak." уже есть тестовый эффект в папке "/new_creatures/test_fraction/test_creature/animset/effects/".
(Это горящие фиолетовым глаза, от альт грейда скелетов)
Если хотите протестировать этот эффект, просто впишите в ваш файл с анимацией, например в файл
"/new_creatures/test_fraction/test_creature/animset/idle00.(BasicSkelAnim).xdb"
в строчку "Effect" путь к эффекту href="effects/idle00.(Effect).xdb#xpointer(/Effect)"


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

Обратите внимание, что строчка "GlueToNamedBon"
в файле "/new_creatures/test_fraction/test_creature/animset/effects/head_bone.(ParticleInstance).xdb"
отвечает за то к какой кости скелета модели будет "приклеен" эффект.

Раньше модостроители, при помощи эффектов, очень часто "вешали" на существо элементы модели (шлема, мечи и т.д.).
Этот метод может пригодиться и сейчас, для решения различных специфических задач.
(например, когда вам нужно, чтобы элемент модели появлялся, или наоборот исчезал, только в одной анимации).

Нормально разобраться, как создать собственный эффект вам придётся самостоятельно,
сделать это можно изучая пример из "Z_TestCreature.pak.", примеры из игры и примеры из различных модов.




пример 2 То же самое, но используем новую импортированную модель.
(например модель из героев7)

Пройдите полный процесс добавления модели, описанный в руководстве по импорту модели, скелета и анимации.
Пройдите процесс описанный выше, в примере 1.
Всё готово.


пример 3 То же самое, но используем "перекрашенную" модель, созданную на основе модели из героев 5.

Описанное в примере 3 имеет смысл только если вы хотите заменить, например, крестьян перекрашенными латниками,
или создать NCF существо из перекрашенных латников.
Если вы хотите просто перекрасить латников и оставить их на своём месте,
то оптимальней конечно просто найти и перекрасить их текстуру.



Пройдите процесс описанный выше, в примере 1, замените желаемое существо тестовым визуалом (крестьянин в жёлтой рубахе),
либо создайте с этим визуалом NCF существо.



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


Чтобы создать перекрашенную версию существа из оригинальной игры
вам нужно найти в архиве оригинальной игры "data.pak" три группы файлов.
1 xdb файлы модели и скелета.
2 dds файлы текстур.
3 xdb файл анимсета и xdb файлы анимаций.


Понять где лежат какие файлы можно через редактор карт.
Откройте карту, поставьте существо на карту, выделите его.
В меню сбоку, нажмите на графу "Shared", затем нажмите на кнопку с тремя точками.


Откроется новое окно.
В левой половине окна вы видите, как располагается в структуре папкой
файл "AdvMapMonsterShared" (шейдер глобальной карты) выбранного существа.
В правой половине окна вы видите содержимое файла "AdvMapMonsterShared".
Через содержимое этого файла можно найти пути модели и текстур, анимсета и анимаций.
Строчка "AnimSet" ссылается на xdb файл анимсета, содержащий, в свою очередь ссылки на файлы анимаций.
Строчка "Model" ссылается на xdb файл модели, содержащий ссылки на файлы геометрии скелета и материалов.
Файлы материалов, в свою очередь ссылаются на файлы текстур.
Файлы, которые указанны в этих строчках можно просматривать, выделив строчку и нажав на кнопку с тремя точками.


Важно: про lod
В (AdvMapMonsterShared) часто указана низкополигональная (угловатая) версия модели для глобальной карты т.е. lod.
Вам, для заготовки вашего мода нужна более высокополигональная модель,
чаще всего вы можете просто открыть ссылку на модель и выбрать в левом меню высокополигональную модель,
которая находится в той же папке, но если вам не повезло высокоплигональная модель может находится, где угодно и её придётся искать.




Перемещаясь внутри редактора по структуре файлов вашего существа, найдите и запомните путь к:
1 xdb файлам геометрии и скелета.
Важно: Если у существа нет xdb файлов геометрии и скелета.
Иногда разработчики вшивают файлы геометрии и скелета внутрь xdb файла модели.
Тогда нужно запомнить путь к xdb файлу модели.

2 dds файлам текстур.
3 xdb анимсета и xdb файлам анимаций.
Теперь найдите эти файлы в архиве "data.pak" и скопируйте их.



Теперь окончательно формируем болванку вашего мода-перекраски.
1 Переименуйте xdb файлы модели и скелета в "creature-Geom.xdb" и "creature-Skel.xdb" соотвественно.
Закиньте их в архив заготовки мода в папку с вашим сущестовом.
Важно: Если у существа не было xdb файлов геометрии и скелета.
Нужно скопировать xdb файл модели целиком.
Переименовать его в "creature.(Model).xdb" и закинуть в архив с заготовкой мода, в папку с вашим существом.

Важный нюанс, в таком случае вам необходимо изменить в этом файле старые пути к материалу на новые
href="material/material1.(Material).xdb#xpointer(/Material)".


2 Переименуйте dds файлы в "texture1.(Texture).dds", "texture2.(Texture).dds" и т.д.
Закиньте их в в архив заготовки мода в папку с вашим сущестовом, в подпапку "material".
Важно: Если у вашей модели больше одной текстуры.
Всё просто. открываем файл creature.(Model).xdb лежащий в папке с вашим сущестовом.
Правим ссылки на материалы. Чтобы правильные материалы отображались в правильном порядке.

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


3 В архиве с заготовкой мода, в папке с вашим существом, удалите всё из подпапки "animset", чтобы не создавать путаницы и конфликтов.
Переименуйте ваш файл анимсета в "creature.(AnimSet).xdb", отредактируйте этот файл, так чтобы пути на анимации ссылались в локальную папку.
т.е.
например вместо
href="/_(BasicSkelAnim)/Creatures/Haven/Angel/idle00.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"
должно быть
href="idle00.(BasicSkelAnim).xdb#xpointer(/BasicSkelAnim)"
Соберите файлы анимаций, переименовывать их не нужно.
Закиньте переименованный анимсет и файлы анимации, в архив заготовки мода, в папку с вашим сущестовом, в подпапку "animset".


В общих чертах всё, готово, теперь у вас есть готовая болванка существа, отделённая от оригинала.

Вам только нужно взять и перекрасить её.
Для этого, редактируйте файлы "texture1.(Texture).dds", "texture2.(Texture).dds" и т.д.
которые вы положили в подпапке "material", в папку с вашим существом, в архиве заготовки мода.

Редактировать .dds можно через Adobe Photoshop с установленным dds плагином.

Вот, более или менее оптимальные настройки для сохранения dds под HoMMV.






Важно: Как создать уникальную структуру файлов вместо тестовой "/test_fraction/test_creature/"
и почистить ваш готовый мод от лишнего тестового мусора?

Это, вроде бы и необязательный, но очень важный этап.
В принципе, если его не пройти, ваш мод всё равно будет работать, но между двумя такими модами будет конфликт.

Чтобы конфликта не было и просто чтобы всё было аккуратно и красиво:

1 Измените название архива "Z_TestCreature.pak" на что то уникальное (без кирилицы),
например, для чёрных стражников я использовал бы название "H7DarkGuard.pak".

2 Внутри вашего архива измените название папок "/test_fraction/test_creature/" на "/название фракции/название существа/"
опять же, на примере чёрных стражей "/neutral/H7DarkGuard/".

3 Актуализируйте путь к визуалу вашего существа в файлах заменяемого существа.
На примере латника, имеются ввиду файлы:
"GameMechanics\Creature\Creatures\Haven\Footman.xdb "
"GameMechanics\Creature\Creatures\Haven\Footman.xdb "
в них "/test_fraction/test_creature/" нужно заменить на новый путь "/neutral/H7DarkGuard/".
(Очевидно, удобней было сначала переименовать папки, а потом прописывать путь,
в данном руководстве было сделано иначе только для того, чтобы поэтапно ознакомить новичков с информацией.)


Всё, ваш мод теперь ни с чем не конфликтует и его можно смело публиковать.


Пара слов про очистку архива от лишних файлов.
Внутри архива, из папки с вашим существом (бывшая "/test_fraction/test_creature/") вы можете:
Удалить файл "Cameras/Interface/HireCreatures/Peasant.xdb".
(это отредактированная тестовая "камера в меню просмотра" крестьянина)
удалить папку с выстрелом "shot", если ваше существо не лучник.
(для верности, можно удалить и путь к выстрелу "href="shot/creature_shot.(Shot).xdb#xpointer(/Shot)"
из файла "creature.(CreatureVisual).xdb")
удалить папку "effects" из папки "animset", если у вашего существа нет эффектов на анимации.
можно почистить ещё всякие мелочи, но это особо не стоит времени,
основные потенциально лишние файлы, что будут бросаться в глаза я только что обозначил выше.



Очень советую прочитать пункт ниже если вы "бывалый" модостроитель.
Если вы новичок, который интересуется тем, как всё устроено, вам это тоже может быть интересно.
Почему стоит пользоваться структурой которую я предлагаю а не структурой "как в оригинальной игре"?

Простой пример.
В структуре которую я предлагаю основные файлы существа располагаются вот так.
Монстр шейдер
"new_creatures\test_fraction\test_creature\creature .(AdvMapMonsterShared).xdb"
Визуал существа
"new_creatures\test_fraction\test_creature\creature .(CreatureVisual).xdb"
Модель
"new_creatures\test_fraction\test_creature\creature .(Model).xdb"
Материал
"new_creatures\test_fraction\test_creature\material \material1.(Material).xdb"
Текстура
"new_creatures\test_fraction\test_creature\material \texture1.(Texture).xdb"
Анимсет
"new_creatures\test_fraction\test_creature\animset\ creature.(AnimSet).xdb"
Одна из анимаций
"new_creatures\test_fraction\test_creature\animset\ idle00.xdb"
Как видите, путь везде примерно один и тот же,
все важные файлы, по возможности сгрупированы внутри одной папки.
Эту структуру можно использовать из раза в раз, она максимально универсальна,
нужно всего лишь скопировать и переименовать папку "test_creature" и у вас есть полноценная заготовка для нового существа.


Для сравнения вот так выглядит расположение файлов крестьянина в оригинальной игре.
Монстр шейдер
"/MapObjects/Haven/Peasant.(AdvMapMonsterShared).xdb#xpointer(/AdvMapMonsterShared)"
Визуал существа
"/GameMechanics/CreatureVisual/Creatures/Haven/Peasant.xdb#xpointer(/CreatureVisual)"
Модель
"_(Model)\Creatures\Haven\Peasant.(Model)"
Материал
"_(Material)\auto-imported\Grass\Stuff\Log\auto-imported\Creatures\Haven\Peasant\Peasant_lambert.( Material)"
Текстура
"Textures\auto-imported_______320\dev\Test\TMPcharacters\Peasant\ Peasant.tga"
Анимсет
"_(AnimSet)\Creatures\Haven\Peasant-arena.(AnimSet)"
Одна из анимаций
"_(BasicSkelAnim)\Creatures\Haven\Peasant\idle00.(B asicSkelAnim)"
Такое расположение файлов совсем не универсально и может очень-очень сильно отличаться от существа к существу.
Найти исходные файлы без редактора, часто бывает в принципе невозможно, ведь совершенно не очевидно что текстуру существа
нужно искать где-то по пути "auto-imported_______320\dev\Test\TMPcharacters".
Как видите разброс достаточно большой и чтобы собрать все эти исходные файлы нужно изрядно побегать по папкам.
В этом конкретном случае придётся для начала уже семь раз "копировать\вставить\переименовать" файлы
плюс, добавляем ещё 5-8 из за анимаций анимаций, (которые тоже придётся переименовывать), плюс каждый материал и текстуру,
короче это много лишней нудной и не нужной работы.

В то время как, со сгрупированой структурой, которую я предлагаю, все исходные файлы будут готовы в одно "копировать\вставить\переименовать",
в крайнем случае два "переименовать" (если вы создаёте фракцию, которой у вас раньше не было).
С этой новой структурой, нужно только скопировать папку "test_creature" находящуюся по пути "new_creatures\test_fraction\test_creature"
в путь "new_creatures\(название фракции существа латиницей)" переименовать фракцию и существо так как вам удобно.

Важный нюанс, многие скопированные файлы внутри переименованной папки "test_creature" вообще не придётся редактировать
(файлы ссылаются друг на друга внутри папки, без учёта того как эта папка называется или того где она находится).
В случае с копированием оригинальных файлов из игры пришлось бы редактировать каждый скопированный файл,
и большую часть ссылок внутри него.

Короче, сравните эти два способа и сами решите какой вам удобней.
Но моё личное мнение что копировать из раза в раз структуру "как в оригинальной игре"
(точнее не структуру, а структуры, потому что они постоянно разные)
это чистой воды мазохизм, ненужная и бессмысленная работа.

Почему в игре такой бардак в файлах?
Там жуткий бардак даже не спорьте. Вопрос, это разработчики такие плохие? Конечно нет. Ни в коем случае.
Во первых разработчики делали в первую очередь рабочую игру а не красивую и удобную структуру файлов
Во вторых игру делали сильно больше двух трёх человек и структура явно формировалась по ходу разработки,
а подгонять потом под один формат было некогда.
В третьих концепция многих элементов игры сильно изменялась (об этом можно узнать из интервью с разработчиками)
и это отложило свой отпечаток на структуру файлов.
В четвёртых и самое главное разработчики скорее всего пользовались каким-то инструментарием заточенным под работу
с такой структурой и для них общий бардак был совсем не критичен.
(т.е. имеется ввиду какой то скрипт который автоматически создавал все нужные файлы и прописывал актуальные пути)
У нас нет этих инструментов поэтому, мне кажется, нужно максимально систематизировать и облегчить процесс создания файлов "вручную".
Не вижу ни одной причины по которой стоит располагать файлы "как в оригинальной игре".
За исключением конечно тех файлов типо "GameMechanics\Creature\Creatures\Haven\Peasant.xdb " которые по некоторым причинам неудобно группировать в одну папку.
zahar0z вне форума
Ответить с цитированием