X-Ray Converter

Материал из MODFAQ.RU — моддинг игр серии S.T.A.L.K.E.R., The Elder Scrolls и Fallout
Перейти к: навигация, поиск

X-Ray Converter

Разработчик bardak
Модифицировали Loxotron, Kolmogor, NeoH, mnn, XiaNi, gr1ph00n, RedPython, abramcumner, Freack, xrNatteFrost, K.D., Charsi
Версия от 18 октября 2017 года
Тип Конвертер
Платформа Windows: Vista/ 7/ 8/ 8.1/ 10
Форматы файлов *.ogf, *.object, *.bones, *.omf, *.skls, *.skl, *.dm, *.dds, *.tga, *.ogg, *.wav, *.thm
История версий

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

Ссылки на скачивание
X-Ray Converter https://yadi.sk/d/nivUmGybuCXSC

https://cloud.mail.ru/public/3Zab/b8VBczdZp

X-Ray Converter Extra https://yadi.sk/d/7137tI653PRnrU

https://cloud.mail.ru/public/3REa/3SEVyeS6X

Visual C++ 2015 Redistributable

x86
https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe

x64
https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe

Для использования конвертера, создайте в его корневой директории *.bat или *.cmd файл.

Дополнительная настройка

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

  1. Откройте любым текстовым редактором файл fsconverter.ltx
  2. Найдите строку:
    $sdk_root$ = false| false| X:\
    
  3. Исправьте путь в ней на свой. Например:
    $sdk_root$ = false| false| D:\X-Ray_SDK_0.7\editors\
    

Примечание

  • Для SDK 0.5 / 0.7 используйте файл fsconverter_cs-cop.ltx, переименовав его в fsconverter.ltx.
    В нём исправлена ошибка path $game_config$ does not exist


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

  1. Откройте файл любым текстовым редактором converter.ini
  2. Найдите в нём секцию соответствующую необходимой версии игры. Например, для Зова Припяти это секция:
    [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\
    
  3. Для последующей совместимости полученного уровня с используемой версией SDK, обязательно допишите в секцию параметр spawn_version.
    spawn_version = cs — для SDK 0.6
    spawn_version = cop — для SDK 0.7

Примечание

  • По умолчанию, если строка не указана, читается, как для SDK 0.4.

Возможности

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

Пример:

converter -ogf balon_01.ogf -object 

Если ключ -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).
Распаковка и упаковка игровых архивов
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

Заметка:


ВНИМАНИЕ! Для использования — требуется дополнительная настройка!

Преобразование игровых уровней в формат 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 0.4).
  • Неправильно назначается compiler shader для собранных в режиме draft уровней.
  • Абажуры ламп, тайники -- фиксированная геометрия, то есть изменения будут видны только после полной пересборки уровня.
  • Декали (wallmark.part) восстанавливаются только в случае наличия избыточного level.wallmarks.
  • Не обрабатывается случай с пересекающимися областями звукового окружения (level.snd_env/sound_env.part). В оригинальной игре уровней с таким свойством нет.
  • У моделей детальных объектов форсируется флажок two-sided для нормальной отрисовки в LE.
  • Сетка навигации AI (level.ai/ai_map.part) некоторых уровней (например, l08_yantar) утоплена в геометрии. Вопрос о причине открыт.
Множественное преобразование текстур из 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 не перезаписываются.

Установка

Распакуйте архив converter 18102017.7z в удобную для вас директорию.

Переместите файлы "Converter Extra" из архива в директорию выбранной вами версии конвертера.

Например, Win32-Release/converter

Примечание

  • Первый запуск после любых изменений в настройках желательно всегда делать с ключом -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

Ошибка

Может возникнуть при использовании ключа -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

Ошибка

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

А так-же, причиной может стать переполнение этой папки.

Решение

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

В случае переполнения, достаточно удалить, перенести, на время декомпиляции, хотя-бы одну текстуру.[3]

unspecifed output file

Ошибка

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

Решение

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

can't set scene name explicitly for multiple input levels

Ошибка

В *.bat\*.cmd файле запуска конвертера задан ключ -out, но не задано "имя сцены" (см. Преобразование игровых уровней в формат Level Editor).

Решение

Проверить чтобы после ключа было указано "имя сцены" (это имя папки или путь до неё относительно папки конвертера).

[bug] assertion failed at ..\level_tools.cxx

Ошибка

Актуальна только для старых версий конвертера.

Решение

Используйте крайнюю версию конвертера.

path $objects$ does not exist

Ошибка

По пути указанному в $objects$ файла fsconverter.ltx, не найдена указанная папка.

Решение

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

[bug] unexpected code path at ..\xr_ogf.cxx

Ошибка

Актуальна только для старых версий конвертера.

Решение

Используйте крайнюю версию конвертера.

[bug] unexpected code path at ..\xr_ini_file.cxx

Ошибка

Нарушена структура файла level.ltx декомпилируемого уровня[4][5][6].

Решение

Откройте файл любым текстовым редактором, и удалите его содержимое.

[bug] unexpected code path at ..\xr_level.cxx

Ошибка

В папке с декомпилируемым уровнем отсутствует директория meshes с файлами вида brkbl#0.ogf, прописанными в файле level.spawn уровня.

Решение

На время декомпиляции, убрать из папки уровня файл level.spawn[7]

[bug] assertion failed at ..\xr_packet.cxx:151

Ошибка

Ошибка в файле level.spawn декомпилируемого уровня.

Решение

На время декомпиляции, убрать из папки уровня файл level.spawn[8]

Источники