如何将关键帧和修改器插入搅拌机中的自定义节点组值?
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
在我的脚本中,我按下一个按钮,它添加了一个自定义节点组。我很想知道如何为值添加关键帧,然后添加 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
和
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