X-Ray Converter

Материал из Modders-wiki - Библиотека знаний модмейкеров S.T.A.L.K.E.R.
Перейти к: навигация, поиск
X-Ray Converter
Описание
Разработчикbardak, loxotron, Kolmogor, NeoH, mnn, XiaNi, gr1ph00n, RedPython, abramcumner, Freack, xrNatteFrost, K.D., Charsi
Версияот 20 апреля 2017 года
ТипКонвертер
ПлатформаWindows
Форматы файлов*.ogf, *.object, *.bones, *.omf, *.skls, *.skl, *.dm, *.dds, *.tga, *.ogg, *.wav, *.thm
Ссылки
X-Ray ConverterYandex disc.png
X-Ray Converter ExtraCloud mail.ru.jpg
Дополнительное ПО
Visual C++ 2008 x86 RedistributableMicrosoft download.png
История версий

X-Ray Converter[1][2] — многофункциональная утилита, предназначенная для работы с форматами файлов X-Ray Engine и X-Ray SDK.

Порядок установки

Для работы c основным функционалом конвертера — дополнительная настройка не требуется:

  1. Скачайте по одной из доступных ссылок X-Ray Converter.
  2. Распакуйте архив с файлами конвертера в удобную для вас директорию.
  3. Для удобства использования конвертера: создайте в его директории *.bat / *.cmd-файл (записывайте ключи запуска в него).


Для работы ключей -level, -dds2tga и -ogg2wav, нужно задать путь к директории с X-Ray SDK:

  1. Скачайте по одной из доступных ссылок X-Ray Converter Extra.
  2. Распакуйте архив с дополнительными файлами в директорию конвертера.
  3. В зависимости от используемой версии X-Ray SDK, используйте соответствующий файл: fsconverter_soc.ltx, fsconverter_cs.ltx или fsconverter_cop.ltx
    Но на время работы, удаляйте из имени постфикс, чтобы было просто fsconverter.ltx
  4. Откройте файл fsconverter.ltx, и найдите строку
    $sdk_root$ = false| false| X:\
    
    Исправьте путь в ней на свой. Например:
    $sdk_root$ = false| false| D:\X-Ray_SDK_CoP\editors\
    


Для правильной работы ключа -level, нужно задать путь к директории с распакованными игровыми архивами для выбранной версии игры (билда):

  1. Откройте файл converter.ini, и найдите в нём секцию соответствующую необходимой версии игры. Например, для Зова Припяти это секция:
    [3870_config]:3456_config
    $game_data$ = X:\_builds_\CoP\gamedata\
    $game_levels$ = X:\_builds_\CoP\gamedata\levels\
    
    Исправьте пути в ней на свои. Например:
    $game_data$ = D:\S.T.A.L.K.E.R. Call of Pripyat\gamedata\
    $game_levels$ = D:\S.T.A.L.K.E.R. Call of Pripyat\gamedata\levels\
    
  2. Также, для последующей совместимости полученного уровня с используемой версией SDK, необходимо дописать в секцию дополнительную строку (пример для X-Ray SDK CoP):
    spawn_version = cop
    
    По умолчанию, если строка не указана, читается, как для X-Ray SDK SoC.

Возможности

Преобразование *.ogf в *.object
converter [-ogf] [-object] <оригинал> [-out <результат>]

Если ключ -out <результат> не задан, имя результирующего файла генерируется из исходного путём замены расширения на *.object

Замечания/проблемы:

  • для OGF v3 (сборки 1098, 1114, 1154) не восстанавливается bind pose скелета (просто потому что не предусмотрена форматом), но часто её можно (и нужно) реконструировать вручную из idle-анимации.
  • для OGF v4+ (ЧН, в том числе сборка 3120) не восстанавливаются метки в анимациях (неизвестно, как они хранятся в обновлённом *.object и на данный момент нет в публичном доступе соответствующего X-Ray SDK). Кроме того, текущий X-Ray SDK игнорирует информацию о третьей и четвёртой влияющих на вершину костях.
  • нет гарантии, что у двухсторонних поверхностей правильно определится "главная" сторона, однако на практике обычно всё хорошо.
Преобразование скелета из *.ogf в *.bones
converter [-ogf] -bones <оригинал> [-out <результат>]

Если ключ -out <результат> не задан, имя результирующего файла генерируется из исходного путём замены расширения на *.bones

Преобразование всех анимаций из *.ogf или *.omf в *.skls
converter [-ogf|-omf] -skls <оригинал> [-out <результат>]

Если ключ -out <результат> не задан, имя результирующего файла генерируется из исходного путём замены расширения на *.skls

Замечания:

  • анимация сохраняется в виде ступенчатых кривых и никакого преобразования в сплайны не производится (а надо бы).
Преобразование отдельных анимаций из *.ogf или *.omf в *.skl
converter [-ogf|-omf] -skl <имя_анимации> <оригинал> [-out <результат>]

Если ключ -out <результат> не задан, имя результирующего файла генерируется из исходного путём замены расширения на *.skl и добавления суффикса с именем анимации.

Замечания/проблемы:

  • Нельзя задать анимацию, в имени которой используются пробелы.
  • См. выше про форму задания кривых.
Преобразование *.dm в *.object
converter [-dm] [-object] <оригинал> [-out <результат>]

Если ключ -out <результат> не задан, имя результирующего файла генерируется из исходного путём замены расширения на *.object

Замечания:

  • Информация о границах масштабирования детальной модели теряется, однако можно её посмотреть с помощью ключа -info (вместо -object).
Преобразование игровых уровней в формат Level Editor
converter -level <номер_сборки>:<имя_уровня> [-out <имя_сцены>] [-mode maya|le|le2|raw] [-terrain]

Примеры:

converter -level default:l01_escape -out l01_escape -mode le
converter -level 1844:military_game -out military_game -mode le

Ключ -mode задаёт режим работы:

  • maya - декомпилировать только геометрию уровня
  • le - декомпилировать в формат LE
  • le2 - декомпилировать в формат LE (для l12_stancia_2)
  • raw - декомпилировать в формат LE (отладочный режим)

Ключ -with_lods обрабатывается в зависимости от значения -mode. Если он задан совместно с -mode maya, программа выдаст ещё и MU-модели. С остальными режимами его наличие заставляет converter разбивать LOD-текстуры, что необходимо для полной пересборки.

Ключ -terrain - в объект террейна добавляются только полигоны с текстурой террейна. Без ключа к террейну могут добавляться полигоны, близкие к объектам детейла (травы), например, бордюры.

Отладочные параметры: -dbgcfrm, -dbgmrg

Замечания/проблемы:

  • Геометрия уровней из 1098, 1114, 1154 часто содержит ошибки, на которых валится современный xrLC. По крайней мере часть из них диагностируется при декомпилировании и сохраняется в стандартном формате LE в файле $log$\converter_<имя_сцены>.err
  • Деревья из ранних сборок (1098-1154) нельзя использовать с современными шейдерами для крупной растительности. Следует использовать современные MU-модели.
  • Геометрия уровней из сборок 2215-3312 (ТЧ) не содержит ошибок вроде нулевых треугольников или потяжек текстур, однако в редких случаях они могут появиться при пересборке с помощью xrLC на этапе оптимизации. Наблюдается, например, в шахтах лифтов на l11_pripyat.
  • Геометрия уровней из сборки 3456 и выше (ЧН) наоборот, иногда содержит ошибки (с точки зрения xrLC из X-Ray SDK SoC).
  • Неправильно назначается compiler shader для собранных в режиме draft уровней.
  • Абажуры ламп, тайники -- фиксированная геометрия, то есть изменения будут видны только после полной пересборки уровня.
  • Декали (wallmark.part) восстанавливаются только в случае наличия избыточного level.wallmarks.
  • Не обрабатывается случай с пересекающимися областями звукового окружения (level.snd_env/sound_env.part). В оригинальной игре уровней с таким свойством нет.
  • У моделей детальных объектов форсируется флажок two-sided для нормальной отрисовки в LE.
  • Сетка навигации AI (level.ai/ai_map.part) некоторых уровней (например, l08_yantar) утоплена в геометрии. Вопрос о причине открыт.
Распаковка и упаковка игровых архивов
converter -unpack <архив> [-11xx|-2215|-2945|-2947ru|-2947|-xdb] [-flt <маска>]

Ключ -flt служит для извлечения файлов по маске. Примеры:

converter -unpack -xdb gamedata.db0 -flt .ogf
converter -unpack -2215 gamedata.xp0 -flt \levels\

Команда для упаковки:

converter -pack <папка> [-2947ru|-2947ww|-xdb|-xdb_ud <файл>] -out <путь>

Пример:

converter -pack gamedata -2947ru -out gamedata.db1

Заметка:

Множественное преобразование текстур из *.dds в *.tga
converter -dds2tga [-with_solid] [-with_bump]

Утилита читает все *.thm файлы в $textures$ и воссоздаёт *.tga из *.dds в $game_textures$. Уже существующие *.tga файлы не перезаписываются. Ключ -with_solid предписывает обрабатывать ещё и непрозрачные текстуры, что нужно при пересборке с -gi

Множественное преобразование звуков из *.ogg в *.wav/*.thm
converter -ogg2wav

Утилита воссоздаёт *.wav/*.thm файлы в $sounds$, используя *.ogg из $game_sounds$. Уже существующие *.wav/*.thm не перезаписываются.

Примечание

  • Первый запуск после любых изменений в настройках желательно всегда делать с ключом -ro (работа без записи на диск).
  • Владельцам видеокарт от NVIDIA! Для ускорения разбиения текстур лодов, используйте CUDA — эта версия конвертера, использует библиотеку NVIDIA Texture Tools с технологией CUDA.
    Результаты декомпиляции уровня l01_escape из ТЧ с разбиением текстуры лодов (система: Intel Core i5-4590, GTX 1060 6Gb):
    Win32-Release = 162 секунды
    Win32-Release_CUDA = 37 секунд
    x64-Release = 130 секунд
    x64-Release_CUDA = 38 секунд

Ошибки при работе

[bug] unimplemented code path at ..\xr_entity_script.cxx:294

Ошибка

Может возникнуть при использовании ключа -level.

Решение

Попробуйте временно убрать из папки с декомпилируемым уровнем файл level.spawn, и попробуйте снова.

path $game_config$ does not exist

Ошибка

По пути указанному в $game_data$ выбранного профиля файла converter.ini, не найдена папка указанная $game_config$ в fsconverter.ltx

Скорее всего, вы до этого работали с ЧН/ЗП, и вам понадобилось поработать с ТЧ, но вы забыли исправить имя папки configs на config.

Решение

Проверить наличие папки с указанными именем по указанному пути.

path $maps$ does not exist

Ошибка

По пути указанному в $game_data$ выбранного профиля файла converter.ini, не найдена папка указанная $maps$ в fsconverter.ltx

Скорее всего, в fsconverter.ltx указана старая исходная директория $server_data_root$, а не $sdk_root$. И папка levels, а не maps

Решение

Проверить наличие папки с указанными именем по указанному пути.

[bug] unexpected code path at ..\level_tools_details.cxx:83

Ошибка

По пути указанному в $game_data$ выбранного профиля файла converter.ini, не найдена папка gamedata\textures\det

Решение

Проверить наличие папки с указанными именем по указанному пути.

unspecifed output file

Ошибка

В *.bat\*.cmd файле запуска конвертера не задан необходимый ключ -out

Решение

Проверить его наличие ключа, и правильность указания

Источники