В Blender Geometry Nodes есть ряд нод для работы с текстовыми строками. Среди них есть ноды, позволяющие преобразовывать число в текст, а так же заменять в текстовой строке подстроки. Для примера реализуем “обратный отсчет” от десяти до нуля словами.
Добавим в начальную сцену куб, назначим ему модификатор Geometry Nodes и инициализируем стартовое дерево нод.
Добавим нод Value to String (shift + a – Text – Value to String) и нод String to Curves (shift + a – Text – String to Curves). Подсоединим их в главную ветку нодового дерева.
Число из поля Value нода Value to String преобразуется в текст, в формате кривых, и выводится в сцену.
Для того чтобы сделать “обратный отсчет”, нам нужно два исходных числа. Во-первых – общее количество фреймов на шкале времени, чтобы привести его к диапазону от десяти до нуля. А во-вторых – номер текущего фрейма, чтобы получить текущее показываемого число из этого диапазона.
Нода для получения общего количества фреймов в Geometry Nodes нет, однако мы легко можем получить его через драйвер.
Откроем N-панель, вкладку Group в окне Geometry Nodes. Во входной группе, нажатием на кнопку с плюсиком добавим новое поле и назовем его “frame_end”.
В панели модификатора в появившемся поле введем ссылку на свойство сцены, в котором хранится количество кадров таймлана. Впереди нужно обязательно поставить значок “#”:
1 |
#bpy.context.scene.frame_end |
Так мы сразу создаем драйвер и связываем его с нужным нам свойством сцены.
Если соединить появившийся выход frame_end нода Group Output со входом Value нода Value to String мы увидим отображение числа фреймов таймлайна в нашем объекте в сцене.
Чтобы сделать “обратный отсчет” от десяти до нуля, нам нужно разбить имеющиеся фреймы таймлана на десять промежутков.
Добавим нод Math (shift + a – Utilities – Math) и переключим его в режим деления Divide. Вставим его после нода Group Output. В оставшееся свободным нижнее поле введем значение 10.
На выходе этого нода мы получаем количество фреймов в промежутке.
Если номер текущего фрейма поделить на полученное значение, мы получим в каком промежутке сейчас находится курсор таймлайна.
Текущий фрейм можно получить при помощи нода Scene Time (shift + a – Input – Scene Time).
Добавим еще один нод Math (shift + a – Utilities – Math) в режиме Divide. На его верхний вход Value подадим значение с выхода Frame нода System Time а на нижний – результат с предыдущего нода Divide.
Подвигав курсор на таймлане можно убедиться, что значение нашего отсчета меняется от 0 до 10.
Для того чтобы оно менялось в обратном направлении от десяти до нуля, добавим еще один нод Math (shift + a – Utilities – Math) в режиме вычитания Subtract сразу после второго нода деления.
В его верхнем поле Value укажем значение 10, а нижнее соединим с результатом последнего деления.
Теперь отображаемое значение меняется от десяти до нуля, как нам и нужно.
Теперь нам осталось превратить числа в текст.
Добавим нод Replace String (shift + a – Text – Replace String) и вставим его сразу за нодом Value to String.
В верхнем поле нужно указать какой именно текст будет заменяться. Введем в это поле 10 (в данном случае это строка из двух символов, единицы и нуля).
В нижнем поле нужно указать на что будет заменена строка из верхнего поля. Введем в него строчку TEN.
Добавим последовательно еще девять таких же нодов, для замены каждого числа от девяти до нуля в текст.
Теперь, прогоняя кадры таймлайна, мы видим “обратный отсчет” словами, а не числами.
Для того чтобы буквы были видны при рендере добавим после нода String to Curve нод Fill Curve (shift + a – Curve – Fill Curve) и нод Set Material (shift + a – Material – Set Material). И назначьте подходящий материал.
Теперь можно запустить анимацию на выполнение нажатием на клавишу пробел.