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