Nœuds Closures

Une closure permet de transmettre des fonctionnalités personnalisées à un groupe de nœuds. Elle agit comme une entrée de fonction, permettant d’évaluer le comportement défini par l’utilisateur à l’intérieur d’une autre arborescence de nœuds.

Les closures rendent les groupes de nœuds plus flexibles et réutilisables en permettant aux utilisateurs d’injecter une partie d’un réseau de nœuds dans un autre. Cela permet de créer des outils de niveau supérieur où des parties spécifiques d’un processus peuvent être personnalisées sans modifier le groupe lui-même.

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

Utilisation d’une closure pour personnaliser la diffusion des arbres dans un générateur de terrain.

Vue d’ensemble

Les closures sont un type de socket qui représente des graphes de nœuds appelables (call). Elles définissent un ensemble d’entrées et de sorties qui peuvent être évaluées à l’intérieur d’un autre groupe de nœuds via le nœud Evaluate Closure.

Lorsqu’une closure est connectée, son graphe de nœud interne est injecté dans l’évaluation du groupe de nœuds où elle est utilisée. Cela permet aux systèmes procéduraux de rester flexibles tout en exposant des points de contrôle clairs et personnalisables.

Les closures peuvent être considérées comme des paramètres de fonction pour les groupes de nœuds. Elles permettent aux utilisateurs de définir des opérations qui peuvent être exécutées dans un environnement contrôlé défini par l’arborescence du nœud parent.

Note

Les fermetures récursives sont limitées par la limite de pile des nœuds géométriques pour éviter une profondeur de récursion excessive et des débordements de la pile.

La limite de la pile peut être ajustée dans les préférences de l’utilisateur : «  « Geometry Nodes Stack Limit

Nœuds (Nodes)

Les closures sont créées et évaluées avec les nœuds suivants :

Synchronisation des sockets

Les nœuds de closure utilisent des noms de socket pour correspondre à leurs entrées et sorties. Si deux nœuds de closure sont connectés mais ont des signatures incompatibles, Blender peut proposer de les synchroniser automatiquement.

  • La synchronisation se produit automatiquement lorsqu’un nœud est connecté pour la première fois.

  • Les sockets existants ne sont jamais modifiés automatiquement pour éviter d’écraser les données utilisateur.

  • Un bouton (Sync Sockets) apparaît sur le nœud lorsqu’une incompatibilité est détectée, ce qui permet une synchronisation manuelle.

Exemple

Les closures sont utiles lorsqu’une partie de la logique d’un groupe de nœuds doit être définie par l’utilisateur. Par exemple, un générateur de terrain peut utiliser une closure pour définir le placement des arbres :

  • Le nœud Evaluate Closure est placé à l’endroit où les instances d’arborescence sont distribuées.

  • Une entrée de closure est exposée sur l’interface du groupe.

  • Un nœud Closure est connecté, définissant toute logique de placement personnalisée.

Lorsque la closure est évaluée, le contenu du graphe de nœuds connectés est exécuté dans le contexte du générateur de terrain. Cela permet au générateur de fournir une infrastructure stable (par exemple, la diffusion, les masques, les attributs) pendant que les utilisateurs fournissent leur propre comportement fonctionnel.

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

Un groupe de nœuds de générateur de terrain utilisant des closures pour le placement personnalisé de l’arbre.