Перейти к содержимому


Информация о статье

  • Добавлено:
  • Обновлено:
  • Просмотры: 1906

 


* * * * *
0 Рейтинг

Урок по импорту/экспорту брони в Blender для Skyrim

Написано в Окт 26 2015 10:03

Вступление.
Так сложилось, что импортера/экспортера Blender для файлов Skyrim до сих пор не существует. Но есть всё же способ обмануть и «скормить» существующему nif-scripts скайримовский файл под видом фаллаутовского. То, как это «правильно» сделать в сети есть несколько, противоречащих, а самое обидное, что не полных, руководств для создания брони, оружия и т.д (нужное подчеркнуть) так что я решил внести некоторую ясность в этот вопрос. Итак начну перечисление того, что есть и чем оно нам подходит / не подходит:

1) Если воспользоватся Гуглом, то по данной тематике сразу можно наткнутся на http://skyrim.nexusmods.com/mods/3790. Гайд полезен тем, что присутствует список необходимых программ... собственно вся полезность тут и заканчивается, есть с чего начать, чем закончить, а вот главной «фишки», а именно подробного объяснения что делать со «skin partitions blocks» и какие выставлять флаги для "шейпов" брони и тела объяснения нету, а без этого игра корректно обрабатывать наш файл не может.

2) Далее, почти сразу можно найти целый видео урок по тому же самому

(кто-то даже на него уже ссылку выкладывал, так вот сначала нужно ознакомиться с материалом, прежде чем «такое» кому то рекомендовать)
Урок полезен тем, что есть ссылка на скелет и тело-базис для начала работы с нуля - http://skyrim.nexusmods.com/mods/13648 в остальном повторяет руководство 1), к тому ещё и на немецком, что конечно накладывает неудобства в понимании материала (автору на это как-бы намекают в комментариях: - Мол где Инглиш вершн? А в ответ: - Най Инглиш, фот фам приписка Доич!) Также есть начало, вроде бы даже и концовка, но что меня реально удивило, так это то, что начинается всё с одной модели, а заканчивается другой. На кой это вообще тогда? Где весь главный процесс? Нельзя людям начинать объяснять на одном, а заканчивать на другом примере. Отсюда полезность сего гайда стремится к нулю.

3) Если пойти дальше, то можно найти следующий гайд http://wiki.tesnexus..._Skyrim._Part_1
Один из самых первых, на который я наткнулся ещё прошлой зимой, попробовал воспроизвести, но увы ничего не вышло, или может степень мотивации была не такая как сейчас (например на данный момент, мне реально было интересно, ведь люди же делают, и один из способов рабочий, вот тока осталось понять\найти какой из перечисленных). Считаю полезным, по крайней мере для ознакомления, тут даже поболе, чем требуется, хотя некоторые нюансы, на которые следует обратить более пристальное внимание всё же не отображены

4)И наконец, самый полезный, на мой взгляд, урок можно найти по адресу http://tesalliance.o...itions-nifskope.
Автор учебника Hanaisse отобразил(а) все аспекты импорта\экспорта, подготовки «до», а самое главное, подготовки «после», притом есть пометки «Важно», на что действительно стоит обратить внимание и учесть уже в своих работах. Также объясняется что такое «skin partitions blocks», как их назначать в Блендере, и их роль в работе готового файла (а я считаю одним из важнейших моментов). Также есть указания какие флаги ставить в разделе «шейпов» на кожу и броню, что тоже является важной частью, на которую автор просит обратить внимание. В других пособиях этот момент проходит вскользь, что в итоге выливается в неработоспособности готового проекта.

5) И ещё вот что я нашёл
http://www.ladymoira...hp?topic=6131.0.
Урок тоже неплох, но опять же, как я и писал выше, некоторые моменты «вскользь». Хотя есть один момент, который нигде больше не присутсвовал, и который решал многие проблемы. Я ради хохмы решил ещё и комментарии глянуть, уроки большей частью похожи и было интересно что что пишут пользователи, и оказалось не зря.
Пользователь «Bananbro» расписал очень полезные приёмы, которые в итоге избавили меня неприятных моментов, которые меня ждали после экспорта обычным способом. Об этих приёмах я тут обязательно вам поведаю.

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

Перед началом работы
Сразу хочу «обрадовать», все действия мы будем проводить только в 32-х разрядной операционной среде, «счастливым» обладателям 64-х разрядных систем я ничем помочь не смогу, т.к. PyFFi (библиотека «Питона» для обработки структурированных двоичных данных), Nif-scripts и собственно сам Питон могут работать только в 32-х разрядных ОС.
А Блендеру в этом плане параллельно.

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

1) Microsoft Visual C++ 2008 SP1 Redistributable Package (x86)
http://www.microsoft...ls.aspx?id=5582)

без этого не будут работать Blender, NifSkope и PyFFI, т.к. там находятся необходимые DLL

2) Python 2.6.6
http://www.python.or...ython 2.6.6.msi

3) Blender 2.49b
http://download.blen...49b-windows.exe

4) PyFFi 2.1.11
http://sourceforge.n...32.exe/download

5) Blender Nif Scripts 2.5.9
http://sourceforge.n...ws.exe/download

6) NifScope 1.1.3
http://sourceforge.n...ws.exe/download

Даю ссылки на exe-шники, т.к. подавляющее большинство «сидит» на Вин ХР\Виста\7-ка, если ваша ОС отличается от мной указанных, то вот вам ссылка на ресурс, где можно найти всё перечисленные компоненты под другие Операционки - http://niftools.sour...et/wiki/Blender
То, как правильно устанавливать компоненты написано тут http://oblivion.nexu....com/mods/12248 (на Английском) Если кратко, то везде "Next", "Accept" и соглашатся на путь "По умолчанию", единственное, при установке PyFFi надо будет выбрать "Нет".
Устанавливать компоненты ТОЛЬКО! в указанном порядке, данная сборка была проверенна на 3-х "чистых" машинах (т.е. эти компоненты устанавливались впервые, до этого никаких ранних версий этих программ на диске не присутствовало) и работа нифскопа , блендера и импорт\экспортера гарантированна на 100%, если у вас чтото не работает, то пеняйте тока на себя.

И ещё, если у вас нету никаких уже извлечённых nif-файлов, то обязательно потребуется Fallout mod manager (FOMM) скачать можно отсюда - http://sourceforge.net/projects/fomm Необходим для извлечения nif-файлов из BSA -архивов игры.

Предварительная подготовка "рабочего места"
Как только всё установили, запускайте Нифскоп. Его необходимо настроить.
В строке меню выбираете Render -> Settings...

thumb_pre_1445852301__1.jpg

появляется окно настроек.
Во вкладке "General" в строке "Startup Version" установите значение 20.2.0.7.

thumb_pre_1445852327__2.jpg

Перейдите в следующую вкладку "Rendering",
жмите на "Auto Detect Game Paths", это позволяет автоматически найти местонахождение игровых файлов, если вы активно используете различные плагины, например позволяет автоматически подгружать текстуры, если конечно есть папка "Textures" и она при этом находится внутри папки "Data". Если всё-же пути не найдены, то их можно указать самому - жмите "add folder", затем на кнопку снизу "folder" и выбираете дирректорию.

thumb_pre_1445852343__3.jpg

После закрытия программы, настройки сохранятся.
Далее, по рекомендаци пользователя «Bananbro», находим на комьютере файл "nif_common.py". Должен находится по следущему пути: "Blender Foundation\Blender\.blender\scripts\bpymodules". Открываем его с помощью текстового редактора, ищем и заменяем следующие параметры:
"EXPORT_BONESPERPARTITION = 18" на "EXPORT_BONESPERPARTITION = 30"
и
"min_val = 4, max_val = 18" на "min_val = 4, max_val = 30"
Сохраняйте, закрывайте. Всё, мы готовы приступить к работе.
Изменения в файле "nif_common.py" нужны, потому что в эскпортируемой арматуре больше чем 18 элементов, а по умолчанию больше 18-ти установить нельзя. В результате после экспорта получается 2 разделённых «skin partitions blocks», относящихся к основному телу, на отображение в игре не влияет, а вот каждый раз переименовывать вместо 1-го два раза, всё-же напрягает, а в добавок не похож на оригинал по структуре, что тоже даёт эмоциональный осадок ( - что-то тут не так )
(вообще в стандартной игровой арматуре, которая используется в скайриме, более сотни сегментов, это не только то, что называют "скелетом", это ещё и точки крепления различного оружия, точки слежения глаз, камеры и прочие вещи, необходимые для придания реалистичности поведения персонажа и его окружения). А потому цифра "30" чисто условная величина, выбранная мной, можете любую поставить, но не более 255 и обязательно в 2х местах.

Основная часть
1. Подготовка nif-файла.
Я не буду описывать процесс извлечения необходимых файлов из архива игры, это отлично видно на видео в самом начале. Для работы я взял файлы "torso_0.nif" (собственно сама броня гильдии воров) и "femalebody_0.nif" (сетка женского тела, отсюда нам нужны будут руки).
Открываем "torso_0.nif" и меняем структуру представления с "дерева" на "список" - "View" -> "Block List" -> "Show Blocks in tree"\ "Show Blocks in list" , чтобы увидеть "NiHeader" - "Заголовок" (Его не видно в режиме "дерева", он необходим для смены версии файла, а в режиме "дерева" удобно работать т.к. сразу видно какой блок с кем связан и в какой иерархии находится, от кого зависит).

thumb_pre_1445852366__4.jpg

Как только вид сменится на список, в самом верху будет "NiHeader", жмём на него и меняем цифры напротив "User Version" и "User Version2":
напротив "User Version" с 12 на 11
напротив User Version2" с 83 на 34
Сохраняем "Save as", с каким нибудь другим именем, потому-что оригинал файла нам потом понадобится.

thumb_pre_1445852382__5.jpg
Закрывайте или жмите кнопку "Load". Открываем уже наш новый созданный файл. Я назвал его "1torso_0.nif".
В виде "дерево" раскрываем ветвь "NiNode" (Scene Root), в её составе должны быть "NiTriShape" и "NiNode" обозначающие арматуру скелета, всё остальное, например у нас это "BSLightShaderProperty" импортироватся не будет (просто не сможет, т.к. не поддерживается импортером).

thumb_pre_1445852399__6.jpg

Поэтому, что нам не нужно, необходимо удалить - ЛКМ -> Block -> Remove Branch

thumb_pre_1445852421__7.jpg

Раскрываем ещё ветвь "NiTriShape" и смотрим, чтобы ничего, кроме "NiTriShapeData" и "BSDismemberSkinInstance" там не было.

thumb_pre_1445852436__8.jpg
И вот кажется что всё, после сохранения, файл можно импортировать в Блендер... да, не спорю, после чистки и очередного сохранения файл действительно можно импортировать. Но потом вы получите очень незабываемые впечатления после нового задания «skin partitions blocks» в Блендере. При соответстующей сноровке это не долго, но во первых обязательно нужно знать как они выглядили до этого, а во вторых не пропарится и случайно всё не напутать с выделениями нужных областей (они не должны пересекатся - это основное условие работы «skin partitions blocks»). А потому спешить не стоит, оно так дольше потом выйдет.
Полученный файл у нас распознаётся как фаллаутовский, так давайте доведём дело до конца и приведём некоторые записи внутри в соответствие.

Жмём на "BSDismemberSkinInstance", смотрим, что есть у нас в "Деталях", окно снизу.
Раскрываем ветвь "Partitions" и видим там "SBP_32_BODY", "SBP_34_FOREARMS" и "SBP_38_CALVES"

