Mocap 数据只是随时间移动的点的集合,来自 Mocap 系统的数据的格式可能比您拥有的数据更好,因此更容易说这些点是左肘,这些是右脚踝。如果您不能指定此点序列是电枢中的此关节,您可能会遇到麻烦。
让我们首先说您有一个按名称为每个跟踪标记明确标识的位置序列。首先创建一个重新创建每个标记的空。
import bpy
scn = bpy.context.scene
objs = bpy.data.objects
rig = objs['myrig']
mocap_data = {
# each item in list is (x,y,z) at each frame
'elbow.l': [(0,-.5,0),(0,-1,0),(0,-.5,0)],
'elbow.r': [(0,.5,0), (0,1,0), (0,.5,0)],
}
for m in mocap_data.keys():
o = objs.new(m, None)
scn.objects.link(o)
您的装备中的每个骨骼都应命名为与标记的命名相匹配。在同一个循环中,您还可以为每个骨骼创建 ChildOf 约束,这使骨骼跟随其标记。
c = rig.pose.bones[m].constraints.new('CHILD_OF')
c.target = o
现在您要为每个标记设置动画以跟随其运动。
for f in range(len(mocap_data['elbow.l'])):
for m in mocap_data.keys():
objs[m].location = mocap_data[m][f]
objs[m].keyframe_insert('location', frame=f+1)
如果你愿意,你可以将动画烘焙到骨架中,这样你就可以移除空洞。
Blender 包括Motion Capture Tools插件,它提供了在某些阶段可能会有所帮助的工具。您可能还想查看Carnegie Mellon University Mocap Library Browser插件,该插件下载 mocap 数据并将其分配给装备,它包括一种将 mocap 数据传输到 MakeHuman 装备的方法,因此您可能可以使用一些东西或适应。