В Blender 3.6 и более ранних версиях входы и выходы для нодовых групп можно было создать, вызывая команду new() для списка входов (inputs) и выходов (outputs) нодового дерева. В Blender 4.0 разработчиками были внесены изменения, и создание сокетов входов и выходов для нодовых деревьев было перенесено в объект interface.
Входы и выходы все так же создаются для нодового дерева, указатель на которое можно получить через объект нодовой группы.
Указатель на нодовое дерево для текущей выделенной нодовой группы:
1 2 3 |
node_tree = bpy.context.object.active_material.node_tree.nodes.active.node_tree # bpy.data.node_groups['NodeGroup'] |
Указатель на интерфейс нодового дерева, через который мы можем создавать входы и выходы:
1 2 3 |
interface = node_tree.interface # bpy.data.node_groups['NodeGroup']...NodeTreeInterface |
Для создания нового сокета входа или выхода нам нужно вызывать метод интерфейса new_socket() со следующими обязательными параметрами:
- name – название сокета
- in_out – сокет какого типа мы создаем. Для создания входа надо указать значение “INPUT”, а для создания выхода значение “OUTPUT”
- socket_type – тип создаваемого сокета. Как и раньше это:
- NodeSocketShader – шейдерный
- NodeSocketVector – векторный
- NodeSocketFloat – для чисел с плавающей точкой
- NodeSocketColor – для цвета
Можно так же указать дополнительные параметры: description – для описания, и parent для указания родительской панели сокета.
Создадим несколько входных и выходных сокетов для примера.
Входные сокеты для шейдеров и векторов:
1 2 3 4 5 6 7 8 9 10 11 |
interface.new_socket( name='Shader', in_out='INPUT', socket_type='NodeSocketShader' ) interface.new_socket( name='Vector', in_out='INPUT', socket_type='NodeSocketVector' ) |
Выходные сокеты для чисел с плавающей точкой и цвета:
1 2 3 4 5 6 7 8 9 10 11 |
interface.new_socket( name='Float', in_out='OUTPUT', socket_type='NodeSocketFloat' ) interface.new_socket( name='Color', in_out='OUTPUT', socket_type='NodeSocketColor' ) |
Созданные входные и выходные сокеты появляются в нодовой группе: