yanchxx / MoPA

An Blender addon uses ROMP to extract human's 3D poses from image, video or webcam and drive your own 3D character.
MIT License
242 stars 49 forks source link

大佬,求问,不改fbx,怎么驱动骨骼平直的模型 #26

Closed lucasjinreal closed 1 year ago

lucasjinreal commented 1 year ago

之前问过一个问题,为什么mixamo 无法被直接驱动,后来通过改骨骼可以驱动了。

image

但是现在有个问题阿,我想驱动更多的模型,大部分都是右边的形式,不可能每个模型都取修改骨骼,有些地方也不能修改iafbx,例如UE里面。

此时,要怎么通过修改 输出的Pose数据,来是配更通用的骨骼?

yanchxx commented 1 year ago

我也不会,应该是运动学的一些矩阵变换,我之前看到一个教程,你可以参考一下。

yanchxx commented 1 year ago

对了,还有个pdf可以参考一下。

据我之前的搜索,import_bvh.py里面应该有recalculate的代码。

lucasjinreal commented 1 year ago

@yanchxx 感谢大佬回答。 不过看起来上面都是对骨架进行操作。我在想,既然SMPL有几根骨是相对于world旋转,那是否能在SMPL输出的四元数上把这个给他转回去。

这个需求其实更加实用,大佬有什么idea吗,这样用户就不需要修改骨骼,大部分骨架都能驱动。感觉这应该是一个比较通用的操作,应该有一个通用且普遍的解法

yanchxx commented 1 year ago

@jinfagang 我哪天有空看看运动学然后实现一下试试

还有就是我超弱,不是大佬🥹

lucasjinreal commented 1 year ago

搞啊,我是因为尝试驱动metahuman的时候才遇到这个问题,这玩意在blender里面还比较好高,UE里面就一个头十个大。若是能驱动普通骨骼,那么metahuman就有解了

lucasjinreal commented 1 year ago

@yanchxx 我发现blender里面是这么实现,从smpl骨架到普通骨架的(跟你的hack反过来):

https://developer.blender.org/diffusion/BA/browse/master/io_scene_fbx/import_fbx.py

但是我没有办法拿到这里面的输出,其实最核心的就是 find_correction_matrix,把这些matrix拿出来,就知道怎么从SMPL -> 普通骨架, 然后同样的转换作用到四元数就可以。

大佬知道咋弄吗

lucasjinreal commented 1 year ago

@yanchxx 如何,有解法了吗

lucasjinreal commented 1 year ago

@yanchxx 大佬,有揭发了吗?

yanchxx commented 1 year ago

最近太忙了,赶论文

lucasjinreal commented 1 year ago

大佬有空研究一下啊,完全没有思绪

foocker commented 1 year ago

大佬有空研究一下啊,完全没有思绪

.

yanchxx commented 1 year ago

嗯嗯 半个月内一定解决

lucasjinreal commented 1 year ago

@yanchxx 半个月黄花菜都凉了啊, 不过能解决就是不错的😊

lvZic commented 1 year ago

@lucasjinreal 你解决这个问题了吗 不用改骨骼 通过改SMPL参数的方式来驱动mixamo模型?

yanchxx commented 1 year ago

@lucasjinreal 你解决这个问题了吗 不用改骨骼 通过改SMPL参数的方式来驱动mixamo模型?

思路知道了,代码还没写

lvZic commented 1 year ago

@lucasjinreal 你解决这个问题了吗 不用改骨骼 通过改SMPL参数的方式来驱动mixamo模型?

思路知道了,代码还没写

SMPL模型 和 mixamo模型 一个是骨骼初始轴向不同 二是骨骼局部坐标系也不同 我想到的是Tpose姿态下 从root开始 一层层计算每根骨骼的旋转角度 就像这样: image

lucasjinreal commented 1 year ago

@yanchxx 五百年了,我已经解决了。

lvZic commented 1 year ago

@yanchxx 五百年了,我已经解决了。

能分享下解决方案吗 感谢

yanchxx commented 1 year ago

@yanchxx 五百年了,我已经解决了。

哈哈,厉害