При помощи Blender Geometry Nodes можно создать простой и эффектный прием масштабирования полигонов меша к их центру.
Добавим в сцену куб (shift + a – Mesh – Cube), назначим на него модификатор Geometry Nodes и инициализируем начальное дерево нод, нажатием на кнопку “New”.
Для начала нам нужно получить координаты центра для каждого полигона. Сделать это мы можем при помощи нода Capture Attribute.
Добавим нод Capture Attribute (shift + a – Attribute – Capture Attribute) в основную ветку нодового дерева. Переключим его в режим Vector – Face.
Нод Capture Attribute сохраняет значение поданного на него атрибута.
Так как мы манипулируем координатами положения, добавим нод Position (shift + a – Input – Position) и соединим его выход Position со входом Value нода Capture Attribute.
Теперь на выходе нода Capture Attribute мы получаем координаты центра для каждого полигона.
Для того чтобы масштабировать полигон к полученной точке центра, нужно координаты его вершин, их мы получаем с выхода нода Position, сдвинуть по направлению к центру полигона, его координаты мы получаем с выхода нода Capture Attribute.
Чтобы получить промежуточное значение между двумя имеющимися значениями, можно использовать нод Mix Color.
Добавим нод Mix Color (shift + a – Color – Mix Color). Переключим его в режим Vector, хотя это и не обязательно, в режиме Color нод будет работать точно так же потому что цвет в Blender представлен точно так же как и вектор – тремя числовыми значениями.
Соединим выходы нодов Position и Capture Attribute со входами A и B нода Mix Color.
Теперь на выходе нода Mix Color мы получаем промежуточное значение между центром полигона и координатами вертекса. Величина смещения между этими значениями задается параметром Factor нода Mix Color.
Применить наше построение к мешу, мы можем при помощи нода Set Position. Добавим его (shift + a – Geometry – Set Position) в главную ветку дерева и соединим выход нода Mix Color со входом Position нода Set Position. Полигоны куба уменьшились, но требуемого эффекта мы не получили. Для того чтобы каждый полигон куба отскейлился отдельно, нужно разделить их при помощи нода Split Edges.
Добавим его (shift + a – Mesh – Split Edges) в главную ветку дерева перед нодом Set Position.
Теперь каждый полигон масштабируется отдельно и мы можем управлять их скейлом, двигая ползунок Factor на ноде Mix Color.