MAYA expression教學(一)-----如何使物體延一軸向來回運動?
1.讓物體以 expression的方式產生振幅
2.振幅的控制元素:振幅主體,頻率,時間變數,振幅幅度,修正振幅位置
3.設定物體名稱為P
P.translateZ= -((cos(time*頻率值))*振幅幅度) -(振幅位移值)
最前頭的負號是使物體先走正值再走負值
cos是產生振幅
time是隨著時間的增加而作為變數
頻率值愈小,頻率愈慢,反之愈快
振幅位移值能讓振幅在該軸產生偏移
MAYA expression教學(二)-----如何使expression中的參數能在面板控制?
1.先以add Attribute在P物體的面板中產生var,ho,hp
var是將要控制頻率值
ho是將要控制振幅幅度
hp是將要修正振幅偏移位置
2.在expression中,最前頭加上
$var=P.var;
$ho=P.ho;
$hp=P.hp;
這三行
3.最後就變成
$var=P.var;
$ho=P.ho;
$hp=P.hp;
P.translateZ=-((cos(time*$var))*$ho)-$hp;
4.接下來就能在面板中控制物體的運動了^_^
MAYA expression教學(三)-----如何產生自定面板控制參數
1.在script edit中,打出下列文字後執行
select P;
window -w 250 -h 200 -t "TEST01";
columnLayout;
attrFieldSliderGrp -l "var" -at P.var -min -10 -max 10;
attrFieldSliderGrp -l "ho" -at P.ho -min -10 -max 10;
attrFieldSliderGrp -l "hp" -at P.hp -min -10 -max 10;
showWindow;
好玩吧^_^
MAYA expression教學(四)-----以一個條件判斷if來控制物體
1.設定一個物體P
2.expression:
$h=-sin(time*20)+4;
P.translateY=$h;
3.Play後,我們可以看到物體P延著Y軸產生來回移動
4.將+4改成-4,物體P改成延著Y軸-4的地方產生來回移動
5.加上一個條件:if($h>=0)
$h=-sin(time*20)+4;
if($h>=0)
P.translateY=$h;
6.再試著改回+4 和-4看看結果,
當$h為正數時,P會在正向移動
當$h為負數時,P則不動
7. if 在這的作用是如果滿足條件,就會執行接下的動作,
若不符合,則不執行
當然若另有一個物體P1,並加於P.translateY=$h下方一行
如:
$h=-sin(time*20)+4;
if($h>=0)
P.translateY=$h;
P1.translateY+4=$h;
符合條件時if會同時執行下方有的控制式
MAYA expression教學(五)-----一個半月形的路徑
這路徑可拿來當腳跟的動態
1.設定一個物體P
2.這動態包含幾個控制項目:
(1)時間:也就是踩一個步伐需要多久時間
(2)腳步的踏實感
(3)腳跟抬起的高度
(4)腳步在地上時的位移量偏前或偏後
(5)步伐的大小
整個運動路徑我們假設在XY的平面上
會同時影響XY的項目是(1)
影響Y軸的項目是(2)(3)
影響X軸的項目是(4)(5)
再來就是利用if的判斷式讓物體運動在Y軸的質<0時,就靜止不動
3.因此我們可以歸納物體P的expression:
P的Y軸移動:
$rfh=P.high;
$run=P.run;
$var=P.walk;
$ty=sin(time*$var)+$run;
if($ty>=0)
P.translateY=($ty*$rfh)-1;
walk可以控制走路的快慢
run可以控制腳的踏實感
high可以控制腳起來的高度
P的X軸移動:
$var=P.walk;
$rff=P.freq;
$rf1=P.long;
$tz=cos(time*$var);
P.translateX=($tz*$rff)+$rf1;
Long可以控制腳落地偏前或偏後
Freq可以控制步伐的大小
MAYA expression教學(六)-----如何計算位移?
首先要先知道的是:
1.如何在不同的frame時,能求出物體的座標值?
2.有了座標值,如何求彼此的差?
3.範例1:在指定的frame求出物體的座標值
(1)建立任一物體P
(2)將P在frame0時,P.translateX=0
frame40時,P.translateX=任意一數值
(3)我們假設想要知道P在frame20時,X軸的值是多少,並將值在Script Edit中show出結果,
我們可以用以下的式子:
if(frame==20) {
$X=P.translateX;
print("time="+$X+"\n"

;
}
以上的意思是,如果frame在20,就去執行
{
$X=P.translateX;
print("time="+$X+"\n"

;
}
的命令,其中print是將字串"time="顯示出,接著X軸數值的顯示其後,"\n"是換下一行
4.範例2:在指定的兩個frame20和30,各求出物體的座標值
if(frame==20) {
$X=P.translateX;
print("time="+$X+"\n"

;
}
if(frame==30){
$X1=P.translateX;
print("time1="+$X1+"\n"

;
}
5.範例3:在frame40時,計算出frame20和30的X軸的差值
float $X, $X1;//宣告$X,$X1為浮點數
if(frame==20) {
$X=P.translateX;
print("time="+$X+"\n"

;
}
if(frame==30){
$X1=P.translateX;
print("time1="+$X1+"\n"

;
}
if(frame==40){
$X2=$X1-$X;
print("time2="+$X2+"\n"

;
}
如此就能知道物體在不同的時間時,物體的位移