ant tree删除节点_如何显示所有可用节点

我们可以按类型获取所有可用着色器节点的列表。

adfeadccc68a5a044336b0c375160721.png

首先,将任何对象添加到场景中,例如多维数据集,为其创建材质,然后删除所有节点。在此材料中,我们将显示Blender中可用的所有着色器节点。

我们可以使用“ bpy.types”结构获取所有可用的着色器节点类型。它存储Blender API中可用的所有对象类型的列表,包括节点。

执行此命令

dir(bpy.types)

# 'ANIM_OT_clear_useless_actions', 'ANIM_OT_keying_set_export', 'ANIM_OT_update_animated_transform_constraints', 'Action', ...

我们将获得通过Blender Python API提供的所有对象类型的名称的列表。

所有类型的着色器节点都从“ ShaderNode”类型继承。因此,要仅从常规列表中获取着色器节点类型,我们需要检查特定类型是否从“ ShaderNode”继承。

可以使用以下命令执行从一种类型到另一种类型的继承检查

issubclass(_CHECK_TYPE_, _PARENT_TYPE_)

如果_CHECK_TYPE_类型是从_PARENT_TYPE_类型继承的,则它将返回“ True”。

“ issubclass”函数比较类型,但不比较我们通过“ dir”函数获得的文本标识符。为了通过文本名称获取类型本身,我们使用以下事实:在Python中,任何类型都同时是描述它的模块的属性。因此,我们可以使用以下命令获取“ bpy.types”中描述的类型:

getattr(bpy.types, _TEXT_TYPE_)

有了节点类型列表,我们可以按节点类型将节点本身添加到当前材料中。

指向当前节点树的指针,可以在其中添加节点,如下所示:

import bpy

node_tree = bpy.context.object.active_material.node_tree

为节点的位置设置初始值。

Python

location_x = 0

location_y = 0

让我们循环浏览所有可能的API对象类型:

for type in dir(bpy.types):

real_type = getattr(bpy.types, type)

并且类型是否继承自“ ShaderNode”

if issubclass(real_type, bpy.types.ShaderNode):

将这种类型的节点添加到节点树,并为其设置宽度和偏移量。

node = node_tree.nodes.new(type)

node.width = 250

node.location = (location_x, location_y)

location_x += 300

if location_x > 3000:

location_x = 0

location_y -= 600

最终代码:

import bpy

node_tree = bpy.context.object.active_material.node_tree

location_x = 0

location_y = 0

for type in dir(bpy.types):

real_type = getattr(bpy.types, type)

if issubclass(real_type, bpy.types.ShaderNode):

try:

node = node_tree.nodes.new(type)

node.width = 250

node.location = (location_x, location_y)

location_x += 300

if location_x > 3000:

location_x = 0

location_y -= 600

except:

pass

我们将在“ try –except”块中封闭将节点添加到节点树的代码部分,以防止在尝试创建没有可视形式的抽象节点(例如“ ShaderNode”)时出错。

执行此代码后,所有可用节点将被顺序添加到材料中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值