Для удобства отображения, все выходы на нодах, как шейдерных, так и нодах геометрии, могут быть скрыты от пользователя. Скрывать неиспользуемые входы-выходы на нодах может понадобиться для упрощения визуального восприятия нодового дерева, которое может быть очень большим и сложным и не нуждаться в перегрузке лишней информацией.
Для управления отображением входов и выходов на нодах, у каждого входа-выхода есть свойство hide булевого типа. Если его значение равно False – сокет входа-выхода визуально отображается на ноде. Если значение равно True – сокет скрывается и становится невидимым.
Для примера скроем все входы и выходы на каком-нибудь ноде, например, на Principled BSDF.
Получим указатель на сам нод:
1 2 3 |
bsdf = bpy.context.object.active_material.node_tree.nodes.active # <bpy_struct, ShaderNodeBsdfPrincipled("Principled BSDF.001") at 0x000002A0C660A260> |
Пройдем в цикле по всем его входным сокетам и скроем их.
1 2 |
for input in bsdf.inputs: input.hide = False |
Для удобства можно не просто скрыть сокет, а инвертировать значение его свойства hide. В этом случае при каждом запуске скрипта, входной сокет будет или скрываться, если он отображался, или обратно показываться, если он был скрыт.
1 2 |
for input in bsdf.inputs: input.hide = not input.hide |
То же самое и для выходных сокетов.
1 2 |
for output in bsdf.outputs: output.hide = not output.hide |
Для нодов геометрии все работает точно так же.
Например, сделаем такую же операцию для нода Dial Gizmo.
1 2 3 |
gizmo = bpy.context.object.modifiers.active.node_group.nodes.active # <bpy_struct, GeometryNodeGizmoDial("Dial Gizmo") at 0x000002A0C660AB20> |
Для его входных сокетов.
1 2 |
for input in gizmo.inputs: input.hide = not input.hide |
И для выходных.
1 2 |
for output in gizmo.outputs: output.hide = not output.hide |
Обратите внимание, что если к сокету подсоединен линк от другого нода, то даже установка свойства hide в значение True не скроет этот сокет.