[recovery mode] Вращение по кругу объектов в blender с помощью geonodes
Всем привет, в этой статье я покажу и объясню как сделать вращение по кругу объектов в 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 файл с нодами скачать по ссылке https://drive.google.com/file/d/1TETcZH5IkpmG8u7b4jeRAlMcPgc0sEg-/view? usp=sharing