thumb_pre_1445852457__9.jpg

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

thumb_pre_1445852469__10.jpg

При импорте наш импортер не понимает ни одно из перечисленных названий (естественно ,он же для фаллаута) а потому просто объединит все части в одну и назовёт "BP_TORSO". Можно даже назвать такой поступок по-своему умным, не прекратил работу а свалил всё в кучу, разбирайся сам, я бы тоже так сделал.
Чтобы наш импортер сделал всё правильно зададим ему "правильные" значения.
Нам для этого необходима таблица соответствий, как называлась "часть" в фаллауте, какой она "части" соответствует в скайриме.

thumb_pre_1445852482__11.jpg

В нашем случае:
"SBP_32_BODY" соответствует "BP_TORSO"
"SBP_34_FOREARMS" соответствует "BP_RIGHTARM"
"SBP_38_CALVES" соответствует "BP_LEFTLEG"

thumb_pre_1445852495__12.jpg

После изменений, сохраняем наш файл, теперь он на все 100% готов для импорта :)
То, что мы сейчас сделали, не является неукоснительными действиями, и новые названия по талице были взяты для того, чтобы просто не запутатся, на самом деле их можно брать любые, и сейчас объясню почему.
(добавлено 01.03.2013)
При переименовании частей надо запомнить, что:

  • Если у нас только одна часть, то достаточно название «SBP_хх» сменить на любое вида «BP_хх», (перед импортом, т.к. импортер не «понимает» названий «SBP_хх» , но отлично «видит» «BP_хх») , а после экспорта сменить «BP_хх» на старое название.
  • Если у нас несколько частей, то также названия типа «SBP_хх1», «SBP_хх2» … и т.д. можно менять на любое название вида «BP_хх», и не важно какое оно «BP_хх1» или «BP_хх2», главное каждому «SBP_хх» должен соответствовать свой уникальный «BP_хх», и естественно, после экспорта они должны быть исправлены обратно на соответствующие «SBP_хх».

Т.е. если мы работаем с 2-мя, 3-мя и более частями, то не обязательно, например, SBP_32_BODY менять именно на «BP_TORSO», можно его и «BP_HEAD» назвать, а «SBP_34_FOREARMS» на «BP_BRAIN» сменить. Но после экспорта мы должны обязательно сменить «BP_HEAD» на «SBP_32_BODY», а не на «SBP_34_FOREARMS» или «SBP_30_HEAD», а «BP_BRAIN» поменять именно на «SBP_34_FOREARMS». Иными словами совсем не важно, какие «промежуточные» названия мы будем использовать, по таблице или нет, главное чтобы название «SBP_хх» «до» было таким же, как «SBP_хх» «после».
Повторите все эпизоды для файла "femalebody_0.nif"

2. Запуск Блендера (смешаем не встряхивая)
Запускаем Блендер, в самом начале будут кубик, лампа и камера, не нужны , два раз "A" и "Del".
Импортируем полученный nif-файл "File" -> "Import" -> "Netlmmerse/Gamebryo (.nif & .kf & .egm)" и параметры импорта как на рисунке.

thumb_pre_1445852511__13.jpg

thumb_pre_1445852534__14.jpg

Спросите , почему именно такие? Да потому что вообще без разницы, какую из кнопок вы выберите 1 или 2, это одинаково бесполезно, 1 - "хвостики" будут повернуты вбок, 2 - не будут повёрнуты , а если ничего не выбрать, то будет также как если было нажато "2". Вообще 1 или 2 имее смысл использовать, когда ипортируешь чисто "скелет" с последующей целью использовать его для позирования или анимации, если нужна чисто привязка к арматуре, с сохранением весовых коэффициентов, то лучше вообще ничего не выбирать, что собственно я и сделал.
Жмём "ОК" и ждём несколько секунд\минут (зависит от мощьности компьютера) и после появления на экране нашей брони делаем следуюшее: жмём на крестик внизу (показано стрелкой) это мы удаляем модификаторы ("привет" от максовского экспортера) и переназначаем привязку к "скелету" - сначала "Alt+P" -> "Clear Parent" (это мы убрали нашу "сетку" из "дочерних"), затем выделяем сначала броню, затем с зажатым "Shift" арматуру и жмём "Ctrl+P" -> "Armature" -> "Don`t Create Groups" (это мы снова "привязали" нашу сетку к "скелету").

