Работа с текстурами
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.
- Обязательно включить генерацию mip maps во избежание артефактов в виде шума на текстурах, видимого только в игре.
- При использовании плагина для Photoshop: для генерации mip maps использовать box filter
- Размер текстуры должен соответствовать степени двойки (512х512, 2048x2048, и т.п.), во избежание потенциальных проблем.
- Для большинства случаев рекомендуется использовать формат сжатия 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 (подходит для карт нормалей) |
BC6H | 8 bpp | Высокое | RGB (в формате FP16, подходит для HDR текстур) |
BC7 | 8 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 текстура
Данная текстура хранит в себе различные параметры, которые влияют на итоговый внешний вид объекта, на котором использована эта текстура. Более подробное описание этих параметров приведено ниже. В связи с наличием в 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.
Соответствие параметров текстуры и её каналов описано в данной таблице:
Канал текстуры | Предназначение |
---|---|
R | Smoothness |
G | Metalness |
B | Ambient occlusion |
A | Specular 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.