При помощи UV-координат развертки можно манипулировать не только материалами, но и самой геометрией меша. Связать UV-координаты с геометрией в Blender можно при помощи “Geometry Nodes”.
Для примера добавим в сцену тор (shift+a – Mesh – Torus). Автоматически созданная развертка для этого меша соответствует двум швам: по оси Х – продольному, по оси Y – поперечному.
UV-координаты развертки считаются в диапазоне от 0 до 1. В этом же диапазоне лежат и нормализованные координаты точек самого меша. Например, для оси X:
Мы можем перенести диапазон UV-координат на геометрию меша при помощи “Geometry Nodes”.
Наложим на наш меш два модификатора: “Subdivision Surface” – чтобы сделать подразделение сетки более плотным, а геометрию – более гладкой, и “Geometry Nodes” – чтобы включить механизм работы с нодами геометрии.
Откроем отдельное окно “Geometry Nodes”.
Добавим в нодовое дерево нод “Attribute Separate XYZ” (shift+a – Attribute – Attribute Separate XYZ). Для входа “Vector” укажем атрибут меша “UV Map”. Этот атрибут позволяет получить доступ к точкам UV-развертке. В поле “Result X” укажем значение “X”, а в “Result Y” – “Y”. Этим мы создадим два новых атрибута меша с именами “X” и “Y” в которые нод будет транслировать нормализованные координаты UV соответственно по осям X и Y.
Для переноса UV-координат на геометрию меша добавим нод “Attribute Math” и переключим его в режим “Less Than”. Для входа “A” укажем атрибут “X”, а вход “B” переключим в режим “Float”. На выходе зададим новый атрибут под именем “selection”.
Теперь значение, полученное из атрибута “X” сравнивается с числом со входа “B”, если оно меньше – на выход “selection” транслируется 1, если больше – 0.
Таким образом мы, как бы, отмечаем выбранными те точки меша, UV-координаты которых лежат в заданном диапазоне чисел.
Получив выделенные точки, мы теперь можем менять геометрию только для них. Для примера отмасштабируем указанную часть меша.
Добавим в дерево три нода “Attribute Vector Math” (shift+a – Attribute – Attribute Vector Math):
- Первый переключим в режим “Multiply”. В поле первого входного атрибута укажем “normal” – это нормаль в текущей точке меша. В поле второго входного атрибута укажем атрибут “selection” – созданный нами атрибут для выделения нужных точек меша. В поле выходного атрибута укажем “factor” – в этот атрибут будет транслироваться результат умножения нормали на выбор точки. В результате для выбранных точек значение нормали будет равно 1, а для не выбранных – 0.
- Второй нод “Attribute Vector Math”, так же в переключим в режим “Multiply”. На первый вход подадим атрибут “factor”, а второй вход переключим в режим “Vector”. На выходе опять же укажем атрибут “factor”. Этот нод позволяет вручную менять величину масштаба т.к. мы значение вектора нормали для выбранных точек (единица) просто умножаем на коэффициент, заданный в Vector-входе.
- Третий “Attribute Vector Math” переключим в режим “Add”. На первом входе зададим атрибут “position” – положение текущей точки. На втором входе установим атрибут “factor” – полученное значение вдоль нормали для этой точки. На выходе укажем опять же атрибут “position”. Мы складываем вектор положения точки с вектором нормали, умноженным на коэффициент, и присваиваем положению точки результат.
В итоге мы получаем смещение точек вдоль нормали на заданный коэффициент, и это только для выбранных точек. Для невыбранных точек значение “factor” равно 0, поэтому результат операции не оказывает влияния на их положение.
Изменяя значение на втором входе нода “Less Than” мы можем наглядно видеть, как меняется геометрия меша.