Сповіщення
Очистити все

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


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 
Інструментарій
У цій статті нам знадобиться таке програмне забезпечення:
 
X-Ray SDK 0.4
Конвертер від bardak' a xray_re-tools-10sep2008
Використання конвертера від 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 .
 
 
У самому низу цього віконця ви побачите рядок, виділений блідо-рожевим кольором. Це рядок, який містить помилку.
 
У нашому випадку це:
 
Cant 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] .
 
 
 
Вибір шейдера
Застосували новий шейдер. Тепер у лозі може з'явитися нова помилка:
 
Cant 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_542 = bump _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 ...
 
 
Поясню, що ми вставили: 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_ak73u 
\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_ kit_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_ 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 >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. 
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_ kit_dialog</actor_dialog > 
<actor_dialog>tm_wolf_dialog</actor_dialog> 
<actor_dialog>tm_wolf_reward</actor_dialog> 
</specific_character>

   
Цитата