По умолчанию у нода Group Output при создании дерева нодов в Blender Geometry Nodes, имеется два входа. Первый, с индексом 0 – базовый вход для геометрии. Второй вход, с индексом 1, виртуальный, служит для создания новых входов – если на него подсоединить связь, на его месте автоматически создается новый вход определенного типа.
При создании связи между нодами средствами Python API, в Blender до версии 3.4, виртуальный вход работал точно так же, как и в визуальном режиме – достаточно было создать связь, указывая вход нода Group Output с индексом 1, как нужный вход формировался автоматически.
В версиях Blender 3.5 и выше при попытке создать связь, используя виртуальный вход нода Group Output, новых вход автоматически не формируется и связь создается некорректно.
Для того чтобы создать связь с нодом Group Output правильно, нужно предварительно создать новый вход.
1 |
bpy.context.object.modifiers['GeometryNodes'].node_group.outputs.new(type='NodeSocketGeometry', name='new input') |
В параметрах нужно передать тип создаваемого входа и его имя.
Созданный вход размещается в ноде Group Output под индексом 1 и замещает виртуальный вход, который там размещался ранее.
До создания нового входа:
1 2 3 |
bpy.context.object.modifiers['GeometryNodes'].node_group.nodes['Group Output'].inputs[1] # <class 'bpy.types.NodeSocketVirtual'> |
После создания нового входа:
1 2 3 |
bpy.context.object.modifiers['GeometryNodes'].node_group.nodes['Group Output'].inputs[1] # <class 'bpy.types.NodeSocketGeometry'> |
Теперь можно создавать связь к созданном входу, как раньше. Например:
1 2 3 4 |
bpy.context.object.modifiers['GeometryNodes'].node_group.links.new( bpy.context.object.modifiers['GeometryNodes'].node_group.nodes['Group Input'].outputs[0], bpy.context.object.modifiers['GeometryNodes'].node_group.nodes['Group Output'].inputs[1] ) |