Анатомия игры: обратный инжиниринг на службе мододелов или как замодить игру на примере Elden Ring и не только. Часть 2

Анатомия игры: обратный инжиниринг на службе мододелов или как замодить игру на примере Elden Ring и не только. Часть 2
Мод, заменяющий модельку Волка из Sekiro на драконида-альбиноса. Мой

Продолжаем тему фанатских модификаций игр. В прошлый раз мы познакомились с понятием «моды», рассмотрели их классификацию и попробовали самостоятельно сделать мод-перекраску для TES V: Skyrim и игр Souls-серии.

Сегодня на очереди моды-реплейсеры или замена моделей внутри игры на альтернативные.

Примечание:

Пост рассчитан на тех, кто еще только знакомится с тонкостями 3D-моделирования и игровой инженерии, и в некоторых случаях понятия подаются несколько утрировано для понимания сути процесса.

В тексте будет много упоминаний программ, сайтов и сервисов, а также игр и разработчиков игр. Не сочтите это за рекламу.

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

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

▎Делаем реплейсер модели

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

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

Дело в том, что в игре все живые существа, а так же нежить и призраки, поделены на расы. Но не в привычном смысле (раса нордов, имперцев, аргониан, каджитов, данмеров и т.п.), а в сугубо геймдизайнерском. 


Каждая из этих папок содержит свой скелет для анимаций.

Каждая раса в игре имеет свой скелет (свой риг) и собственный набор анимаций. Раса драконов, раса оленей, раса грязекрабов, раса хорхеров и так далее. А вот разные внутриигровые расы людей, как ни странно, делят один скелет между собой, только с разными настройками. Скелет аргониан и каджитов же отличается от людского только дополнительными костями для хвоста. 


   Скелет для человекоподобных моделей.

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

Примечание
При большом желании и наплыве креатива можно натянуть на базовые скайримские скелеты практически что угодно. Яркий пример — Mikhail’s Monster mods, добавляющий множество весьма экстравагантных существ в игру. Ну либо можно ухитриться и, немного поиграв с пропорциями, адаптировать модельку из другой игры.

               

               

Драконы из Dark Souls PDTE, которых я (не без помощи более опытных людей) адаптировала под скелеты скайримских драконов. Если с рукокрылой красной виверной особых проблем не возникло, хотя и пришлось изменить длину шеи и хвоста и исправить размер головы и крыльев, то с четырехлапым Каламитом пришлось повозиться. В конце концов, было решено просто поджать передние лапы, оставив их без движения. 

               
                     Иначе получилось бы криво, как здесь.

В прошлый раз мы использовали вот такой набор тулов:

  • BSA extractor — для распаковки архива Textures.bsa
  • DDS-plugin для Adobe photoshop CS5-6
  • Irfranview с плагином DDS — для чтения, просмотра и экспорта dds-текстур. Это не обязательная программа.

Набор инструментов для модов-реплейсеров моделей в Скайрим пополняется следующими:

  • Nifskope — программа просмотра (viewer) моделей в nif-формате. Без неё нам никак не обойтись, если мы хотим настроить нашу замену правильно. 
  • Nif importer — плагин импорта моделей nif в 3ds max. Аналогичный можно найти и для блендер, но я с ним, честно, не работала. 
  • Навыки работы в 3D-редакторе (желательно). 
  • Модель для переноса с текстурами (ради теста можно взять любую модель из самого скайрима или её измененную версию). 

Идем внутрь папки Data в директорию Meshes и ищем там нужную папку с заменяемой моделью. Допустим, Эбонитовая катана лежит по пути Skyrim\Data\meshes\weapons\ebonyblade. Мы можем открыть его напрямую в 3Ds max с помощью Nif importer plugin, после установки которого импорт ниф-моделей будет доступен непосредственно с кнопки File — Import.

Либо открыть его с помощью Nifskope и импортировать оттуда в OBJ-формат, читаемый почти любой 3d-программой:


Если правильно настроить внутри программы пути до текстур, то в окне просмотра вы увидите полностью окрашенную модель. Правда, некоторые блестящие части будут отличаться от вида внутри игры. Чтобы экспортировать модель, необходимо выбрать в списке слева NiTriShapedata, иначе модель может экспортироваться не полностью.

Если вы хотите сделать просто переделку оригинальной модели, то измените ее по своему вкусу и переходите к следующей стадии. Если модель для переноса не из самой игры, то ее необходимо подготовить. Для этого в любом удобном для вас 3D-редакторе совместите оригинальную модель, которую вы хотите заменить, и её замену. Подгоните по масштабу с помощью инструментов gizmo (пространственной деформации) и постарайтесь сделать так, чтобы главные части были в соответствующих местах. 


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

Примечание
Обратите внимание, что некоторые модели оружия и доспехов имеют два-три варианта. Первый (иногда помечены префиксом gnd) — модель отображения в инвентаре и мире, для доспехов — сложенный или упакованный вариант. Второй с префиксом 1stperson — вид от первого лица, более детализированное оружие и рукава с отрезанным торсом для доспехов. Третий — вариант при виде от третьего лица на персонаже — полный доспех и оружие с ножнами.

