Нода «Математика» (math node)#
Нода „Math“ позволяет выполнять математические операции.
Входы (inputs)#
Входы ноды являются динамическими. Некоторые входы доступны только для определённых операций. Например, вход „Addend“ доступен только для оператора „Multiply Add“.
- Значение* (value)
Входное значение. Тригонометрические функции читают данное значение в качестве радиан.
- Слагаемое (addend)
Ввод слагаемого.
- Основа (base)
Ввод базы.
- Экспонента (exponent)
Ввод экспоненты.
- Эпсилон (epsilon)
Ввод эпсилона.
- Расстояние (distance)
Ввод расстояния.
- Минимум (min)
Ввод минимума.
- Максимум (max)
Ввод максимума.
- Инкремент (increment)
Ввод инкремента.
- Масштаб (scale)
Ввод масштаба.
- Градусы (degrees)
Ввод градусов.
- Радианы (radians)
Ввод радиан.
Свойства (properties)#
- Операция (operation)
Математическая операция, применяемая к вводным значениям:
- Функции (functions)
- Добавить (add):
Сумма двух значений.
- Вычесть (subtract):
Разность двух значений.
- Перемножить (multiply):
Произведение двух значений.
- Разделить (divide):
Деление первого значения на второе значение.
- Умножить и сложить (multiply add):
Сумма произведения двух значений со „слагаемым“.
- Мощность (power):
Возведение „основы“ в степень „экспоненты“.
- Логарифм (logarithm):
Логарифм значения с „базой“ в качестве основания.
- Квадратный корень (square root):
Квадратный корень значения.
- Обратный квадратный корень (inverse square root):
Единица, делённая на квадратный корень значения.
- Абсолютно (absolute):
Вводное значение читается без учёта его знака. Это превращает отрицательные значения в положительные.
- Экспонента (exponent):
Возводит число Эйлера в степень значения.
- Сравнение (comparison)
- Минимум (minimum):
Выводит наименьшее из вводных значений.
- Максимум (maximum):
Выводит наибольшее из двух вводных значений.
- Меньше чем (less than):
Выводит „1.0“, если первое значение меньше второго. В противном случае вывод равен „0.0“.
- Больше чем (greater than):
Выводит „1.0“, если первое значение больше второго. В противном случае вывод равен „0.0“.
- Знак (sign):
Извлекает знак вводного значения. Все положительные числа выведут „1.0“. Все отрицательные числа выведут „-1.0“. И значение „0.0“ выведет „0.0“.
- Сравнить (compare):
Выводит „1.0“, если разница между двумя вводными значениями меньше или равна „Epsilon“.
- Сглаженный минимум (smooth minimum):
- Сглаженный максимум (smooth maximum):
- Скругление (rounding)
- Округлить* (round):
Округляет вводное значение до ближайшего целого числа.
- Пол / Округлить вниз (floor):
Округляет вводное значение в меньшую сторону до ближайшего целого числа.
- Округлить вверх (ceil):
Округляет вводное значение в большую сторону до ближайшего целого числа.
- Обрезать (truncate):
Выводит целую часть значения.
- Дробная часть (fraction):
Возвращает дробную часть значения.
- Усечённый модуль (truncated modulo):
Выводит остаток после деления первого значения на второе значение.
- Остаток по модулю (floored modulo):
Возвращает положительный остаток операции деления.
- Обернуть* (wrap):
Выводит значение между „Min“ и „Max“ на основе абсолютной разницы между вводным значением и ближайшим целым числом, кратным „Max“, меньшему, чем значение.
- Привязать (snap):
Округляет вводное значение в меньшую сторону до ближайшего целого числа, кратного „инкременту“.
- Пинг-понг (ping-pong):
Значение на вывод перемещается между „0.0“ и „масштабом“ в зависимости от вводного значения.
- Тригонометрические (trigonometric)
- Синус (sine):
Синус вводного значения.
- Косинус (cosine):
Косинус вводного значения.
- Тангенс (tangent):
Тангенс вводного значения.
- Арксинус (arcsine):
Арксинус вводного значения.
- Арккосинус (arccosine):
Арккосинус вводного значения.
- Арктангенс (arctangent):
Арктангенс вводного значения.
- Арктан2 (arctan2):
Выводит арктангенс первого значения, делённого на второе значение, измеренное в радианах (Inverse Tangent).
- Гиперболический синус (hyperbolic sine):
Гиперболический синус вводного значения.
- Гиперболический косинус (hyperbolic cosine):
Гиперболический косинус вводного значения.
- Гиперболический тангенс (hyperbolic tangent):
Гиперболический тангенс вводного значения.
- Преобразование (conversion)
- В радианы (to radians):
Преобразует ввод из градусов в радианы.
- В градусы (to degrees):
Преобразует ввод из радианов в градусы.
- Ограничение (clamp)
Ограничивает вывод диапазоном от „0.0“ до „1.0“. См.: «Clamp».
Выходы (outputs)#
- Значение* (value)
Вывод числового значения.
Примеры#
Ручная сборка Z-маски#
Пример функции „минимума“ и „максимума“.#
Верхняя нода „Render Layers“ имеет куб, который находится примерно в 10 единицах от камеры. Нижняя нода „Render Layers“ имеет плоскость, которая покрывает левую половину вида и находится в 7 единицах от камеры. Оба проходят через соответствующие ноды „Map Value“ для умножения значения глубины на „0.05“ и фиксирования её на [0.0, 1.0], проводя её к подходящему диапазону для отображения в качестве цвета.
Нода „Minimum“ выбирает наименьшее из двух значений глубины в каждом пикселе. В левой половине она выбирает плоскость (потому что она ближе куба), а в правой половине она выбирает куб (потому что он ближе фона, который бесконечно далёк).
Нода „Maximum“ выбирает наибольшее из двух значений глубины в каждом пикселе. В левой половине она выбирает куб (потому что он дальше, чем плоскость), а в правой половине она выбирает фон (потому что он дальше, чем куб).
Использование функции синуса для пульсаций#
Пример использования функции „синуса“.#
В этом примере нода „Time Curve“ выводит линейную секвенцию от „0“ до „1“ в течение 101 кадра. В кадре 25 – выходное значение равно „0.25“. Это значение умножается на 2 × pi (6.28) и преобразуется в „1.0“ с помощью функции синуса, поскольку \(sin(2 × pi/ 4) = sin(pi/ 2) = +1.0\).
Поскольку функция синуса может выводить значения в диапазоне [-1.0 до 1.0], нода „Map Value“ масштабирует его до „0.0“ до „1.0“, беря вводные данные [-1 до 1], добавляя „1“ [делая 0 до 2] и умножая результат на „0.5“ (таким образом масштабируя выходные данные к диапазону от „0“ до „1“). По умолчанию „Color Ramp“ преобразует эти значения в оттенки серого. Таким образом, средний серый соответствует выходным данным синуса „0.0“, чёрный „-1.0“, а белый „1.0“. Как видите, \(sin(pi/ 2) = 1.0\). Как будто у вас есть собственный визуальный калькулятор цвета! Анимация этой конструкции нод обеспечивает плавную циклическую секвенцию в диапазоне оттенков серого.
Используйте эту функцию для изменения, к примеру, альфа-канала изображения, чтобы реализовать эффект затухания/проявления. Изменяйте „Z“-канал, чтобы переместить сцену в фокус / из фокуса. Изменяйте значение цветового канала, чтобы заставить цвет «пульсировать».
Осветление (масштабирование) канала#
Пример масштабирования канала.#
В этом примере нода „Math «Multiply»“, увеличивает канал яркости (Y) изображения, чтобы сделать его светлее. Обратите внимание, что следует использовать ноду „Map Value“ с активными параметрами „min()“ и „max()“, чтобы усечь диапазон вывода до допустимых значений. При таком подходе, для создания изображения с высоким динамическим диапазоном, можно использовать логарифмическую функцию. В этом конкретном примере также можно использовать ноду „Brightness/Contrast“, которая позволяет упростить настройку яркости изображения.
Ограничить выделение цвета / Постеризация#
Пример постеризации.#
В этом примере мы ограничиваем значения цвета одним из шести значений: 0, 0.2, 0.4, 0.6, 0.8, 1.
Чтобы разбить непрерывный диапазон значений от 0 до 1 на определённый набор значений, используется следующая функция: \(round(x × n - 0.5) / (n - 1)\), где «n» – количество возможных выходных значений, а «x» – цвет входного пикселя. Подробнее об этой функции (на английском языке).
Чтобы реализовать эту функцию в Blender, рассмотрите конструкцию нод выше. Мы связываем математические ноды в функцию, которая принимает каждый цвет (значения от 0 до 1), умножает его на шесть, на желаемое количество делений (значения становятся от 0 до 6), смещает его на 0.5 (от -0.5 до 5.5) , округляет значение до ближайшего целого числа (выдает 0, 1, 2, 3, 4, 5), а затем делит цвет пикселя изображения на пять (0.0, 0.2, 0.4, 0.6, 0.8, 1.0).
В случае с цветным изображением, необходимо разбить его на отдельные каналы RGB с помощью нод Separate/Combine Color и выполнить эту операцию независимо на каждом канале.