Простейший способ пикселизировать текстуру, не важно процедурную или растровую, – взять цвет одного пикселя текстуры и заполнить им область с нужной высотой и шириной, определяющими разрешение пикселизации.
Возьмем для примера простую процедурную текстуру градиента от красного цвета через зеленый к синему.
Для того, чтобы пикселизировать данную текстуру попробуем немного поманипулировать с векторами.
Представим условное разбиение текстуры на области.
Мы можем взять цвет одного пиксела и заполнить им нужный регион.
Исходные данные для получения координат пикселя мы возьмем с векторного выхода нода “Texture Coordinate”. На всей площади нужного региона мы должны вместо вектора в каждую его точку использовать вектор в одну точку, которая будет задавать цвет всего региона.
Это легко сделать, просто округляя значение вектора в текущую точку текстуры. Лимит округления определяется исходя из требуемых размеров региона, который в свою очередь определяется из количества разбиений т.е. требуемого разрешения пикселизации.
Для округления любых значений до нужного предела (разрешения), проще всего умножить значение на заданное разрешение, округлить результат и разделить его обратно на заданное разрешение.
Реализуем это выражение нодами и обернем полученную конструкцию в нодовую группу.
Любой вектор состоит из трех составляющих – координат по осям X, Y и Z. Для округления вектора нужно округлить каждое из этих трех значений.
Разобьем вектор на составляющие с помощью нода “Subdivide XYZ”, округлим их созданной нодовой группой и соберем обратно в вектор через ноду “Combine XYZ”. Обернем полученную конструкцию так же в нодовую группу.
Теперь можно вставить созданную группу в наше нодовое дерево, генерирующее текстуру градиента.
Увеличим разрешение для более наглядной пикселизации.
Чтобы результат был еще более наглядным, переключим тип градиента из линейного в сферический.
Созданная нодовая группа для пикселизации универсальна, ее можно использовать для пикселизации любой текстуры.