Экструд текста волнами в 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 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии