python - 如何创建 Material 、选择它、使用该 Material 创建新节点并对它们进行动画处理?

标签 python nodes blender

我正在寻找一种方法来创建新 Material 并选择它,以在此 Material 中创建节点并对这些节点中的值进行动画处理。 这是我实际拥有的代码:

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

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

最佳答案

您可以创建一种使用节点(用于循环)的新 Material -

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)

要使 Material 正常工作,您还需要在节点之间添加链接 -

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

检查对象中是否有可用的 Material 槽后,您可以将 Material 分配给该对象。

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

obj.material_slots[0].material = mat

关于python - 如何创建 Material 、选择它、使用该 Material 创建新节点并对它们进行动画处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185377/

相关文章:

Python Pandas : reusing row value to another row - lookup across row

node.js - Nightwatch JS - 如何通过 Firefox headless 运行测试

javascript - 旋转一个简单的立方体两次

python - 如果我不知道如何运行 python 脚本,我是否必须在 python 脚本的顶部添加任何内容

python - sklearn r2_score 和 python stats lineregress 函数给出了非常不同的 R^2 值。为什么?

java - DoubleNode ADT - 打印节点的节点

data-structures - 什么是树中的节点?

autohotkey - AHK 将鼠标中键重新映射到其他按钮

python - 通过 brenda-web 界面将参数传递给 python blender 脚本,如何解析参数?

python - Google 云端硬盘在共享云端硬盘中创建新文件夹