google了下,没找到root motion这种技术的出处在哪,unity上有此功能,ue4也有,真想知道是谁想出来这么返璞归真的想法:用动画的位移来控制人物的位移,让滑步狗带。
相信看到这里的人,应该是知道root motion是什么,已经自己遇到了什么样的困惑,我就不赘述了,直入正题,说一下我的理解。
这篇文章很详细,但个人觉得还是不是很透彻,而且细节有些不对。
http:///cubesky/article/details/39478207
这是我的个人理解,从程序员的角度看下:
(因为没有源码,官方文档也不多,只能从表象猜测了)
当你制作动画时,一定离不开一棵骨骼树,然后调整某个骨骼,做出相应动作(举手,抬腿)。但当你想要让整体移动时(比如助跑,跳跃),这时候你就要移动根节点骨骼了,这就是ROOT MOTION 中 ROOT的由来??
(当然你也可以不移动根节点,只是摆出原地的动作,后续在游戏里,用程序实现人物整体移动的轨迹,当然,然后你就滑步了)
而root motion就是在这个根节点骨骼上做文章。如果你设置为“Bake into Pose”,那么这个根节点骨骼的移动,会加在所有子骨骼的位移上,这时候Root Motion的移动就是0.
如果不勾选“Bake into Pose”,那么根骨骼的位移,就不会加在子骨骼的位移上。这时候Root Motion的值就是根节点骨骼的位移值。
最后,当你勾选Apply Root Motion时,之前的那个值就起作用了,如果root motion为0,那么不会设置你人物的transform(自然就不会影响你的物理计算结果)。如果不为0,那么就是直接设置你人物的transform,物理就不起作用了。
而unity官方api,把水平(XZ)和垂直(Y)分开了,这样就解决很多问题了:如果你是奔跑动作,那么就不勾选XZ,让值影响你的水平位移,但勾选Y,让Y上的root motion bake 到你的子骨骼中,让物理重力依旧影响你的人物。如果你是跳跃运动,那么就不勾选XZ,让值影响你的水平位移,让你能跳出去,同时也不勾选Y,让值影响你的Y,让你的人物忽略掉重力,高高跳起,直到动画播完,切回到idle或run,你的人物就会从半空中摔下来。what a beautiful workflow ~
抛砖引玉,请评论对错。谢谢~