Maya骨骼绑定IKFK无缝切换-双向约束法.docx_第1页
Maya骨骼绑定IKFK无缝切换-双向约束法.docx_第2页
Maya骨骼绑定IKFK无缝切换-双向约束法.docx_第3页
Maya骨骼绑定IKFK无缝切换-双向约束法.docx_第4页
Maya骨骼绑定IKFK无缝切换-双向约束法.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

活了这么多年,在学东西的时候搜过无数教程,什么使用教程,破解教程等等等等,从没自己写过教程,但是今天忍不住也要写一篇了,给广大网友分享下我的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的切换。(没试过,因为目前还不了解角色功能到底是干嘛使用的。有兴趣的朋友可以点击这里查看/s/blog_54b08bdb010007x4.html。) 方法四:已有双向约束。需要和动画曲线相结合。/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的值就是为了控制切换的。 当值为0时,默认为FK控制,IK控制器不可见。 当值为1时,IK控制,FK控制器不可见。就这么简单。代码如下:$ikfkswitch = getAttr(FKCTR.SWITCH);if($ikfkswitch = 1) /change fk to ik$joint1_ro = getAttr(joint1.rotate);setAttr joint1_orientConstraint1.restRotate $joint1_ro0 $joint1_ro1 $joint1_ro2;/以上获取骨骼1的旋转信息并定位$joint2_ro = getAttr(joint2.rotate);setAttr joint2_orientConstraint1.restRotate $joint2_ro0 $joint2_ro1 $joint2_ro2;/以上获取骨骼2的旋转信息并定位$joint3_ro = getAttr(joint3.rotate);setAttr joint3_orientConstraint1.restRotate $joint3_ro0 $joint3_ro1 $joint3_ro2;/以上获取骨骼3的旋转信息并定位$ikcon_t = getAttr(ikcon.translate);setAttr ikcon_pointConstraint1.restTranslate $ikcon_t0 $ikcon_t1 $ikcon_t2;/以上获取IK控制器的位移信息并定位$polecon_t = getAttr(polecon.translate);setAttr polecon_pointConstraint1.restTranslate $polecon_t0 $polecon_t1 $polecon_t2;/以上获取IK极向量控制器的位移信息并定位setAttr FKCTR.IKPOWER 0; /FK3对IK控制器的点约束取消setAttr FKCTR.POPOWER 0; /定位器对IK极向量控制器的点约束取消setAttr FKCTR.FKPOWER 0; /FK控制器对骨骼的约束取消setAttr FKCTR.JOPOWER 1; /骨骼反过来开始对FK进行约束setAttr FKCTR.IKBLEND 1; /IK控制器开始起作用setAttr FKCTR.FKVISIB 0; /FK控制器设为不可见setAttr FKCTR.IKVISIB 1; /IK控制器设为可见else if($ikfkswitch = 0) /change ik to fk$fk1_ro = getAttr(FK1.rotate);setAttr FK1_orientConstraint1.restRotate $fk1_ro0 $fk1_ro1 $fk1_ro2;/以上获取FK1控制器的位移信息并定位$fk2_ro = getAttr(FK2.rotate);setAttr FK2_orientConstraint1.restRotate $fk2_ro0 $fk2_ro1 $fk2_ro2;/以上获取FK2控制器的位移信息并定位$fk3_ro = getAttr(FK3.rotate);setAttr FK3_orientConstraint1.restRotate $fk3_ro0 $fk3_ro1 $fk3_ro2;/以上获取FK3控制器的位移信息并定位setAttr FKCTR.JOPOWER 0; /骨骼对FK的约束取消setAttr FKCTR.FKPOWER 1; /FK开始反过来约束骨骼setAttr FKCTR.IKBLEND 0; /IK控制器不再起作用setAttr FKCTR.IKPOWER 1; /FK3控制器开始点约束IK控制器setAttr FKCTR.POPOWER 1; /定位器开始约束IK极向量控制器setAttr FKCTR.FKVISIB 1; /FK控制器的可见性打开setAttr FKCTR.IKVISIB 0; /IK控制器的可见性关闭;OK,以上就是全部教程了,感兴趣的朋友可以在此基础上再优化下,比如可以做成表达式什么的。这里需要修改FKCTR里的SWITCH属性并执行以上MEL代码。K帧动画完全没有问题。比如在SWITCH属性为0的情况下,我们进行FK手臂动作调整。在第一帧选择所有FK控制器加选FKCTR里的所有属性进行关键帧设置,在第10帧修改FK控制器的参数,设置关键帧,不要忘了FKCTR里的所有属性在这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论