Разница в использовании шейдерных нод Modulo и Wrap в Blender

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

Соберем простейшую сцену для наглядной демонстрации эффекта.

Сначала добавим в сцену дефолтный плейн (shift + a — Mesh — Plane), расположенный на плоскости X-Y и назначим ему базовый материал.

Добавим в этот материал нод Texture Coordinates (shift + a — Input — Texture Coordinates). На вход «Base Color» нода Principled BSDF подадим выход «Object» с нода Texture Coordinates. Таким образом мы делаем отображение цветом на плейне его собственных координат. Начальная точка координатной системы (0.0, 0.0) в этом случае будет совпадать с ориджином плейна.

Точка ориджина в нашем случае расположена в центре плейна, поэтому мы сразу видим распределение цветов по положительным и отрицательным осям. Красный цвет — координата по оси X, зеленый — по оси Y.

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

В большинстве случаев для процедурных зацикливаний используется нод Modulo. Добавим его (shift + a — Utilities — Vector Math — переключить в режим Modulo) после нода Texture Coordinates. На первый вход пусть идут координаты объекта, а значения во втором входе поставим равным единице (1.0, 1.0, 1.0). Таким образом мы зацикливаем повторение координат на промежутке кратном единице.

Добавим перед нодом Modulo нод Scale (shift + a — Utilities — Vector Math — переключить в режим Scale). Значение масштабирования поставим, например, 3. Таким образом мы уменьшаем масштаб в 3 раза.

Мы получили демонстрацию нашего паттерна — зацикливание координаты по текущей оси в промежутке от 0.0 до 1.0, уменьшенное в 3 раза.

И здесь мы наглядно видим, что отрицательные значения по обоим осям при генерации паттерна у нас отброшены.

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

Однако, можно поступить проще.

Добавим в дерево нод Wrap (shift + a — Utilities — Vector Math — переключить в режим Wrap) и переключим на него ветку с нода Modulo. Значение во втором входе нода поставим в единицу (1.0, 1.0, 1.0).

Теперь сразу же, без дополнительных нод, мы получаем наш паттерн, размноженный как для положительных значений координат, так и для отрицательных.

Происходит это потому, что алгоритм Wrap, в отличие от алгоритма Modulo, берет разницу зацикливаемых значений по модулю, а не знаковую.

Таким образом, используя нод Wrap вместо Modulo, мы можем упростить себе получение циклических паттернов, если они требуются не только для положительных, но и для отрицательных значений координат объекта.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

2 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Вячеслав
Вячеслав
18 дней назад

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