本文作者在研究了Maya的表達(dá)式動(dòng)畫(huà)后,得出一些經(jīng)驗(yàn)與大家分享。
作者:streetman
??前言
好久沒(méi)有發(fā)帖子了,最近一個(gè)多月來(lái)我一直潛心鉆研Maya的表達(dá)式動(dòng)畫(huà),目前總算從菩提樹(shù)上摘下了幾個(gè)果子,想和大家分享一下。
一提到表達(dá)式和MEL語(yǔ)言,不少網(wǎng)友總是嘆氣。似乎這一類(lèi)的東西是我們,尤其是非編程者遙不可及的。其實(shí)我也沒(méi)有學(xué)過(guò)C++、Delphy語(yǔ)言,和不少學(xué)習(xí)文科的朋友一樣美術(shù)才是我的專(zhuān)業(yè)。現(xiàn)在也是如此。我想只要具有高中程度的數(shù)學(xué)、英語(yǔ)和物理知識(shí),學(xué)習(xí)表達(dá)式動(dòng)畫(huà)就足以了。三維的世界像海洋一樣,堅(jiān)持下來(lái),我們每個(gè)人都是采珍珠的勇士。
一、Functions--函數(shù)
首先我們來(lái)分析一下一段含有Maya內(nèi)嵌函數(shù)的表達(dá)式語(yǔ)句
Object.translateY=sin(time)+6;
Object 當(dāng)前場(chǎng)景中要設(shè)表達(dá)式的物體
. 分隔符
translateY 屬性
= 指定運(yùn)算符
sin 函數(shù)
() 邏輯運(yùn)算符
time 變量
+ 數(shù)學(xué)運(yùn)算符
6 常量
; 終結(jié)符
目前要討論的范圍是以SIN為代表的函數(shù),它們的作用是將物體按一定的特殊規(guī)律運(yùn)動(dòng)。上例中Object從世界坐標(biāo)軸的中心沿Y軸以SIN三角函數(shù)圖像運(yùn)動(dòng)規(guī)律進(jìn)行往返運(yùn)動(dòng)。這類(lèi)的函數(shù)有很多我總結(jié)了一下如圖:
??二:Maya的內(nèi)嵌函數(shù)分類(lèi)
MATH FUNCTIONS 數(shù)學(xué)函數(shù)28個(gè)這一類(lèi)的函數(shù)最多也是最為常用的
??RANDOM FUNCTIONS 絮亂函數(shù)6個(gè)是產(chǎn)生物體類(lèi)似于噪波運(yùn)動(dòng)的效果
??VECTOR FUNCTIONS 矢量函數(shù)6個(gè)多用于粒子動(dòng)畫(huà)
??CONVERSION FUNCTIONS 轉(zhuǎn)化函數(shù)4個(gè)多用于MAYA內(nèi)部函數(shù)之間的互相轉(zhuǎn)化作用
??我盡可能的將我所了解的內(nèi)容告訴大家,有不周全的地方請(qǐng)參考MAYA的聯(lián)機(jī)手冊(cè),雖然它是英文的。哎!不學(xué)英文怎么活?!
??三. 數(shù)學(xué)函數(shù)的用法
了解這一部分的內(nèi)容最好能夠參考高中教本關(guān)于三角函數(shù)的章節(jié)。
ABS 是ABSOULTE的縮寫(xiě)意思是取決對(duì)值。
例如:
int abs(int number)
float abs(float number)
vector abs(vector number)
函數(shù)名是abs,它將返回number 的絕對(duì)值。絕對(duì)值是沒(méi)有正負(fù)數(shù)之分的數(shù)值。
本例說(shuō)明abs 函數(shù)有3 種格式。每種格式要求一個(gè)不同數(shù)據(jù)類(lèi)型的參數(shù)并返回一個(gè)不同數(shù)據(jù)類(lèi)型的值。
第一個(gè)格式說(shuō)明用戶可以鍵入整數(shù)類(lèi)型參數(shù),并且函數(shù)返回一個(gè)整數(shù)。比如,abs(-3) 返回?cái)?shù)值3。
第二個(gè)格式說(shuō)明用戶可以鍵入一個(gè)浮點(diǎn)類(lèi)型參數(shù),并且函數(shù)返回一個(gè)浮點(diǎn)數(shù),比如,abs(-7.54)返回7.54。
第三個(gè)格式說(shuō)明可以鍵入一個(gè)向量,而且函數(shù)返回一個(gè)向量。比如,abs(<<3, -6.3, -2>>返回<<3, 6.3, 2>>。
acos
返回的是一個(gè)數(shù)值的反余弦弧度值,其范圍是0~ pi。
float acos(float number)
number 是角的余弦值,其范圍是-1~1。
例如:
acos(1)
返回值是0。
acos(-0.5)
返回的是2.0944 弧度。
acosd
返回的是一個(gè)數(shù)值的反余弦角度值,其范圍是0~180。
float acosd(float number)
number 是角的余弦值,范圍是-1~1。
例如:
acosd(1)
返回值是0 度。
acosd(-0.5)
返回值是120 度。
asin
返回值是一個(gè)數(shù)值的反正弦弧度值,其范圍是-pi/2 到pi/2。
f loat asin(float number)
number 是角的正弦值,其范圍是-1~1。
例如:
asin(0.5)
返回值是0.525 弧度。
asind
返回的是一個(gè)數(shù)值的反正弦度數(shù)值,其范圍是-90 到90。
float asind(float number)
number 是角的正弦值,范圍是-1~1。
例如:
asind(0.5)
返回的是30 度。
atan
返回的是一個(gè)數(shù)值的反正切弧度值,其范圍是-pi/2 到pi/2。
float atan(float number)
number 是角的正切值,可為任何值。
例如:
atan(1)
返回值是0.785。
atand
返回的是一個(gè)數(shù)值的反正切角度值,其范圍是-90~90 度。
float atand(float number)
number 是角的正切值,可為任何值。
例如:
atand(1)
返回的是45 度。
atan2
返回的是一個(gè)在X,Y 坐標(biāo)軸中指定的反正切弧度值。這個(gè)角是以X 軸為一邊,另一邊是由原點(diǎn)和坐標(biāo)系
中一點(diǎn)形成的直線構(gòu)成。返回的角以弧度為單位,范圍是-pi 到pi。
float atan2(float Y, float X)
X 是點(diǎn)的X 坐標(biāo)。
Y 是點(diǎn)的Y 坐標(biāo)。
例如:
atan2(1,1)
返回的是0.785 弧度。
今天就寫(xiě)到這,已經(jīng)很晚了,歡迎與我共同討論
to be continue
今天加上MATH FUNCTIONS的最后一部分,來(lái)結(jié)素這個(gè)話題。其他的函數(shù)由于他們比較好理解,就不做說(shuō)明了。畢竟一個(gè)人的能力是有限的。有點(diǎn)對(duì)不住大家了。
atan2d
返回的是一個(gè)在X,Y 坐標(biāo)系中指定的反正切角度值。返回的角以度為單位,范圍是-180 到180 度。
float atan2d(float Y, float X)
X 是點(diǎn)的X 坐標(biāo)。
Y 是點(diǎn)的Y 坐標(biāo)。
例如:
atan2d(1,1)
返回45 度。
hypot
返回的是從原點(diǎn)到在X, Y 坐標(biāo)系點(diǎn)的二維向量值.
angle
返回向量間的弧度角.
float angle(vector vector1, vector vector2)
vector1 是一個(gè)向量。
vector2 是另一個(gè)向量。
返回角是兩個(gè)向量所夾角中的最小角,它通常小于180 度。
例如:
angle(<<2,-1,1>>,<<1,1,2>>
返回1.0472 弧度,它等于60 度。
cross
返回由兩個(gè)向量定義的叉乘值。
對(duì)于兩個(gè)向量,叉乘值是由兩個(gè)向量定義而成的面的法線,
vector cross(vector vector1, vector vector2)
若叉乘值是0,那么可能是兩個(gè)向量平行或在同一條直線上。若一個(gè)或兩個(gè)向量是<<0,0,0>>,那么叉乘
值返回<<0,0,0>>。
vector1 是一個(gè)向量。
vector2 是另一個(gè)向量。
例如:
cross(<<1,2,-2>>,<<3,0,1>>
返回值是<<2, -7, -6>>。
dot
返回兩個(gè)向量的浮點(diǎn)點(diǎn)積。點(diǎn)積把兩個(gè)向量作為自變量并返回一個(gè)標(biāo)量值。
float dot(vector vector1, vector vector2)
如果點(diǎn)積返回0,那么兩個(gè)向量是垂直的。
vector1 是一個(gè)向量。
vector2 是另一個(gè)向量。
例如:
dot(<<1,2,-2>>,<<3,0,1>>
返回1,這個(gè)例如的點(diǎn)積是(1 * 3) + (2*0) + (-2*1),它等于1。
mag
返回向量的值,它是向量的長(zhǎng)度,float mag(vector vector)
vector 是所要得到數(shù)值的向量。
Mag 函數(shù)使用下列公式把向量轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù)。
例如:
mag(<<7,8,9>>
返回值13.928。
rot
返回一個(gè)向量,它代表以指定軸旋轉(zhuǎn)一定弧度后點(diǎn)的位置。
vector rot(vector point, vector axis, float angle)
point 是在世界坐標(biāo)系中點(diǎn)的位置。
Axis 是點(diǎn)圍繞之旋轉(zhuǎn)的軸。這個(gè)軸是一條經(jīng)過(guò)原點(diǎn)的有指定方向的線。
angle 是點(diǎn)所旋轉(zhuǎn)的弧度。
例如:
rot(<<3,3,0>>,<<1,0,0>>,0.5)
返回值為<<3, 2.633, 1.438>>。這是一個(gè)向量,它是沿<<1,0,0>> 的軸旋轉(zhuǎn)0.5 弧度后點(diǎn)的位置在<<3,3,0>>
的向量。
例如:
particleShape1.position = rot(position,<<0,1,0>>,0.1);
假定在場(chǎng)景中有一個(gè)單粒子物體,它的位置是<<4,6,0>>,并為它的粒子形節(jié)點(diǎn)寫(xiě)了上面的runtime 表達(dá)
式。播放動(dòng)畫(huà)時(shí),粒子將沿Y 軸旋轉(zhuǎn)成一個(gè)圓形圖案。
在每幀中,粒子旋轉(zhuǎn)0.1 弧度,約為5.7 度,
unit
返回一個(gè)和向量相應(yīng)的unit 向量。
unit 向量具有和指定向量相同的方向,但是它的數(shù)量是1。
vector unit(vector vector)
vector 是和unit 向量相應(yīng)的向量,
例如:
unit(<<1,1,1>>
返回<<0.577, 0.577, 0.577>>。