Гравитационная сфера на геонодах
Доброго времени суток. Ссылаясь на уже существующие 2 статьи про сферу Сигмы решил запилить оную(сферу, не статью) на геонодах в blender, ради интереса, так сказать.
Додекаэдр
Представим, что у нас нет возможности добавить правильный додекаэдр в сцену (я не смог) поэтому проще сделать его самому, для этого добавим объект cicrcle в центр мировых координат с 5 вертексами в составе.
Далее я подсмотрел на википедии, что угол между смежными гранями у додекаэдра равен 116,565 градусов, значит мне нужно будет повернуть копию пятиугольника именно на это число. Затем создавая дубликаты создаем конечную форму, прямо как нарисовать сову.
Далее можно воспользоваться способом из статьи товарища i came here to chew bubblegum. Получаем единичный сегмент, который необходимо выровнять.
После чего можно эту штуку проверить на «ровность».
Оставляем эталонную часть из нижнего сегмента, добавляем mirror и создаем 3 копии по оси Z.
Сборка
Теперь нужно собрать цельный додекаэдр с помощью нод геометрии, собирать можно хоть на плоскости, хоть на сфере но удобнее все-же на примитиве додекаэдра, так как мы сможем выбрать нужные нам точки для спавна инстансов и украсть у них направление их нормалей для правильной ориентации инстансов.
Далее вешаем на него модификатор GeomatryNodes и создаем новую группу нод, в редакторе размещаем такие блоки:
Далее видим, что инстансы смотрят в нужном направлении, но угол их вращения рандомный:
Если бы далее я понял как перебрать каждый инстанс и повернуть его на нужный угол, думаю получился бы самый логичный способ, но мой гуманитарный мозг решил, что проще собрать додекаэдр по частям.
Рассмотрим структуру объекта, видим, что он радиально симметричен, следовательно проще всего будет создать один сегмент и с помощью кругового массива сделать еще 4 его копии вдоль нужной оси.
Размещаем инстансы на объекте как и раньше, нам понадобятся произвольные 2, я обвел самые подходящие, один из них ориентирован так как нам надо, а второй нуждается всего лишь в повороте на 180 по оси Z.
Методом подбора выяснил, что нужные нам инстансы имеют ID — 12 и 13, значит нужно подать эти значения на вход selection ноды Instances on Points.
Казалось бы — логичная структура, берем все индексы(ID) в объекте, они там могут быть какие угодно, не обязательно 0,1,2,3... и тд, поэтому лучше подать их на вход ноды Compare в режиме сравнения Equal достоверно найти в этой последовательности нужный нам номер, после чего объединить результаты сравнения нодой boolean math в режиме «And» и получить нужную нам структуру где выбраные нами номера индексов будут иметь значение 1, а все, что не попало в диапазон — 0.
Но, это не работает, почему я так и не выяснил, так-же я не выяснил почему случайно обнаруженный мною способ это починить работает — нужно пропустить это через двойное отрицание (если подскажите буду рад, только без оскорблений плиз, знаю, что тупой) .
Далее вращаем нижний инстанс на 180 градусов, но на вход Selection подаем уже новый номер, теперь этот инстанс не 13, а 1.
Ну вот, основа готова, далее продуцируем копии, поможет нам в этом нода Duplicate Elements, собственно создает нужное количество копий и каждую снабжает уникальным индексом, это нам очень поможет.
Для начала создадим 4 копии и повернем каждую на 72 градуса по Z. Тут нам помогут уникальные номера дубликатов, они являют собой последовательный массив из цифр каждая из которых соответствует номеру копии. Берем номер копии и умножаем его на 72, таким образом копия 1 повернется на 72, копия 2 на 144 и т. д.
Верхняя половина готова, теперь продублировав уже ее создадим нижнюю часть, тут все просто, дубликат повернем на 180 градусов по оси X.
Далее немного подогнал им размер с помощью Scale Instances, привязал к ним материал и «освободил», нода Realize Instances конвертирует инстансы в геометрию с которой далее можно работать как с цельным объектом.
Ну и стек модификаторов, что бы сделать это все красивым
Далее для анимации прикрутил небольшой блок с шумом на ноду отвечающую за масштаб инстансов, что бы регулировать их масштаб нойзом и на ноду отвечающую за перемещение инстансов в пространстве, тут углубляться не буду там не очень интересно.
Ядро сферы анимируется по такому-же принципу.
Материалы
Материалы не очень сложные, материал ядра старался сделать похожим на игровой.
В основе обычный Mix RGB в котором смешиваю синий и черный, смешиваю по маске из LayerWeight откорректированным с помощью ColorRamp.
Рябь на поверхности сделана путем добавления шума к текстурным координатам Layer Weight’а
И таким образом получаем
Шейдер выбрал Emission что бы исключить на сферу вляние других объектов, теней и прочего, добавил небольшой блик на поверхность с помошью ноды Glossy.
Вывод
Способ конечно максимально колхозный, буду рад если кто-то сделает тем способом которым у меня не получилось, а именно размещение инстансов на всех точках объекта и далее с помощью математического колдунства приведение их ориентации к нормальному виду.
И на последок статичный рендер
Все спасибо.