我如何创建材料,选择它,用这种材料创建新节点并为它们设置动画?

时间:2016-03-23 17:55:44

标签: python nodes blender

我正在寻找一种创建新材质并选择它的方法,以在此材质中创建节点并为这些节点中的值设置动画。 这是我实际拥有的代码:

mat = bpy.ops.material.new()
mat_nodes = bpy.data.materials['USDiscoMaterial'].node_tree.nodes

但实际上,使用此代码,Blender将使用“USDiscoMaterial”重命名当前材料,并创建一个新材料但不选择它。 如果我想在这个材料中创建一个节点?

1 个答案:

答案 0 :(得分:1)

您可以使用 -

创建一个使用节点(用于循环)的新材质
mat = bpy.data.materials.new(name='USDiscoMaterial')
mat.use_nodes = True
mat_nodes = mat.node_tree.nodes
mat_links = mat.node_tree.links
# a new material node tree already has a diffuse and material output node
output = mat_nodes['Material Output']
diffuse = mat_nodes['Diffuse BSDF']

要添加新节点,请使用node_tree.nodes.new('type'),其中可以找到可用节点类型列表on this page。大多数节点将其可编辑值存储在用于连接节点的输入套接字中。如果节点具有没有输入连接的值,则可以在每个节点的api引用中找到属性名称。

noise = mat_nodes.new('ShaderNodeTexNoise')
noise.inputs['Detail'].default_value = 5.0
cur_frame = bpy.context.scene.frame_current
noise.inputs['Detail'].keyframe_insert('default_value', frame=cur_frame)

要使材料工作,您还需要在节点之间添加链接 -

mat_links.new(noise.outputs['Color'], diffuse.inputs['Color'])

在检查对象中是否有可用的材质槽后,您可以将材质指定给对象。

obj = bpy.context.active_object
if len(obj.material_slots) == 0:
    bpy.ops.object.material_slot_add()

obj.material_slots[0].material = mat