【Maya 履帶製作】

【Maya 履帶製作】

 



是這樣啦,最近看完了一位神人的詳細教學,所以學會了怎麼用python製作履帶,然後再加上一點自己的想法新增了介面方便操作,以下是完成之後功能。

這位大大的教學在B站上,有興趣可以去觀摩學習




總之,這個做履帶的方法其實很單純,難的部分在於把它程序化變成程式碼執行,詳細的做法都在上面的連結裡,這邊就不贅述了,本篇主要是想筆記一下履帶製作的核心做法。



第一部份:讓物件能夠跟著曲面移動

第一個步驟我們需要做到讓某個物件、locator、group之類的東西能夠跟隨曲面表面移動,這邊會用到的節點是pointOnSurfaceInfo


以下是來自chatGPT的解釋:

Maya中的"point on surface info"節點是一個非常有用的工具,它可以計算在曲面上指定點的位置和其他相關的數據信息。當你需要在曲面上進行一些精確的操作時,例如在指定的位置上放置物體或進行細微的變形調整時,這個節點就非常有用了。它可以計算出曲面上任意點的法向量、曲面曲率等信息,並且可以將這些信息轉換為3D空間中的坐標系。總之,"point on surface info"節點是一個可以幫助你在曲面上精確定位和操作的工具。




接下來,我們需要先創建一個nurbs曲面。

以及一個,用來在曲面上位移的物件,這邊使用locator。





現在到node editor裡面,載入nurbs曲面的shape節點!! 這邊要注意不是使用trandform節點而是shape節點。

然後再載入locator的transform節點。


最後把他們兩個利用pointOnSurfaceInfo串聯起來,可以看到locator的位置立刻跑到nurbs的左下角,那是因為,現在它位於曲面預設的(0,0)起始位置。





到pointOnSurfaceInfo節點面板,可以看到有兩個數值,ParameterU、ParameterV。

這兩個數值就代表了物件在曲面上的座標,因為這是個完全在物件表面上運作的節點,所以不會有Z軸資訊!






如果我們稍微更改了UV數值,就會發現locator也跟著位移了,而UV所代表的意思就相當於平面座標系統的XY軸向,所以當我把兩個數值都設定為0.5時,物件就會正好落在nurbs的正中央!





到目前為止,第一個部分算是完成了,透過以下的影片可以發現目前物件已經能更跟隨nurbs位移,但是,一旦nurbs開始旋轉,物件仍然保持原本的位置沒有改變,那是因為我們還沒有把pointOnSurfaceInfo節點的旋轉資訊傳輸給locator。





第二部份:讓物件能夠跟著曲面旋轉



這個部分的目的就是要讓物件能夠完美地跟隨nurbs表面旋轉,會用到aimConstraint這個節點來做出這樣的效果。



底下就是如何將pointOnSurfaceInfo串上aimconstraint節點的用法。

底下有一些屬性的名詞在利用ChatGPT解釋之後會更清楚,建議各位也可多多使用!!!

World up Vector:在aimConstraint中,world up vector是指用於定義目標物件的上方向向量,即控制目標物件的垂直方向。


TangentV: 在pointOnSurface中,tangentV是一個向量,它代表曲面上某一點的切線方向向量。具體來說,tangentV是曲面上某一點的切線向量在曲面局部坐標系中的表示。我們可以使用tangentV向量來計算曲面上的其他點的位置和方向。例如,如果我們需要在曲面上沿著某個方向移動一定距離,就可以使用tangentV向量來定義移動的方向。

Target Translate:aimConstraint中的target translate是指目標物件的位移位置,用於控制約束(constraint)行為。








現在,locator已經可以跟著nurbs表面旋轉了! 而且當我們改變nurbs onctrol point的時候,locator也能夠跟隨其變形而旋轉!








第三部份:讓物件能夠透過UV數值在曲面上移動


現在物件已經能夠隨著nurbs旋轉位移,那麼最後一步就是要透過數值的變化讓它能夠像履帶一樣移動。

首先,先在物件、或是控制器上新增一個屬性。




現在,把Run屬性接上一個plusMinusAverage節點,然後將Output1D輸出到pointOnSurfaceInfo的Parameter U 或是V上。




那麼,透過更改Run的數值,物件也就能夠在nurbs上水平位移了!!!!







到目前為止,整個履帶製作的核心概念就差不多介紹完畢了,剩下的就只是把模型複製出來,parent到locator底下,然後將parameter U的數值平均分散,再放上更多locator跟模型,真的非常淺顯易懂,當然,這個過程肯定需要寫一些code來完成這些重複的工作!



那麼接下來,還需要注意的部分就是,關於物件軸向的問題。


在locator被我們加入aimConstraint之後,我們打開Local Rotation Axes,可以發現它跟世界軸向不一致了,那是因為在aimConstraint裡面的aimVector數值的關係。




如果我們想要改變物件在nurbs的軸向,可以到aimConstraint上面修改aimVector的數值,如此一來就能夠讓模型朝著我們希望的方向!!!








如果覺得這篇文章有幫助你在動畫之路走得更長遠,可以使用 Google 或 Facebook 帳號快速登入,按Like五下,就可以幫助我從Likecoin得到回饋,完全不用任何費用! 一點點的鼓勵都會成為我寫作的動力,感激不盡!



 







張貼留言

0 留言