При помощи Blender Geometry Nodes можно легко и быстро создать полностью процедурный мячик для гольфа.
Откроем базовую сцену. Добавим в нее плоскость (shift + a – Mesh – Plane). Назначим ей модификатор Geometry Nodes и инициализируем дерево нод.
Добавим в дерево нод ICO Sphere (shift + a – Mesh Primitives – Ico Sphere) для создания базового меша. Поставим в параметрах нода Radius = 0.26 и количество подразделений Subdivision = 4.
Отсоединим нод Group Input так как мы не будем использовать исходную геометрию плоскости, и подсоединим нод ICO Sphere к ноду Group Output, чтобы работать с геометрией сферы.
ICO Sphere состоит из треугольников, которые мы легко можем преобразовать в шестиугольники при помощи нода Dual Mesh.
Dual Mesh преобразовывает каждый полигон геометрии меша, строя новые ребра из центра полигона к центрам его ребер.
Добавим нод Dual Mesh (Shift + a – Mesh – Dual Mesh) чтобы преобразовать все треугольники ICO Sphere в шестиугольники.
Превратим полученные шестиугольники в выемки, вдавив их внутрь меша при помощи нода Extrude.
Добавим нод Extrude Mesh (shift + a – Mesh – Extrude Mesh). Режим выдавливания оставим в значении по умолчанию “для полигонов” – Faces, и установим значение выдавливания Offset равное -0.005. Отрицательное – для того чтобы выдавливалось внутрь меша.
Как мы видим, границы ячеек получились очень резкими. И если увеличить масштаб, будут видны пересечения между выдавленными полигонами.
Для того чтобы добавить гладкости и устранить самопересечения отмасштабируем каждый выдавленный полигон по направлению к его центру.
Для начала сохраним центр каждого полигона в атрибут.
Добавим нод Capture Attribute (shift + a – Attribute – Capture Attribute). Переключим его в режим работы Vector – Faces, что даст нам возможность сохранять координаты каждого полигона. Добавим нод Position (shift + a – Input – Position) и соединим его выход “Position” со входом “Vector” нода Capture Attribute. Таким образом на выходе “Attribute” мы получим сохраненные координаты центра каждого полигона.
Вставим нод Capture Attribute перед нодом Extrude Mesh, чтобы сохранить координаты полигонов до экструдирования.
Для того чтобы масштабировать полигоны после экструдирования, добавим в дерево нод Set Position (shift + a- Geometry – Set Position). Расположим его после нода Extrude Mesh.
Соединим выход “Top” нода Extrude Mesh со входом “Selection” нод Set Position, чтобы изменить размеры только у экструдированных полигонов, не затрагивая “стенки” экструдирования.
Добавим нод Mix (shift + a – Color – Mix RGB). Его верхний вход “Color” соединим с выходом “Attribute” нода Capture Attribute. Нижний вход “Color” соединим с выходом нода “Position”.
Таким образом мы получаем переходное значение для каждой токи полигона из ее текущего местоположения в сохраненную ранее точку центра полигона до экструда. Смещение от одного значения до другого контролируется параметром “Factor” нода Mix RGB.
Поставим значение Factor = 0.8.
Значение, полученное на выходе “Color” нода подадим на вход “Position” нода Set Position.
Таким образом мы получили выемки с наклонными краями без пересечений.
Для окончательной доводки меша добавим в конец дерева ноды Subdivision Surface (shift + a – Mesh – Subdivision Surface), с уровнем подразбиения Level = 2 для сглаживания меша, Set Shade Smooth (shift + a – Geometry – Set Shade Smooth) для включения сглаженного шейдинга и Set Material (shift + a – Material – Set Material) для назначения материала.
Переключимся в рабочую область “Shader Editor” и создадим новый материал.
Настроим простейший материал для нашего мячика, изменив значения в ноде по умолчанию Principled BSDF: Specular = 0.6 и Roughness = 0.3.
Вернемся в рабочую область Geometry Nodes и в ноде Set Material укажем созданный материал.
Мячик для гольфа готов.