Skip to main content

Работа с текстурами

PrimeXT поддерживает два формата текстур, и у каждого формата есть свои особенности при использовании.

  • .tga - Формат, поддерживающий прозрачность. Не поддерживает сжатие, и по этой причине может быть удобен в разработке, в случаях когда критически важно отсутствие артефактов сжатия на текстуре. Но также из-за отсутствия сжатия, текстуры будут занимать много места на диске.
  • .dds - Формат, поддерживающий прозрачность и сжатие с потерями. При неправильной настройке возможно появление артефактов сжатия на текстуре при экспортировании (обычно в виде квадратов). Требует определенных знаний для работы, но при должном навыке позволяет добиться хорошего сжатия практически без видимых потерь качества. При использовании этого формата, рекомендуется хранить исходники текстур в каком-либо формате без сжатия, или с поддержкой сжатия без потерь (например .png или .tga), так как при сжатии текстуры теряется информация, и текстура теряет свой первоначальный вид, что может вызвать проблемы при дальнейшем её редактировании.

Начало работы

В папке с модом находится папка с названием textures, там должны храниться все текстуры для карты и моделей. Для текстур моделей внутри этой папки находится другая, с названией этой модели, и в ней находятся текстуры этой модели. PrimeXT использует метод подмены текстур из .wad на текстуры из этой папки, аналогично делается для моделей и текстур внутри нее. Например, имеется модель ak47_v1.mdl с текстурами a1.bmp и b2.bmp. Для того чтобы подключить текстуры высокого разрешения для этой модели, нужно скопировать скопировать их по пути textures/ak47_v1/a1.dds и textures/ak47_v1/b2.dds. Аналогично делается и для текстур на брашах, за исключением того, что их нужно копировать непосредственно в папку textures.

Примечания
  • Название текстуры высокого разрешения должно полностью совпадать по названию таковой в WAD файле, или внутри модели
  • На данный момент, текстуры высокого разрешения не работают для спрайтов
  • Размеры текстуры в WAD файле желательно делать не больше 256х256, иначе при подмене может уехать развертка на брашах
  • Максимальный размер внешних текстур - 4096х4096 пикселей
  • PrimeXT использует декали высокого разрешения и имеет иные методы их реализации, отличающиеся от использованных в GoldSrc
  • Текстуры должны в цветовом пространстве sRGB, не требуется применять обратную гамма-коррекцию для перевода текстур в линейное пространство - рендер делает это автоматически в шейдере. Если вы не поняли, что это значит, можете не заморачиваться и просто сохранять текстуры в вашем фоторедакторе как обычно - практически всегда там при сохранении изображение переводится в sRGB пространство.

Использование формата DDS

Работа с этим форматом имеет некоторые особенности, которые критически важно учитывать, чтобы добиться хорошего результата. Данный формат файла поддерживает множество разных алгоритов сжатия, итоговый размер текстуры и её визуальное качество полностью зависит от используемого формата сжатия. Для работы с DDS можно использовать, например, Paint.NET, NVIDIA Texture Tools Exporter, или плагин для Photoshop.

При сохранении текстуры нужно соблюдать следующие условия
  1. Обязательно включить генерацию mip maps во избежание артефактов в виде шума на текстурах, видимого только в игре.
  2. При использовании плагина для Photoshop: для генерации mip maps использовать box filter
  3. Размер текстуры должен соответствовать степени двойки (512х512, 2048x2048, и т.п.), во избежание потенциальных проблем.
  4. Для большинства случаев рекомендуется использовать формат сжатия BC7, хотя существуют и другие форматы, которые могут быть более подходящими в той или иной ситуации. Доступные форматы сжатия описаны в таблице ниже.
ФорматУровень сжатияКачествоОписание
BC1 (S3TC, DXT1)4 bppНизкоеRGB + 1-bit alpha
BC2 (DXT2, DXT3)8 bppНизкоеRGB + 4-bit alpha
BC3 (DXT4, DXT5)8 bppНизкоеRGBA
BC5 (ATI2, 3Dc)8 bppСреднееRG (подходит для карт нормалей)
BC6H8 bppВысокоеRGB (в формате FP16, подходит для HDR текстур)
BC78 bppВысокоеRGBA, высококачественная замена форматов BC1-BC5

