2011年2月9日 星期三

[Animation] 伸縮自如的橡膠戰斧

這篇主要是來研究一下,吳老師在"上帝的藝術"一書中教的"海賊王之腳骨架軟Q"。海賊王銷量長紅,連木村拓哉都想爭奪海賊王問答的連莊(他竟然答得出來離開沙漠的時候,草帽一行人在船上背對著公主的那一幕的順序,太誇張了),想當然海賊王裡面有許多角色都很受人愛戴,主角魯夫我想應該也蠻多人喜歡的吧(雖然我看是女角會比較受歡迎)!所以研究一下如何這種拉長也是很不錯,不過骨氣球這種招式恐怕...XD要綁定的時候要綁在Lattice上?或是直接用另外一個模型來做比較方便。

老師在課堂上也說了,動畫要的是張力,在動畫師生存手冊裡面,也可以知道拉伸跟壓縮對於畫面是如~~~~此的重要,所以學會這種拉伸效果我覺得對於調整動畫的技術提升也有相當的幫助。

雖然老師書上寫很詳細了,不過光是看完還不算學會,要練過、能清楚其中環節,並自己可以解釋,這樣才算學會吧!

[Step01]直接用老師的檔案FlexLeg.mb練習,丟入圖層,Template後,用Joint Tool建立腳部基本骨架,並且上IK(大腿這種可以旋轉的關節記得要用ikRPSolver)。

[Step02]事不宜遲,命名就從這裡開始。把第一個關節命名為leftUpLeg,第二個關節(膝蓋)命名為leftLeg,第三個關節(腳踝)命名為leftFoot,接著是leftToeBase,然後leftToe。


[Step03]建立一個Nurbs圓,用snap vertex鎖定到腳踝,更名為Leg_control,並且把歷史紀錄刪除,Freeze Transformations。將ikHandle parent給圓,由圓來控制IK。

[Step04]在Channel box中將我們用不到的控制器的旋轉與縮放Lock and Hide,讓參數欄乾淨些。接著Add Attribute,為了做區隔,先增加一個Displayable性質的屬性,名稱為Leg_Flex,資料類型Data Type設定為Enum,下方EnumNames裡面有Green Blue,選到其中一個,在下方的New name中刪掉改成五個等號=====,同樣的方法砍掉另外一個(即把New name留白),OK之後就會多一個標示分隔了。

※這裡其實不一定要輸入五個等號,也可以打字。

[Step05]再次新增一個名為Length的屬性,可以設key,類型為Float浮點數。最大值最小值訂為-10~10,預設Default為0。

[Step06]連結縮放參數,由於骨架預設是+X軸指向下一個關節,所以是要連結X方向的Scale。打開Connection Editor,把控制器Load到左邊,leftUpLegLoad到右欄,將控制器最下方顯示的新增的Length與leftUpLeg的ScaleX連結,因為目前Length是0,因此這種絕對連結(指數值完全對應)就會讓leftUpLeg與LeftLeg之間的距離(大腿段)變成0。

這種連結是直接改變Joint之間的縮放,以靈活度來說,對物體直接下Key控制,比不上讓物體Group一層之後下Key。所以要改變數值的話,我們需要更人性化(?)的方法。

[Step07]開啟Hypershade,把Outliner裡面的控制器與leftUpLeg丟到Hypershade裡面,並且從General Utilities分類裡面,找到Set Range節點。打開SetRange節點,可以看到每個參數都有三個,當然就是對應XYZ或是RGB了;選用最左邊X(R)這一欄來設定(這看個人喜好),首先Old Min與Old Max是舊的最小值與最大值,Min與Max就是新的最小值與最大值。將控制器用中鍵拉到SetRange節點上,選擇Length對應valueX。

接著,在Old Min與Old Max輸入當初設定Length長度的-10與10,在Min與Max設定新最小值與最大值,這裡這定0.5與1.5。

這裡的作用,應該是把Length的value經過SetRange轉換,將原本的-10~10的值,轉成對應0.5~1.5的值,再將SetRange中鍵丟到leftUpLeg上,將outValueX與scaleX連結。
這樣的話,只會對應到大腿那跟骨頭,所以我們要把膝蓋的leftLeg這個骨頭也丟進來,同樣讓outValueX與ScaleX連結,這樣在改變Length的時候,就會大小腿一起變長了!
當然也可以分成兩個參數來個別設定大小腿囉。

※這裡要注意當初Length設定的最大最小值,老師書中的範例Length是從0~10,只有正向增加,所以在設定Min與Max的時候,Min必須要設定成1,才會是原始長度;這裡Length設定成-10,預設值是0,所以有負向的增加。因此Min與Max的中間值必須是1,變成0.5←1→1.5,來對應-10←0→10。有負向增加的時候表示腳會縮短,可以對應魯夫打檔之後變成縮小的身體。



