Скроллинг инстансов вдоль кривой в Blender при помощи Geometry Nodes

В Blender при помощи нод геометрии Geometry Nodes можно создать несколько инстансов (копий) меша, распределить их вдоль кривой и смещать их вдоль этой кривой в нужное положение.

Рассмотрим на примере, как это сделать.

Добавим в сцену Сюзанну и кривую, вдоль которой будем размещать ее инстансы:

shift+a – Mesh – Suzanne

shift+a – Curve – Circle

Для кривой установим радиус равный 5 м. Назначим мешу модификатор “Geometry Nodes” и создадим для него новое дерево нод.

Для доступа к кривой из дерева нод меша Сюзанны добавим нод “Object Info” и выберем кривую “Bezier Circle” в поле источника. Включим режим “Relative” чтобы брать положение меша относительно точки origin кривой.

Для создания инстансов добавим в дерево нод “Instances on Points” и подключим его в главную ветку нодового дерева. Геометрия меша должна служить источником инстансов, поэтому подключим ее на вход “Instances” нода.

Для того, чтобы нод “Instance on Points” знал, где именно нужно разместить инстансы, нужно подать набор точек на его вход “Points”. Эти точки мы возьмем с нашей кривой.

Превратить кривую в набор точек можно с помощью нода “Curve to Points”. Добавим его в дерево и подключим к кривой. Выход “Points” подадим на нод “Instance on Points”.

Переключим нод в режим “Count” и зададим значение равное 5. Это означает, что на кривой будут созданы 5 точек, делящих ее на 5 равных частей.

Соединив выход “Points” со входом “Points” на ноде “Instance on Point” мы инициировали создание инстанса Сюзанны в каждой из 5 точек на кривой.

Для того, чтобы мы могли двигать инстансы по кривой, нам нужно получить смещение для каждого из них. В этом нам поможет нод “Sample Curve” в режиме “Factor”. Он выдает относительное положение точки на кривой в зависимости от числа из диапазона 0 – 1, где 0 – соответствует началу кривой, а 1 – ее концу.

Добавим в дерево этот нод, а также нод “Set Position”, чтобы мы могли задавать точкам нужное положение.

Сейчас мы с помощью “Sample Curve” определяем точку на кривой и присваиваем всем точкам, полученным с нода “Curve to Points” ее координаты. Поэтому все 5 инстансов у нас сейчас сдвинулись в одну точку.

Чтобы нод “Sample Curve” выдавал нам координаты смещения не для одной точки а для всего набора из 5 точек, на его вход “Factor” нужно так же подать не одно значение, как сейчас, а 5.

Для каждого из наших 5-ти инстансов, размещенных в 5-ти точках кривой мы можем получить индекс – его порядковый номер от 0 до 4. Индексы у точек на кривой будут точно такие же.

Разделив индекс на общее количество точек мы получим относительную величину смещения для каждой точки на кривой в начальный момент.

Добавим в дерево нод “Index” и с помощью нода “Math” в режиме “Divide” разделим индекс на количество точек. В результате мы получим набор смещений для каждой точки на кривой. Подадим его на вход “Factor” нода “Sample Curve”.

Как мы видим, точки, а вместе с ними и инстансы, вернулись на свои места.

Чтобы вручную скроллировать инстансы по кривой, добавим еще дополнительное смещение при помощи нода “Math” в режиме “Add”.

Изменяя значение нода мы двигаем инстансы вдоль кривой.

Однако, как можно заметить, смещение инстансов не циклическое. Для того, чтобы зациклить его так, чтобы последний инстанс всегда следовал за первым, добавим еще один нод “Math” в режиме “Modulo”. Т.к. диапазон смещений в ноде “Sample Curve” изменяется от 0 до 1, цикличность в ноде “Modulo” тоже поставим равной 1, что соответствует всей длине кривой.

Теперь наши инстансы при скроллировании значения в ноде “Add” корректно следуют друг за другом.

Чтобы инстансы смотрели вдоль движения по кривой, приведем их ось “Y” к касательной на кривой при помощи нода “Euler to Vector”.

Теперь инстансы смотрят по направлению движения и их можно скроллировать вдоль кривой.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии