python - 使用 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
有小费吗?谢谢你
解决方案
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
读取一个值,但对它不做任何事情。它们可以简单地删除。该脚本似乎包含来自交互式控制台的输入和输出的混合。
推荐阅读
- html - 如何在 vs 代码中的 jupyter 上的浏览器中查看绘图
- html - 当悬停另一个具有不同父级的 div 时,CSS 显示 div
- python - 如何在 Python 中将矩阵列作为列表返回
- python - 字典列表中的字典
- python - 每个 pandas 数据帧切片的元组列表
- google-translate - 如果源语言未通过,Google Translation API 是否会分别对语言检测和翻译收费?
- python - 获取索引等于 n 的 df 值的平均值
- phpmyadmin - 未显示 phpMyAdmin 错误
- java - 类型不匹配:无法从 HashMap 转换
> 到地图 > - python - Python更改字典值