Пикселизирование текстуры

Простейший способ пикселизировать текстуру, не важно процедурную или растровую, — взять цвет одного пикселя текстуры и заполнить им область с нужной высотой и шириной, определяющими разрешение пикселизации.

Возьмем для примера простую процедурную текстуру градиента от красного цвета через зеленый к синему.

Для того, чтобы пикселизировать данную текстуру попробуем немного поманипулировать с векторами.

Представим условное разбиение текстуры на области.

Мы можем взять цвет одного пиксела и заполнить им нужный регион.

Исходные данные для получения координат пикселя мы возьмем с векторного выхода нода «Texture Coordinate». На всей площади нужного региона мы должны вместо вектора в каждую его точку использовать вектор в одну точку, которая будет задавать цвет всего региона.

Это легко сделать, просто округляя значение вектора в текущую точку текстуры. Лимит округления определяется исходя из требуемых размеров региона, который в свою очередь определяется из количества разбиений т.е. требуемого разрешения пикселизации.

Для округления любых значений до нужного предела (разрешения), проще всего умножить значение на заданное разрешение, округлить результат и разделить его обратно на заданное разрешение.

Реализуем это выражение нодами и обернем полученную конструкцию в нодовую группу.

Любой вектор состоит из трех составляющих — координат по осям X, Y и Z. Для округления вектора нужно округлить каждое из этих трех значений.

Разобьем вектор на составляющие с помощью нода «Subdivide XYZ», округлим их созданной нодовой группой и соберем обратно в вектор через ноду «Combine XYZ». Обернем полученную конструкцию так же в нодовую группу.

Теперь можно вставить созданную группу в наше нодовое дерево, генерирующее текстуру градиента.

Увеличим разрешение для более наглядной пикселизации.

Чтобы результат был еще более наглядным, переключим тип градиента из линейного в сферический.

Созданная нодовая группа для пикселизации универсальна, ее можно использовать для пикселизации любой текстуры.