Создавайте анимационные ролики из 3D совместных позиций - PullRequest
0 голосов
/ 04 ноября 2018

Извините, если некоторые части вопроса или мои последующие запросы могут показаться глупыми, но я совсем не разбираюсь в этой области и, к сожалению, у меня крайний срок.

Идея проста для объяснения, у меня есть (покадрово) точные трехмерные координаты 25 суставов человеческого тела. Что мне нужно, так это соответствующее анимационное видео человеческого персонажа вокруг него. Идея похожа на это - https://www.youtube.com/watch?v=RPrdDlQXjEg

Разница в том, что у меня есть покадровые значения соединений 3d, а не данные mocap. Также я хочу повторить процесс для огромного количества видео, так что я думаю, что я не могу делать это вручную для каждого видео (опять же, мое предположение, если я ошибаюсь, дайте мне знать).

У меня нет никакого опыта в этой области. Может показаться, что я не исследовал этот вопрос до того, как задал этот вопрос, но я действительно сделал это. Просто я действительно смущен тем, какие у меня есть варианты и можно ли это сделать.

Я не ожидаю подробного ответа (хотя, если бы я получил тот, который был бы удивительным). Я просто ищу кого-то, чтобы указать мне на правильные учебники. Спасибо.

Редактировать: Обсуждение продолжено - https://blender.stackexchange.com/questions/122369/create-animation-videos-from-3d-joint-positions

1 Ответ

0 голосов
/ 05 ноября 2018

Данные 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, поэтому быть чем-то, что вы можете использовать или адаптировать.

...