Автор: arbtttrn6
Суть: Достать модель из Mass Effect и преобразовать её для использования в Goldsrc для Half-Life.
Для работы используются следующие инструменты:
1)
Umodel Viewer от
Gildor - для просмотра и извлечения моделей из игры;
2)
GIMP - для правки текстур;
3)
Blender - для преобразования моделей в формат smd;
4)
Blender Source Tools - расширение для Blender для работы с qc/smd;
5) studiomdl - для сборки модели (для Half-Life подойдёт стандартный);
6)
Half-Life Asset Manager - для просмотра моделей;
7)
ImageMagick - для расширенной правки текстур.
Открыть "Umodel.exe". В появившемся окне в поле "Path to game files" указать путь до папки с игрой.
Дополнительно можно поставить галку на "Override game detection" и указать в первом нижнем поле "Unreal engine 3", а во втором "Mass Effect". Часть игры не важна.
Кликнуть "OK".

Появится окно, предлагающее выбрать пакет, который можно открыть или произвести над ним различные манипуляции с помощью кнопки "Tools". Также здесь имеется поле "Filter" для поиска.

Выбрать нужный пакет, например: "BioA_Cat002_100Intro.pcc".

Откроется окно просмотра. Для того, чтобы смотреть только модели, нужно кликнуть на пункт "Navigate" в меню окна и выбрать в нём пункт "Include meshes". Для просмотра других моделей нажимать клавиши "PgUp" и "PgDn" соответственно.

Для экспорта текущей модели, нужно нажать кнопку "Ctrl+X" или кликнуть на пункт "Tools" в меню окна программы и выбрать пункт "Export current object".

Программа может предложить указать путь, по которому будут находиться экспортированные модели (Вкладка "Export", поле "File Layout", "Export to this folder").
Также можно будет указать формат экспортируемых объектов, например: glTF 2.0 (поле "Mesh Export").

После экспорта в назначенной папке появятся папки: "LightMapTexture2D", "Material3", "MaterialInstanceConstant", "StaticMesh3", "Texture2D". В "StaticMesh3" будут файлы модели. В "Texture2D" будут текстуры моделей.
Если у какой-то модели текстура не находится, то можно узнать её имя, открыв текстовый файл формата "mat" в папке "Material3" или в папке "MaterialInstanceConstant".

Открыть Blender и импортировать файл glTF 2.0. Выбрать нужный файл.

В настройках Blender'а включить расширение "Blender Source Tools" (Оно находится в разделе "Импорт/экспорт").

О требованиях к модели можно прочитать
здесь (на английском языке).
Название материала модели должно быть равно названию текстуры, которая будет использоваться на модели. Например: Имя текстуры: "AmmoBox01.bmp", тогда имя материала: "AmmoBox01.bmp".

Решения по конвертации текстуры могут быть разными в зависимости от самих текстур.
Если текстура без альфа канала, то есть не имеет прозрачности, то можно идти следующими решениями:
1.1) Открыть текстуру в GIMP.

1.2) Кликнуть на элемент меню "Изображение" и выбрать "Режим"->"Индексированный".

1.3) "Цветовая карта": Выбрать пункт "Создать оптимальную палитру" и указать максимальное число цветов: 256. Кликнуть кнопку "Преобразовать".

1.4) Экспортировать изображение как "bmp"-файл. При экспорте в BMP появится окно с параметрами. Раскрыть пункт "Параметры совместимости" и поставить крестик в квадрат "Не сохранять данные о цветовом пространстве". Нажать "Экспорт". Текстура готова.

2) Решение на случай, если нужно преобразовать большое количество текстур за раз. О нём я писал в своей заметке
здесь. Для работы сценария необходима Bash-совместимая командная оболочка и инструментарий ImageMagick.
3) Более простое решение, но в нём также используется библиотека ImageMagick.
mogrify -path ./ -compress none -format bmp -define bmp:format=bmp3 -colors 256 *.png
В наборе команд выше изображения формата "png" будут преобразованы в формат "bmp", употребляемый компиляторами моделей.
4.1) Иногда текстура может выглядеть так, как на изображении ниже.

4.2) Чтобы привести это к видимому в игре виду, кликнуть на элемент меню окна GIMP под названием "Цвет". Выбрать элемент "Составляющие" и егошний подэлемент "Разобрать". В выпадающем списке "Цветовая модель" выбрать "RGBA" и нажать "ОК".

4.3) Выбрать слой под названием "альфа-канал" и удалить его.

4.4) В том же меню "Цвет"->"Составляющие": Выбрать "Собрать" и указать "Цветовая модель": "RGB" и нажать "ОК".

4.5) Получаем текстуру в нужном виде.
В Blender перейти в секцию "Scene" и раскрыть пункт "Экспорт в Source". Выбрать путь экспорта. В качестве "Export Format" указать "SMD". В "Target Engine" указать "Goldsrc". Нажать на кнопку "Экспортировать".

Нужно сгенерировать "qc" файл. Так как здесь речь о файле без анимаций, объект-декорация. То расширяемое решение следующее:
#!/bin/bash
# Проверка наличия аргументов
if [ $# -lt 2 ]; then
echo "Использование: $0 <имя_qc_файла> "
echo " Например: $0 mymodel.qc body1 body2 body3"
exit 1
fi
# Получение имени qc файла
QC_FILE=$1
shift
# Начало содержимого qc файла
echo "\$cd ./" > "$QC_FILE"
echo "\$cliptotextures" >> "$QC_FILE"
echo "\$scale 50" >> "$QC_FILE"
# Создание строк \$body studio для каждого smd файла
for SMD_FILE in "$@"; do
echo "\$body studio $SMD_FILE" >> "$QC_FILE"
done
# Добавление остального содержимого
echo "\$origin 0 0 0" >> "$QC_FILE"
echo "\$sequence seq-name sequence loop fps 15 ACT_IDLE 1" >> "$QC_FILE"
echo "QC файл '$QC_FILE' успешно создан."
# Создание sequence.smd
echo 'version 1
nodes
0 "root" -1
end
skeleton
time 0
0 0 0 0 0 0 0
time 1
0 0 0 0 0 0 0
end' >> ./sequence.smd
# Выбранный компилятор
studiomdl ./$QC_FILE
Рекомендую изучить этот сценарий.
В командной строке (в терминале) вводим:
build_model.sh AmmoBox01.qc AmmoBox01
И получаем вывод:
QC файл 'Ammobox01.qc' успешно создан.
entering ./Ammobox01.qc
grabbing .//Ammobox01_A.smd
grabbing .//sequence.smd
BMP AmmoBox01.bmp [512 512] (100%) 262912 bytes
---------------------
writing ./Ammobox01.mdl:
bones 388 bytes (1)
sequences 296 bytes (15 frames) [0:01]
vertices 8296 bytes (458 vertices, 180 normals)
mesh 9048 bytes (660 tris, 208 strips)
models 17532 bytes
textures 262996 bytes
total 281212
Модель готова к использованию на картах.
Посмотреть модель с помощью "Half-Life Asset Manager". Чтобы узнать, какой размер модели относительно модели игрока, во вкладке "Model Display" поставить крестик у пункта "Show Player Hitbox".

Вот и всё. Если есть какие-то вопросы, советы или пожелания, пишите в комментариях или на почту: arturaiwasan[собака]gmail.com.