我正在尝试使用以下代码添加一个新的原则性bsdf材料:
import bpy
newmat = bpy.data.materials.new("VertCol")
newmat.use_nodes = True
node_tree = newmat.node_tree
nodes = node_tree.nodes
bsdf = nodes.get("Principled BSDF")
bsdf.inputs['Base Color'].default_value
bpy.data.materials['Material'].node_tree.nodes["Principled BSDF"].inputs[0].default_value
bsdf.inputs['Base Color'].default_value[:]
(0.800000011920929, 0.800000011920929, 0.800000011920929, 1.0)
bsdf.inputs['Base Color'].default_value = (1, 0, 0, 1)
bsdf.inputs['Base Color'].keyframe_insert("default_value", frame=80)
True
bsdf.inputs['Base Color'].default_value = (0, 0, 1, 1)
bsdf.inputs['Base Color'].keyframe_insert("default_value", frame=81)
True
但是我得到了一个错误:第11行的KeyError: 'bpy_prop_collection[key]: key "Material" not found'
。第11行是bpy.data.materials['Material'].node_tree.nodes["Principled BSDF"].inputs[0].default_value
有什么建议吗?谢谢
发布于 2020-07-26 19:58:18
bpy.data.materials
包含材质,每个材质都有一个名称。在脚本中,您使用bpy.data.materials.new("VertCol")
创建了一个新材质,请求名称为VertCol
。因此,新材质将被命名为VertCol
,或者如果已经存在,则命名为VertCol.NNN
,其中NNN
是一个001或更高的数字。然后,您尝试使用bpy.data.materials['Material']
访问名为Material
的材质。这可能来自于录制来自动作的脚本。
要清理脚本,请将类似的显式命名引用替换为变量引用:
bpy.data.materials['Material'] = newmat
bpy.data.materials['Material'].node_tree.nodes["Principled BSDF"] = bsdf
此外,像bsdf.inputs['Base Color'].default_value
或True
这样的代码行读取值,但不对其执行任何操作。它们可以简单地删除。该脚本似乎包含来自交互式控制台的输入和输出的混合。
https://stackoverflow.com/questions/63098407
复制相似问题