這是在AntCGI上看到的教學,是有關擠壓輪胎的製作方法,非常實用的棒,這個youtube頻道的其他教學也都很推薦,重點是影片不只講解的很詳細,而且都是免費的,想要學習maya rigging的人可以多多利用!
這個輪胎教學包含兩個部分,第一個是讓輪胎跟著控制器旋轉,第二個則是關於橡膠圈的擠壓!
然後必須注意的是,這個方法只有在Maya 2023以上的版本才有辦法使用!
底下是把它工具化之後的展示,有興趣的人可以參考上面的教學!
關於輪胎與地面接觸的效果
這應該是教學最有趣的地方,也是在這個部分會動用到Maya 2023的一個新功能【Proximity Pin】,嚴格來說其實Maya 2020版本就有這個功能了,但是,Maya 2023又對它做了一些更新,所以這個方法在Maya 2020是行不通的,之前有測試過..。
那麼就開始吧,首先,我們需要先做好輪胎joint,並將位置對其輪軸中央。
輪胎要用幾根joints可以自行決定,當然越多效果會越好,同樣也就必須花更多時間paint weight。
接下來我們必須先製作IK的伸縮功能,用意是輪胎如果接觸地面,那麼這個joint就必須適時地縮放,這樣模型才不會直接穿越地面!
然後為了避免之後會出現奇怪的扭曲,將ikHandle的Pole Vector全部設定成0。
接下來,新增三個locator,分別是innerLoc、outerrLoc、ikLoc,分別將他們放到骨點位置,ikHandle則是parent到 ikLoc裡面,這個階段ikLoc完全不用移動,讓他在世界中心就好,不然之後會發生問題。
接下來使用distance between以及multply divide節點簡單製作一ik擠壓效果
multply divide節點使用divide模式,然後input2數值要跟input1一致,最後將out put 輸出到 joint的Y軸,這邊要注意joint軸向是否正確,如果你的縮放軸像是其他X或是Z軸,就必須串連到這些軸向!
接下來我們簡單測試一下擠壓功能,這邊需要在新增一個centre_Fr_1,位置對齊joint中心點,然後將innerLoc、outerLoc移動到其底下,然後選擇centre_Fr_1跟第一個ik joint,就可以看到擠壓效果了!
接下來就是使用proximity pin的時候了,先選擇Ground模型,然後選擇outerLoc執行proximity pin,選擇UV模式!
接下來我們測試一下,可以發現只要outLoc移動,剛剛新出現的pinOutput也會跟著移動,最棒的是它還可以根據Ground模型表面位移! 是一個非常好用的新功能!
接下來,將outerLoc、pinOutput輸出到decomposeMatrix這個節點。
然後新增一個condition節點,模式設定為Less Than。
將兩個decomposeMatrix的 Output Translate Y(因為我們要比較這兩個locator之間與Ground的距離)分別輸出到condition的 First、Second item。
color if True ==>1
color if False ==>0
最後,我們需要用到blend matrix來做切換。
最後將他接上ikLoc的offset Parent!
現在把centre locator constraint到joint上,然後就可以隨著地表起伏移動!
這邊簡單說一下,為什麼可以透過blend matrix讓 locator固定在地表以及移動。
判定輪胎是否碰到地面是由outerLoc以及pinOutput來決定的,底下是condition節點預設的狀態,這個用意是,當outLoc的matrix_Y數值沒有低於pinOutput時,那麼,這時候ikLoc的Y軸就會跟隨outLoc,而outLoc又會跟隨centreLocator移動。
那麼,當outLoc matrix Y數值小於pinOut時,也就是低於地面的時候,這時候condtion就會輸出1到blend matrix,而blend matrix會將輸出的matrix Y從outLoc轉換成pinOutLoc,最後ikLoc接收到,所以自然就會浮貼在底面,不會穿越!
底下的影片應該可以更直觀了解這些數值的實際活動情況!
當outLoc的matrixY小於pinOut時,blend matrix的 pintOutput的weight就會變成1,此時ikLoc的Y軸自然就會繼承pinOutput的Y軸資訊,跟著緊貼地面! 反之亦然!
然後在加上之前做的ik擠壓效果,就能做出輪胎碰到地面進而擠壓的感覺!
關於使用Python新增Expression
這兩個東西乍看之下是兩個完全不同的系統,不過其實可以透過Python來新增expression,嚴格說起來是使用maya cmds。
#s就是我們的expression Expre="""{QQ}.rotateY=rotateX * 10;""".format(QQ=Locgrp) #可以用format的方式來帶入變數! cmds.expression(name='{}_TireExpre'.format(ExpreObj), s=Expre)
這樣就可以透過maya cmds直接創建expression!
0 留言