Всем привет, в этой статье я покажу и объясню как сделать вращение по кругу объектов в blender, используя geometry nodes. Однажды в чате по блендеру увидел сообщение с просьбой человека помочь ему с анимацией кристаллов, мне эта тема с кристалами показалась интересной и я решил написать небольшую статью.
Результат будет примерно такой:
Вначале создадим ноды геометрии.
Делать мы будем движение объектов по окружности, поэтому удаляем Geometry input и создаем Curve circle , именно мы ее будем крутить.
Далее нам необходимо разместить объекты вдоль этой кривой, это делает нода 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, она нужна , чтобы выводить парамеры в удобном виде, как будто ноды это просто модификатор, вывести как параметр я хочу коллекцию и размер элементов.
Чтобы скейл был не вектором а одним значением , необходимо поменять значение vector на float.
Так же я хочу чтобы объектов было меньше , для этого я меняю resolution у кривой.
Все элементы идут последовательно , надо добавить ноду random value и переключить значение на Integer и подключить к Instance on Points на вход Instance Index, далее попробуйте по изменять параметры.
Далее уберем немного объектов , сделать это можно с помощью ноды random value, после добавления ноды необходимо поменять значение на Boolean и подключить ее к Instance on Points к входу Selection , далее попробуйте по изменять параметры .
Далее сделаем рандомный размер у объектов , как вы уже ,наверное, догадались , делается это нодой Random value , изменяем минимальное и максимальное значение и подключаем Instance on Points к входу Scale.
Так же я хочу рандомный поворот объекта, делаю аналогично , добавляю Random value , изменяю минимальное и максимальное значение и подключаю к Instance on Points к входу Rotation.
Также минимальное и максимальное значение можно вывести в параметры, также как я и раньше это делал.
Теперь надо сделать поворот объектов, делается это нодой Transform, можете уже покрутить объекты , если будете изменять Rotation, но нам надо сделать это автоматически
Далее необходимо добавить такую связку нод (у параметра Vector_speed переключить значение на Float), сейчас объясню как это работает
Scene Time берет секунды и перемножает их (нода Vector math -> multiply) с вектором , из-за чего rotation каждую секунду увеличивается, чтобы это как то контролировать (да да , можно в vector_rotate ставить не 1, а любое другое число, но я так не хочу), делаем еще одну ноду Vector math и перемножаем получившийся вектор на какое то число, в результате получаем вращающиеся объекты, задача уже выполнена, но я хочу еще добавить чтобы объекты не совсем линейно двигались.
Делать я это буду с помощью ноды Noise Texture, добавляем ее и меняем 3d, на 4d, во вход присоединяем Seconds из ноды Scene Time, а так же делаем из Scale параметр и немного уменьшаем его , а то объекты будут просто трястись
Далее просто подсоединяем к Color ramp , с помощью нее можно дополнительно настроить движение объектов, потом получившиеся умножаем (Vector math) на позицию объекта, если это не сделать , то объекты просто съедут
Далее создаем Set position и к offset подключаем Vector Math
В конце я хочу сделать radius у curve circle параметром
Готово , теперь у нас вращающиеся объекты, с не линейной траекторией движения, которые можно настраивать. Если что то не поняли , то можно blend файл с нодами скачать по ссылке.