在我的脚本中,我按下一个按钮,它就会添加一个自定义节点组。我希望能够知道如何为一个值添加一个关键帧,然后添加一个Fcurve修改器'Noise‘,然后能够在Group节点上更改缩放值。我知道这对你们中的大多数人(如果不是所有人)来说都很简单,但我真的是stuck..Normally我可以在网上找到正确的代码片段或答案,但我找不到任何关于这方面的东西,我将不胜感激!
因为我真的是新手,我不知道大多数正确的上下文/语法等等。
我试着像往常一样改变一个值,并尝试了我认为可能会像这样工作的代码,
group_node.inputs[2].anim.keyframe_insert
这显然是错误的,但我不确定如何处理这一点..
发布于 2019-09-22 10:28:19
因此,您有一个名为"myGroup“的材质节点组,您可以使用以下命令将其添加到活动对象材质
obj = bpy.context.object
mat = obj.active_material
group_node = mat.node_tree.nodes.new('ShaderNodeGroup')
group_node.node_tree = bpy.data.node_groups['myGroup']
要调整节点输入值,需要设置sockets default_value
属性。
group_node.inputs[0].default_value = 0.75
您还可以按名称访问输入套接字
mat.node_tree.nodes['Mix Shader'].inputs['Fac'].default_value
现在创建关键帧的棘手部分是知道animation data存储在哪里。对象保存大多数动画数据,这些数据可以在obj.animation_data
中找到。因此,如果您想对设置为obj.location = (x,y,z)
的对象位置设置关键帧,则可以使用以下命令告诉该对象location
的数据路径为insert a keyframe
obj.keyframe_insert('location', frame=1)
请注意,您不需要更改当前帧,只需设置属性的值,然后插入一个关键帧,指定它将位于哪个帧上。
由于材质可以用于多个对象,因此它们有自己的动画数据,这些数据可以在其节点树mat.node_tree.animation.data
中找到。因此,要为材质节点中的值设置动画,请告诉其节点树插入关键帧,并为其提供数据路径,即从节点树到值的python路径。
dpath = 'nodes["Group"].inputs[0].default_value'
mat.node_tree.keyframe_insert(dpath, frame=1)
fcurves存储在animation_data.action.fcurves
中。为了得到你想要的,你可以通过它的数据路径找到它,对于像location这样的数组值,你还可以指定一个你想要的子值的index
。
fc = mat.node_tree.animation_data.action.fcurves.find(dpath)
现在您有了fcurve,添加一个modifier并设置它的一些属性。
nmod = fc.modifiers.new("NOISE")
nmod.scale = 1.25
nmod.phase = 2.3
nmod.strength = 0.7
nmod.depth = 1.35
nmod.offset = 0.23
https://stackoverflow.com/questions/57936733
复制相似问题