При помощи Geometry Nodes в Blender можно управлять геометрией меша, ориентируясь на ее изгиб, т.е. на угол между соседними полигонами. Это позволяет по-разному обрабатывать гладкую “органическую” геометрию и жесткие “hard surface” поверхности.
Основным инструментом, позволяющим разграничить геометрию на гладкую и жесткую, является нод Edge Angle, который определяет угол между двумя соседними полигонами.
Добавим в сцену Сюзанну (shift + a – Mesh – Monkey), назначим ей модификатор Geometry Nodes и нажатием на кнопку New создадим начальное нодовое дерево.
Для примера давайте визуально покажем сравнение угла между полигонами с числовым значением.
Добавим нод Edge Angle (Mesh – Read – Edge Angle).
Добавим два нода Compare для сравнения угла с числом (shift + a – Utilities – Compare). Первый нод переключим в режим Grater Than or Equal – этому условию будет соответствовать угол между полигонами больше или равный заданному. Второй переключим в режим Less Than – угол между полигонами меньше заданного. Слинкуем выход Unsigned Angle нода Edge Angle со входами A обоих нодов Compare.
Нод Edge Angle выдает результат в радианах. Чтобы сравнивать с привычными нам градусами, добавим нод Math (shift + a – Utilities – Math – Math) и переключим его в режим Radians. Слинкуем его выход Value со входами B обоих нодов Compare.
Таким образом мы определили две ветки, одну для углов больше заданного и вторую – для углов меньше заданного.
Добавим два нода Mesh to Curve (shift + a – Mesh – Operators – Mesh to Curve) и подключим их в основную ветку геометрии нодового дерева. Выходы нодов Compare соединим с соответствующими входами Selection обоих этих нодов.
Добавим далее в каждую ветку по ноду Curve to Mesh (shift + a – Curve – Operators – Curve to Mesh). Добавим также нод Curve Circle (shift + a – Curve – Primitives – Curve Circle) п подключим его выход Curve ко входам Profile Curve обоих нодов Curve to Mesh. В поле Radius установим значение равное 0.01.
Таким образом мы делаем обводку по ребрам меша при помощи кривых.
Если мы сейчас подключим одну из получившихся у нас веток геометрии к ноду Group Output, мы увидим часть обводки, которая соответствует условию, выставленному нами для угла – больше или меньше. Меняя угол в ноде To Radians можно наблюдать изменение в обводке.
Добавим в каждую ветку по ноду Set Material (shift + a – Material – Set Material). Создадим два разноцветных материала и установим их в поля каждого из нодов.
Теперь нам осталось только объединить всю геометрию при помощи нода Join Geometry (shift + a – Geometry – Join Geometry). Соберем через него все ветки геометрии в одну.
Теперь мы можем удобно отслеживать угол – ребра для которых у прилегающих к ним полигонов угол будет больше или равны заданному, будут окрашены в один цвет, а те, где угол между полигонами меньше заданного – в другой.
Изменяя значение заданного угла в ноде To Radians можно визуально наблюдать соответствие условию на меше.