[recovery mode] Вращение по кругу объектов в blender с помощью geonodes

Всем привет, в этой статье я покажу и объясню как сделать вращение по кругу объектов в blender, используя geometry nodes. Однажды в чате по блендеру увидел сообщение с просьбой человека помочь ему с анимацией кристаллов, мне эта тема с кристалами показалась интересной и я решил написать небольшую статью.

Результат будет примерно такой:

Вначале создадим ноды геометрии.

32fe97912c4dfa1a87598266b01aeab8.png

Делать мы будем движение объектов по окружности, поэтому удаляем Geometry input и создаем Curve circle, именно мы ее будем крутить.

8cee27df6e4586a4010bed723e3d87a9.png

Далее нам необходимо разместить объекты вдоль этой кривой, это делает нода Instance on points, сразу же после добавления ставим галочку на Pick Instance, размещать я буду коллекцию , поэтому добавляю Collection Info, ставлю Relative и ставлю обе галочки, Separate Children и Reset Children, подробнее об это можно почитать тут https://docs.blender.org/manual/ru/dev/modeling/geometry_nodes/input/scene/collection_info.html, Далее соединяю ее со входом Instance в уже добавленной ноде Instance on Points, далее ставлю ноду Scale Instances (далее будет понятно , почему я не скейлю в instance on points), далее ставлю ноду Group Input, она нужна , чтобы выводить парамеры в удобном виде, как будто ноды это просто модификатор, вывести как параметр я хочу коллекцию и размер элементов.

194269bb3c8c1472d52f7261b0fc34bf.png

Чтобы скейл был не вектором, а одним значением , необходимо поменять значение vector на float.

a5032020ef89436b7740470025342d90.png

Так же я хочу чтобы объектов было меньше, для этого я меняю resolution у кривой.

d0248b63d09431a074cd00214ef6af09.png

Все элементы идут последовательно , надо добавить ноду random value и переключить значение на Integer и подключить к Instance on Points на вход Instance Index, далее попробуйте по изменять параметры.

c94513057b1f01802433299fd57c5819.png

Далее уберем немного объектов , сделать это можно с помощью ноды random value, после добавления ноды необходимо поменять значение на Boolean и подключить ее к Instance on Points к входу Selection, далее попробуйте по изменять параметры .

373e7b3075da541e39754b5e293b7b28.png

Далее сделаем рандомный размер у объектов , как вы уже, наверное, догадались , делается это нодой Random value, изменяем минимальное и максимальное значение и подключаем Instance on Points к входу Scale.

76f354456a813781a05a201f065a8d88.png

Так же я хочу рандомный поворот объекта, делаю аналогично , добавляю Random value, изменяю минимальное и максимальное значение и подключаю к Instance on Points к входу Rotation.

7c6dc9d132445c5adb51505f8844fa4b.png

Также минимальное и максимальное значение можно вывести в параметры, также как я и раньше это делал.

770c8840be1e2931af27b89096d0e479.png

Теперь надо сделать поворот объектов, делается это нодой Transform, можете уже покрутить объекты , если будете изменять Rotation, но нам надо сделать это автоматически

329cf8e9569f32f393448313b97d9f09.png

Далее необходимо добавить такую связку нод (у параметра Vector_speed переключить значение на Float), сейчас объясню как это работает

77bc1ab17638981f1369129bccff9de8.png

Scene Time берет секунды и перемножает их (нода Vector math → multiply) с вектором , из-за чего rotation каждую секунду увеличивается, чтобы это как то контролировать (да да , можно в vector_rotate ставить не 1, а любое другое число, но я так не хочу), делаем еще одну ноду Vector math и перемножаем получившийся вектор на какое то число, в результате получаем вращающиеся объекты, задача уже выполнена, но я хочу еще добавить чтобы объекты не совсем линейно двигались.

Делать я это буду с помощью ноды Noise Texture, добавляем ее и меняем 3d, на 4d, во вход присоединяем Seconds из ноды Scene Time, а так же Делаем из Scale параеметр и немного уменьшаем его , а то обьекты будут просто трястись

824b43271fe11babef041145e3fd2849.png

Далее просто подсоединяем к Color ramp, с помощью нее можно дополнительно настроить движение объектов, потом получившиеся умножаем (Vector math) на позицию объекта, если это не сделать , то объекты просто съедут

e9dedadef84287105321f76120d90446.png

Далее создаем Set position и к offset подключаем Vector Math

03f473bf0eaea57ad2cb236c32084a55.png

В конце я хочу сделать radius у curve circle параметром

f8773ab7c4e682b9a49744cc5ac2f0e2.png

Готово , теперь у нас вращающиеся объекты, с не линейной траекторией движения, которые можно настраивать. Если что то не поняли , то можно blend файл с нодами скачать по ссылке https://drive.google.com/file/d/1TETcZH5IkpmG8u7b4jeRAlMcPgc0sEg-/view? usp=sharing

© Habrahabr.ru