Конвертация НПС из ЧН/ЗП в ТЧ — S.T.A.L.K.E.R. Inside Wiki

Конвертация НПС из ЧН/ЗП в ТЧ

Материал из S.T.A.L.K.E.R. Inside Wiki

Версия от 20:04, 11 марта 2018; Quadratic13 (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Инструментарий

В данной статье нам понадобится следующее программное обеспечение:

Использование конвертера от bardak'a

Как мы уже знаем, Actor Editor из пакета SDK 0.4 не открывает динамические игровые модели формата *.ogf. Он воспринимает только формат редактора - *.object. Но такого формата в игре нет, потому мы и воспользуемся конвертером от bardak'a.

Открываем папку с конвертером. Оттуда нам нужен только converter. Работа с ним элементарна.

Если у вас есть распакованные архивы для ЧН или ЗП - то скопируйте оттуда любую модель НПС (лучше ту, которой нет в ТЧ, а то вся работа пойдет даром:)). Модели НПС находятся по адресу:

gamedata\meshes\actors\...

Для примера, я взял модель сталкера группировки "Чистое небо" в противогазе. Она находилась по адресу:

gamedata\meshes\actors\stalker_nebo\stalker_nebo_2.ogf

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

converter -ogf -object <имя_модели.ogf>

Почему именно так а не иначе, смотрим в папке docs в корне конвертера. В моем случае я писал:

converter -ogf -object stalker_nebo_2.ogf
pause

Теперь в блокноте жмем Файл>Сохранить как... В строке Тип файла ставим значение "Все файлы (*.*)", а в строке Имя файла пишем "ваше_имя_файла.bat". Кодировка не важна. В окне выбора директории выбираем корневой каталог нашего конвертера и жмем "Сохранить". Я выбрал название:

model.bat

Теперь мы видим, что появился новый файл ваше_имя_файла.bat. Нажимаем на него. При выполнении всего вышеописанного у вас должен создаться файл имя_модели.object. Это наш сконвертированный НПС. Работа с конвертером закончена.

Настройка модели в Actor Editor'e

Копируем полученный в конвертере файл имя_модели.object в папку:

$sdk_root\level_editor\rawdata\objects\editor, где $sdk_root - путь к вашему SDK.

Например у меня это:

E:\Program Files\X-Ray SDK\level_editor\rawdata\objects\editor

Открываем Actor Editor из пакета SDK. Далее жмем File>Load... в правом верхнем углу интерфейса. Выбираем $sdk_root\level_editor\rawdata\objects\editor\имя_модели.object

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

В самом низу этого окошка вы увидите строку, выделенную бледно-розовым цветом. Это строка, содержащая ошибку.

В нашем случае это:

Can't find shader 'models\model_pn'
Модель без настроек в Actor Editor'e

Это сообщение в логе означает, что в базе шейдеров SDK нет шейдера models\model_pn, примененного к этой модели.

Это можно исправить. Идем на вкладку Surfaces справа на интерфейсе. Surface переводится дословно как внешность/поверхность.

Ищем нашу злаполучную внешность, к которой применен шейдер models\model_pn. В моем случае это была единственная внешность act_stalker_nebo_2S[1]. В ней нужно изменить шейдер на другой, приближенный к оригиналу. Жмем на троеточие[2] напротив Shader и в открывшемся окошке выбираем шейдер models\model[3]. Жмем Ok[4].

Выбор шейдера

Применили новый шейдер. Теперь в логе может появиться новая ошибка:

Can't find texture 'act\act_stalker_nebo_2'

Не трудно догадаться, что система не может найти текстуру act\act_stalker_nebo_2 в gamedat'e SDK.

Это тоже исправимо. Нужно скопировать текстуры для этой модели из текстур ЧН\ЗП, и вставть их в текстуры SDK. Если же ошибки с текстурами не возникло - наше белое пятно должно превратиться в НПС.

НПС с текстурой

Работа с анимациями

Снятие анимаций с модели

Теперь нужно выбрать вкладку Motions справа на интерфейсе. Здесь нас интересует только Motion reference. Наведите курсор на значение этого поля, и вы увидите какие сборники анимаций проигрывает данная модель. В моем случае (как и в большинстве случаев) это:

actors\stalker_animation,actors\stalker_scripts_animation,actors\stalker_smart_cover_animation,actors\stalker_scenario_animation
Список отыгрываемых анимаций

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

Делается это так: Жмем на троеточие напротив Motion reference[1]. Снимаем галочки со всех сборников анимаций[2] и жмем Ok[3]. Если же в окошке, где нужно снимать галочки, вообще нет анимаций, а просто пустое окошко, ничего страшного в этом нет. Просто в ресурсах SDK нет этих анимаций, в таком случае сразу жмем Ok.

