如何将关键帧和修改器插入搅拌机中的自定义节点组值?

How can I insert a Keyframe and Modifier to a custom node group value in blender?

在我的脚本中,我按下一个按钮,它添加了一个自定义节点组。我很想知道如何为值添加关键帧,然后添加 Fcurve 修改器 'Noise',然后能够更改组节点上的缩放值。我知道这对大多数人(如果不是全部)来说很简单,但我真的被卡住了。通常我可以在代码片段或在线答案中找到正确的代码,但我找不到任何相关信息,我将不胜感激! ..

由于我是新手,所以大部分正确的都不知道context/syntax等等

我尝试了通常所做的更改值的操作,并尝试了我认为可能有效的代码,

group_node.inputs[2].anim.keyframe_insert 

现在这显然是错误的,但我不确定如何处理这个问题..

所以你有一个名为 "myGroup" 的 material 节点组,你将它添加到活动对象 material 和

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']

要调整节点输入值,请设置套接字 default_value 属性。

group_node.inputs[0].default_value = 0.75

您还可以通过名称访问输入套接字

mat.node_tree.nodes['Mix Shader'].inputs['Fac'].default_value

现在创建关键帧的棘手部分是知道 location

的数据路径的 animation data is stored. Objects hold most animation data, which is found in obj.animation_data. So if you want to keyframe the objects location you set obj.location = (x,y,z) you then tell the object to insert a keyframe 在哪里
obj.keyframe_insert('location', frame=1)

请注意,您不需要更改当前帧,只需设置一个 属性 的值,然后插入一个关键帧,指定它将在哪个帧上。

由于 materials 可以用于多个对象,它们有自己的动画数据,可以在其节点树 mat.node_tree.animation.data 中找到。因此,要为 materials 节点中的值设置动画,您告诉其节点树插入关键帧并为其提供数据路径,即从节点树到值的 python 路径。

dpath = 'nodes["Group"].inputs[0].default_value'
mat.node_tree.keyframe_insert(dpath, frame=1)

fcurves 存储在 animation_data.action.fcurves 中。要获得你想要的那个,你可以通过它的数据路径找到它,对于像位置这样的数组值,你还可以指定一个 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