QQ聊天

IK/FK之全面了解

很久以前就想写这么一个帖子,但是觉得要写起来需要配图比较麻烦,但是又经常看到有人对IK/FK有错误的认识。所以决定还是开始写,慢慢去完善和补充。我想这个帖子看下来,应该可以让美术以及不了解IK/FK的技术美术有个正确的概念。

IK是Inverse Kinematics,逆向运动或者叫反向运动。与之相对应的是FK全名Forward Kinematics,正向运动也可以叫前向运动。

在美术的思维中,正向运动就是父物体带动子物体,子物体无法影响父物体,反向运动则相反,子物体可以带动父物体,而父物体对子物体的影响仅限于参与整个IK骨骼链的根骨骼,其他的骨骼无法影响子物体。

如果想要正确理解逆向运动,比如明白为什么不存在所谓的“无缝切换”。平时说的无缝切换是指切换的时候没有抖动,但许多人以为,“无缝切换”就是无需切换,自动换用正向或逆向。要正确理解逆向,首先要换个方式去理解什么是正向以及什么是逆向。正向,就是从物体的变化求结果;逆向则是从结果求物体的变化。

比如说一个球在 0 0 0这个位置,正向运动就是向x方向移动10个单位,结果就是10 0 0。而逆向则是目标位置是10 0 0,这个球移动到该位置。

这个例子看起来似乎正向和反向没什么差别,不过如果是一个复杂一点的结构的话。比如说人的胳膊,正向运动就是上臂旋转四十五度,小臂旋转四十五度,然后手腕处在一个位置,假设是 10 10 10。这里需要上臂和小臂的旋转值。逆向呢,则是直接给出手腕的目标点 10 10 10,然后计算出小臂和上臂的旋转值,当然在三维空间里这个的结果是无限多个,所以,动画软件里的逆向需要有个朝向约束。

为什么会需要有逆向运动和正向运动,比如说一个引体向上的动作,手的位置是固定的,身体被胳膊带动,逆向运动很符合的子物体带动父物体的需求。再比如一个人挥舞一块板砖,如果只调节板砖或手腕的位置就可以完成整个胳膊的动画是很便捷的。而正向运动呢,比如说一个掰手腕的动作,是在一个平面上,以肘部为支点以上臂的朝向为轴向旋转,这个动作用逆向是非常难做的,不信的大可以用逆向做一下看看。二者都有其很方便的场合而且有时候一个很方便的时候恰恰是另一个很麻烦的时候。

 

我想现在应该已经可以理解为什么没有“无缝切换”,二者的动画计算方式是不同的,不可能同时使用两种计算方式,在某一时刻整个骨骼链要么是正向运动要么是逆向运动。如果要切换二者,必须有一个参数里控制当前是正向还是逆向,如果是正向就从父级一层层变换下来,如果是逆向,就从目标体推算当前骨骼正确的变换。

 

这个帖子我会慢慢补充,后面会介绍软件里的切换以及切换的原理,然后会介绍IK的一种比较快速的算法。有问题的请留言。

posted @ 2013-06-09 12:52  SITT  阅读(3546)  评论(3编辑  收藏  举报
QQ聊天