MAYA動(dòng)畫教程:昆蟲翅膀拍打的動(dòng)畫制作
當(dāng)我們掌握了maya中expressions(表達(dá)式)的基礎(chǔ)后,我們會(huì)發(fā)現(xiàn)自己經(jīng)常用得著它們,比如最大限度的避免手動(dòng)設(shè)置關(guān)鍵幀的麻煩。我認(rèn)為表達(dá)式是maya中最有特色的部分,為了解說使用它們的基本用法,這個(gè)教程將展現(xiàn)如何創(chuàng)造一個(gè)非常簡單的動(dòng)畫:使用速度控制屬性完成一個(gè)小飛蟲拍打翅膀的動(dòng)畫。這個(gè)模型十分粗糙,因?yàn)檫@不是我們這個(gè)教程的目的?! ?.創(chuàng)建三個(gè)nurbs球體,通過變形和移動(dòng)完成一個(gè)粗略的飛蟲身體和一對(duì)翅膀的建模,分別命名翅膀?yàn)?"rWing" 和 "lWing", 命名身體為“bug”或者其他,如果你喜歡,也可以賦予他們一些簡單的材質(zhì)。
2.移動(dòng)翅膀的軸點(diǎn)好讓他們能圍繞適當(dāng)?shù)妮S(如圖)旋轉(zhuǎn)。
3.將翅膀子關(guān)系與身體,使其能跟隨身體移動(dòng)。
4.打開表達(dá)式編輯器(Window > Animation Editors > Expression Editor...)。 我們可以設(shè)其快捷鍵為ALT+e,(ALT+e在默認(rèn)快捷鍵設(shè)置中沒有被用到,這是個(gè)好的選擇) 。在編輯器左邊會(huì)看到我們當(dāng)前選擇的物體,而在右邊是其可設(shè)關(guān)鍵幀的屬性。表達(dá)式則是輸入在底下的白框內(nèi)。要知道的是我們輸入的表達(dá)式不一定是與現(xiàn)在選擇的物體關(guān)聯(lián)的,我們可以為任何東西寫表達(dá)式,例如別的物體,或者一個(gè)shader,任何我們想要的都可以。當(dāng)然,如果我們已經(jīng)有了一個(gè)選擇的物體,就可以輕松的知道我們想控制的屬性的確切名稱了,因?yàn)樗械目稍O(shè)關(guān)鍵幀屬性都已經(jīng)列在該窗口的右邊了。
5.在Expression Name一欄中輸入"wingFlap" ,接著在表達(dá)式的對(duì)話框(該窗口底下)中輸入如下內(nèi)容:
lWing.rotateX = time * 10;
點(diǎn)擊 "Create" 使該表達(dá)式生效。
這個(gè)句法是十分簡單的,我們輸入了物體的名字(確切的說是節(jié)點(diǎn)的名字),跟著是我們想要控制的屬性和周期,在這個(gè)例子中,我們想要控制的是lWing的x軸,“time”屬性是maya的內(nèi)置值,它以秒為單位來跟maya交流,它以10為倍數(shù)因此運(yùn)動(dòng)效果也就更加顯而易見了(翅膀拍打得更快)。在maya中每個(gè)表達(dá)式的表述最后都要用分號(hào)以示結(jié)束。
點(diǎn)擊“Play”,我們會(huì)看到翅膀旋轉(zhuǎn)起來了。
6.查看Hypergraph,我們會(huì)看到lWing受wingFlap表達(dá)式的控制,而在Channel Box,lWing的x軸屬性數(shù)據(jù)則變成了橙色,并為某樣?xùn)|西所控制,我們不能直接改變它。
7.創(chuàng)建一個(gè)重復(fù)往返運(yùn)動(dòng)最簡單的方法就是運(yùn)用正弦函數(shù)。改動(dòng)這個(gè)表達(dá)式為如下:
lWing.rotateX = sin (time * 10) * 40;
如果之前在表達(dá)式編輯器中輸入的表達(dá)式不見了,只要點(diǎn)擊Select Filter > By Expression Name,然后在左邊的列表中點(diǎn)擊wingflap即可。
這個(gè)正弦函數(shù)的結(jié)果乘于40,也就是說此運(yùn)動(dòng)描述了一個(gè)大的弧形,當(dāng)然,也可以在兩個(gè)很小的數(shù)值范圍內(nèi)作往返拍打運(yùn)動(dòng),這視乎我們?cè)诖溯斎氲臄?shù)值。
點(diǎn)擊“Edit”,在這里,此按鈕代替了“Create”按鈕,作用是更新我們對(duì)表達(dá)式所作的改變。如果出現(xiàn)"Error: Expression invalid after edit"這樣的信息,清檢查你表達(dá)式的語法,如果不修正這個(gè)錯(cuò)誤,Maya將會(huì)自行執(zhí)行你輸入的最后一個(gè)“正確的”表達(dá)式,也就是 lWing.rotateX = time * 10;
8.播放此動(dòng)畫,可看到翅膀作往返拍打運(yùn)動(dòng)。
9.我們會(huì)發(fā)現(xiàn)這運(yùn)動(dòng)并不符合空氣動(dòng)力學(xué),因?yàn)閷?duì)應(yīng)的一雙翅膀在同一時(shí)間中X軸旋轉(zhuǎn)的方向應(yīng)該是相反的,也就是上下拍打的方向應(yīng)該是一致的。為解決這個(gè)問題,我們?cè)谟疫叧岚虮磉_(dá)式的正弦函數(shù)前加一個(gè)負(fù)號(hào),如下:
lWing.rotateX = sin (time * 10) * 40;
rWing.rotateX = -sin (time * 10) * 40;
10.播放動(dòng)畫,現(xiàn)在這只小飛蟲能生存下去的機(jī)會(huì)更大啦
11.現(xiàn)在假設(shè)我們想要控制翅膀拍打的速度。當(dāng)前,這個(gè)速度由表達(dá)式中 *10 這部分來決定。為翅膀的速度創(chuàng)建一個(gè)屬性以讓我們?nèi)ジ淖儎?dòng)力速度甚至為它設(shè)置關(guān)鍵幀。在屬性編輯器中,選擇這個(gè)飛蟲的轉(zhuǎn)換節(jié)點(diǎn)(就是名為 "bug"的那個(gè)),接著選擇Attributes > Add Attributes。
在屬性名字(Attribute Name)一欄中輸入WingSpeed,確定“Float”和 "Make Attribute Keyable"兩項(xiàng)為選擇,并設(shè)置最小值(Minimum value)為0,最大值(Maximum value)為10,默認(rèn)值(Default value)為5,點(diǎn)擊ok。――按鈕“add”讓我們可以在不必每次都關(guān)閉此窗口的情況下增加幾個(gè)屬性。
12.現(xiàn)在于飛蟲轉(zhuǎn)換節(jié)點(diǎn)窗口的附加屬性中,我們會(huì)發(fā)現(xiàn)一個(gè)新的屬性:“Wing Speed”,并已經(jīng)根據(jù)我們的設(shè)置要求定值在5,現(xiàn)在我們不必管它。
13.讓我們先回到表達(dá)式編輯器,并將兩行表述中的10數(shù)值改為bug.WingSpeed,如下:
lWing.rotateX = sin (time * bug.WingSpeed) * 40;
rWing.rotateX = -sin (time * bug.WingSpeed) * 40;
14.需要注意兩點(diǎn):大小寫(當(dāng)我們要作定義時(shí)能正確的輸入屬性名字是非常重要的)和我們正在通過一個(gè)屬性---在飛蟲節(jié)點(diǎn)之下---控制著這個(gè)翅膀的事實(shí),移動(dòng)WingSpeed此屬性的滑塊并觀察翅膀運(yùn)動(dòng)的效果。
15.重做這個(gè)練習(xí),我們可以在各個(gè)步驟中嘗試不同的方法,輸入不同的數(shù)據(jù),這樣我們可以對(duì)此教程理解的更為透徹。別忘了,我們始終沒有設(shè)過任何一個(gè)關(guān)鍵幀。Enjoy。
入學(xué)要求 | 課程設(shè)置 | 暴雪動(dòng)態(tài) | 我要報(bào)名
學(xué)員作品 | 就業(yè)學(xué)員 | 招生問答 | 暴雪簡介
公司作品 | 周邊介紹 | 教學(xué)環(huán)境 | 乘車路線