MAYA,绑定,设置,骨骼伸缩,mel语言

来源:百度知道 编辑:UC知道 时间:2024/06/17 10:07:37
我自己绑了一个模型,手臂和腿上都用了骨骼伸缩。绑定完成之后选择最大控制器缩放的时候,手臂和腿上都出现了变行。听说那里还有一个MEL要写。请问一下,语式是怎样的,有没有范例,请粘贴一个上来。感激不尽。
不是if,else的那个。。

楼主的拉伸制作过程少了一个缩放因数.

骨骼拉伸主要分为移动式拉伸和缩放式拉伸两种,这里以手臂缩放式拉伸为例,简单的讲一下:

假定大臂和小臂的scaleX值都为1,有一测量工具dis,测量得出肩膀到手腕绷直后的最大距离为8,有如下公式:

if("拉伸条件" 满足)
(大臂scaleX)=(小臂scaleX)=dis.distance/8;
else
(大臂scaleX)=(小臂scaleX)=1;

此时手臂就具备了缩放式拉伸功能,但是用最高层控制器进行缩放时,就会出现意外的变形.

原因:
当最高层控制器进行缩放时,测量工具dis的distance属性随着最高层控制器变大(或变小)了,而原来的手臂最大绷直距离也会随之变大(或变小),可此时的表达式中手臂的最大绷直距离却还是8,所以发生了不应该有的变形

解决方案参考:
为原拉伸表达式增加一个全局缩放因数..先在"最高层控制器"上增加一个float类型的自定义属性worldScale,默认值1,最小值0.1,没有最大值限制,用worldScale属性同时控制"最高层控制器"的scaleX,scaleY,scaleZ,则改变worldScale的值就可以直接进行整体缩放,修改表达式为:

if("拉伸条件" 满足)
(大臂scaleX)=(小臂scaleX)=dis.distance/8/worldScale;
else
(大臂scaleX)=(小臂scaleX)=1;

至此,拉伸的全局缩放问题基本解决..上述自定义属性worldScale之所以要指定0.1这个最小值限制,是为了防止在整体缩放过程中出现"除零"错误,通常模型也不必缩到那么小.

实际上骨骼的拉伸方式有许多种,以上方法仅是其中的一个小例子,但是所有的全局拉伸问题原理都是一样的,希望上述解答能给楼主一个好的思路