Данные 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 , которое предоставляет инструменты, которые могут помочь на определенном этапе. Возможно, вы также захотите взглянуть на аддон браузера библиотеки Mocap *1018* Университета Карнеги-Меллона. Этот аддон загружает данные mocap и назначает их для буровых установок, он включает способ переноса данных mocap на установку MakeHuman, поэтому быть чем-то, что вы можете использовать или адаптировать.