Normal Mapping

Технология, используемая для имитации неровностей поверхности на объекте или его дополнительной детализации без модификации его геометрии. В PrimeXT может использоваться для моделей, брашей и декалей.
Чтобы использовать карту нормалей, нужно к основной текстуре создать дополнительную и после названия текстуры сделать суффикс _norm
Пример: Основная текстура под названием wall1.dds, дополнительная текстура с нормалями для нее будет называться wall1_norm.dds

tip

При использовании карт нормалей следует учитывать, что PrimeXT принимает на вход карты нормалей в DirectX-style - этот подход также используется в 3DS Max, CryEngine, Substance Painter, UE4. При необходимости карту нормалей можно преобразовать из OpenGL-style в DirectX-style, инвертировав в ней зелёный канал.

Parallax Mapping

Технология, позволяющая изобразить объёмный рельеф на текстуре, не затрагивая при этом геометрию объекта. В PrimeXT может применяться для брашей, моделей и декалей.
Чтобы использовать карту нормалей, нужно к основной текстуре создать карту высот и после названия текстуры сделать суффикс _hmap. Также нужно в папке scripts создать файл с любым названием и расширением .mat и внутри сделать описание материала текстуры, в данном случае это нужно для регулировки степени рельефности.
Пример: Основная текстура wall1.dds, дополнительная текстура с картой высот для нее будет называться wall1_hmap.dds. Файл описания материала будет называться, к примеру, wall_tex.mat. В этом файле пишем:

"wall1"
{
"reliefScale" "0.01"
}
Примечание

reliefScale это параметр, отвечающий за степень рельефности, чем больше значение - тем более явно выражен рельеф.
Перед проверкой убедитесь, что у вас включен параллакс-маппинг: введите в консоли gl_parallax 1 (упрощенный алгоритм параллакса) или gl_parallax 2 (parallax occlusion mapping).

Gloss/PBR текстура

Данная текстура хранит в себе различные параметры, которые влияют на итоговый внешний вид объекта, на котором использована эта текстура. Более подробное описание этих параметров приведено ниже. В связи с наличием в PrimeXT двух принципиально разных, несовместимых между собой алгоритмов освещения: классический (r_lighting_brdf 0) и физически корректный (r_lighting_brdf 1), подход к использованию данного типа текстур будет отличаться в зависимости от того, какой алгоритм освещения вы планируете использовать.
Для данного типа текстур можно использовать суффикс _gloss или _pbr
Пример: Основная текстура wall1.dds, дополнительная текстура блеска для нее будет называться wall1_gloss.dds

Классический алгоритм освещения

В случае использования классического алгоритма освещения, текстура определяет гладкость поверхности, и тем самым влияет на насыщенность зеркальных бликов. Для задания интенсивности зеркальных бликов используется красный канал текстуры: максимальная яркость обозначает максимальную силу блика, а нулевой уровень обозначает полное отсутствие бликов. Остальные каналы текстуры не используются.

Физически корректный алгоритм освещения

В случае использования физически корректного алгоритма освещения, текстура хранит в себе сразу несколько параметров, которые непосредственно влияют на её конечный вид в игре.

  • Smoothness - уровень гладкости поверхности (0 - очень шероховатая и неровная, 1 - идеально ровная). Величина, обратная величине шероховатости (roughness). Можно получить, инвертировав roughness текстуру в фоторедакторе.
  • Metalness - уровень металличности поверхности (0 - диэлектрик, 1 - чистый металл). Можно выставлять и промежуточные значения, но в таком случае возможны артефакты в виде светлого контура на месте перехода металл-диэлектрик (из-за особенностей metalness workflow).
  • Ambient occlusion - уровень фонового затенения (0 - затенен полностью, 1 - фонового затенения нет). Характеризует то, как обьект будет затенять сам себя, когда на него не направлен прямой свет. Обычно используется, чтобы визуально подчеркнуть какие-то мелкие впадины на текстуре.
  • Specular intensity - величина яркости зеркальных отражений (0 - зеркальные отражения отсутствуют, 1 - зеркальные отражения имеют 100% от своей исходной яркости). Хоть и подобный параметр не вписывается в понятие физической корректности, однако он даёт больше возможностей для художественного контроля над итоговым видом сцены. Если вы не используете этот параметр, крайне рекомендуется оставить его равным 1.
    Соответствие параметров текстуры и её каналов описано в данной таблице:
