Автор описывает практическую проблему продакшена в Unreal Engine 5: при вертекс-пейнте сложных ассетов (персонажи с разными материалами кожи, ткани, металла или многоуровневые окруженческие объекты) стандартных четырёх каналов RGBA для масок часто не хватает.
Обычно художники используют вертекс-цвет как 4 независимые маски (R, G, B, A). Для более сложных материалов приходится идти на компромиссы: дополнительные UV-каналы, текстурные маски или дорогие по вычислениям ноды с вычислением цветовой дистанции.
Автор предлагает решение в виде набора нод/плагина Vertex Color ID Masks для UE5, позволяющего получить 9 отдельных скалярных масок из одного слоя вертекс-цвета без увеличения памяти и без дополнительных UV.
Схема работы:
- Художник красит меш не произвольными цветами, а строго чистыми ID-цветами: Red, Green, Blue, Cyan, Yellow, Magenta, Black Alpha, Grey Alpha, White Alpha.
- Материал через специальные ноды разбирает этот один вертекс-цвет на 9 аккуратных масок, каждая соответствует одному ID-цвету.
- Таким образом, из одного RGBA-вертекс-слоя получается 6 масок по чистым цветам (RGB + CMY) и ещё 3 маски за счёт разбиения альфа-канала (чёрный, серый, белый альфа).
С точки зрения производительности решение значительно дешевле традиционных подходов на основе сравнения цвета (color-distance):
- ~15 shader instructions для всех 9 масок (6 цветовых + 3 из альфы).
- Против 80+ инструкций для классических методов с вычислением расстояния между цветами.
Итог: геймдизайнер и техарт получают возможность задавать до 9 независимых зон/слоёв материала на одном меше через один вертекс-цвет, без роста памяти и с минимальной нагрузкой на шейдер.
Выводы
- Стандартных 4 RGBA-каналов вертекс-цвета часто недостаточно для сложных материал-зон.
- Vertex Color ID Masks позволяет получить 9 скалярных масок из одного слоя вертекс-цвета.
- Используются строгие ID-цвета (RGB, CMY и три варианта альфы) вместо произвольных оттенков.
- Решение не требует доп. UV и памяти и даёт ~15 инструкций против 80+ у классических color-distance подходов.
- «I can identify 6 distinct pure colors and split Alfa channel to 3 ID Masks, and finally, you have 9 individual masks to work with. No extra memory. No additional UV channels.» — формально верно, что дополнительных UV и вершинных каналов не требуется, но утверждение «No extra memory» звучит чрезмерно категорично. Любая дополнительная логика в материале увеличивает стоимость шейдера (инструкции, регистры, возможные кэши), что в широком смысле тоже относится к ресурсам/«памяти». Корректнее говорить, что не используется дополнительная вершинная/текстурная память, а не что вообще нет дополнительного расхода ресурсов.
- «Performance? Only -15 shader instructions for all 6 Color masks and 3 alpha split combined to 9 masks. Compare that to 80+ for traditional color-distance methods.» — приведённые цифры (−15 инструкций против 80+) подаются как универсальный факт, но зависят от конкретной реализации, платформы, оптимизаций компилятора шейдеров и настроек проекта. Без указания условий измерения это выглядит как неподтверждённое обобщение. Корректнее было бы указать, что «в нашем тестовом проекте» или «порядка X инструкций», а не фиксированные значения для сравнения.