Maya骨骼绑定IKFK无缝切换-双向约束法 联系客服

发布时间 : 星期一 文章Maya骨骼绑定IKFK无缝切换-双向约束法更新完毕开始阅读508198ce58f5f61fb7366671

活了这么多年,在学东西的时候搜过无数教程,什么使用教程,破解教程等

等等等,从没自己写过教程,但是今天忍不住也要写一篇了,给广大网友分享下我的Maya学习经验。因为接触时间不长,难免有理解错误或疏漏的地方,还请不要拍砖。

首先,为什么要进行IK和FK的无缝切换?ikHandle1里不是有ikBlend参数么,直接把参数值从1改成0,不就可以实现IK切换到FK了么?嗯嗯,开始我也是这么想的,老师讲IK和FK绑定的时候还觉得好简单,不过等你实际做动画的时候,问题就出现了。你使用IK绑定费老大劲完成了一个动作,结果切换到FK绑定的时候,天哪,骨骼又跑到初始位置去了,于是各种定位各种对齐,然而这不是一件容易的事,因为你不仅要对齐骨骼的位移还有旋转呐!疯了都!

也有网友会说,Maya2013中的HumanIK功能非常强大,干嘛还要自己绑定,不过HumanIK主要是面向两足角色对于四足或多足角色就不适用了。当然也有很多绑定插件可以快速完成。

但是如果自己可以手动绑定,那理解其他插件中的绑定技巧也是很有帮助的。

好,废话说了一堆,现在开始讲如何无缝切换IK到FK,或者FK到IK,即切换的时候,要保证骨骼的位移和旋转参数都保持当前不变,也就是无缝(前提是你已经了解了什么是IK,什么是FK,我这就不细说了。)

目前处理无缝切换的方法有三种:

方法一:通过maya自带的set ikfk key这个命令来转换。(太麻烦!) 方法二:三套骨架,一套是ik控制,一套是fk控制,一套用于蒙皮,然后通过属性控制决定约束到ik骨架还是fk骨架。(同样麻烦,而且工作量巨大,不过我也试过,最终可以做出来,提供教程的朋友给了思路也给了代码,但是需要你彻底了解物体的世界坐标系和对象坐标系,否则无论如何你获取的骨骼在世界坐标系中的位移和旋转参数,都无法正确的赋给FK控制器。我试了一天才明白过来,累死!)

