Упаковка текстурных карт в одну многоканальную текстуру с помощью Gimp.
На примере использования Gimp 2.10.x рассмотрен вариант объединения трёх текстур (metallic, roughness и ambient occlusion) в одну. Мнемоническое название: MRAO.
Метод применяется для упаковки в одну текстуру нескольких текстурных карт, вместо использования набора из нескольких текстур, что позволяет экономить память. Каждая текстурная карта располагается на конкретном цветовом канале (RGBA): красный, зелёный, синий и альфа. Тем самым в одну комбинированную текстуру можно упаковать сразу четыре текстурные карты. Например: metallic, roughness, ambient occlusion и displacement (height). Таким же образом можно упаковывать различные маски в оттенках серого (светимость, непрозрачность, SSS и прочие). Комбинированные многоканальные текстуры активно используются в Blender и игровых движках (Unreal Engine, Godot Engine и прочих).
В Gimp изменение информации для каждого цветового канала в отдельности осуществляется с помощью инструмента Colors/Components/Compose.
Последовательность действий выглядит следующим образом:
- Создать новое изображение желаемого размера: File/New или Ctrl + N.
- В появившемся окне развернуть выпадающее меню Advanced Options и переключить Color space на Grayscale (оттенки серого). Это связано с тем, что информация в цветовых каналах представлена в оттенках серого, поэтому изображения в слоях, которые требуется поместить в цветовые каналы, должны быть в оттенках серого. Только тогда Compose сможет обработать такие слои.
- Подтвердить создание.
- Добавить изображения, которые требуется упаковать по каналам в одну текстуру.
Каждая текстурная карта должна располагаться на отдельном слое. При этом порядок расположения слоёв имеет значение, но в инструменте Compose есть возможность переопределить соотношение слоёв к цветовым каналам в желаемом порядке. Название слоёв не имеет значения, но для удобства лучше дать соответствующие имена (Metallic, Roughness, AO). Отсчёт слоёв снизу вверх:
- Первый слой — синий канал.
- Второй — зелёный.
- Третий — красный.
- Теперь информацию со слоёв нужно поместить в соответствующие цветовые каналы. Это осуществляется с помощью ранее обозначенного инструмента Colors/Components/Compose:
После подтверждения будет создано новое изображение, которое откроется в отдельной вкладке. Информация со слоёв будет помещена в отмеченные цветовые каналы, что и требовалось:
Стоит отметить, что текстура будет иметь причудливый вид, это нормально.
Теперь текстуру можно сохранить в PNG или Tif для дальнейшего использования.
Пример импорта в Unreal Engine 4.
Имя текстуры: T_WoodenFloor_MRAO.png
Для UE4 подобные текстуры-маски должны быть в линейном цветовом пространстве. В редакторе ассетов в блоке Texture необходимо снять галку sRGB и сохранить изменения.
Удостовериться, что информация в каналах именно та, которая требовалась:
Теперь текстуру можно использовать в материале:
Бонус.
В Gimp есть инструмент, позволяющий извлечь информацию из конкретного цветового канала и даже определённую компоненту: оттенок, насыщенность, освещённость и прочее. Извлечённая информация перепишет активный слой.
Colors/Components/Extract Component
Если требуется извлечь RGBA-каналы или определённые компоненты в отдельные слои, то для этого подойдёт инструмент Colors/Components/Decompose.
В варианте «распаковки» RGB будет создано новое изображение, в котором разместится набор слоёв по числу каналов. При этом исходное изображение останется без изменений.
Подобную «распаковку» применяют для создания различных масок на базе извлечённых каналов-слоёв. Либо можно заменить желаемый слой и собрать изображение с помощью Compose с изменённой информацией для того или иного канала.