2008年4月19日

將動畫Bake Keys到骨架上

1.要將動畫控制器的Keys,Bake到骨架(joints)之前,首先要將角色的每個Joint的Rotate、Translate和Scale都要能被設Key才行,所以我們要先將骨架做些處理:

a. 首先先到outliner一一選取所有骨節,要注意的是最後一個選取的骨節必須是屬性RotateX、RotateY、RotateZ和ScaleX、 ScaleY、ScaleZ以及TranslateX、 TranslateY、TranslateZ都是需要被設定更改的(因為通常在Maya中,在多個物件被同時選取的情況下,只會顯示最後一個被加選的物件屬性,並且將此物件所被更改編輯的屬性,套用到其他同時被選取的物件屬性上),之後再到此骨節的Channel上按RMB選擇 Editor>Channel Control,接著會出現並Channel Control視窗,在視窗裡面的NonKeyable Hidden選取屬性RotateX、RotateY、RotateZ和ScaleX、ScaleY、ScaleZ以及TranslateX、 TranslateY、TranslateZ之後按下〈〈Move鈕,將剛剛選取的屬性都加入Keyable裡,觀察Channel Box,將會發現此時所有骨架的這些屬性都已經變為Keyable了(記得要勾選Change all selected objects of the same type)。


b. 接著觀察每個骨節的Channel Box,會發現上述的那些屬性雖然都已經變為Keyable,但是仍有很多是被lock住而無法Bake Key上去,此時同樣先到outliner一一選取所有骨節,要注意的是最後一個選取的骨節必須是屬性RotateX、RotateY、RotateZ和 ScaleX、ScaleY、ScaleZ以及TranslateX、 TranslateY、TranslateZ都是需要被設定更改的(另一個方法為按RMB選擇Select Hierarchy來選擇角色的所有骨架,之後再按Shift加LMB鍵再加選其中任何一個需要被編輯修改屬性的骨節),之後在Channel Box裡選取此骨節的RotateX、RotateY、RotateZ和ScaleX、ScaleY、ScaleZ以及TranslateX、 TranslateY、TranslateZ的Channel屬性之後,按RMB選Unlock Select即可。

2.經過步驟1後,便可以選擇根部的骨節,接著按MMB選擇Select Hierarchy後將所有骨節選取後,之後再選擇Edit>Keys>Bake Simulation options設置如下圖,便可以將動畫控制器上的Key記錄到骨架上,之後我們便可以將整個場景的動畫控制器全刪除,只留下模型和骨架,接著再選擇根部的骨節,按MMB選擇Select Hierarchy後將所有骨節選取後,選擇Edit>Delete by Type>Static Channels(會將骨架裡,沒有變化的屬性參數Channel上面的Key刪除,只留下有變化的屬性參數Channel的Key來記錄動作,以減少系統資源的浪費)。

3.在經過步驟2之後,便可以選擇根部的骨節,接著按MMB選擇Select Hierarchy後將所有骨節選取後,來創建Character set和Clip以進行編輯。

2008年4月18日

表達式動畫(Expression animation)

設置Expression動畫步驟大致如下(當你的物件已經有設Keyframe或Expression或其他相關連結時,將無法再為此物件創建新的Expression):

1. 先選取動畫控制器、骨架或物件後(例如下圖中命名為someobject的Cube物件),在Channel Box上使用LMB選取要設Expression的屬性參數(例如TranslateY)後,再點擊RMB選擇Expressions來開啟 Expressions Editor視窗。


2.在Expressions Editor裡面的Expresssion裡面可以撰寫控制的語法,並且可以在裡面撰寫對其他屬性參數控制(不只針對TranslateY屬性參數控制)的其他語句,撰寫完畢之後便可以按下Create來創建Expression動畫。


Expression語法:someobject.translateY=sin(frame/10);
a.someobject為要編輯的物件名。
b.translateY為編輯屬性。
c.=為指定運算符號。
d.sin為三角數學函數。
e.;為語句結束符號。
f.上句的意思為someobject物件沿Y軸以數學函數sin圖形規律的進行往返運動。

3. 要再叫出之前編輯的Expression來繼續編輯,需在Expression Editor裡選擇Select Filter>By Expression Name,在Expressions Editor視窗中的Selection欄裡點擊要編輯的Expression來進行編輯。

非線性動畫(Non-linear animation)Trax編輯器

