您可以创建一个使用节点(用于循环)的新材料 -
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