Замыкания для нод (node closures)

Замыкание“ позволяет передавать пользовательскую функциональность в группу нод. Оно действует в качестве ввода функции, позволяя оценивать пользовательское поведение внутри другого дерева нод.

Замыкания делают нодовые группы более гибкими, предоставляют возможность их повторного использования, позволяя пользователям внедрять часть ветви нод в другие группы. С их возможностями пользователи могут создавать инструменты более высокого уровня, позволяющие настраивать отдельные части процесса без изменения самой группы.

../../../../_images/nodes_closure_example_scatter_functions.png

Использование замыкания для настройки распределения деревьев в генераторе ландшафта.

Общая информация

Замыкания – это специальный тип сокетов, который представляет собой вызываемые нодовые графы. Они определяют набор входов и выходов, которые могут быть оценены внутри другой нодовой группы с помощью ноды „Evaluate Closure“.

При подсоединённом замыкании, – её внутренний нодовый граф внедряется в оценку нодовой группы, в которой он используется. Это позволяет процедурным системам оставаться гибкими, предоставляя при этом чёткие и настраиваемые контрольные точки.

Замыкания можно рассматривать в качестве параметров функций для нодовых групп. Они позволяют пользователям определять операции, которые могут быть выполнены в контролируемой среде, определяемой деревом родительских нод.

Примечание

Recursive closures are limited by the geometry nodes stack limit to prevent excessive recursion depth and stack overflows.

The stack limit can be adjusted in the user preferences: Лимит стека геометрических нод (geometry nodes stack limit)

Ноды (nodes)

Замыкания создаются и оцениваются с помощью следующих нод:

Синхронизация сокетов

Для сопоставления своих входов и выходов, – ноды замыкания используют имена сокетов. Если две ноды-«замыкания» соединены, но имеют несовпадающие сигнатуры, – Blender может предложить их автоматическую синхронизацию.

  • Синхронизация происходит автоматически при первом соединении ноды.

  • Существующие сокеты никогда не изменяются автоматически, во избежание перезаписи пользовательских данных.

  • При обнаружении несоответствия, – на ноде появляется кнопка синхронизации , позволяющая выполнить данное действо вручную.

Пример

Замыкания полезны, когда часть логики группы нод должна быть определена пользователем. Например, генератор ландшафта может использовать замыкание для установления логики распределения деревьев:

  • Нода „Evaluate Closure“ размещается там, где будут распределяться экземпляры дерева.

  • Вход замыкания будет отображаться в интерфейсе группы.

  • Нода „Closure“ подсоединяется и определяет любую пользовательскую логику по распределению деревьев.

При оценке замыкания, – содержимое соединённого нодового графа выполняется в контексте генератора ландшафта. Это позволяет генератору предоставлять стабильную инфраструктуру (например, распределение, маски, атрибуты), в то время как пользователи задают собственное функциональное поведение.

../../../../_images/nodes_closure_example.png

Группа нод генератора ландшафта, использующая замыкания для пользовательского распределения деревьев.