Character
Character是什么?
Character是一種特殊的3D Entity類型,由一組具有層次結構關系的Body Parts所定義,后者是一個唯一的root對象的子孫。Root 定義了Character的位置與朝向。
Skin Character
一個skin Character 也是一種Character,它具有三種可能的body parts類型:skin , bones, dummies。Skin body parts是body parts的一種,它擁有一個mesh, 在進行動畫時,根據一組bone body parts的位置變化,mesh會相應產生變形。一個skin character 只能有一個skin body part,。Dummies 是被動的body parts,它的矩陣可用于對象定位.
Skin character主要的優點是它沒有 skin join 問題(運動時body parts之間的縫隙),它主要的限制是它的處理材質或紋理行為修正的能力。
每個skin body part有且只有一個mesh,在很多情況下,這可能更加方便(如,對于”Visual/Shadows/Shadow Stencil BB”,你僅需要把 Shadow Stencil Caster屬性加在一個或多個skin body part上。)
Skin Character’的動畫是輕量級的,靈活的。
Body Part Character
一個body part character 由一組body parts構成,它們擁有各自的mesh與可能的dummies,你可能需要使用”Mesh Modifications/Deformation/Skin Join BB”去解決運動時的縫隙問題。
Mesh Morpher Character
即使你的動畫使用了不可知的動畫控制器,通過采樣對象的動畫,也可以把動畫導出成Mesh Morpher Character。這種方法存儲每一個動畫幀角色的所有mesh數據,采樣率越低,動畫文件也越小。這種動畫技術相對于其他的動畫技術來講,會產生較大的動畫文件。
動畫創建時需要注意
一個character 應該讓它的body parts聯結到一個唯一的body part, 這個body part(root)給出了character的位置與朝向。在virtools中,應該讓Z軸做為前的方向,Y軸作為上的方向。
與character相關的BB
一個可應用于3D entity的BB,可以應用于Character ,也可以是Character’s body parts,兩者都是3D entity,當你管理復雜的層次集合時,不要忘記檢查hierarchy 參數是否為true,尤其是使用3D Transformation BBs時。記住,一個 character 不直接擁有mesh,它的層次中的對象擁有。對這個概念的錯誤理解,容易導致一些問題,為何一個BB會失效。應該正確地就把行為應用到正確的body part上。舉例來說,Simple Shadow BB 是應用到body part 上的,而不是應用到Character上。
使用動畫:
Character Controller BB + "Controllers/Keyboard/Keyboard Controller BB" :這兩個是最簡單的使用動畫的方式。
Unlimited Controller BB
這是實現復雜的動畫控制的關鍵。
Wrap
“Start“會在那一個動畫開始時創建一個過渡動畫,除非你確定下一個動畫應該從頭開始播放(例如“跳“這個動畫)。
“Best”找到best frame來開始下一個動畫。”best frame”通過body part的朝向,位置,縮放等與當前動畫幀的相似性來確定。這對于循環動畫轉換是非常有用的(如,從Walk動畫到Run動畫)
“Same”創建一個轉換到下一個動畫step(百分比)等于當前動畫的step,與Best 相似,而又有更多的控制以用于動畫同步。這個模式必須在產生動畫就是應該有所計劃。
可停止與不可停止
動畫分為兩大類:不可停止的(跳,跌倒,開門等)與可停止的。可停止的通常是循環動畫,如Wait, Walk , Swim。
一旦一個不可停止的動畫開始,它將會一直播放直到最后一幀完成。因此,當播放不可停止動畫時,不再需要任何消息驅動動畫。與此相反,Unlimited Controller BB 為了播放可停止的動畫,在每幀它都需要接收正確的消息。
輸入參數
對于普通的腳本,你可以根據愿望創建輸入參數。可以根據”Unlimited Controller”對話框中對應的參數來創建輸入參數,右擊Cell,(這里是Wait Animation),選擇“Create Input Parameter”
菜單。通過這種方法更多的控制參數可以被輸入。
上圖是一個使用array來參與控制動畫的例子,通過鍵選擇動畫,當有多個鍵被按下,使用規定優先級。
不可停止動畫的參數的變化在動畫已經開始后不會被考慮,而可停止的動畫會被考慮。舉例來說,假如你改變一個正在運行的不可停止動畫的“Animation”參數,新的值會在當前動畫的最后一幀播放完后,有相應的消息傳入時才發生改變。
在下面的例子中,Unlimited Controller BB(只有一行被修改) , 用來在任何時候為下一個動畫設置新值,它每一幀都發送消息,直到動畫輸入參數與當前動畫輸出消息相等。(注;因為當發送一個消息時,本來是想轉換動畫,但此時可能正執行一個不可停止的動畫,于是發送的消息被忽略了,于是還要繼續發送,直到動畫確實發生了改變為止)。
與
輔助動畫:
輔助動畫為角色運動增加了真實性。
通過”Unlimited Controller” BB,可以把一個動畫說明為輔助動畫,理論上講,任何的”輔助“動畫可以作為主動畫使用。但在設計是好考慮好它的用途(作為主動畫還是輔助動畫使用)。
輔助動畫的建立過程與主動畫類似。然而它不能修改沒有用到的body parts或是root body part的修飾量。“order”參數不存在,既然任何一個輔助動畫都應該可以同時被播放,只要對于默認的body parts,它們不存在交迭.。最后調用的動畫總是比先前調用的動畫有優先權。”turn”與”orient”參數對于輔助動畫沒有用處。
Action參數值”Play Once” ,”Loop +Stay”會被考慮。
輔助動畫參數也可以用作輸入參數。
Behavioral animations
角色有時需要執行行為動畫以模擬復雜與不可知的與環境的交互。行為動畫可以作為別的主動畫與輔助動畫的補充。
混合動畫
3D變換,一個技巧是保存跟蹤正要修改的body part的直接父結點的矩陣。當行為應用于一組分開的body parts時,第一個問題是是否要使用Exclude from Animation BB。
假如你不用,body part的矩陣在幀開始時就會被當前動畫設置。你可以在相同的幀處理3d 轉換,body part 以它自己作為參考,與當前動畫保持一致。主要的問題衰減參數難于使用。
假如你使用bb,3D 變換與應用到經典的3d object時相同。因此,與整個的Character 保持一致是較費腦筋的。
IK 反運動學
它從最后一個鏈成員來推導出body part的矩陣。這是個有力的工具,對于與環境進行精確的交互比較有用。目前,只有一個有關于IK的BB可以用:IK Position BB,.這容易使用,它不檢查body parts的交互。
為避免不一致的問題,唯一的辦法是自己做檢測腳本。
posted on 2007-04-28 15:56
清源游民 閱讀(1468)
評論(2) 編輯 收藏 引用 所屬分類:
Virtools