Set key
1. 選取物件,按下快速鍵S,可以對物件目前的狀態屬性參數Set keyframe,若要單獨對物件的某個屬性參數Set Key,可以在Channel Box裡面選擇屬性參數(例如Rotate x)之後,使用RMB>Key Select單獨對物件的Rotate x參數設Key。


2. 選擇物件Set Key時,按下Shift+W鍵代表對此物件的Translate X、Y、Z軸皆設一個Key,當按下Shift+E鍵時代表對此物件的Rotate X、Y、Z軸皆設一個Key,當按下Shift+R鍵時代表對此物件的Scale X、Y、Z軸皆設一個Key。

Trax Editor Basic
1.要在Trax Editor的List選擇Auto Load Selected Character才會將創建的clips立刻載入track裡。


2.當為某物件的動畫創建一段Clip時,先選擇有設Key的物件(也許是動畫控制器、也許是骨架、也許是物件本身),之後在Trax Editor裡選擇Create Animation Clip option:

a.Animation Curve:指的是此物件的動畫的第一個Key和最後一個Key的動畫曲線範圍。

b.Include Subcharacter in Clip:決定是否要把此物件的子角色動畫也包含進所要創建的Clip裡。

c.Create Time Wrap Curve:選擇此選項,在創建Clip的同時也會創建一條Time Warp的時間曲線,我們可以利用此物件進行淡入淡出或反轉動畫播放的效果(我們也可以在創建Clip之後,在Trax Editor裡面再選取此Clip,之後選擇Creste>Time Wrap來創建Time Wrap Curve)。

//此部分為PurePure大大的熱心指導提供
在Graph Editor裡Time Warp的橫軸X是Clip影格的完成度(100%),縱軸Y是動作的完成度(100%),用50格做一個動作,然後將Time Warp的終點(X,Y)設為(30,100) ,看看是不是能在影格的百分之三十處,動作就完成,結果一如預期,在第15格的時候,動作已經完成了。
//
同理,若將終點(X,Y)設為(100,30),則在整段Clip影格完成(也就是100%)時,動作才完成原本整段Clip動作的30%。

d.Hierarchy:選擇此選項可以把此物件的子階層物件的動畫也包含進所要創建的Clip裡。

e. 選擇Put clip in Trax Editor and Visor會把創建的Clip放置在Visor和Trax中,選擇Windows>General Editors>Visor,在Visor視窗裡的Character Clip可以看到我們所創建的Clip,我們可以用MMB拖曳到Trax Editor裡作編輯,但無論在Trax Editor裡如何對clip作編輯修改,都不會修改到原來在Visor裡的原始Clip。


3.在同一個Character set裡的Clips的上下重疊的效果為動作疊加的效果,而不是平均的效果。

4. 選擇Clip,按Ctrl+a,可以在Channel Offsets設定Clip的(Transform)為Relative或Absolute,例如以下的Clip1, Clip2和Clip3均為一個sphere01在10 frames裡向X軸移動+5單位的動畫(另外在預設的情況下,Clip1, Clip2和Clip3的TranslateX, TranslateY, TranslateZ均為Relative,而RotationX , RotationY, RotationZ均為Absolute):

a. 在Clip3不作用的情況下(也就是只有Clip1和Clip2作用的情況下),sphere01在Frame A和Frame B的位置分別為在X軸8.889(4.4445+4.4445)單位和10(5+5)單位。

b. 若在下面的Track再添加一個Clip3如下圖,假設在Clip3單獨作用的情況下(也就是Clip1和Clip2不作用的情況下),sphere01在Frame A和Frame B的位置分別為在X軸0.555(0+0+0.555)單位和5(0+0+5)單位。

c.但若在三個clip(Clip1, Clip2和Clip3)都作用下,且clip3的(Transform)設定仍為預設的Relative,則sphere01在Frame A和Frame B的位置分別為在X軸9.444 (4.4445+4.4445+0.555) 單位和15(5+5+5)單位,但若clip3的(Transform)改為設定成 Absolute,則sphere01在Frame A和Frame B的位置分別為在X軸9.444(4.4445+4.4445+0.555)單位和5單位(0+0+5)。




5.Clip基本操作


