签到

05月03日
尚未签到

共有回帖数 0

    刘云

    等级:
    • 荣誉:
    IKFK转换一直都是装配的老大的问题,解决方法有很多种,我所知道的,
    方法一:最简单的是,一套骨架,通过ik手柄的属性ikblend来直接控制
    方法二:通过maya自带的set ikfk key这个命令来转换
    方法三:三套骨架,一套是ik控制,一套是fk控制,一套用于蒙皮,然后通过属性控制决定约束到ik骨架还是fk骨架
    方法四:也有用复杂脚本实现的,这个我就不深究了。
    顺便提一下fbik,这个装配其实是motionbuilder里的,自从被收购后,就嫁接到maya里,可惜不太好使,有的时候控制器会飞掉,动画修改也有点麻烦。没有motionbuilder好使(mb的使用经验我也是写了教程的,有兴趣可以自己找来看看)
    下面来讲我个人分析这些方法的优缺点。
    方法一:优点是简单,很多时候,一个项目里,简单稳定是最重要的,复杂的绑定也许效果不错,要是出错想修改就很难很难了。缺点是,ikfk互转的时候,骨架会移动,并且动画修改有些麻烦,因为ik有动画的时候fk没有,fk有动画的时候ik没有。
    方法二:这个是方法一的升级版,maya那个命令其实就是同时给ikfk打关键帧,优点也是简单,还有就是无缝,切换的时候,骨架是不会移动的。可惜每次都要点那个命令,没有直接按s爽。移动关键帧也是有问题的,不能同时移动ikfk的关键帧,造成麻烦。
    方法三:这个似乎是主流,但是我觉得效果和方法一没有太大的区别,你要修改fk动画数据还得找fk骨架,修改ik动画还得去找ik控制器。切换的时候也不是无缝的,骨架也是会动的,也是不能同时移动ikfk关键帧的。还有一个毛病就是复杂。一个角色还好,角色如果太多,复杂的绑定的很多问题就会出来的。
    方法四:这些装配一般都会无缝,缺点是复杂,修改也是有问题的。

    好了,我费了这么多口水,讲了这么多。其实是,我想隆重推出我自己的一个ikfk解决方案。它简单,只有一套骨架,它无缝,ikfk转换骨架不会移动,它易操作,直接按s就搞定了,它易修改,直接在时间条上移动关键帧就可以了。
    ok,等不及要看看怎么做的吧,下面是步骤
    步骤一:创建一个骨架,这个是范例,所以,你只需要建立三个关节就可以了,然后个它一个ik手柄,然后再加一个极向量约束,到目前为止没什么新鲜的。

    步骤二:给骨架加上控制图标,不能用子父或者子父约束,我们用其他的办法,创建一个多边形立方体,然后选择根骨骼,按p,子化给根骨骼,然后把,立方体的位移和旋转数值归零,你可以发现,立方体移动到了根骨骼那里,旋转也和骨骼一致
    缩放立方体,使之形状长度和根骨骼匹配,然后freeze一下



    下面是精彩的了,在outline窗口里,菜单display里,确保shape的勾勾在那里,然后选择立方体的形状节点,ctrl加选根骨骼,在命令行里,输入parent -r -s回车(意思是让立方体的形状节点成为根骨骼的子物体,这个和直接子父是不一样的)

    ok,我们看看有什么变化,在视图中,你点击那个立方体,你会发现,你结果选择了根骨骼。不用立方体,用曲线也可以的,这个立方体确实看着很扎眼,实体显示的时候,他也显示出来,如果你愿意,你可以接着做,让它在实体显示模式的时候,显示为线框
    outline里选择立方体的形状节点(不要在视图中选,你选不到的),然后在hypergraph里展开上下游节点
    选择这个形状节点与右边的材质组节点中间的连线,然后按del删除,我们的目的就达到了


    按照这个步骤,你可以给其他骨骼加控制物体,还有ik手柄

    步骤三:选择两块骨骼,ik手柄,还有极向量约束物体,然后创建一个角色,名字为ikB,还是选择刚才的物体,除了ikblend属性,创建子角色,名字是ik,这样做的目的是你可以按s就可以打关键帧了,分成两个,下面会说。

    步骤四:让ik手柄的ikblend属性驱动这些控制物体的显示,当ikblend=1的时候,是这个样子

    ikblend=0的时候,是这个样子


    这样做会自动切换控制的显示

    步骤五:创建脚本,切换到FK的脚本如下
    setKeyframe -v 0 -ott "step" "ikB.ikHandle1_ikBlend";
    setAttr "ikHandle1.ikFkManipulation" 1;
    hide ikHandle1;
    showHidden pCubeShape3 pCubeShape2;
    setAttr "ikB.ikHandle1_ikBlend" 0;
    切换到IK的脚本如下
    select -r ikHandle1 ;
    MoveIKtoFK;
    select -r locator1 ikHandle1;
    setKeyframe -shape 0;
    setKeyframe -v 1 -ott "step" "ikB.ikHandle1_ikBlend";
    setAttr "ikHandle1.ikFkManipulation" 0;
    hide pCubeShape3 pCubeShape2;
    showHidden ikHandle1;
    setAttr "ikB.ikHandle1_ikBlend" 1;
    里边的名字根据情况要更改,对于这个例子就不必了。
    至此,这个装配就完成了,操作方法是,在这里选择ik,然后选择模式执行脚本(即使你现在在ik模式下,还是要先执行一下ik那个脚本)移动控制,需要打关键帧就按s,如果你需要切换模式,比如你现在是在fk方式下,那就执行切换到ik的脚本(你可以做成按钮或者图标),然后接着打关键帧就可以了,没有问题的,修改曲线的话,选择控制器,然后在曲线编辑器里修改,没有问题,如果需要移动关键帧,这个时候,请在这里选择ikB
    然后在时间线上移动缩放关键帧就可以了,切换的地方也会顺利移动的。

    我这个装配也有自己的问题,比如,切换的时候要执行脚本,做成按钮只需要点一下,还有个小问题,就是控制归位,这些控制都不能归零的,如果想归位,可以做个脚本,到时候点一下就可以了。
    个人评价:不是最好的解决方法,不能用于工作流程之中,转来只是借以参考!

    楼主 2015-06-12 21:02 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知