Конвертирование сборников анимаций

Теперь пришло время вспомнить, какие сборники анимации отыгрывает модель (помнится, мы записали это в блокнотик:)). Нужно найти эти сборники. Они лежат по адресу:

Корень вашего ЧН или ЗП\gamedata\meshes\actors\...

Копируем нужные нам сборники из этой папки в корневую папку со старым добрым конвертером от bardak'a. В корне конвертера создаем текстовый документ, открываем его блокнотом и в нем пишем следующий код:

converter -omf -skls <имя_сборника_анимаций>.omf

Вместо имени сборника анимаций подставляем нужный сборник, например:

converter -omf -skls stalker_animation.omf

Сохраняем этот текст как .bat файл (как это сделать оговаривалось ранее). Запускаем батник, и через секунд 5-10 получаем рядом новый файл имя_сборника_анимаций.skls.

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

Применение сконвертированных анимаций к модели

Теперь копируем все полученные сборники анимаций в каталог

$sdk_root\level_editor\import

Можно и в любой другой, но мне кажется удобнее всего именно в этот. Далее открываем Actor Editor. Как мы видим, теперь во вкладке Motions появилось поле Edit с кнопками Append, Delete и Save. Жмем Append и выбираем все наши сборники анимаций по очереди.

Применение анимаций к модели

В итоге у меня получилось 2543 анимации во вкладке Motions (по счетчику Motion count).

Работа с костями

Справа на интерфейсе жмем Bone Parts[1], что находится на вкладке Model. В появившемся окошке жмем снизу кнопочку Reset To Default[2]. После этого действия у нас в левой верхней таблице появится множество костей. Выберите оттуда кости (это делается с помощью зажатия клавиши Ctrl):

bip01_spine     
bip01_spine1
bip01_spine2
bip01_neck
bip01_l_clavicle
bip01_l_upperarm
bip01_l_forearm
bip01_l_hand
bip01_l_finger0
bip01_l_finger01
bip01_l_finger02
bip01_l_finger1
bip01_l_finger11
bip01_l_finger12
bip01_l_finger2
bip01_l_finger21
bip01_l_finger22
bip01_r_clavicle
bip01_r_upperarm
bip01_r_forearm
bip01_r_hand
bip01_r_finger0
bip01_r_finger01
bip01_r_finger02
bip01_r_finger1
bip01_r_finger11
bip01_r_finger12
bip01_r_finger2
bip01_r_finger21
bip01_r_finger22
bip01_head

и перетащите их в правую верхную таблицу. Обзовите эту таблицу "Torso"[3]. Далее выберите кости:

eye_left
eye_right
eyelid_1
jaw_1

и перетащите их в левую нижнюю таблицу и обзовите ее "Head"[4]. Все. Жмем Ok[5].

Работа с костями

Экспорт анимаций в .omf сборник

Теперь нужно экспортировать наши анимации в наш собственный сборник. Это делается путем нажатия File>Export[1]>Export OMF...[2] в правом верхнем углу интерфейса.

Внимание! Выбирать директорию нужно тщательно, не куда попало, а именно в папку gamedata\meshes вашего SDK, потому что после экспорта полученный сборник должен находится в том же самом месте в игре, где он был и в SDK. Например, если в SDK он лежал по адресу:

$sdk_root\level_editor\gamedata\meshes\actors\nebo_animations.omf

то в игре он должен лежать по адресу

Корень ТЧ\gamedata\meshes\actors\nebo_animations.omf

В противном случае модель не сможет найти анимации и мы получим мгновенный вылет. Если определились с местом проживания сборника - жмем Сохранить.

Экспорт .omf сборника

Когда экспорт завершен, отмечаем все анимации во вкладке Motions и жмем Delete. Все анимации удалили. Теперь нужно нажать на троеточие напротив Motion reference и в окошке установить галочку напротив сборника анимаций, который мы только что создали. Теперь жмем Ok. Работа с костями закончена.

Редактирование User Data для модели

Жмем строку Object[1] справа на интерфейсе. Идем в самый низ и видим строку User Data. Жмем на троеточие[2] напротив и вставляем вместо того, что там сейчас, User Dat'у, взятую у другой модели[3]. Я например взял ее у военного спецназовца. Поэтому у меня получилось вот что:

#include "models\capture\kombez_helmet_damage_low.ltx"

Жмем Ok[4].

Изменение User Data

Позже мы разберемся с тем, на что эта конструкция влияет.

Экспорт модели в .ogf

