2007年5月27日星期日

stretchy bone

也就是可以伸长和的骨骼系统,也叫toony rig。

j1-j2-j3
locator1点约束到j1,ik点约束到locator2
创建如下表达式:

vector $l1p,$l3p;
$l1p=<>;
$l3p=<>;
float $diff=(mag($l1p-$l3p)-18)/2;
if($diff>0.001){
joint2.translateX=10+$diff;
joint3.translateX=8+$diff;
}
else{
joint2.translateX=10;
joint3.translateX=8;
}

其中有几个常量,10是j2的tx,8是j3的tx,也就是每段骨骼的长度。

尝试用rotatepivot,结果发现得到的坐标是0,最后只能让locator保持没有父物体的状态用translate。

2007年5月26日星期六

MEL笔记 2007-05-26

joint/ik旋转轴向+/- 180度的限制

如果使用ik handle来控制joint的旋转,会有一个+/-180度限制的问题。一般来说,这不是什么问题,如果通过表达式用这个旋转的角度来控制其他的物体的时候,很可能就会在某个转角出现“跳动(flip)”。
比如j1-j2是一个joint层级,j1是父,用ikhandle(sc/pr均可)来控制j1的转向。有如下表达式:
locator1.rx=j1.rx/4;

拖动ikhandle,j1的旋转不会出现跳动,但是locator1在j1旋转过某些位置(j1.rx超过180或者小于-180)的时候,就会发生跳动。

如何绕过这个问题呢?

j1-j2同上,locator1是j1-j2要指向的位置,locator2-locator3是旋转的驱动。
将j1 aim约束到locator1上,只约束y和z,在j1.rx创建如下表达式,
j1.rx=locator2.rx+locator3.rx;
这样基本上就可以了。


05年的maya master classes,starwar3的note里,介绍了一个prop工具,可以非常方便的制作手持物体的动画,可惜在没有更多的说明,除了一段屏幕录像和pdf中的2页简述,几乎不涉及任何实现。根据一些猜测和试验,现在差不多已经清楚如何实现,这个joint的问题就是在prop之后,控制手的旋转时遇到的问题之一。

2007年5月24日星期四

MEL笔记 2007-05-24

joint & locator
joint的属性:
创建joint的时候,会有这么一句命令: joint -e -zso -oj xyz -sao yup joint13;
作用是将orient按照xyz的优先指向第一个子节点,会改变orientation的值,这句命令有一个条件,就是joint13的Rotate必须为0。channelbox中显示为0并不一定是0,可能是个很小的数。

orient也可以用直接用命令joint -e -orientation来修改,在设置新的值之后,joint会旋转,但是rotate的值却不会改变。

给locator添加joint子物体的时候,如果locator的scale不为1,那么joint的translate将保持原来的值。

2007年5月16日星期三

MEL笔记 3

maya master 2005中有starwar3的note中介绍了一个UNIQUE CHARACTER USER
INTERFACES,其中有个创建带分区位图界面的要求。我发现用formLayout可以满足这个要求。

拿mel的例子改一改,貌似位图要最后加载才能正常显示。


string $window = `window`;
string $form = `formLayout -numberOfDivisions 100`;
string $b1 = `button -label "b1"`;
string $b2 = `button -label "b2"`;
string $column = `columnLayout -adjustableColumn true`;
button; button; button;

setParent ..;
formLayout;
picture -image "MayaStartupImage.xpm";

formLayout -edit
-attachForm $b1 "top" 5
-attachForm $b1 "left" 5
-attachControl $b1 "bottom" 5 $b2
-attachPosition $b1 "right" 5 75

-attachNone $b2 "top"
-attachForm $b2 "left" 5
-attachForm $b2 "bottom" 5
-attachForm $b2 "right" 5

-attachForm $column "top" 5
-attachPosition $column "left" 0 75
-attachControl $column "bottom" 5 $b2
-attachForm $column "right" 5
$form;

showWindow $window;

2007年5月13日星期日

Maya8.5 linux 32bitbug

Bug多多。
1. q/w/e..marking menu,如果在lmb放开之前把键盘放开的话,crash...
2. 如果选中一个物体,然后打开channel editor,crash...

2007年5月2日星期三

Maya笔记 1

projection贴图的alpha通道问题。
在使用layeredTexture的时候发现的这个问题。projection的image参数只接受图像的RGB参数,然而在输出的时候,却提供alpha的输出,如此,在制作复合贴图的时候,图像的alpha参数就无法正确传递。
workround:把图像的alpha连接到projection节点的alpha offset上,projection的alpha gain设置为0。如果图像没有warp的话,图像的default color和projection的default color都要设置为0,避免“膏药”的效果。

Maya8.5的文档中有一处错误,transferAttribute的sampleSpace参数,文档中说3是component-based,实际上应该是4,3会导致程序崩溃。