Канал текстурыПредназначение
RSmoothness
GMetalness
BAmbient occlusion
ASpecular intensity

Детальные (detail) текстуры

Детальная текстура позволяет добавить дополнительные высокочастотные детали к основной текстуре в низком разрешении, например маленькие шероховатости в текстуре песка. Используется довольно редко, потому что как правило проще отредактировать исходную текстуру. Скорее, эта технология может быть полезна, если планируется делать олдскульный визуальный стиль. Данная технология также используется в GoldSrc. Детальные текстуры хранятся в директории gfx/detail.
Пример: Основная текстура wall1.dds, путь до текстуры детализации для нее нужно указать в .mat файле в папке scripts

"wall1"
{
"detailmap" "gfx/detail/detail_tile_1"
}
Примечание

Включить отображение детальных текстур можно в консоли при помощи параметра r_detailtextures 1

Cветящиеся (luma) текстуры

Текстура, которая подсвечивает нужные фрагменты на основной текстуре. Может использоваться, например, для создания подсвеченных приборных панелей, кнопок, и двух светящихся элементов небольших размеров. Для данного типа текстур используется суффикс _luma. При создании такой текстуры, её нужно залить полностью чёрным (#000000) цветом, а затем нужные части закрасить любым другим цветом. Также, для данного типа текстур рекомендуется использовать формат текстур DDS с форматом сжатия BCH6, так как он позволяет задавать значения цвета в широком динамическом диапазоне (HDR), что расширяет возможности luma-текстур, например, детали можно сделать намного более яркими, чем если бы использовалась текстура в обычном динамическом диапазоне. Данный тип текстур не работает, если нет внешней основной текстуры - это обязательное условие.

Особенности работы прозрачности в текстурах

При использовании альфа-канала в текстуре при замене, прозрачность не будет работать, так как нужно провести ряд дополнительных манипуляций:

  • Модели: Чтобы модель использовала прозрачность, в настройках модели у текстуры, которая вшита внутрь mdl файла, нужно выставить параметр Additive или Transparent в зависимости от желаемого эффекта.
  • Маппинг: Для использования прозрачности, в настройках браша, в пункте Render Mode указываем значение Texture или Additive. Также, прописываем уровень прозрачности в FX Amount. Либо сама текстура в wad должна иметь синий канал для прозрачности.

Работа с декалями

Текстуры для кастомных HD-декалей должны располагаться в папке gfx/decals. В качестве дополнительных, применимы все перечисленные выше типы текстур (карты нормалей, высот, и т.д).

Примечания

На данный момент (февраль 2022), в реализации декалей есть ряд костылей, которые планируется исправить в будущем, но сейчас их нужно учитывать при создании собственной текстуры:

  • Cледует использовать задний фон для прозрачности с цветом R: 123 G: 125 B: 123, так как альфа-канал недопустим
  • Сохранять текстуру следует с параметром сжатия DXT1 No alpha

Скайбоксы

Скайбокс состоит из 6 текстур - для каждой грани скайбокса назначается своя текстура с определенным суффиксом, обозначающим, какой конкретно грани скайбокса принадлежит эта текстура. Список суффиксов: bk, dn, ft, lf, rt, up. Эти текстуры располагаются в папке gfx\env и могут быть формата DDS или TGA. Имеется возможность использования HDR-скайбокса, для этого нужно упаковать HDR-текстуры скайбокса в формат DDS с форматом сжатия BC6H.