top of page
搜尋

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

作家相片: Liling Liu
Liling Liu
2023年2月11日
讀畢需時 3 分鐘

已更新:2023年9月3日


<以裙子為例,裙子會隨著物體的碰撞並改變>






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









在本教程中,我將使用簡單的對象和裙子模型進行綁定。

我將把這篇文章分成 4 個主要部分。

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

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

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

  4. 計算物體的角度並產生碰撞



教學開始之前,我要先來說明概念原理



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



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



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



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



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

1. 在 Maya 裡面到 Windows> Node Editor,在編輯區新增 NearestPointOnCurve 節點

2. loc_hand_spShape 的 worldPosition 連結至該節點的 positionCuv_skirtShape 的 worldspace 連結至該節點的 curve

3. 再將此結點的參數輸出至 U Value 的值





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



Go to Create > Measure Tools > Distance Tool.

將裙子的骨頭與圓圈線上的 locator(loc_cuv)測量距離







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


  • 在 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 的值,並更改最低數值。



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



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




角度判定:



  • 創建兩組骨頭,並將各自的底端骨頭放置在 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 2


  • 由於為了讓自己方便能夠調整角度可以旋轉為多少,再新增一個 multiplyDivide, 將 multiplyDivide3 輸出是此點,然後就可以在相關控制器連結上 input2








 
 
 

1 則留言


giecphangqua.n.h.g.h.u.n.g
8月07日

Đọc xong bài này mình thấy chủ đề đúng là vừa mới mẻ vừa dễ bị cuốn theo. Trước giờ mình chỉ biết sơ sơ về rồng qua vài mẩu chuyện truyền miệng, nhưng càng để ý mới nhận ra mỗi kiểu rồng lại gắn với một tầng ý nghĩa riêng, lúc thì tượng trưng cho sức mạnh, lúc lại nghiêng về che chở hay đem lại vận may. Có thời gian mình còn thích sưu tầm hình rồng với mấy món tượng nhỏ để cạnh bàn, nhìn vào thấy như được nhắc nhở phải cố gắng hơn. Đoạn nhắc tới Rồng bạch kim làm mình ấn tượng nhất, kiểu cảm giác vừa cứng cáp vừa trong trẻo, không cần…

按讚

CONTACT

Liling Liu

Email: liling5731@gmail.com

© 2016 - 2026 by LilingLiu. All rights preserved.

bottom of page