Рукоятки мечей и всего остального должны совпадать как можно больше. То же справедливо и для длины лезвия. Натягивать цвайхандер на меч-одноручник не стоит, это будет мешать регистрации попаданий по врагу. 

Аналогично с суставами при замене животных и доспехов: 


Интересный факт — поворот модели в самой игре может отличаться от установленного в редакторе. Это связано с некоторыми настройками модели в самом 3Ds max и особенностях Nif-формата.

С доспехами для гуманоидных рас больше всего возни. Здесь мало учитывать только расположение костей и суставов между ними — доспехи в игре при надевании заменяют часть «кожи» базовой модели, поэтому неправильно подогнанные рукава, например, могут оставить кисти висеть в воздухе. Это можно исправить, но все же стоит держать сей факт в голове. Кроме того, в игре есть модификации тела, реализованные в виде ползунка между «худой» и «ширококостной» версиями тела, так что каждые доспехи нужно будет сделать в двух вариантах. Лучшим решением будет просто «раздуть» одну из версий доспехов с сохранением пропорций. 

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


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

После подгона по оригиналу сохраните куда-нибудь эту модель, чтобы не потерять ее. Время идет, но стабильности при работе с инородными моделями в 3Ds max оно не добавляет.
Теперь нам понадобится загрузить оригинальную модель и скелет, если мы заменяем не статичную, а анимированную модель. 


Для скелета настройки импорта выглядят так. Для меша галочку с этого пункта снимаем.

Далее импортируем оригинал, сняв галочку с пункта «Import skeleton». Тогда игровая модель как бы натягивается на этот скелет:


Имена костей в Скайриме очень сильно отличаются от оригинала, так что использовать сторонний риг не получится. Да и в принципе использовать уже отригованную модель для переноса нерентабельно. Все равно скелет придется удалить.

         
В лучшем случае при попытке использовать готовый риг вы увидите нечто подобное.

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

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

Примечание
Функционал 3DS max позволяет назначить автоматический риггинг по костям скелета или даже спроецировать влияние костей с одной модели на другую при наличии общего скелета. Однако с моделями из Скайрима это не работает, т.к. несколько осей координат имеют нестандартное значение, и плагин импорта не может прочитать их корректно. Так, при попытке назначить авто-риггинг и включив отображение зон влияния в виде капсул, вы увидите, что большая их часть смещена и повернута вправо относительно основной вертикальной оси. Поэтому вам все же придется потратить время на ручной риггинг.

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

Здесь есть два варианта развития событий — ленивый и не очень ленивый.
Первый подразумевает copy/paste ветки NiTriShapeData в оригинальную модель с последующим удалением. Такой метод сохраняет коллизии (физику столкновения) и экономит несколько минут работы.

Во втором случае открываем два Nifskope (благо программа поддерживает работу нескольких своих копий одновременно) и в списке слева ищем выпадающий список NiTriShape/NiTriShapeData/BSLightningShaderProperty/BSShaderTextureSet.


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

Самостоятельно во всех флагах и настройках вы будете разбираться долго, и далеко не все из них работают в Скайриме, поэтому просто копируйте пункты ShaderFlag из оригинала на реплейсер в разделе BSLightingShaderProperty. В разделе BSShaderTextureSet укажите путь к текстурам. 

Первый пункт — текстура цвета. Второй — карта нормалей. Пятый — карта environment, имитирующая отражения и металлический блеск. Шестая — карта наложения отражения, используется редко.


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


Если есть косяки с поворотами, как тут, необязательно лезть обратно в 3DS max. В Nifskope можно ткнуть на NiTriShape правой кнопкой мыши и выбрать Transform. Так вы сможете вращать и сдвигать модель относительно центра сетки координат.


Так-то лучше

▎Замена соуса на подливку

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

Для моддинга Dark Souls 2-3, Sekiro и Elden Ring вам понадобятся в обязательном порядке:

  • UXM editor — для распаковки файлов игры самого верхнего уровня (BDT) и запаковки их модифицированных версий обратно. 
  • Yabber — для распаковки и запаковки текстур в TPF и моделей с TPF-тестурами в DCX — архивы второго уровня.
  • Bindertool версии 0.5 для DS2 и версии 0.6 и выше для DS3, Sekiro и ER. Он понадобится для извлечения содержимого TPF-архивов — файлов с текстурами. В принципе, он может служить и распаковщиком основных архивов верхнего уровня (в корневой папке игры), но запаковать обратно не сможет, как и все прочие архивы. Искать на Github.
  • ModEngine (Elden Ring mod loader) — специальный плагин для загрузки модов в виде DLL библиотеки, свой для каждой из игр фромов. Необходим для загрузки модов без перезапаковки всех 30 с гаком гигабайт игры. Можно найти, как и UXM, на Nexusmods.
  • Файл с расшифровкой номеров архивов с форумов по распаковке соулс-игр или очень много свободного времени.

