Skip to main content

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

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

  • .tga - Формат, поддерживающий прозрачность. Не поддерживает сжатие, и по этой причине может быть удобен в разработке, в случаях когда критически важно отсутствие артефактов сжатия на текстуре. Но также из-за отсутствия сжатия, текстуры будут занимать много места на диске.
  • .dds - Формат, поддерживающий прозрачность и сжатие с потерями (lossy compression). При неправильной настройке возможно появление артефактов сжатия на текстуре при экспортировании (обычно в виде квадратов). Требует определенных знаний для работы, но при должном навыке позволяет добиться хорошего сжатия практически без видимых потерь качества.
    При использовании этого формата, рекомендуется хранить исходники текстур в каком-либо формате без сжатия, или с поддержкой сжатия без потерь (например .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.

Примечание

При использовании карт нормалей следует учитывать, что 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 текстура

Данная текстура хранит в себе различные параметры, которые влияют на итоговый внешний вид объекта, на котором использована эта текстура. Для данного типа текстур можно использовать суффикс _gloss или _pbr. Более подробное описание этих параметров приведено ниже.

В связи с наличием в PrimeXT двух принципиально разных, несовместимых между собой алгоритмов освещения: классический (r_lighting_brdf 0) и физически корректный (r_lighting_brdf 1), подход к использованию данного типа текстур будет отличаться в зависимости от того, какой алгоритм освещения вы планируете использовать.

Пример: Основная текстура wall1.dds, дополнительная текстура блеска для нее будет называться wall1_gloss.dds

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

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

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

Примечание

На данный момент, реализация PBR пайплайна ещё не завершена, из этого следует что в будущем возможны изменения, сильно влияющие на визуальный вид контента, созданного под PBR пайплайн. Если важна стабильность и вы не хотите переделывать весь контент в будущем - то лучше пока что не использовать PBR.

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

  • 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

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

Текстура, которая подсвечивает нужные фрагменты на основной текстуре. Может использоваться, например, для создания подсвеченных приборных панелей, кнопок, и двух светящихся элементов небольших размеров.

Для данного типа текстур используется суффикс _luma. При создании такой текстуры, её нужно залить полностью чёрным (#000000) цветом, а затем нужные части закрасить любым другим цветом.

Также, для данного типа текстур рекомендуется использовать формат текстур DDS с форматом сжатия BCH6, так как он позволяет задавать значения цвета в широком динамическом диапазоне (HDR), что значительно расширяет возможности luma-текстур. Например, детали можно сделать намного более яркими, чем если бы использовалась текстура в обычном динамическом диапазоне.

Примечание

Данный тип текстур не работает, если нет внешней основной текстуры - это обязательное условие.

Особенности работы с прозрачностью

Даже если вы используете внешнюю текстуру с альфа-каналом, по умолчанию прозрачность полностью отключена. Для того чтобы её активировать, нужно выполнить дополнительные действия:

Студиомодели

В нужном MDL-файле при помощи PrimeXT Model Viewer (либо в QC-файле, на этапе компиляции модели) требуется выставить определённые флаги для желаемой текстуры:

  • Transparent, нет внешней текстуры: будет использоваться альфа-тест
  • Transparent, внешняя текстура с альфа-каналом: будет использоваться альфа-блендинг (прозрачность с плавными переходами)
  • Transparent + Alpha To Coverage, внешняя текстура с альфа-каналом: будет использоваться альфа-тест c дополнительным сглаживанием краёв (alpha to coverage)
Примечание

Выбор подходящего режима прозрачности напрямую зависит от геометрии объекта. Альфа-блендинг работает корректно только на плоских (окна, платформы), либо выпуклых объектах (феры, цилинды, кубы и другие простые геометрические объекты). В остальных случаях, например, для листвы, травы, деревьев, и любой другой вогнутой или имеющей самопересечения геометрии, следует использовать режим alpha to coverage.

Либо же, вы можете просто на практике проверить, какой режим выглядит более корректно в вашем конкретном случае.

Браши

Для использования прозрачности, в настройках брашевой энтити, в пункте Render Mode указываем значение Texture или Additive. Также, прописываем уровень прозрачности в FX Amount. Либо сама текстура в WAD должна иметь синий канал для прозрачности.

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

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

Скайбоксы

Скайбокс состоит из 6 текстур - для каждой грани скайбокса назначается своя текстура с определенным суффиксом, обозначающим, какой конкретно грани скайбокса принадлежит эта текстура.

Список суффиксов: bk, dn, ft, lf, rt, up. Эти текстуры располагаются в папке gfx\env и могут быть в форматах DDS или TGA.

Имеется возможность использования HDR-скайбокса, для этого нужно упаковать HDR-текстуры скайбокса в формат DDS со сжатием BC6H.

Дополнительные источники