如何显示所有可用节点

如何显示所有可用节点

首页休闲益智多维数据集的故事更新时间:2024-04-29

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



首先,将任何对象添加到场景中,例如多维数据集,为其创建材质,然后删除所有节点。在此材料中,我们将显示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”)时出错。

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

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved