При помощи 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 можно визуально наблюдать соответствие условию на меше.

.blend file on Patreon



