Формат PBR материалов - w23/xash3d-fwgs GitHub Wiki
Репозиторий с материалами https://rtxash.omgwtf.ru/Half-Life-RTX/Half-Life-PBR
В директорию мода (valve
и т.д.) кладётся папка pbr
, вот её структура:
/pbr/
/materials.mat
— глобальный файл для базовых материалов./wadname.wad/wadname.mat
— материалы для замены текстур конкретного вад файла (если он задан в карте)./maps/mapname.bsp/mapname.bsp.mat
— материалы применяемые только на конкретной карте./models/materials.mat
— общий файл материалов для всех моделей (содержит инклуды)./models/modelname/modelname.mdl.mat
— файл для конкретной модели (инклудится через/models/materials.mat
)./sprites/sprites.mat
— общий файл материалов для всех спрайтов (содержит инклуды)./sprites/spritename.spr/spritename.spr.mat
— файл для конкретного спрайта (инклудится через/sprites/sprites.mat
).
Как уже стало понятно, каждый файл .mat может включать в себя другие файлы материалов через директиву:
"include" "путь/названиефайла.mat"
Поддерживается до 4 уровней вложения.
Сам materials.mat состоит из повторяющихся блоков вида:
{
"for" "c2a3_gar3"
"basecolor_map" "c2a3_gar3.png"
"normal_map" "c2a3_gar3_normal.png"
"metal_map" "/colors/black.png"
"roughness_map" "c2a3_gar3_roughness.png"
}
Где {}
границы блока, а само содержимое в простом формате "ключ" "значение"
.
Значение ключа "for"
описывает название текстуры которую надо заменить. Чтобы заменить текстуру карты достаточно указать её название из wad файла (или прописанное внутри карты которое можно посмотреть через команду ui_infotool 1
либо через программу bspguy) и всё. Чтобы заменить текстуру модели или спрайта нужно запустить игру с ключами -dev 2 -log
и в engine.log
найти записи связанные с нужными текстурами, там будет полный путь такого вида:
[2021:11:25|23:25:01] Uploading texture #models/v_357/bluesteelchrome.mdl, mips=7
[2021:11:25|23:25:01] Uploading texture #sprites/laserdot(frame:00).spr, mips=5
Вот этот путь "#models/v_357/bluesteelchrome.mdl"
и "#sprites/laserdot(frame:00).spr"
надо вписывать в значение после "for"
.
Далее можно по аналогии указывать текстуры вручную. Названия текстур моделей можно получить через просмотрщик HLMV, а спрайты лежат в папке /sprites/
(посмотреть можно через SprView). Для спрайтов нужно только помнить что если спрайт без анимации ему всё равно нужно прописать (frame:00)
в пути для значения "for"
.
Далее идут сами карты (текстуры) для замены исходной текстуры. Шаг размера текстуры 16 пикселей. Все текстуры на данный момент должны быть 8бит RGB(A) PNG. 16bits/sample пока не подходят, как и скорее всего grayscale. То есть экспортные текстуры из (например) Substance B2M нужно будет пережимать в 8 бит на канал.
"basecolor_map"
базовый цвет, альбедо, похожа на обычную (diffuse) текстуру только без лишних бликов и теней (они делаются через карту нормали и карту шероховатости), то есть она лишена визуально объёма, будто перед нами совершенно плоская поверхность.
"normal_map"
карта нормали, которая как раз описывает световую форму объекта, нормаль имеет формат opengl то есть светлые участки сверху.
"metal_map"
карта металлика, ЧБ (она монохромная), описывает в каких местах должен содержаться метал (белый цвет) или диэлектрик (чёрный цвет).
"roughness_map"
карта шероховатости, оттенки серого, указывает где в какой части текстуры должны быть отражения, чем темнее тем более глянцевая поверхность будет, чем светлее тем матовая.
Доступны ещё:
"base_color" "R G B"
для задания цвета без текстуры (полезно для отладки/простых металлов/коррекции существующих текстур), где R G B красный зелёный синий цвет, на данный момент данные в формате плавающей запятой, от 0 до 1, но это может измениться на 0-255.
"metalness" "V"
для задания металлическая или диэлектрическая поверхность, где V это значение 1 (металл) или 0 (диэлектрик).
"roughness" "V"
для задания шероховатости, где V это значение в формате плавающей запятой от 0 (полностью гладкий) до 1 (полностью шероховатый).
Для спрайтов доступна только "basecolor_map"
, остальные текстуры будут проигнорированы.
Карта нормалей на данный момент не применяется для моделей, это известная проблема.
Подробное описание свойств карт PBR материалов можно прочитать тут.
После ключа той или иной карты указывается в значении путь к ней.
Путь начинающийся с /
ведёт на корень /pbr/
.
Путь начинающийся без /
ведёт на подкаталог в котором находится задействованный materials.mat
.
Возможны относительные пути (например можно сослаться на текстуры в подкаталогах).
Другие ключи:
"force_reload" "1"
который вписывается в блок нужной текстуры (сразу следующей строркой после "for" "текстура" иначе работать не будет) для её быстрой перезагрузки через консольную командуvk_rtx_reload_materials
(можно забиндить на клавишу, напримерbind m vk_rtx_reload_materials
)."new" "texturename"
(дублирует имя для "for") для создания новой текстуры которой нет на карте, чтобы запатчить одну тексту на другую, объявляется внутри/maps/mapname.bsp/mapname.bsp.mat
, а потом в/luchiki/maps/mapname.bsp.patch
задаётся_xvk_texture
с этим именем.