Создавайте анимационные ролики из 3D совместных позиций
Извините, если некоторые части вопроса или мои последующие запросы могут показаться глупыми, но я не обладаю достаточным опытом в этой области, и, к сожалению, у меня крайний срок.
Идея проста для объяснения, у меня есть (покадрово) точные трехмерные координаты 25 суставов человеческого тела. Что мне нужно, так это соответствующее анимационное видео человеческого персонажа вокруг него. Идея похожа на это - https://www.youtube.com/watch?v=RPrdDlQXjEg
Разница в том, что у меня есть покадровое объединенное значение, а не данные mocap. Также я хочу повторить процесс для огромного количества видео, так что я думаю, что я не могу делать это вручную для каждого видео (опять же, мое предположение, если я ошибаюсь, дайте мне знать).
У меня нет никакого опыта в этой области. Может показаться, что я не исследовал этот вопрос до того, как задал этот вопрос, но я действительно сделал это. Просто я действительно смущен тем, какие у меня есть варианты, и выполнимо ли это или нет.
Я не ожидаю подробного ответа (хотя, если бы я получил тот, который был бы удивительным). Я просто ищу кого-то, чтобы указать мне на правильные учебники. Благодарю вас.
Изменить: Обсуждение продолжено - https://blender.stackexchange.com/questions/122369/create-animation-videos-from-3d-joint-positions
1 ответ
Данные 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 из Университета Карнеги-Меллона. Это дополнение загружает данные mocap и назначает их для буровых установок, оно включает в себя способ передачи данных mocap на установку MakeHuman, так что может быть что-то, что вы можете использовать или адаптироваться.