6. 當我們使用Joints或動畫控制器為某角色創建一段動畫並存成Clip之後,若要修改此Clip的動作,可以先選取角色的Joints或動畫控制器來設 Key,並在Trax Editor裡選擇Create Animation Clip,把在Timline裡所新增的Key創建成一個新的Clip(此新增的clip單純是由Timline裡所新增的Key所構成,而並不是新增的Key與在Trax Editor裡面原有的Clip混合的結果所構成),之後再把新創建的Clip和Trax Editor裡原有的Clip做作疊加修改,另外我們也可以直接選取角色的Joints或動畫控制器在做完動作調整修改後,不用設Key,直接選取原本的Clip之後按RMB,選擇Key Into Clip,直接將Key設在原本的Clip裡。

7.可以在Trax Editor裡面先選取一段Clips,之後再選擇File>Export Amimation Clip來輸出此Clip到預設專案目錄的Clip資料夾裡。

8. 存在於Visor裡的Clip,可以在Trax Editor裡面選擇Libary>Insert Clip來匯入Track裡,若是要匯入別的檔案場景輸出的Clip,便要在Trax Editor裡面選擇File>Import animation Clip to Character來匯入(較新版的maya可以套用舊版所輸出的Clip)。

9.我們可以在Trax Editor裡面先選取兩段Clips(分別位於不同的Track也可以),接著選擇Create Blend將此兩段Clip平順的連結播放(是平順的連接播放,而不是Merge成一個新的Clip)。

10.我們可以在Trax Editor裡面先選擇一Clip,接著調整紅色垂直紅線到想切割的Frame處,然後選擇Edit>Split將此Clip分割為兩個Clip,之後,我們可以使用Blend來製作連結播放的效果。


11.我們也可以選單一個Clip之後,在Trax Editor按下Graph anim curve按鈕,之後便可以開啟Graph Editor視窗,在裡面便可以對此Clip的各種屬性參數的動畫曲線作編輯(若打開Graph Editor看不到任何動畫曲線,可以先選擇要編輯的屬性參數之後,按下F鍵最大化顯示,若動畫曲線的Key太多,也可以先對它執行Curve>Simplify來簡化Key),而在Graph Editor視窗裡,我們可以使用MMB拖曳曲線的Key來作編輯,而Key的兩個Tangents預設是相對移動的,因此若要單獨移動單邊的Tangent,只要先按下Graph Editor視窗裡的Break Tangents按鈕即可。




12. 使用Trax Editor>Edit>Split雖然可以將Clip切成好幾段,但觀察Visor的Character clip會發現原本的Clip仍然保持原狀,並不會變成獨立的好幾段Clip ,因此我們必須使用Trax Editor>Edit>Merge來將切出來的好幾段Clips個別 Merge 成獨立的Clip。

Character set and SubCharacter set
1.Create Character set:
可以將要設Key的各個物件(例如動畫控制器、骨架或物件本身等)的屬性參數集合起來設成一個Character Set,方便之後我們Set Key和存成Clip,簡單的說,Character set就是一些我們要設Key的各種物件的屬性參數的集合。

EX:
a. 假設場景有三個物件,分別為Cone1,Cube1和Sphere1,我們可以選擇Cone1和Cube1物件之後,再使用Shift鍵加選 Channel Box上的Translate X屬性參數,接著選擇Character >Create Character Set Option,在裡面的Include勾選From Channel Box的選項,接著按下Create Character Set。


b. 現在發現右下角已經自動切換到Character1的Character Set裡,我們可以在outliner視窗選擇Character1後,觀察Channel box的屬性參數將會有兩個,就是分別為cone1物件的pConel.tx和Cube1物件的pCuble1.tx。




c. 接著我們可以在右下角仍為Character1時,不選取任何物件,先按S鍵Set Key,之後分別在X軸和Y軸方向移動此三個物件,接著再取消選取任何的物件,接著按S鍵Set Key,播放動畫看看,會發現Sphere1不會動,而Cone1和Cube1物件只會在X軸方向移動,接著在outliner視窗選取 Character1,觀察Channel Box裡的屬性參數,會發現雖然之前我們未選取任何物件,但是pConel.tx和pCuble1.tx都已經有被Set Key了!

