首页 > 解决方案 > 使用 python 脚本添加新的 Principled BSDF 材料

问题描述

我正在尝试使用以下代码添加新的原则 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

但我收到一个错误: KeyError: 'bpy_prop_collection[key]: key "Material" not found'在第 11 行。第 11 行是bpy.data.materials['Material'].node_tree.nodes["Principled BSDF"].inputs[0].default_value

有小费吗?谢谢你

标签: pythonblender

解决方案


bpy.data.materials包含材料,每个材料都有一个名称。在您的脚本中,您使用bpy.data.materials.new("VertCol")请求名称创建了一个新材料VertCol。因此,新材料将被命名为VertCol,或者如果已经存在,VertCol.NNNNNN数字 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_valueTrue读取一个值,但对它不做任何事情。它们可以简单地删除。该脚本似乎包含来自交互式控制台的输入和输出的混合。


推荐阅读