thumb_pre_1445852549__15.jpg

thumb_pre_1445852566__16.jpg
(добавлено 26.02.2013) А можно скелет вообще не переназначать, просто удалите модификаторы, как на первом рисунке сверху (там где красная стрелка), этого вполне достаточно. Просто знайте, что есть такие команды - "Alt+P"- "Отцепить сетку" и "Ctrl+P" - "Прицепить сетку", бывает нужно что-то "прицепить" или "отцепить" от "скелета", т.к. при экспорте, если выделен "скелет", то вместе с ним экспортируются все прикрепленные к нему "меши", что потом вызывает путаницу при "доводке" в нифскопе.
Во всех уроках, до этого, рекомендовалось арматуру удалять и импортировать снова, с какими-то там новыми параметрами, уверяю вас это всё лишнее, раньше, во времена "бородатых" блендеров иногда при импорте привязка не сохранялась или сохранялась, но не полностью и тогда проводили такие процедуры, сейчас это делать вообще не стоит, времена изменились, импортер наш корректно отрабатывает все инструкции, а потому лишних "движений" делать не надо.
Тоже самое проделайте и с файлом "femalebody_0.nif". Только вот сетку тела надо будет переназначить на "арматуру", с которой связана наша броня - выделяете сетку тела, затем с зажатым "Shift" арматуру и жмём "Ctrl+P" -> "Armature" -> "Don`t Create Groups", после нового назначения старую арматуру можно удалить, т.к. уже больше не понадобится.
Чтобы ничего не напутать размещайте различные сетки в разных слоях, тут их более чем достаточно, целых 20. Перемещение производится клавишей "M".

Перед началом преобразований сеток, к ним нужно добавить материал и текстуры т.к. без них после экспорта в Нифскопе иcправить положение уже не удастся, делается это следующим образом:
Жмём кнопку "F5" переходим в меню "Shading". Под надписью "Link to Object" нажимаете на кнопку "Add New", появляется куча настроек (не трогаем ничего) в колонке "Texture" жмём на кнопку "Add New".

thumb_pre_1445852592__17.jpg

thumb_pre_1445852606__18.jpg

После появятся 3 вкладки. зайдите в "Map Input" и переключите с "Orco" на "UV", после перейдите в "Texture buttons" (показанно стрелкой) или нажмите "F6", под надписью "Texture Type" c помощью стрелки выбирите тип "Image", появятся ещё настройки, в самом конце будет колонка "Image", жмите на кнопку "Load". Тут главное добавить любые текстуры, и показать нашему экспортеру, что имеет место быть такой тип данных.

thumb_pre_1445852619__19.jpg

thumb_pre_1445852636__20.jpg

thumb_pre_1445852648__21.jpg

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

thumb_pre_1445852663__22.jpg
Важно: если ваши действия отличаются от мной тут представленных, а я всего лишь удалил "лишнее" и 2 "сетки" "привязал" на 1 арматуру, т.е. я не добавлял новых вершин, то следует заново переназначить текстуры и сделать "развесовку".

Теперь всё сгоняем в один слой, выделяем - два раза на кнопку "A", далее "File" -> "Export" -> "Netlmmerse/Gamebryo (.nif & .kf & .egm)" и параметры импорта как на рисунке

thumb_pre_1445852716__23.jpg

thumb_pre_1445852736__24.jpg

