При проектировании процедурных материалов, обычно когда нам нужно получить циклически повторяющийся на каком-либо промежутке поверхности паттерн, мы используем нод 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, мы можем упростить себе получение циклических паттернов, если они требуются не только для положительных, но и для отрицательных значений координат объекта.

.blend file on Patreon


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