此文先是發於新浪部落格上, 無奈新浪部落格太垃圾, 決定轉戰知乎。

寫這個的原因:

2016年受Richard Lico的一個利用Maya中的粒子來做角色secondary animation 的影片的啟發(原影片:

vimeo。com/196234485

), 在Maya裡把這個流程用 python 寫了出來, 但是因為這幾年一直做mocap 比較多, 而這個方法主要實用於keyframe的動畫, 所以只是完成了function部分,並沒有繼續深入的做成一個完整的工具。

直到最近看到國內微信上某個CG公眾號分享的一篇文章, 某歐洲的公司把這個流程做成了一個有使用者互動介面的工具,並且以150歐元的價格出售。 於是為了打他們的臉, 我花了一天的時間, 在之前寫好的 function的基礎上做了使用者互動介面, 打算把指令碼放網上讓群眾免費下載。

這篇主要討論思路步驟,頁末會放出指令碼下載連結。 下一篇會放出工具的使用方法。

工具如下圖

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

此方法適用於手調動畫,在關鍵幀和中間幀的基礎上,透過粒子的物理運算和對關節建立目標約束,來增強關節運動的迭代效果(overlap)。

下圖左邊為只有兩個關鍵幀的簡單動畫,右邊為透過粒子輔助加強迭代運動後的效果。

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

https://www。zhihu。com/video/949798176333455360

接下來講講步驟和思路,為了方便演示,以下步驟我會用一個關節來舉例。

1。建立一個目標物體,目標物體的位置不能和關節的pivot重疊, 其它任何位置都可以。 將所選關節的動畫烘焙到目標物體上。(建立parent/child 約束並保持offset, 烘焙目標物體, 刪除約束)

此目標物體將作為粒子的goal,讓粒子跟隨。這裡目標物體我用了locator。

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

https://www。zhihu。com/video/949799888377106432

2。建立一個粒子,位置align到目標物體上,將目標物體設定為粒子的goal,權重暫時設定為一個隨機數。

conserve = random。uniform(0。9, 1)

weight = random。uniform(0。65, 0。75)

temp_particle = cmds。particle(n = “{0}_temp_particle”。format(object), p = [0,0,0], c = conserve)[0]

cmds。setAttr(“{0}。particleRenderType”。format(temp_particle), 4)

cmds。goal( temp_particle, g = target, w= weight )

調節粒子的 conserve 和 goalWeight[0]兩個屬性數值,得到不同的迭代效果。

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

https://www。zhihu。com/video/949800935355133952

3。建立第二個locator, 將locator的translate 屬性關聯到到粒子的cachedWorldCentroid屬性。 這時新建立的locator會跟隨粒子的中心點運動。(注意此時粒子的中心點和pivot不在同一位置) 此locator將作為下一步對關節目標約束的目標物體。(為區別第一步建立的locator, 我把第二個locator設定成了紅色)

target_control = cmds。spaceLocator(n = “{0}_temp_target_control”。format(object))[0]

cmds。connectAttr( “{0}。cachedWorldCentroid”。format(temp_particle),‘{0}。translate’。format(target_control) )

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

https://www。zhihu。com/video/949802019804987392

4。建立目標約束,第三步建立的locator作為關節的目標。此時關節會指向粒子並隨粒子運動。

cmds。aimConstraint(target_control, object , n = “{0}_temp_aim”。format(object),maintainOffset = True,worldUpType = “None” )

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

https://www。zhihu。com/video/949802840319909888

5。將關節動畫烘焙到override 動畫層。 這時可以刪除建立的locator, 粒子和目標約束。烘焙到動畫層的好處是迭代動畫不影響原始層的關鍵幀動畫, 可以調節override 層的權重來控制影響效果, 如果不滿意可以隨時刪掉動畫層。

Maya透過粒子的物理運算來輔助角色次要動畫的製作(上)

https://www。zhihu。com/video/949803784889663488

以上是對用粒子物理運算做旋轉的迭代效果做法的方法, 對於移動的話, 一樣的思路, 更簡單, 不需要目標約束,小夥伴可以自行思考。

工具指令碼下載連結

上篇完