By accepting you will be accessing a service provided by a third-party external to https://www.incgmedia.com/

如何在 Maya 裡面基於骨骼綁定製作具有自動碰撞的裙子

由現任職於 Amazon Game Studios 的 Technical Artist - 劉俐伶 Liling Liu 與我們分享如何在 Maya 裡面基於骨骼綁定製作具有自動碰撞的裙子


劉俐伶 Liling Liu

現任職於Amazon Game Studios 的 Technical Artist,目前正製作一款 AAA 遊戲《Crucible》,畢業於舊金山藝術大學遊戲發展所,曾經在 Universal creative,Kinosys Films,Chaosmonger Studios 等其他公司擔任於角色綁定師,本身也是一位 Freelance Rigger 參與其他的遊戲和動畫電影的專案。

個人網站


由於能夠使用兩者物體之間的碰撞來產生互動,讓動畫師能夠快速方便製作動作,必且可以將物體輸出到遊戲引擎。個人的想法是利用這樣的技術來製作一個裙子的綁定,在互相的碰撞讓裙子能夠自然產生變化。首先要有兩個物體,在這教學使用一個長條和簡單裙子模型(如下圖)。

影片來源:劉俐伶 Liling Liu
圖片來源:劉俐伶 Liling Liu

教學步驟:

概念原理:當物體一快碰撞到物體二之前,讓物體二開始受到變動。首先要在兩者物體之間製作一個圓圈,利用圓圈簡單表示為裙子的構造,讓物體一移動的過程在這圓圈上找到物體一和這圓圈的距離和角度,並利用這角度使的物體二產生碰撞。物體二也要計算和圓圈的距離是多少才能開始受到碰撞。


一:計算物體一與圓圈之間的距離

首先在每一個物體上新增骨頭,並製作一個圓圈(如下圖),由於要得知物體一在移動時與圓圈的距離是多少,建立一個 Locator(loc_hand_sp) ,將放置在長條物體的骨頭底下,利用這個 Locator 與圓圈上的點做計算。在計算之前,必須先知道圓圈上的點目前是處於多少。

建立一個 Locator(loc_cuv) 加選上圓圈線,到 Constrain > Motion Paths > Attach to Motion Path. 在 Motion Path Attribute 可以看到 U Value 被鎖起來,這時候可以解除鎖定,在移動 U Value 可以看到 Locator 在圓圈裡面
移動。

圖片來源:劉俐伶 Liling Liu

接著計算 loc_hand_sp 和圓圈線 (Cuv_skirt) 的點:

1. 在 Maya 裡面到 Windows > Node Editor,在編輯區新增 NearestPointOnCurve 節點
2. loc_hand_spShape 的 worldPosition 連結至該節點的 position
 Cuv_skirtShape 的 worldspace 連結至該節點的 curve
3. 再將此結點的參數輸出至 U Value 的值

圖片來源:劉俐伶 Liling Liu

如果你對 Maya 的節點不太熟悉,可以到 Autodesk 官網上得知資訊


二:計算物體二(裙子)與圓圈之間的距離

在 Maya 裡面到:Create > Measure Tools > Distance Tool.
將裙子的骨頭與圓圈線上的 locator(loc_cuv) 測量距離

圖片來源:劉俐伶 Liling Liu

三:判斷物體二(裙子)和圓圈之間距離產生變化

  • 在 Node Editor 新增 2 個 multiplyDivide 計算距離多少內開始進行變動,此兩節點的計算改為 Divide,距離線 (DD_L_skirt_02_DistShape) 連結至 multiplyDivide1 上的 input 2,此節點上的 input1 設為1,再將此節點連結上multiplyDivide2 的 input 1, 將複製 input1 的值到 input 2。
  • 得出此數值之後,要判定此數值是否介於距離之內,如果數字是在距離內,可產生變動,如果不是,那就保持原地。創立一個 remapValue,這個節點可以放置以判斷出的數值和自己設定的最大和最小的數值,如果數字介於之間就開始產生計算出結果,如果數值不是介於之間就輸出想要的最大和最小的值,在這邊最小值以0,最大值以1 輸出。將 multiplyDivide2 輸出至 remapValue 的值,並更改最低數值。
圖片來源:劉俐伶 Liling Liu

四:計算物體的角度並產生碰撞

創立一個新的 multiplyDivide,將剛剛 remapValue 的值輸出此節點(multiplyDivide3) 的 input1 再將此節點輸出至裙子骨頭上,等等要使用 multiplyDivide3 的 input 2 作為物體的角度判定。如果角度超過一個數值,那就可以開始轉動裙子的骨頭。 對每一個裙子的骨頭重複上續步驟。

圖片來源:劉俐伶 Liling Liu

角度判定:

  • 創建兩組骨頭,並將各自的底端骨頭放置在 locator 上(如下圖),在將其中一組的骨頭(直的) 放置在另一組底下,由於骨頭旋轉值會自動轉到骨頭方向,將此數字複製到骨頭的旋轉上,這樣就可以得知此兩組骨頭的角度為多少。
  • 在骨頭(斜的)加上 IK Handle 並將它放置在圓圈線上的 locator。
  • 利用之前所創立的 loc_hand_sp 加選上骨頭(直的)做 aim constraint,將 world up type 改為 Object rotation up 並將另一組骨頭名稱放上。根據此 locator 的軸向,更改 up vector and world up vector 數值。只要兩個相碰再一起此角度就歸 0,繼續在超過角度,就進行裙子骨頭轉動。
  • 創立 clamp 節點,將剛剛骨頭(直的)連上 clamp 的 inputR,並在 MaxR 調整數值,此角度如果介於此就輸出為 0,否則為 1。將 clamp 值輸出 multiplyDivide3 的 input。
  • 由於為了讓自己方便能夠調整角度可以旋轉為多少,再新增一個 multiplyDivide,將 multiplyDivide3 輸出是此點,然後就可以在相關控制器連結上 input2。
圖片來源:劉俐伶 Liling Liu

【主題演說】CG 領域的你不得不知,NVIDIA GTC 2020 亮點深度懶人包
支援高面數模型、動態光照技術? Unreal Engine 5 的全新核心技術來襲!

相關文章

還沒有帳號嗎? 點此立即註冊!

登入您的帳號