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 файлы поддерживают следующие свойства:

"имя текстуры"
{
"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"
}

Значения по умолчанию

СвойствоПо умолчаниюПримечание
smoothness0.0-
detailScale10.0 10.0-
reflectScale0.0-
refractScale0.0-
aberrationScale0.0-
reliefScale0.0-
swayHeight0отключено
materialвстроенный defaultматериал по умолчанию (бетон)

Соглашения об именах карт текстур

PrimeXT автоматически ищет дополнительные текстуры по суффиксам. Если в .mat файле указан diffuseMap, normalMap, glossMap или detailmap - используется явный путь. В ином случае движок подставляет суффиксы:

СуффиксТип картыПример
_normКарта нормалейwall1_norm.dds
_gloss или _pbrГлянец / ORMwall1_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, в котором прописано, какие текстуры и физические материалы соответствуют разным высотам
  • Каждый слой может иметь свой физический материал (звуки шагов, эффекты попадания и т.д.)

Движок сам определяет, какой слой активен в точке контакта, и использует его физический материал для звуков и декалей.