在上一节中,我们通过在通道盒中添加一个IK/FK属性来实现手臂IK和FK的切换功能,但这种切换方式并不是无缝切换,本节将主要学习通过MEL来实现角色手臂IK和FK的无缝切换。
一、IK转换到FK
Step01 打开上一节完成的场景文件“IK/FK无缝切换”,选择IK_ R _bi18骨骼,然后打开脚本编辑器,创建一个名称为FK和IK的标签[在脚本编辑器中执行Command>Rename Tab (命令>重命名标签),对标签进行重命名,在该标签中输入以下语句:
//IK TOFK
float $IK_ R_bi18rx=' getAttr IK_ R_ bi18 .rotateX’;
float $IK_ R_bi18ry=' getAttr IK_ R_bi18 .rotateY’;
float $IK_ R_bi18rz=' getAttr IK_ R_ bi18 .rotateZ’;
如下图(左)所示。
gelAttr语句用于获取数值。
Step02 执行脚本,在上端面板中得到结果// Result: -13.489111 //,就是IK骨骼的3个轴向,下面将这3个值赋予FK,从而实现无缝切换。
Step03 选择FK_ R_bi19,在通道盒中将其旋转轴向的值全部归零,如下图(中)所示。
Step04 将脚本编辑器上端面板中的3个归零命令语句复制到脚本编写区,同时将0分别替换成变量$IK_ R _bi18rx、$IK_ R_bi18ry和$IK_R_ bi18rz, 并调整x、y和z的顺序,如下图(右)所示。
Step05 同理制作FK_ R _bi15骨骼。在脚本编辑器中输入以下语句:
Float $IK_ R_bi15ry=`getAttrIK_ R_ bi15.rotateY;
selAttr"FK_ R_ bi15.rotateY" $IK_ R_bi15ry;
执行这两个语句,观察是否正确。
Step06 继续制作FK_ R_shou16骨骼。在脚本编辑器中空一行继续输入以下语句:
float $IK_ R_ shou16rx=' getAttr IK_R_shou16.rotateX`;
float $IK_ R_ shou16ry=' getAttr IK_ R_shou16.rotateY`;
float $IK_ R_ shou16rz= ' getAttr IK_ R_shou16.rotate Z`;
setAttr"FK_ R_ shou16.rotateX" $IK_ R_ shou16rx;
setAttr "FK_ R_ shou16.rotateY" $IK_ R_ shou16ry;
setAttr "FK_ R_ shou16.rotateZ" $IK_ R_ shou16rz;
最终的语句如下图所示。
Step07 书写R_ IKFK_crv控制器的命令语句,在脚本编辑器中空一行, 输入以下语句:
setAtr"R_ IKF _crv.IKFK"1
如下图所示。
Step08 在大纳中选择skin_ R_bi14, 在脚本编辑中选择所有的脚本语言,然后执行所有脚本,如下图(左)所示,可见skin_ R_bi14骨骼已经捕捉到FK了,如下图(右)所示。
这样IK转换到FK的语句就创建完成了。
Step09 创建一个新的工具架rigging,如下图所示。
Step10 选择脚本编辑器中的所有脚本,将其拖曳到rigging工具架中,如下图(左)所示,通过Shelf Editor (工具架编辑器)将其重新命名为FK,同时修改标签的颜色以便更好地区别,如下图(右)所示,单击Save All Shelves (保存所有架子)按钮, 这样IK切换到FK的命令就创建好了。
二、 FK转换到IK
Step01 在脚本编辑器的IK标签中输入以下语句:
//FK TO IK
float $FK_R_ shou16[]=' xform -q -ws-t FK_ R_ shou16';
注:xform语句用于获取移动、旋转和缩放的数值。
xform -ws –t$FK_R_ shou16[0] $FK _R _shou16[1]$FK_ R_ shou16[2] R_IK_ shou_crv;
注:此时观察角色的手臂, 如果发现有错误,可通过重新创建手臂的控制器R_ IK shou_ crv来解决,保证控制器与骨骼轴向的统一。在绑定的过程中,这样的情况时有发生。
Step02 在脚本编辑器中空一行, 继续输入以下语句:
float $FK _R_ shou16ro[]= xform -q -Ws –ro FK_ R_ shou16';
xform -ws -ro $FK_R_ shou16ro[0] $FK_R_ shou16ro[1] $FK_R_shou16ro[2]R_IK_ shou _crv;
Step03 在大纲中选择R_Ik_ shou_crv控制器,选择脚本编辑器中的语句,如下图(左)所示,然后执行语句,结果如下图(右)所示。
下面捕捉定位器。
Step04 创建一个定位器FK_ lot, 并打组,将组命名为FK _lot_ grp,放在locator1 附近,尽量不要重合,以免选错。
step05 在大纲中将FK_ lot_ grp放置在FK_R_bi_ grp之下,作为FK_ R_bi_grp的子物体,如下图(左)所示。
Step06 将locator1重新命名为IK_lot,并打组命名为IK_ lot_ grp。
Step07 继续输入以下语句:
float $FK_lot[]='xform -q-ws-t FK_ lot';
xform -ws -t $FK_ lot[0] $FK_ lot[1] $FK_lot[2]IK_ lot;
setAttr "R_ IKFK_crv.IKFK"0;
执行以上3个语句,定位器已经捕捉在一起了,如下图(右)所示。
执行所有语句,可见FK已经捕捉到IK上了,如下图(左)所示。
TIPS :如果不重合,可以将FK的FK_R_ bi19、FK_R_ bi15和FK_ R_ bi16的选择属性归零。
Step08 参照前面的方法再创建一个FK切换到IK的命令,放置在rigging工具架中,如下图(右)所示。
三、设置控制器的隐藏和显示
Step01 打开材质编辑器,将控制器R_ IKFK _crv、 IK_ R_ bi_ grp和FK_ R_ bi_ grp导入进来,然后用R_IKFK_ crv的IKFK属性连接FK_ R_bi_ grp的visibility (显示)属性,如下图(左)所示。
Step02 创建一个反转节点reversel,然后将R_IKFK_crv的IKFK属性连接反转节点reverse1的inputX(输入X)属性上,再将反转节点reverse1的outputX (输出X)属性连接到IK_ R_ bi_ grp的visibility (显示)属性,如下图(右)所示。
选择skin_ R_ bi14原始骨骼,在rigging工具架中单击IK/FK按钮时,观察大纲中的IK_R_ bi grp和FK_ R_bi_ grp。单击IK时,FK就隐藏起来,单击FK时,IK就隐藏起来,读者可自行测试。
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答023年以来,在版号审批、出海政策等影响下,新品游戏大量涌现,这也为游戏市场带来了一些新变量、新现象。
学习游戏开发班可以帮助游戏爱好者从零基础成为游戏开发专家,掌握全面的游戏开发技能。
火星时代教育为您提供专业的界面设计实战班,在实践中掌握界面设计的核心技巧和最新趋势,成为优秀的UI设计师。
了解UI交互设计培训的最佳选择,比较不同培训机构的优势和特点。
火星时代教育为您推荐专业的学影视后期培训机构,提供高质量的培训内容及资深导师指导,助您成为优秀的影视后期剪辑师或合成师。
火星时代教育是一家专注于交互设计培训的机构,为学员提供专业的交互设计培训课程,并帮助他们成为优秀的交互设计师。
1. 打开微信扫一扫,扫描左侧二维码
2. 添加老师微信,马上领取免费课程资源
同学您好!