d 接著確定右下角我們仍在Character1裡,這次把三個物件都選取之後,按W鍵切換到Translate工具,接著先按S鍵Set Key,之後分別在X軸和Y軸方向移動此三個物件,最後並按下S鍵Set Key,播放動畫看看,會發現三個物件都會在X軸和Y軸方向移動,此時我們打開Trax Editor編輯器,在Trax Editor視窗中選擇Create>Animation Clip來創建Clip1,接著將此創建的Clip拖曳移動一下,接著再播放動作看看,會發現pConel.tx和pCuble1.tx竟然在Y軸和X軸分開移動了,從這可以瞭解,Clip只紀錄Character Set裡面物件(Cone1和Cube1)的屬性參數(Translate X)的Key。

p.s 若要將某些屬性參數移出Character Set,可以在右下方先選擇此Character Set,之後在Channel Box裡面選擇要移除的屬性參數Channel,之後再選擇Character>Remove from Character Set便可以將這些屬性參數移出此Character Set。

2.Create Subcharacter Set:
a.在Character set裡把要控制動畫的物件的屬性參數再分類管理,也是方便之後Set Key與在Trax Editor裡的Clip編輯。

b. 先在Outliner視窗中選擇Character,之後再到場景選取在Character Set裡要設為Subcharacter Set的物件,接著選擇按下Character >Create SubCharacter Set 便可以創建一個SubCharacter Set(若在創建SubCharacter Set時,選擇All Keyable選項,則理所當然會把此物件所有可以設Key的屬性參數都設成SubCharacter Set),觀察Trax Editor,將會發現系統會將這些被設為SubCharacter Set的物件的屬性參數的Keyframe,自動從Character裡分離出來,並且另存成一個新的Clib放置於SubCharacter的Track裡(如果沒出現SubCharacter的Track,按一下Character Track的黑色小三角形把它收起來,再按一下把它打開,應該就會出現SubCharacter Track)。


3.一般在同一個Character set裡的Clips的上下重疊的效果為動作疊加的效果,而不是平均的效果,另外Subcharacter Set裡控制器的Clips的動作,會取代原來Character set裡相同控制器的Clips的動作。

4. 對位於某個Character set裡的角色Mesh使用Duplicate Input Graph時,會強制複製此Mesh的所有Input節點(包括Joints、Character set和Clip等),並且另外會自動創建一個名稱叫Multiple的Character set(目前我還感覺不出此Multiple的作用)。

5.我們可以在Trax Editor裡面先選取兩段Clips(分別位於不同的Track也可以),接著選擇Edit>Merge將此兩段Clip合成一個新的Clip(此段合成的新Clip將會自動儲存到Visor裡)。

Constraint clip
1. 假設A物件有設定動畫的Keyframe,而B物件並無任何Keyframe,我們可以選擇A物件後再加選B物件,之後選擇Constrant> point可以讓B物件的pivot對齊A物件的pivot點,並且讓B物件跟隨A物件移動,此時選擇B物件後,使用Trax Editor>Create> Constraint clip可以將B物件跟隨A物件所產生的移動製成一段Clip(即使B物件本身並無任何的Keyframe)。

Expression clip
可以對被使用Expression控制的動畫控制器、骨架或物件,在Trax Editor裡面選擇Create> Expression clip將此段Expression Aanimation製成一段Clip(即使此物件原本並沒有設任何的Keyframe,因為一般的Expression Aanimation是用表達式控制而非Set Key來設置動畫)。

Particle Animation clip
我們同樣可以使用Trax Editor來編輯粒子特校動畫,先選擇粒子發射器(Emiter),再Create Character Set,之後在Emiter的Channels的屬性上設Key(選擇Channels之後,按RMB選擇Key Select來設Key)與編輯粒子特效動畫,之後再用Create >Animation Clip把這段特效動畫製成一段Clip,之後便可以像角色動畫的Animation Clip般在 Trax Editor裡編輯。

Create Pose
1.使用Trax Editor>Create> Pose,可以將目前物件所在Frame的狀態製成單一個Pose存放於visor的Character poses裡(並不需要設Key),當要在Trax Editor裡使用編輯時,可以從Trax Editor>Library>Insert Pose裡面叫出來編輯,否則並不會自動將創建的Pose顯示於Trax Editor裡。

2. 我們可以按下Render the current Frame按鈕來Render目前場景的物件pose狀態,並且在Render View視窗選擇Grab swatch to Hypershade/Visor,之後在Render View視窗內匡選此Rnder的圖片,使用MMB拖曳到Visor視窗裡存放pose的圖示上,便會以此Render出來的圖示來顯示此pose,之後在此圖示上點擊MMB,選擇Apply Pose,如此以後要使用pose時,只要打開Visor視窗觀看存放的pose圖示時便可一目了然。


