Простая работа с библиотекой MatLib, редактирование и добавление записей

Автор Akven, 20 сентября 2021 09:53:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Akven

Я тут хотел было побыть некропостером, и ответить в старую тему 2019 года (https://darkfate.org/forum/index.php?topic=1992.0)
Но потом решил, что надо делать правильно, и создам новый топик

Простая работа с библиотекой MatLib, редактирование и добавление записей в Unreal Engine 2 (Thief: Deadly Shadows, Deus Ex: Invisible War)
Раньше по всей видимости надо было качать какие-то библиотеки для 3DS Max, и в них возиться. Но пользователь snobel с форума TTLG написал простенькую утилиту, которая позволяет декомпилировать файлы mlb в табличный файл csv и компилировать их из таблицы обратно
Собственно, ссылка на программу тут (mlb-tool):
https://www.ttlg.com/forums/showthread.php?t=151472&p=2477217&viewfull=1#post2477217

Декомпиляция
Первым делом достаём из игры mlb файлы и скармливаем их утилите. В Deus Ex 2 эти файлы лежат в открытом виде в папке с игрой. В Thief 3 честно говоря не помню где.
mlb-tool --dump --in <Название файла>
Но этот этап можно пропустить, потому что я уже декомпилировал все материалы и соединил их в одну таблицу
Thief: Deadly Shadows
https://docs.google.com/spreadsheets/d/1GL3K2SvhwjzF3RE15q_sdCpPQQkly1DyrJ--uH7zJlY
Deus Ex: Invisible War
https://docs.google.com/spreadsheets/d/1ib4faOmH2R7ru4I4ijuP2MzumjeKC-foNMty-zm6XV0

Работа с таблицей
Если работать напрямую с декомпилированной гугл-табличкой, то можно просто перейти на вкладку Original game, сделать копию себе в гугл, и менять там любые значение, какие вам нравятся. Потом сделать экспорт в CSV только с теми значениями, которые вы изменили (поэтому я все изменения помечал цветом для удобства).

Логика игры такова: при запуске она грузит оригинальные mlb, которые шли с игрой. Потом поверх них она грузит любые внешние mlb, которые мы ей даём. Если какой-то материал присутствует и там и там, берутся значения из внешнего mlb. Соответственно, если мы просто хотим изменить 5 материалов, то нужно делать внешний mlb только на эти 5 изменений, не надо перегружать все файлы игры заново. Если хотите добавить что-то новое, соответственно в своей копии стираете всё, и начинаете добавлять (для примера можно оставить какую-нибудь одну запись, чтобы брать из неё значения по-умолчанию тех параметров, которые вы не знаете).

Вообще я для мода ESRGAN делал глобальный фикс материалов, где фиксил многие ошибки ванильной игры и добавлял с нуля созданным карты нормалей тем материалам, к которых их не было. Но тут есть небольшая проблема в том, что я немного ленивый, и не отделял только фиксы (где все текстуры в оригинальной игре присутствуют, просто в библиотеке материалов забыли подцепить например нормаль) от того, что я создавал с нуля. И если кому то захочется использовать мои фиксы отдельно от HD мода, так просто это не выйдет. В идеале конечно надо бы кому-нибудь пробежаться по табличке, найти все те записи, где указанный цветом файл не присутствует в текстурах оригинальной игры, и удалить эту запись. Чтобы оставить только фиксы. Но я повторюсь, очень для этого ленивый.

Конкретика
Что же такое материал? Это та взаимосвязь текстур и их аттрибутов, которая накладывается на полигоне в игре, и которые мы собственно видим глазами.
Перечислю те параметры, которые я знаю
Material name - имя материала. Можно указывать что угодно, но по правилам хорошего тона оно должно совпадать с именем диффузной текстуры. Очень желательно не использовать никаких пробелов
Diff map - имя диффузной текстуры (собственно, той картинки, которую мы подразумеваем под текстурой). Применительно к Thied: DS так принято, что у них всегда есть приставка _D в имени.
Diff colour - наложенная цветность. На нашу текстуру при желании можно наложить какой-то цвет, и тогда она будет в других оттенках. Чтобы например не создавать 7 текстур для 7 цветов радуги, мы можем просто создать 7 материалов, где будет использоваться одна и та же текстура с разными цветовыми оттенками.
Diff mix amount - степень этой наложенной цветности в величинах от 0 до 1
Diff use alpha - признак использования текстурой альфа-канала. Если используется текстура с прозрачными участками. Вообще по-моему иногда игра и без этого признака выводит прозрачность нормально, тут надо тестировать наживую
Diff edge alpha - с предыдущим пунктом всегда идут парами. Что значит не знаю, тоже как-то связано с прозрачностью
Normal map - карта нормалей, "рельеф" текстуры под освещением. Есть куча генераторов, которые по диффузной текстуре могут создать карту нормалей под ваш вкус (Materialize и так далее). Правилом хорошего тона считается добавлять к таким текстурам приписку _N. Нужно помнить, что на прозрачные текстуры нормали не применяются. Во всяком случае в моих тестах.
Spec map - это specular map. Вообще это карта блеска. Но в игре оно выглядит странно и не очень понятно как именно работает. Например, она привязана к рукоятке лука, но каких-либо видимых эффектов я не заметил. Работает явно не так, как ожидаешь
Spec colour - наложение цветности для specular map
Detail map - по идее это текстура деталей как в UE1, но тут кажется не работает, или работает не так как ожидаешь, лучше не трогать
Mask map - маска. Тоже не очень понятно зачем нужна и как работает, ведь у нас прозрачность зашита в диффузе. Я так понимаю можно теоретически делать диффуз без прозрачности, а прозрачность накладывать маской в материале. Сколько игр разбирал - практически никто так не делает.
Emis map - карта свечения. Должна подсвечивать некоторые участки изображения согласно ч/б карте. В моих тестах не работало
Emis ovr skip - что-то связанное со свечением
Refl map - карта отражений. Используется cubemap для создания эффекта зеркального отражения окружающего мира. Хорошо смотрится на блестящих поверхностях типа металлов. В игре уже есть несколько готовых карт отражений (env_noise_01, turbulence_gold, turbulence_01, refmap_silver, refmap_gold). Если не знаете как создавать кубические карты, можно использовать уже имеющиеся в игре
Refl amount - степень отражения от 0 до 1
Refl alpha - видимо какой-то альфа канал для отражений, не видел чтобы использовался. Лучше не трогать или хотя бы тестировать
Bump map - по идее карта высот. Но в игре её включение никакого эффекта не даёт
FX map, Flags shdr stl, Flags gm rndr, Flags dif1 rndr, Flags mbr-ht rndr, Flags atest enbl, Flags atest val - не знаю, не используются

Category - очень важный параметр, определяющий физические свойства материалов в игре. Эти свойства зашиты в игру, и вводить новые категории нельзя, только использовать имеющиеся. В зависимости от проставленного здесь значения будут меняться звук шагов по поверхности, звук удара, эффекты удара и тд. Обычно список категорий лежит где-нибудь в игре в файле categories.txt. Если покурить мануал утилиты, то можно найти как заставить её считывать значения из этого файла (потому что для самой игры в этом столбце просто стоят номера). По умолчанию утилита использует категории из Thief: DS

Компиляция
Ну и всё. Выгружаем все изменения и добавления в текстовый файл csv
Кормим его программе
mlb-tool ---generate --in <Название файла CSV>
Полученный файл переименовываем как хотим (для игры его название не имеет значения, главное чтобы не совпадало с уже имеющимися mlb), кладём в соответствующую папку к игре - и он работает.

P.S. Вообще теоретически утилита способна работать с любой игрой на Unreal Engine 2, в которой используется MatLib. Но лично я например кроме T:DS и DX:IW таких не видел. Те 3-4 игры, которые я скачал, этой библиотеки не имели, или она была спрятана в игровые архивы.