Замыкание (closure)

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

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

../../../_images/nodes_closure_zone.png

Пустая зона замыкания.

Входы (inputs)

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

Свойства (properties)

Нода „Closure“ не имеет собственных функциональных свойств, но её интерфейс настраивается на вкладке „Node“ боковой панели. Входы и выходы можно добавлять, удалять и переименовывать для того, чтобы установить сигнатуру замыкания.

Синхронизировать сокеты (sync)

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

Определить сигнатуру (define signature)

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

Элементы ввода (input items)

Список входных сокетов

Отображает одну запись на каждый сокет, который был определён в ноде замыкания. Чтобы переименовать – щёлкните дважды.

Добавить элемент

Добавить новый входной сокет для ноды замыкания.

Удалить элемент

Удалить выделенный входной сокет.

Тип (type)

Определяет тип данных для выделенного сокета (например, Float, Vector, Geometry, Object, Bundle). Для типов значений будет отображаться и использоваться элемент управления значением по умолчанию, который используется тогда, когда сокет не подсоединён.

Форма (shape)

Определяет структуру данных, поддерживаемую входным сокетом, например, единичное значение , поле или сетку. Форма определяет способ оценки данных и их передачи через нодовую сеть. Подробнее см. в разделе «Форма сокета».

Элементы вывода (output items)

Доступны при выделении выходной ноды зоны замыкания.

Список выходных сокетов

Отображает одну запись на каждый сокет, который был определён в ноде вывода замыкания. Чтобы переименовать – щёлкните дважды.

Добавить элемент

Добавить новый выходной сокет для ноды замыкания.

Удалить элемент

Удалить выделенный выходной сокет.

Тип (type)

Определяет тип данных для выделенного сокета (например, Float, Vector, Geometry, Object, Bundle). Для типов значений будет отображаться и использоваться элемент управления значением по умолчанию, который используется тогда, когда сокет не подсоединён.

Форма (shape)

Определяет структуру данных, поддерживаемую входным сокетом, например, единичное значение , поле или сетку. Форма определяет способ оценки данных и их передачи через нодовую сеть. Подробнее см. в разделе «Форма сокета».

Выходы (outputs)

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

Использование

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

Типичные случаи использования включают в себя:

  • Определение пользовательского правила рассеивания для генератора ландшафтов.

  • Описание того, как распределять или изменять экземпляры процедурно.

  • Предоставление настраиваемых отображений, вычислений полей или логики трансформации.

Использование внешних значений

Замыкания могут захватывать значения из-за пределов своей зоны. Захваченное значение сохраняется как часть определения замыкания и остаётся доступным даже при оценке замыкания в другом контексте.

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

../../../_images/nodes_closure_external_input.png

Захват внешнего входного значения внутрь замыкания.

Пример

  1. В группе нод генератора ландшафта, – замените логику распределения деревьев с помощью ноды „Evaluate Closure“.

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

  3. Создайте зону замыкания в главном древе нод и подсоедините её к этому входу.

  4. Внутри зоны замыкания, – определите желаемую логику по распределению деревьев.

Когда генератор оценивает замыкание, вместо поведения по умолчанию будет выполняться пользовательское распределение, определённое в самой зоне.

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

Зона замыкания, определяющая индивидуальный шаблон для распределения деревьев.