方法三:使用单骨骼进行IKFK的切换。(没试过,因为目前还不了解角色功能到底是干嘛使用的。有兴趣的朋友可以点击这里查看http://blog.sina.com.cn/s/blog_54b08bdb010007x4.html。)

方法四:已有双向约束。需要和动画曲线相结合。http://blog.sina.com.cn/s/blog_71fcab930100qpqw.html

下面是我的IKFK无缝切换思路,简单来说是使用双向约束来定位控制器和骨骼,这样在切换的时候可以保证控制器和骨骼的位移以及旋转始终保持一致。

以手臂骨骼IKFK绑定来说:

1、当FK控制手臂骨骼系统时,即FK方向约束手臂骨骼时,让IK的极向量控制器受定位器的点约束,把定位器P给手臂的肘关节,并让IK控制器受FK手腕控制器的点约束,这样当FK控制器方向发生变化时,可以始终保持IK控制器和IK极向量控制器的位移信息和骨骼一致。

2、当IK控制手臂骨骼系统时,让手臂骨骼控制FK控制器,这样就可以保证FK控制器的方向始终和骨骼保持一致。同时解除FK手腕控制器对IK控制器的点约束,以及定位器对IK极向量控制器的约束。

怎么样是不是很简单?只需要一套骨骼就可以了!

这里所说的双向约束,其实就是指FK约束骨骼的方向,同时让骨骼也约束FK的方向。并且设定,当FK约束骨骼时,骨骼对FK的约束权重为0,即骨骼对FK的约束不起作用;当骨骼约束FK时,FK对骨骼的约束权重为0,即FK对骨骼的约束不起作用。这样就不会产生冲突了!

现在有一个问题,当FK切换到IK时,骨骼受FK约束所产生的方向变化会重置为初始方向,这样就又回到了我一开始说到的问题,没有做到无缝切换!

那有没有解决办法呢?其实很简单,在动画模块,约束菜单下,有一个“设置静止位置”的功能。(我的Maya版本是2013,其他版本有没有这个功能不是很清楚。)这个功能的作用就是为了防止约束权重变为0时,骨骼又回到初始状态。

这样一来,我们就可以利用此功能,当FK切换到IK时,把骨骼当前的旋转信息定位下来,然后再取消FK对骨骼的方向约束,同时让骨骼对FK的方向约束开始起作用,同样使用该功能,可以把IK控制器和IK极向量控制器的当前位移信息定位下来,然后让IK控制器开始起作用。

IK切换到FK的解决办法也一样,定位所有FK控制器的当前旋转方向,并让IK控制器不起左右,FK控制器起作用就OK了。 看起来很容易实现对不对?可是我却琢磨了半天。

下面我们就开始具体实现吧,因为该教程主要面向初学者,所以我会将的比较细碎,大牛们如果会看得话就忍忍吧,呵呵~ 步骤一:

创建手臂的四个骨骼,同时分别绑定FK控制器和IK控制器。需要注意的地方是: 1、手臂骨骼的枢轴方向要保持一致,否则会有错误。

2、FK控制器和IK控制器一定要打组,然后冻结控制器的位移和旋转属性,切记,不能冻结组的属性!否则世界坐标系会变成对象坐标系,后续问题会很多。 3、先让各骨骼对各控制器的组进行父子约束,目的是为了使控制器的位移和方向与各骨骼保持一致,然后再删除父子约束节点。

4、如果约束后的控制器不容易操作,可以在组件模式下,修改各控制器的旋转轴,千万不要修改了枢轴方向!! 以肩膀控制器FK1的定位为例:

创建曲线圆环控制器,修改控制器名称为FK1,进行打组,组名为FK1_G。 选择骨骼joint1,再选择FK1_G,进行父子约束,FK1控制器就定位到joint1的位置,删除FK1控制器下的约束节点。目前FK1的方向和骨骼水平,不好选择,在组件模式下,选择FK1的所有控制点进行旋转,千万不要选中枢轴。

如果旋转的角度不能确定,查看MEL编辑器中的历史,会看到刚才操作的MEL命令,复制下来,取消刚才的操作,然后在MEL编辑器的输入区黏贴刚才的

代码,把旋转的角度数改为整数,如-90,取消组件模式回到对象模式下。现在FK1控制器就完成了,删除历史,冻结变换。其他FK2、FK3控制器的定位一样不再赘述。 步骤二:

刚才已经完成了手臂正常的FK和IK绑定,现在需要进行骨骼对FK的约束。先让FK对骨骼的约束节点权重为0,即把每个骨骼下的约束节点值修改为0,以FK1下的为例,把joint1_orientConstraint1里的FK1W0的参数设置为0。其他骨骼也一样处理,这样的好处是,当你再让骨骼方向约束FK时,系统不会弹出警告。

完成以上操作后,如下图所示: FK绑定示意图:

IK绑定示意图:

IK控制器是把圆环的控制节点修改了下,变形为上图右侧所示(比较奇怪的一个形状,你可以自己做成其他的,这里只是示意) IK极向量控制器是一个定位器。你需要再做一个定位器使位移和它保持一致,并P给手肘的骨骼,同时让他点约束IK极向量控制器。 完成之后的大纲视图如下:

FK控制器的层级关系如上图右侧所示,可以看到各FK控制器已经受到了骨骼的约束。 由于每次修改FK的约束权重或骨骼的约束权重太麻烦,因此我们新创建个控制物体(FKCTR)

来进行总体的属性控制,这里我用了各立方体,你可以创建其他的物体或曲线都可以。如上图左侧高亮显示的物体。

我们要给这个控制物体添加一些其他的属性,比如:FKPOWER,用来总体控制各FK对骨骼的约束权重,设置它的最小值为0,最大值为1,默认值为1。

打开窗口菜单,选择常规编辑器下的连接编辑器,左侧载入FKCTR,右侧分别载入各骨骼下面的FK约束节点,joint1_orientConstraint1、joint2_orientConstraint1、joint3_orientConstraint1,把FKCTR属性中的FKPOWER与以上几个约束节点中的FK1W0、FK2W0、FK3W0相关联。这样就可以通过修改FKPOWER的值来直接修改FK1W0、FK2W0、FK3W0的值了。锁定并隐藏FKPOWER中除可视性和FKPOWER以外的所有属性。 另外我们可以给它在增加其他属性,如下图所示:

其中JOPOWER属性和FK各控制器下的FK1_orientConstraint1、FK2_orientConstraint1、FK3_orientConstraint1的joint1w0、joint2w0、joint3w0相关联; FKVISIB与FK1_G的可见性相关联;

IKVISIB分别与ikcon和polecon的可见性相关联;

POPOWER与polecon下的polecon_pointConstraint1下的polelocW0属性相关联;

IKPOWER与ikcon下的ikcon_pointConstraint1下的FK3W0属性相关联;

polecon和ikcon之前已被poleloc和FK3分别进行了点约束,还记得吧,所以才会产生以上的点约束节点。

之所以要给FKCTR增加这么多属性,是为了在做动画K帧的时候不用来回找各个散落的属性。

以上这些设置基本上OK了,绑定了IK和FK,你可以手动的调整参数试试切换,没有问题,但是如果每次都手动去修改参数会很麻烦,因此我们还是需要做个MEL。不用怕新手们,很简单。

你已经注意到FKCTR里还有个属性SWITCH对不对,SWITCH的值就是为了控制切换的。