Зачем нужна упаковка каналов
Затенение, шероховатость и металличность — это всего по одному числу на тексель. Поставлять их тремя отдельными текстурами значит три загрузки, три сэмплера на GPU, три набора мип-уровней — и три RGB-изображения, каждое из которых хранит одно и то же значение трижды. Упаковка в каналы одной текстуры сводит всё это к одной выборке. Этот бесплатный онлайн-упаковщик ORM-текстур делает это прямо на вашем устройстве и точно так же распаковывает готовые текстуры.
Раскладки
ORM (glTF / Khronos) — красный = затенение, зелёный = шероховатость, синий = металличность. Для glTF это не оптимизация, а сама спецификация: pbrMetallicRoughnessTexture хранит шероховатость в зелёном канале, а металличность — в синем, тогда как occlusionTexture по устоявшейся практике ссылается на то же изображение ради его красного канала. Экспортируете GLB? Вам нужна именно эта раскладка.
RMA — красный = шероховатость, зелёный = металличность, синий = фоновое затенение. Встречается в Unreal и в наборах ассетов из магазинов. Те же три карты, только в другом порядке — именно поэтому, перепутав раскладки, вы получаете блестящий материал там, где он должен быть шероховатым.
Unity Metallic/Smoothness — красный = металличность, альфа = гладкость. Шейдер Standard в Unity читает из альфы гладкость, то есть величину, обратную шероховатости. Если исходник — карта шероховатости, включите для этого канала инверсию, и преобразование произойдёт прямо во время упаковки.
Свой вариант — любой канал любого загруженного изображения в любой выходной канал, плюс константы для всего, что должно остаться однородным.
Чтение нужного канала
Каждый канал читает либо яркость (по умолчанию — верный выбор для полутоновых исходников), либо конкретный канал R, G, B или A. Второе важно, когда исходник сам упакован и вы переводите его из одной раскладки в другую — загрузите карту RMA и вытяните из неё зелёный канал в слот металличности.
Входы разного размера
Карта шероховатости 2048 и запечённое затенение 512 — обычное дело. Упаковке нужна единая сетка, поэтому по умолчанию выход подстраивается под самый крупный вход, а карты поменьше масштабируются вверх; можно также принудительно задать квадратное разрешение. Инструмент показывает, какие именно входы он масштабировал.
С альфа-каналом обращаются как положено
Холсты браузера хранят пиксели с предумноженной альфой, и это незаметно разрушает точность цвета всюду, где альфа мала, — что убийственно для карты metallic/smoothness из Unity, у которой самые важные данные лежат как раз в альфе. Поэтому, когда в упакованном результате есть хоть какая-то прозрачность, инструмент пишет PNG сам, байт за байтом, минуя кодировщик холста. Распаковка по той же причине декодирует с прямой (непредумноженной) альфой.
Распаковка
Загрузите упакованную текстуру, выберите используемую раскладку — и получите четыре полутоновых PNG для скачивания, названных по их содержимому. Инвертируйте альфа-канал, чтобы вернуть шероховатость из карты гладкости Unity. Ничего никуда не отправляется — всё происходит локально.
Tiny Online Tools







