Работа с материалами
В 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
файлах помимо физического материала, можно указывать другие графические настройки для текстур.
- "reflectScale" - Величина отражений для материала. Больше число - ярче отражения.
- "reliefScale" - Величина высоты для параллакс-маппинга (имеет смысл только если есть карта высот)
- "refractScale" - Величина преломления (только для полупрозрачных поверхностей)
- "aberrationScale" - Величина хроматическая аберрация (только для полупрозрачных поверхностей)
- "smoothness" - Величина гладкости поверхности, в диапазоне от 0.0 до 1.0
Ниже приведён пример настроек для текстуры оружия:
"v_9mmAR/body"
{
"reflectScale" "0.3"
"material" "metal"
"refractScale" "3"
"aberrationScale" "0.01"
}