简单的IK骨骼动画IK解算方法
我们知道一般的骨骼动画就是FK骨骼动画即正向骨骼动画,它的实现相信大家都以经很清楚,我假设你们都已经了解了。 IK骨骼动画就是逆向骨骼动画,如果需要高级的动画效果我们就要用到它。如果对游戏角色来说FK骨骼动画的作用带有主观性,那么IK骨骼动画的作用则是环境对角色的客观影响。
说到IK骨骼动画,我们就需要谈到IK解算器。在3DSMAX中我们可以很轻易的创建它,我们这里以HI解算器为例,除此之外还有HD解算器IK肢体解算器。
效果说明:假设黄色的线段为父骨头,绿色的线段为子骨头,红色的为IK解算线(姑且这么叫吧),当IK解算线的右端向左端靠近时会带动骨骼做弯曲运动。
假设上图是当前动画帧的骨骼状态。
首先我们需要做出IK解算线并记录下来,即红色的线段。
其次先让子骨头做一次旋转运动,再做一次IK解算线,即橙色的线段。这时我们就可以算出红色线段和橙色线段之间夹角。
后让父骨头反向旋转相应度数,由于父骨头会带动子骨头,使得橙色线段与红色线段重合。此时就是想要的结果了。
说到IK骨骼动画,我们就需要谈到IK解算器。在3DSMAX中我们可以很轻易的创建它,我们这里以HI解算器为例,除此之外还有HD解算器IK肢体解算器。
它的效果如下图所示:
效果说明:假设黄色的线段为父骨头,绿色的线段为子骨头,红色的为IK解算线(姑且这么叫吧),当IK解算线的右端向左端靠近时会带动骨骼做弯曲运动。
上图告诉我们可以用圆的当然三维空间中是球的方程来求交点实现,不过我想谁也不希望用计算机来求解这个方程,所以有一种替代方案它的实现原理,这是一种独立历史记录的IK骨骼动画,过程如下图所示:
实现方法大致分为三步:假设上图是当前动画帧的骨骼状态。
首先我们需要做出IK解算线并记录下来,即红色的线段。
其次先让子骨头做一次旋转运动,再做一次IK解算线,即橙色的线段。这时我们就可以算出红色线段和橙色线段之间夹角。
后让父骨头反向旋转相应度数,由于父骨头会带动子骨头,使得橙色线段与红色线段重合。此时就是想要的结果了。
这只是众多方法中的一种,当然这还有缺点,比如旋角度不能过大,骨头只间不能成一条直线,但是这些都可以通过加入条件判断来解决。
- 上一篇:C# 串口二进制协议数据解析范例 2018/12/26
- 下一篇:骨骼反向动力学(INVERSE IK)的实现 2018/11/15