【发布时间】:2016-07-07 01:54:01
【问题描述】:
我想要的是一种方法来处理 mixRGB 节点中的“因子”值,就像普通对象一样,例如立方体,所以使用 fcurves、fmodifiers 等等。 所有这些都通过文本编辑器中的 Python 代码实现
【问题讨论】:
标签: python animation nodes blender
我想要的是一种方法来处理 mixRGB 节点中的“因子”值,就像普通对象一样,例如立方体,所以使用 fcurves、fmodifiers 等等。 所有这些都通过文本编辑器中的 Python 代码实现
【问题讨论】:
标签: python animation nodes blender
第一步是找到你想要的混合节点。在材质中,您可以按名称访问每个节点,而第一个 mixRGB 节点名为“Mix”,随后的混合节点将在名称中添加数字扩展名。名称也可以由用户(或 python 脚本)手动更改。通过显示属性区域(按N)您可以在节点属性中看到活动节点的名称。
要调整 fac 值,您可以更改 fac 输入的 default_value。要为混合因子设置关键帧,请告诉 fac 输入插入带有 data_path 或 default_value 的关键帧
import bpy
cur_frame = bpy.context.scene.frame_current
mat_nodes = bpy.data.materials['Material'].node_tree.nodes
mix_factor = mat_nodes['Mix.002'].inputs['Fac']
mix_factor.default_value = 0.5
mix_factor.keyframe_insert('default_value', frame=cur_frame)
当然,您可以为关键帧指定任何帧编号,而不仅仅是当前帧。
如果你有很多混合节点,你可以遍历节点并将每个混合着色器添加到一个列表中
mix_nodes = [n for n in mat_nodes if n.type == 'MIX_RGB']
然后您可以根据需要循环遍历它们和关键帧。
for m in mix_nodes:
m.inputs['Fac'].default_value = 0.5
m.inputs['Fac'].keyframe_insert('default_value', frame=cur_frame)
在添加后查找 fcurves 对于节点来说很尴尬。当您告诉输入套接字插入关键帧时,fcurve 存储在 node_tree 中,因此在 keyframe_insert() 之后您可以使用
bpy.data.materials['Material'].node_tree.animation_data.action.fcurves.find()
知道要搜索的数据路径可能很棘手,因为节点 Mix.002 的 Fac 输入的数据路径将是 nodes["Mix.002"].inputs[0].default_value
如果您想在添加 fcurve 以调整值或添加修饰符后找到它,您很可能会发现在添加关键帧时保留它们的列表更容易。在keyframe_insert() 之后,新的 fcurve 应该在
material.node_tree.animation_data.action.fcurves[-1]
【讨论】:
fc = material.node_tree.animation_data.action.fcurves.find(...)找到,然后使用fc.modifiers.new()
tree = bpy.context.scene.node_tree fc =tree.animation_data.action.fcurves.find('default_value')
bpy.data.scene.node_tree 是合成节点。你想要material.node_tree.animation_data.action.fcurves - 对于节点函数曲线来说,这个发现很尴尬 - 我会把它添加到答案中。