Помните, мы редактировали файл "nif_common.py" и меняли параметр с 18 на 30? Вот результат наших вмешательств, показан стрелкой, также в рамочку выделены кнопки, которые нужно обязательно нажать, с остальными можете поиграться :) мож чего нового найдёте.

3. "Допиливаем" в Нифскопе
Открываем получившийся новый nif-файл. Раскрываем все ветви "NiTriShape", в них ничего не должно быть кроме "NiTriShapeData" и "BSDismemberSkinInstance", всё , что личшее (подчеркнул) удаляем: ЛКМ -> Block -> Remove Branch. Тут же меняем версию файла - переходим в режим "список" и меняем цифры напротив "User Version" и "User Version2":
напротив "User Version" с 11 на 12
напротив User Version2" с 34 на 83
Делаем почти то же что и вначале, только наоборот.

thumb_pre_1445852752__25.jpg

thumb_pre_1445863992__bebb4d23503cef499b

Сохраняем, снова загружаем полученный файл. Открываем оригиналы наших файлов и копируем свойства шейдеров "BSLightShaderProperty" с оригинала ЛКМ -> Block -> Copy Branch , переходим на наш проект. вставляем ЛКМ -> Block -> Paste Branch. Вставленные свойства будут в самом низу, необходимо поместить их на место, первыми мы копировали свойства кожи, поэтому выбираем соответствующий "Шейп" и в "Деталях" внизу , показанно стрелкой, записываем порядковый номер наших свойств, в данном случае получилось 43, может отличатся. Тоже самое делаем и для брони, копируем свойства с оригинала.

thumb_pre_1445852773__27.jpg

thumb_pre_1445852791__28.jpg
Если всё сделано правильно, то "BSLightShaderProperty" переместится в "ветвь" "NiTriShape".
Выделяем их, раскрываем, находим "BSDismemberSkinInstance", и в "Деталях" каждой меняем названия частей:
"BP_TORSO" на "SBP_32_BODY"
"BP_RIGHTARM" на "SBP_34_FOREARMS"
"BP_LEFTLEG" на "SBP_38_CALVES"

thumb_pre_1445852809__29.jpg

После остаётся подкорректировать данные для "NiTriShapeData". Для участка кожи рук и для брони они разные: для кожи "BS Num UV Sets" = 1 для брони "BS Num UV Sets" = 4097 (подробности на рисунке ниже)

thumb_pre_1445852826__30.jpg

Всё, можно сохранять и пробовать в игре.

(добавлено 26.02.2013) Тут мне "любезно" подсказывают... а собственно где файл вида ХХ_1.nif ?
Да, действительно, я его не делал. Было много раз проверенно, работает и без него, всё дело в том, что персонаж у нас не будет обременён лишним весом, а телосложения он будет атлетического.
Если вас всё же такое положение не устраивает и хотите, чтобы утраченная полнота вернулась, то да, нужно добавить файл ХХ_1.nif.
Есть 2 пути:
1) Проделать всё тоже самое, что мы делали до этого, чтобы получить ХХ_0.nif - т.е. извлечь из архива БСА файлы с префиксом "1", изменить их для импорта в блендер, изменить внутри самого блендера, экспортировать изменённую сетку, изменить обратно для работы в игре.

2) Открыть сохраненный проект блендер, до экспорта брони, и попробовать угадать, как могла-бы выглядеь броня, если бы была одета на полное тело. Используйте для этого клавиши "S" - пропроциональное изменение и "Alt+S".- сжимание
Какой путь выбрать, решать вам.

Если будут присутствовать оба вида файла ХХ_1 и ХХ_0, то персонаж будет выглядеть согласно выбранному, в самом начале игры, телосложению.

Кому урок оказался полезен, то был рад помочь. Могут возникнуть вопросы, пожалуйста, задавайте. Обязательно отвечу.


Доп. Разными словами называю одно и тоже:
1) "меш" = "сетка"
2) "скелет" - частный пример "арматуры"