Когда мы завершили работу с моделью, нужно сконвертировать ее в формат, понятный игре. Благо для этого в Actor Editor'e для этого есть встроенный инструментарий. Жмем File>Export>Export OGF.... Думаю скрины для этого не нужны, т.к. такую же операцию мы прпоизводили с экспортом сборника анимаций. Саму модель можно обзывать как угодно и сохранять куда угодно.

Применение модели в игре

Файл textures.ltx

Этот ход нужно выполнять только в том случае, если вы приверженец качественной игры и играете только на типе рендера "Динамическое освещение". Если же это не так - вы просто не заметите никакой разницы. Итак, начнем. Идем в директорию gamedata\textures игры и открываем любым удобным редактором файл textures.ltx. Далее нам нужно вписать текстуры, используемые моделью нашего сконвертированного НПС. Эти текстуры нужно прописать в секциях [specification] и [types], желательно в конец секции, чтобы потом было проще их искать и редактировать. Добавим наши текстуры в секцию [specification]:

...
wpn\wpn_winchester1300 = bump_mode[use:wpn\wpn_winchester1300_bump], material[2.85]
wpn\wpn_zink = bump_mode[none], material[2.85]
wpn\wpn_zink_545 = bump_mode[none], material[2.85]
wpn\wpn_zink_57 = bump_mode[none], material[2.85]
wpn\wpn_zink_9 = bump_mode[none], material[2.85]
wpn\wpn_zink_svd = bump_mode[none], material[2.85]
 ; Наши тектуры
act\act_stalker_nebo_2 = bump_mode[use:act\act_stalker_nebo_2_bump], material[0.50]
 
[types]
$bump-test = 2
$details = 0
...

Поясню, что мы вставили: act\act_stalker_nebo_2 - Имя текстуры, используемой НПС bump_mode[use:act\act_stalker_nebo_2_bump] - Это значит, что текстура использует бамп текстуру "act_stalker_nebo_2_bump" material[0.50] - Скорее всего эта строка отвечает за рельефность бамп-текстуры

Добавим наши текстуры в секцию [types]:

...
wpn\wpn_zink_svd = bump_mode[none], material[2.85]
 ; Наши тектуры
act\act_stalker_nebo_2 = bump_mode[use:act\act_stalker_nebo_2_bump], material[0.50]
 
[types]
act\act_stalker_nebo_2 = 0
act\act_stalker_nebo_2_bump = 2
$bump-test = 2
$details = 0
$shadertest = 0
$target = 0
...

Поясню, что мы вставили: act\act_stalker_nebo_2 = 0 - "0" - номер обычной текстуры act\act_stalker_nebo_2_bump = 2 - "2" - номер бамп-текстуры Если не понятно, можно эти строки вставить из файла textures.ltx от ЧН или ЗП.

Присвоение модели любому НПС

Теперь нужно дать какому-нибудь НПС из игры нашу модель. Пусть это будет волк! Открываем файл gamedata\config\gameplay\character_desc_escape.xml с помощью блокнота. Находим там практически в самом начале секцию Волка:

<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
 
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>actors\neytral\stalker_neytral_balon_1</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>

и заменяем ее на:

<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
 
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>путь, к вашей модели относительно папки meshes</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>

В моем случае я писал:

<!---------------------------------------esc_wolf----------------------------------------------------->
<specific_character id="esc_wolf" team_default = "1">
<name>esc_wolf_name</name>
<icon>ui_npc_u_stalker_neytral_balon_1</icon>
<bio>esc_wolf_bio</bio>
 
<class>esc_wolf</class>
<community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
 
<rank>434</rank>
<reputation>5</reputation>
<money min="600" max="2000" infinitive="0"/>
 
<snd_config>characters_voice\human_01\stalker\</snd_config>
<crouch_type>-1</crouch_type>
 
<visual>actors\nebo\stalker_nebo_2</visual>
<supplies>
[spawn] \n
wpn_pm \n
ammo_9x18_fmj = 1 \n
wpn_ak74u \n
ammo_5.45x39_fmj \n
device_torch \n
hand_radio \n
</supplies>
 
#include "gameplay\character_criticals_4.xml"
 
<start_dialog>escape_lager_volk_talk</start_dialog>
<start_dialog>dm_hello_dialog</start_dialog>
<actor_dialog>dm_cool_info_dialog</actor_dialog>
<actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>
<actor_dialog>tm_wolf_dialog</actor_dialog>
<actor_dialog>tm_wolf_reward</actor_dialog>
</specific_character>

Проба в игре

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

Конвертированный НПС в игре

Автор

Статья создана: Участник:Baklan

Основа взята у: eNdimiOn

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

См. страницу обсуждения

Другие места
LANGUAGE