[Step08]調數值的方法在直覺式調整動畫的時候難免麻煩,所以接下來是接拉動控制器來使腿變長。由於大腿到膝蓋到腳踝,通常我們都會設定一個角度,這時候便會出現一個三角形。我們設定如果(髖關節到腳踝的直線距離)小於等於(髖關節到膝蓋)+(膝蓋到腳踝)的距離時(也就是站直的狀態),長度維持不變;如果直線距離大於(髖關節到膝蓋)+(膝蓋到腳踝)的距離時,就會伸長啦!倍數等於直線距離除以(兩段骨骼的長度)。

[Step09]用測量工具來量測直線距離,將兩個locator鎖點在leftfoot關節上與leftupleg關節上,量測出直線距離。用關節上的translate x數值得到兩段骨骼的長度。

[Step10]將兩節關節與測量出直線距離的distanceDimension,以及從節點中找到乘法除法器節點,載入Hypershade中。將distanceDimension節點中鍵丟到乘法除法器上方,會跳出connection editor,找到Distance,與乘法除法器的input1X相連,將乘法除法器中的兩段腿長(相加之後的數值)輸入到input2X,將Operation改為Divide除法,就會將兩個數值相除得到我們要的倍數。

[Step11]放入condition節點,First Term放入distance值,第二項輸入兩段腿長的數值,operation選為Greater than。這時候將color if true與乘法與除法器的output X相連。
如此一來,如果拉伸超過兩段腿長的長度(Greater than),即表示true成立,便會輸出乘法除法器算出的倍數值;如果沒有Greater than,則是color if false輸入的1(1倍即為原長度),接著再將condition的outColorR,連結給兩段骨頭的scaleX,就可以讓兩段骨頭相應變長了。

※脊椎的伸縮要注意的部分:
1.每個Joint的軸向要統一。
2.自行繪製IK Spline的線,由於一般脊椎部分有五個關節,因此用鎖點方式繪製,線條總共會有頭(2)、中間(3)、尾(2)七個CV點。以這三段來分成三個Cluster。使用IK Spline功能的時候,只要勾選Root on curve即可。
3.分別對應三個Cluster,建立三個控制器。中間的控制器多一層Group。選到上、選到下,再選中間的Group,執行Parent,如此一來中間的Group會保持在上、下兩個控制器的中間,而且還可以自己移動。將三個Cluster分別parent到三個控制器下。
4.用Arc Length Tool量Spline的長度。
5.在CommandLine輸入指令 arclen -ch 1 SpineCurve,Enter。將弧長量測好放在弧線的Output下,打開Attribute中可以看到CurveInfo標籤。
*arclen量測弧長,-ch是Construction History結構歷史,1表示true,讓這個結構放在Output下,SpineCurve是那段弧線的名稱。這段直接照老師的說明打。
6.若希望維持原本長度,就照前述方法也丟個Condition節點來做判斷,不然不需要使用Condition,只要讓控制器回到0的位置即可回復原本長度。

-分離式伸縮骨架-
這是老師書裡提供的一個變化使用,這也非常威,不受長度限制,也不需要用到那些運算節點。
1.首先在軀幹的上中下產生三個Locator,分別命名up mid low。各複製一個,分別parent在原本的locator下。
2.用前面軀幹的方式,選擇up low,最後選mid,進行parent constrain,讓mid會保持在up與 low之間。
3.產生三組骨頭,上面那組是由上往下共兩個關節;中間只有一個關節;下面是由下往上共兩個關節。將這三組分別放入第二次產生的locator up1、mid1、low1下,translate輸入為0可以自動對其locator。
4.先選mid1再選up1,執行Aim constrain(Aim vector Y=-1),如此up1 locator的-Y方向會永遠指向mid1。
5.先選mid1再選low1,執行Aim constrain(Aim vector Y=+1),如此low1的locator的+Y方向會永遠指向mid1。
6.選up再選mid,執行Aim constrain(Aim vector Y=+1),讓Mid的+Y永遠指向up。
7.分別產生控制器,將Up與Low分別parent到控制器中,中間的控制器則放到mid下,並把mid1放到控制器中。
8.最後skin即可。

簡單來說,就是用控制器去控制第一層locator(位置),然後第二層locator控制骨頭的方向,讓骨頭永遠指向中央的locator。之後再讓中央的第一層方向指向固定即可。由於上中下三段骨頭都沒有相連,因此不會有長度的問題。
這個技巧應該只能用在脊椎上,因為我們平常調整動作,IK FK還是比較方便好用,如果全都用這個,恐怕有相當的難度~XD!但全都用這個才是真正的橡膠人啊!

沒有留言:

張貼留言