Чтобы провернуть замену модельки в Dark Souls 3, Sekiro и, если повезет, Elden Ring, сверх уже упомянутых распаковщиков нам понадобятся:

  • 3DS max или любой другой 3D-редактор, поддерживающий экспорт FBX с ригом
  • FLVER import plugin для 3ds max (или аналогичный инструмент для Blender, но его я не пробовала)
  • FLVER editor — для настройки модели

Ищем нужную модельку в файлах, убеждаемся, что это она, открыв ее в 3ds max или блендере.
Находим ей замену — как и в случае со Скайримом, это может быть просто другая модель из той же игры, либо совершенно новый объект.


Импорт-скрипт модели из Dark souls в 3Ds max требует импорта скелета. Можно использовать базовый скелет персонажа из папки Parts. Потом его можно удалить, оставив только кость меча с номером.

Найдя необходимое, производим действия, аналогичные подготовке модели в Скайриме: импортируем распакованный оригинальный предмет/одежду/оружие/врага, импортируем замену и подгоняем под оригинальные масштабы. 

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

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

Далее нашу модель нужно отриговать. Можно использовать скелет из самой игры или любой базовый скелет вашего редактора, более-менее подходящий по количеству костей. В самой игре помимо основного скелета (руки, ноги, позвоночник, голова) есть отдельный набор костей для одежды, волос, прикрепления оружия и физики. Но учитывать все их сложно, поэтому стоит сосредоточиться только на основном скелете. Все нависающие части, наподобие пол одежды, длинных волос, юбок, хвостов и крыльев, стоит прикреплять к базовым костям независимо от их длины — волосы к голове, хвост к тазу и т.п. В противном случае в некоторых местах ваша модель будет сильно ломаться. Как только вы закончили с ригом, сохраните вашу модель в FBX-формате.


В режиме Skin (настройки влияния костей) красным обозначено 100% влияние. Не забудьте потом проверить назначение текстур на меш!

Далее идет еще более муторная часть, чем создание рига. Вам предстоит открыть FLVER Editor, открыть в нем модель, которую хотите заменить, и модель-замену.
 

Для открытия можно просто перетащить модельку для редактирования на исполняемый файл MySFformat.exe

Нажимайте смело кнопку Import Model, чтобы загрузить свою новую игрушку. На всех всплывающих окнах, кроме запроса на создание LOD, нажимайте OK.
Жмите на Mesh, чтобы открыть окно редактирования меша. 

Кстати, простейшие изменения в оружии, как, например, шипы, можно сделать прямо в FLVER editor. Для этого правой кнопкой жмем на вершины (углы полигонов на модели), затем Transform и в окне с координатами меняем значения, не забывая жать на Modify.


Снимите галочку с верхнего пункта в списке Chosen, чтобы оставить пока неизменной оригинальную модель (справа выделено красным). Включайте галочками режимы вращения, перемещения и масштабирования справа. По окончании масштабирования верните галочку Chosen на основу, а также поставьте птичку на строчку основы в списке Delete. Снова нажмите Modify.

Скорее всего, замена будет отличаться по размеру и ориентации в пространстве, так что придется пошаманить со значениями в разделе Translations и Rot (переместить и повернуть соответственно). 

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

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


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


Замена посоха Изалита

После настройки положения модели необходимо заняться текстурами. Так же, как и в случае с ретекстуром, сохраните их в DDS-формате и запакуйте в TPF-архив. 
В том же FLVER Editor пропишите путь до ваших текстур на модели.


Если вы заранее позаботились о подготовке и переносе в конечную папку текстур, то беспокоиться не о чем — программа сама подхватит карты и прикрепит их к модели. Если же нет, то ищите пропуски в путях (обычно выглядят как пустые кавычки «») и вводите путь до текстуры.

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

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


Теперь можно и к боссу по десятому кругу!

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

  1. Распаковать игровые архивы
  2. Найти нужный файл для замены (текстуру и модель)
  3. Подогнать под ее пропорции новую модель
  4. Сделать риггинг и скиннинг (задать влияние костей от оригинала)
  5. Сохранить модель в формате игры
  6. Сохранить в нужном формате и цветности текстуры новой модели
  7. Заменить измененным файлом оригинал
  8. Запаковать файлы игры обратно в строго соответствии с уровнями архивации

Как и в случае ретекстура, очень важно найти правильные и безопасные инструменты. Кроме того, создание реплейсера модели потребует от вас куда больших сил и умений. Вам придется работать с 3D-редакторами для перенастройки влияния костей, а также строго соблюдать правила риггинга, включая иерархию костей, имена костей и порядок назначения веса от младшей кости к старшей. Однако для начинающего игродела этот опыт будет весьма полезен.

Итого

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



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

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

Всего хорошего и не болейте!

 

Источник

Читайте также