从 3D 关节位置创建动画视频
Create animation videos from 3D joint positions
抱歉,如果问题的某些部分或我的后续请求可能看起来很愚蠢,但我在这个领域完全没有经验,不幸的是我在截止日期前。
这个想法解释起来很简单,我有(逐帧)人体 25 个关节的精确 3D 坐标。我需要的是它周围一个人物角色的相应动画视频。这个想法与此类似-
https://www.youtube.com/watch?v=RPrdDlQXjEg
不同之处在于我有逐帧 3d 关节值,而不是动作捕捉数据。此外,我想对大量视频重复该过程,所以我想我不能为每个视频手动执行此操作(同样是我的推测,如果我错了请告诉我)。
我在这方面没有任何经验。在问这个问题之前我似乎没有做任何研究,但我确实做了。只是我真的很困惑我的选择是什么以及它是否可行。
我不希望得到详细的答案(尽管如果我得到一个答案会很棒)。我只是在找人给我指出正确的教程。谢谢。
编辑:继续讨论 - https://blender.stackexchange.com/questions/122369/create-animation-videos-from-3d-joint-positions
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)
如果你愿意,你可以 bake the animation 进入电枢,这样你就可以移除空的。
Blender 包含 Motion Capture Tools addon, which provides tools that may help at some stage. You may also want to look at the Carnegie Mellon University Mocap Library Browser 插件,该插件下载动作捕捉数据并将其分配给装备,它包括一种将动作捕捉数据传输到 MakeHuman 装备的方法,因此您可能可以使用或改编一些东西.
抱歉,如果问题的某些部分或我的后续请求可能看起来很愚蠢,但我在这个领域完全没有经验,不幸的是我在截止日期前。
这个想法解释起来很简单,我有(逐帧)人体 25 个关节的精确 3D 坐标。我需要的是它周围一个人物角色的相应动画视频。这个想法与此类似- https://www.youtube.com/watch?v=RPrdDlQXjEg
不同之处在于我有逐帧 3d 关节值,而不是动作捕捉数据。此外,我想对大量视频重复该过程,所以我想我不能为每个视频手动执行此操作(同样是我的推测,如果我错了请告诉我)。
我在这方面没有任何经验。在问这个问题之前我似乎没有做任何研究,但我确实做了。只是我真的很困惑我的选择是什么以及它是否可行。
我不希望得到详细的答案(尽管如果我得到一个答案会很棒)。我只是在找人给我指出正确的教程。谢谢。
编辑:继续讨论 - https://blender.stackexchange.com/questions/122369/create-animation-videos-from-3d-joint-positions
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)
如果你愿意,你可以 bake the animation 进入电枢,这样你就可以移除空的。
Blender 包含 Motion Capture Tools addon, which provides tools that may help at some stage. You may also want to look at the Carnegie Mellon University Mocap Library Browser 插件,该插件下载动作捕捉数据并将其分配给装备,它包括一种将动作捕捉数据传输到 MakeHuman 装备的方法,因此您可能可以使用或改编一些东西.