2.通常我們會在Trax editor裡將創建的Pose放置於一段Clip之前,讓此Pose對此Clip的位置或動作產生偏移的效果(Clib屬性不能完全設為Absolute)。


3.或者我們可以為物件調整一個狀態後,先創建一個Pose(A),接著再對同一個物件調整成另一個狀態,再創建一個Pose(B),接著在Trax Editor裡面,便可以使用Blend功能將此兩個Pose做成一段平順的、由狀態A慢慢轉變為狀態B的動畫。

Create Clip through Joints
直接透過joints創建clip之後,可以讓角色回到Bind Pose後,調整角色的身體各部分的Joints尺寸大小,並且創建一個新的pose之後(創建Pose的方法與創建Clip相同,另外選擇在Bind Pose創建一個新的pose是為了讓動作的轉移較不會出錯),將此Pose放置於原本的Clip前面,會發現角色以新的尺寸大小進行原本Clip裡的動作 (要使用此功能,則在創建Character set 時記得在option裡要將Keyable All Except 裡的Scale取消勾選)。


Multiple Character Set

1. 當我們為模型A的所附屬骨架A創建一個Character set之後,若我們單獨選取模型A,並使用Edit>Duplicate Special來複製它,並且在Duplicate的Option裡勾選Duplicate input graph,便會發現我們不僅複製模型A,連模型A的骨架和Character Set以及Track Editor裡Clip也都一起複製了(觀察右下方,會發現Character Set變為Multiple,我們可以按下左邊的紅色三角型 ,在出現的下拉選單裡面選擇要在哪個Character Set作編輯)。




Create Walk Cycle Clip
1.在遊戲裡製作一段往前的走路動畫,通常會製作原地走路的一段Clip,再配合往前(Z軸方向)的位移。

2. 若只有原地循環走路的動作,我們可以自己手動Key一段往前踏一步的Keyframe,之後開啟Graph Editor,在Graph Editor視窗中先選擇View>Infinity,之後再到Clip裡的GobalControl.TranslateZ裡,選擇 Curves>Post Infinity>Cycle With Offset來將此往前一步向前移動的一段動作製成循環動作,如此便可以和原地循環走路的動作合成一段往前的走路動畫,而不需要另外製作一段Clip再到 Trax Editor裡面做合成。

3.我們可以為任何Joints或動畫控制器添加Redirect控制器,以方便進行動畫的轉向編輯,必須先選擇Joints(一般選擇腳部骨節)或動畫控制器(一般選擇腳部控制器),才能使用Character>Redirect來添加 Redirect控制器,接著選取Redirect控制器後先設一個Key,之後旋轉此Redirect控制器將角色轉向後,再設一個Key便完成。

Character Mapper
1. 使用Character>Character Mapper可以將角色A的動作對應到另外一個角色B上,在使用Character Mapper之前先替兩個角色的整個骨架創建Character Set,選擇Character>Character Mapper開啟CharacterMapper視窗,之後在Outliner選擇A角色的Character Set,在CharacterMapper視窗裡按下Load Source,接著在Outliner選擇B角色的Character Set,在Character Mapper視窗裡按下Load Target,若A、B兩個角色的骨架階層大部分相似,可以在Character Mapper視窗中先使用Map Base On Hierarchy將大部分的骨節先對應(當然也可以一一手動選擇對應的骨頭,並按下Map鈕來對應)。


2. 若角色B有多餘的骨架無法對應,又想將這些骨架交由角色A裡的骨架重複對應來控制,可以先將這些多餘的骨節創建一個Subcharacter Set,之後再次使用Character>Character Mapper叫出Character Mapper視窗,在Outliner選擇A角色的Character Set,在Character Mapper視窗裡按下Load Source,接著在Outliner選擇B角色的Subcharacter Set,在Character Mapper視窗裡按下Load Target,之後在Character Mapper視窗手動選擇依序Map對應骨架。

3.骨架對應完畢之後,便可以選擇A角色的 Character Set,為A角色的動作創建Clip,之後按RMB選擇複製此Clip之後,分別到B角色的Character Set和Subcharacter Set裡使用RMB將複製的Clip貼上,如此便可以把角色A的動作對應到角色B上。