Экструд текста волнами в Blender Geometry Nodes

Скомбинировав экструд текста с несложной математической операцией можно получить интересный эффект объемного текста волнами.

Добавим в сцену куб (shift + a – Mesh – Cube), назначим ему модификатор Geometry Nodes и инициализируем начальное дерево нод, нажав на кнопку “New”.

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

Добавим нод String to Curves (shift + a – Text – String to Curves) в главную ветку дерева нод. В поле “String” укажем какой-нибудь текст.

Заполним контуры при помощи нода Fill Curve (shift + a – Curve – Fill Curve) добавив его сразу после нода String to Curves.

Для придания тексту объема используем нод Extrude Mesh (shift + a – Mesh – Extrude Mesh), добавив его после нода Fill Curve. В поле “Offset Scale” укажем значение 2 для более долгого экструда.

Для удобства можно повернуть весь объект с текстом на 90 градусов вокруг оси X (r – x – 90).

Чтобы дальше работать с геометрией текста после нода Extrude Mesh добавим нод Realize Instances (shift + a – Instances – Realize Instances).

Теперь вместо инстансов букв у нас единый меш.

Сейчас вся геометрия сосредоточена на передней и задней плоскостях меша. Для того чтобы сделать волны нам нужны точки посередине. Подразобьем меш при помощи нода Subdivide Mesh (shift + a – Mesh – Subdivide Mesh), добавив его после нода Realize Instances.

Уровень подразделения выставим равный 5.

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

Добавим нод Set Position (shift + a – Geometry – Set Position) после нода Subdivide Mesh. С его помощью мы будем управлять положением точек.

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

Положение для каждой точки мы можем получить с помощью нода Position (shift + a – Input – Position).

Чтобы получить смещения точек отдельно вдоль осей Y и Z используем нод Separate XYZ (shift + a – Vector – Separate XYZ).

Функцию синуса мы можем получить при помощи нода Math (shift + a – Utilities – Math) в режиме “Sine”.

И собрать смещения по отдельным осям Y и Z обратно в единый вектор при помощи нода Combine XYZ (shift + a – Vector – Combine XYZ).

Добавим и последовательно соединим все перечисленные ноды. Результат вычислений линкуем с входом “Offset” нода Set Position.

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

Для управления амплитудой и частотой волны добавим перед и после нода Sine еще по одному ноду Math (shift + a – Utilities – Math) в режиме Multiply.

Левый нод отвечает за частоту волн, поставим в его свободном поле значение 4.0. Правый – за высоту волны, в его свободном поле укажем значение 0.1.

Таким образом мы получили требуемую форму волны.

Добавим немного динамики – свяжем положение волны с таймлайном.

Для того чтобы получить текущий кадр анимации с таймлайна добавим нод Scene Time (shift + a – Input – Scene Time).

Сразу после нода Separate XYZ добавим еще один нод Math (shift + a – Utilities – Math) в режиме сложения Add. Соединим выход “Frame” нода Scene Time с его свободным входом.

Таким образом к каждому смещению точек мы добавляем значение текущего кадра.

Если теперь запустить анимацию будет видно движение.

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

Добавим нод Math (shift + a – Utilities – Math) в режиме умножения Multiply сразу после нода Scene Time. В оставшемся свободном поле введем значение 0.1.

Теперь анимация выглядит гораздо плавнее и приятнее.

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

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии