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