欢迎光临散文网 会员登陆 & 注册

用胯!论Openpose转Unity.humanoid一种方案(二)

2023-03-29 23:19 作者:DeadCyber  | 我要投稿

上一篇中,我们已经从openpose的单张2d数据

对应到了每个skin.bones[i]的transform。

接下来就是怎样设置这些transform。


第一种:直接设置RTS(错误)

   这种想法简单直接,结果变成这样

从图中的红点,其实是可以看出我们确实设置对了位置,但是原模型本来就有大小,缩放,肯定与2d测算匹配不上。我们要设置,且能设置的,只有骨骼的旋转。


第二种:用胯!从Hip设置Rotation轴方向(可行)

    只设置rotation,怎样设?从哪里开始设?

    其实这和我们自身运动的物理属性一致。一般来说重心落在Hip处,hip这个东西不能简单看机器翻译成臀部,根据实际情况会在会阴,档下,阴部,腹部下方,或者尾椎骨范围那一个点。实际上跟hip一些武术里说的“胯”概念类似,不是butt,而是你全身运动的一个基点。所以游戏开发常用的骨骼都以hip为根节点,然后以这样一个“流向”向末端传导:


可以看作是一个从hip开始,对rotation的FK(前向动力学)传导。我们后面的代码也是基于这个流向。

PS:用胯!

    一些武术里说“力始于足,发于腿,主宰于腰”。上面这个流向,就是“主宰于腰”,这个“腰”又是一个虚词,和“胯”一个意思,就是hip。“主宰”就是你调整姿势的时候,是从hip开始节节传导至末端的。

    “力始于足”,硬要解释,就是重力的反作用力在脚底,我们平时走路的时候,就是一个基于足底的IK(反向动力学),它的传导是这样的:

    我用红白两色表明不同于“主宰于腰”,普通人在FK的时候不会太注重左右分别(实际上有意识地进行肌肉收缩,FK也可以有更多的可能性);而走路IK不一样,左右两力明显不一样,普通人也感受明显。这就是为什么我们走路会容易摔倒,而调整姿势的动作却不会让我们摔倒,因为力不“合”。绿框中是由“胯”到“中台”的力传导,实际上不一定是简单的垂直向上,也可能是交叉传导;由于传到“中台”的情况比较复杂,到手上也就不一样了,不过大体上还是从Shoulder到Hand这一路下来。

    至于“发于腿”,因为目前主流游戏引擎没有肌肉系统,所以也不好验证。不过很明显,脚上又没肌肉,支撑你整个人站住的是腿部的肌肉,腿软了也就站不住了;根据上面流向图,你也应该知道“力发于腿”的合理性。以后有机会Houdini之类的可以试试。

调整轴向对应

    我发现对于每一个骨骼,它的“流向方向”对应的轴也不太一样,xyz正负都有,这个可能是制作规范上各有各的想法:

所以在每个openID后面,加一个流向对应;如果遇到了不同制作规范的骨骼,改后面的就行:

最后,我们终于可以进行基于hip的对旋转的FK了:

由于缺少深度信息,所以脚趾头有手动处理,还有前后关系上有待处理。有些细节处理就不说了,之前的文章也有提到。

AI转深度图后可能可以优化前后关系等。这个之后可以尝试。


就这么多,谢谢。

用胯!论Openpose转Unity.humanoid一种方案(二)的评论 (共 条)

分享到微博请遵守国家法律