Работа с материалами
В PrimeXT есть функционал для работы с определениями физических материалов. Такие материалы могут быть привязаны к определенным текстурам, это даёт возможность гибко настраивать поведение различных поверхностей при физическом взаимодействии (звуки шагов, попаданий при выстреле, при столкновении объектов, кастомные декали попадания).
Файлы находятся в папке scripts, и позволяют редактировать многие параметры, не прибегая к необходимости редактирования исходного кода игры.
Физические материалы (materials.def)
Это текстовый файл, в котором объявлены кастомные физические материалы, которые имеют свои определённые звуки шагов/попадания, декали, и другие параметры. Также, в этот файл можно добавить свой материал, который не нужно внедрять в код игры, он будет подхватываться при запуске игры. Количество кастомных материалов не ограничено, можно создавать их сколько угодно и для любой поверхности.
Вот так выглядит базовый материал:
"default"
{
"impact_decal" "shot"
"impact_parts" "test_impact" "test_smoke"
"impact_sound" "materials/debris_concrete_01.wav" "materials/debris_concrete_02.wav"
"step_sound" "materials/walk_concrete_01.wav" "materials/walk_concrete_02.wav"
}
Разберем каждый пункт более подробно:
"default"- Указывается название материала, напримерasphalt, нужно вписать в кавычки слово, и теперь появился отдельный материал:
"asphalt"
{
"impact_decal" "shot"
"impact_parts" "test_impact" "test_smoke"
"impact_sound" "materials/debris_concrete_01.wav" "materials/debris_concrete_02.wav"
"step_sound" "materials/walk_concrete_01.wav" "materials/walk_concrete_02.wav"
}
"impact_decal"- Указывает, какие декали следов от выстрела будут по этому материалу. Все группы декалей описываются в файлеgfx\decals\decalinfo.txt. В данном параметре нужно указать одну из групп, описыванных в вышеупомянутом файле. Например, мы можем указать, что следы от выстрелом будет обозначать группа декалейshotвdecalinfo.txt.
В decalinfo.txt это выглядит так, также для разнообразия можно добавить в подгруппу больше декалей и вместо:
shot
{
shot 6 6 0.5
}
Сделать группу выстрелов:
shot
{
shot 6 6 0.5
shot1 6 6 0.5
shot2 6 6 0.5
}
"impact_parts"- Указывает, какие частицы будут высекаться при попадании (в данный момент не работает)"impact_sound"- Указывает список звуков (от 1 до 8), которые воспроизводятся при попадании по материалу. Путь до звуков изначально берётся из папкиsound, далее вы в праве указывать сколько угодно подпапок, готовый пример с 4 звуками выглядит так:
"impact_sound" "materials/debris_concrete_01.wav" "materials/debris_concrete_02.wav" "materials/debris_concrete_03.wav" "materials/debris_concrete_04.wav"
"step_sound"- Указывает список звуков (от 1 до 8), которые воспроизводятся при хождении по материалу игрока или NPC. Путь до звуков изначально берётся из папкиsound, далее вы в праве указывать сколько угодно подпапок, готовый пример с 4 звуками выглядит так:
"step_sound" "materials/walk_asphalt_01.wav" "materials/walk_asphalt_02.wav" "materials/walk_asphalt_03.wav" "materials/walk_asphalt_04.wav"
Привязка физического материала к текстуре
К любой текстуре может быть привязан определённый физический материал. Это делается посредством создания обьявления в одном из .mat файлов внутри папки scripts.
Но вы можете, также, создать свой такой файл. Допустим, у нас есть текстура деревянной стены с названием wood_01. Мы создаем файл с названием textures.mat. В этой файле мы пишем:
"wood_01"
{
"material" "wood"
}
Сохраняем, и теперь в игре для этой текстуры будут использоваться звуки шагов/попадания и декали, указанные в материале wood.
Что касается привязки материала к текстурам моделей, то указывается название модели, и название нужной текстуры, пример для модели box.mdl с текстуро й body:
"box/body"
{
"material" "wood"
}
Полный список свойств материалов
Помимо описанных выше настроек, .mat файлы поддерживают следующие свойства:
"имя текстуры"
{
"material" "metal" // ссылка на физический материал из materials.def
"smoothness" "0.8" // гладкость поверхности: 0.0 (шероховатый) до 1.0 (зеркало)
"reflectScale" "0.3" // яркость отражений: 0.0 до 1.0
"refractScale" "0.5" // сила преломления (только для прозрачных поверхностей): 0.0 до 1.0
"aberrationScale" "0.01" // хроматическая аберрация (для прозрачных поверхностей): 0.0 до 0.1
"reliefScale" "0.02" // высота параллакса: 0.0 до 1.0 (требуется карта высот)
"swayHeight" "10" // высота, с которой начинается покачивание растительности; 0 = отключено
"detailScale" "4 4" // масштаб тайлинга детальной текстуры (X Y)
"detailmap" "textures/grunge_detail" // свой путь к детальной текстуре
"diffuseMap" "textures/my_diffuse" // свой путь к диффузной текстуре
"normalMap" "textures/my_normal" // свой путь к карте нормалей
"glossMap" "textures/my_gloss" // свой путь к карте блеска / ORM
// старый формат — конвертируется в smoothness автоматически
"glossExp" "32" // gloss exponent (0-256)
}
Ниже приведён пример настроек для текстуры body оружия в модели оружия v_9mmAR.mdl
"v_9mmAR/body"
{
"reflectScale" "0.3"
"material" "metal"
"refractScale" "3"
"aberrationScale" "0.01"
}
Значения по умолчанию
| Свойство | По умолчанию | Примечание |
|---|---|---|
smoothness | 0.0 | - |
detailScale | 10.0 10.0 | - |
reflectScale | 0.0 | - |
refractScale | 0.0 | - |
aberrationScale | 0.0 | - |
reliefScale | 0.0 | - |
swayHeight | 0 | отключено |
material | встроенный default | материал по умолчанию (бетон) |
Соглашения об именах карт текстур
PrimeXT автоматически ищет дополнительные текстуры по суффиксам. Если в .mat файле указан diffuseMap, normalMap, glossMap или detailmap - используется явный путь. В ином случае движок подставляет суффиксы:
| Суффикс | Тип карты | Пример |
|---|---|---|
_norm | Карта нормалей | wall1_norm.dds |
_gloss или _pbr | Глянец / ORM | wall1_gloss.dds |
_luma | Самосвечение (эмиссив) | wall1_luma.dds |
_hmap | Карта высот (параллакс) | wall1_hmap.dds |
_detail | Детальная текстура | wall1_detail.dds |
Для студиомоделей текстуры должны лежать по пути: textures/имямодели/имятекстуры[_суффикс].[tga|dds]
Ландшафт (террейн)
PrimeXT поддерживает многослойный террейн — на одной поверхности браша может быть до 16 текстурных слоёв, смешиваемых по карте высот.
Настройка
- Карта высот - черно-белое изображение
maps/название_карты_heightmap.tga - Файл слоёв - текстовый файл
maps/название_карты_land.txt, в котором прописано, какие текстуры и физические материалы соответствуют разным высотам - Каждый слой может иметь свой физический материал (звуки шагов, эффекты попадания и т.д.)
Движок сам определяет, какой слой активен в точке контакта, и использует его физический материал для звуков и декалей.