在上一节中,我们通过在通道盒中添加一个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就隐藏起来,读者可自行测试。
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答电影剪辑通常被称为“隐形的艺术”,尽管剪辑师的名号不如导演的名号响,但是如果缺少了剪辑师对拍摄素材的二次加工,电影作品将缺少其......
今天,我来和大家聊聊,迪士尼动画《海洋奇缘》系列是怎么用Maya软件为他们最新的续集打造获奖动画的。
有哪些听起来高大上、实际上转行同学也能胜任的岗位?试试虚拟现实工程师!
增强现实(AR)和虚拟现实(VR)是当前备受瞩目的创新技术,对相关的增强现实开发、虚拟现实开发、数字孪生开发工程师的人才需求,......
在这个短视频盛行的时代,越来越多的人想要尝试自己进行短视频剪辑,却常常因为缺乏专业知识而无从下手。别担心,今天就为大家带来短视......
今天,我们聊聊皮克斯的《头脑特工队》系列
中国首个AIGC导演共创计划今日正式上线:同学,做导演不要?
中国首个AIGC导演共创计划定于12月6日正式上线。该计划由快手自研视频生成大模型产品“可灵AI”,联合李少红、贾樟柯、叶锦添......