Skip to main content

Работа с материалами

В 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"
}