高階動畫繫結功能:角色與物品的互動

遊資網發表於2019-09-17
在Unity 2019.1正式版中,我們釋出了全新的預覽版Animation Rigging資源包,目的是為開發者提供一套完整的約束解決方案,讓使用者可以在執行時建立不同的繫結,從而替換或更改動畫。

在設計Animation Rigging資源包功能時,我們探索了各種可能,努力擴充執行時與創作之間的邊界。本文將介紹Animation Rigging資源包最新的實驗功能。

高階動畫繫結功能:角色與物品的互動

閱讀準備

本文將重點介紹三種型別的元件:Rig Builder、Rig和各種Constraints約束元件。瞭解Animation Rigging資源包,請閱讀:《Unity 2019.1中的Animation Rigging資源包》。

下載本文中的專案:

https://github.com/Unity-Technol ... aracter-interaction

溫馨提醒:我們希望嘗試讓技術動畫師不必編寫程式碼,就可以在狀態機中建立約束互動的方法。本文中的狀態機功能均為試驗性的,暫時不可用於正式的產品製作。

高階動畫繫結功能

為了在已有的Animator動畫控制器中讓繫結約束活動起來,而且不需要編寫程式碼,我們在Animator狀態機的Layers圖層中嘗試了一種新方法。

高階動畫繫結功能:角色與物品的互動

在現有的狀態機中結合動畫繫結

為了在已有狀態機的只讀動畫剪輯上正確地同步繫結和約束,我們利用了Animator狀態機的Layers圖層。

高階動畫繫結功能:角色與物品的互動

我們可以使用Layers圖層和Sync同步功能,在已有的運動狀態機中為任何狀態新增啟用繫結或禁用繫結的剪輯。

高階動畫繫結功能:角色與物品的互動

我們使用動畫視窗建立了多個動畫剪輯,它們儲存在*Rig圖層中,能夠調整繫結和約束的屬性。這裡我們只是調整了不同繫結和約束的Weight(權重)和Source Weight(來源權重)屬性。

高階動畫繫結功能:角色與物品的互動

我們使用了Player指令碼來啟用或禁用部分Weight Layer屬性,實現不同的握槍方式。下圖是Player指令碼上控制握槍方式的滑動條。

高階動畫繫結功能:角色與物品的互動

忍者的槍械

高階動畫繫結功能:角色與物品的互動

建立忍者的繫結

Rig Builder元件上的Rig Layers可以讓使用者對繫結和繫結部件進行排序,從而確保棧計算和解算結果正確,讓繫結組合和解算順序更具靈活性。

例如:如果我們將示例中忍者的Shoulder Offset Rig排序故意弄錯,會發生什麼呢?

高階動畫繫結功能:角色與物品的互動

當我們將Shoulder Correction Rig移到Rig Builder元件上計算棧的底部,就會破壞正確的解算過程。

高階動畫繫結功能:角色與物品的互動

當Shoulder Correction Rig放回Rig Builder元件上計算棧的頂部時,我們又得到了正確的解算行為。

在第一張截圖中,Shoulder Offset放在了棧的底部,造成雙手位置錯位。在正確排序後,肩膀的解算優先於手臂的其它部分,因此手可以正確地握住手槍。

接下來,我們可以用RightArm IK來矯正手槍握把的位置,解算UpperBody Rig。

高階動畫繫結功能:角色與物品的互動

小提示:下文中關於繫結和約束設定中的排序不一定和上圖中展示的排序相同。

Shoulder Correction Rig

我們將Shoulder Correction Rig與RightArm Rig的Two Bone IK約束結合使用,從而矯正Right Shoulder骨骼的姿勢,在Assault Rifle閒置動畫和Pistol閒置姿勢上做出應有的手臂彎曲。

我們使用Pivot模式的Override Transform元件和RightShoulder的Transform屬性,在Y軸和Z軸加入額外的旋轉角度。請注意,通過把Position Weight位置權重設為0,我們只會影響Rotation旋轉屬性。

高階動畫繫結功能:角色與物品的互動

Assault Rifle Rig

現在看看Hips Constraint遊戲物件和其子物件。在Override Transform元件中,我們把模式設為Pivot,將Hips Ctrl物件作為來源,從而影響Hips骨骼,這使得我們能夠偏移整個忍者層級。

然後,我們將Multi-Aim和Override Transform等約束組合在一起,建立一個能夠影響脊柱和臀部的上身瞄準繫結。設定不同的瞄準權重約束值將會影響所有脊柱效應部分中旋轉角度的分配。

在Hips Constraint物件下,Multi Aim Constraint元件的Source Objects部分中,各個部分的數值為:脊柱部分設為0.35,胸部設為0.5,胸部上半部分設為0.75,頭部設為1.0。所有這些設定為目標物件加上了不同的旋轉角度,創造出了瞄準效果。

高階動畫繫結功能:角色與物品的互動

Weapon Rig

Weapon Rig物件使用Override Transform元件來控制Weapon Bone動畫流,使用來源物件Weapon Ctrl物件對它進行重定向。

高階動畫繫結功能:角色與物品的互動

然後,我們在Multi-Referential Constraint元件中使用同樣的來源物件作為參照物件,實現多軸心操作。你可以在Multi Referential Constraint元件的Driving屬性中測試這些數值,實時檢視結果。

高階動畫繫結功能:角色與物品的互動

UpperBody IK Rig

Two Bone IK提供了對兩個骨架手臂的解算。Multi-Parent Constraints元件的作用是把RHIK Effector物件和LHIK Effector物件關聯到Weapon_Bone的IK目標子物件即AR_LHIK_Target和AR_RHIK_Target物件上。

高階動畫繫結功能:角色與物品的互動

Pistol Rig

我們使用了一套動畫繫結約束,實現初始閒置動畫向握槍姿勢的轉換。通過使用Pivot模式的Override Transform元件,我們把Pistol Ctrl物件效應部位上的資料偏移到Weapon Bone物件上。

然後,我們在Multi-Parent Constraint元件中,把Maintain Offset設為Position and Rotation選項,從而抵消Weapon Bone來源物件和Pistol Offset目標物件之間的全域性定位座標差異。

高階動畫繫結功能:角色與物品的互動

Weapons Source Rig

為了將突擊步槍和手槍的骨架連線到不同錨點上,我們利用了多重父物件約束的多來源功能。

Assault Rifle Attach Rig物件能夠充分利用Multi-Parent Constraint元件的多來源功能。當AR_Holster來源值設為1,Weapon_Bone來源值設為0時,AR_Grip_Bone物件會關聯到AR_Holster物件上。

高階動畫繫結功能:角色與物品的互動

如果想讓突擊步槍即AR_Grip_Bone物件跟隨Weapon_Bone物件,只需將Weapon_Bone來源值設為1,AR_Holster來源值設為0即可。請注意,我們可以在大部分約束屬性上編輯關鍵幀,例如:本示例中的多重父物件來源權重,從而得出想要的結果。

這個功能很關鍵,新的動畫剪輯將在同步的Animator控制器圖層的狀態中使用,從而在現有運動狀態機的狀態中限制特定繫結狀態。

下面的示例展示了在執行時對三個不同來源Pistol_Holster,Pistol Offset和RightHand_PistolGrip,使用多重父物件約束的方法。

該結果通過同步多個狀態機圖層上的兩個不同動畫剪輯得來,兩個動畫剪輯是:Base圖層上執行的.fbx格式只讀檔案Pistol_Equip,Rig Pistol圖層上的Unity原生動畫剪輯Rig_Pistol_Equip。

高階動畫繫結功能:角色與物品的互動

Legs IK Rig

忍者的檔案格式是fbx格式,包含了LowerBody物件的兩個子物件:LeftFootIK物件和RighFootIK物件,我們用DCC工具為這兩個物件加上了匹配的腳部骨架動畫。

高階動畫繫結功能:角色與物品的互動

多重父物件約束主要用於將Leg IK Rig物件上的Feet IK效應部位關聯到LeftFootIK物件和RightFootIK物件。該功能可將雙腳鎖定在地面根部層級上,使得在調整臀部時下身部分不會沉到地下。

高階動畫繫結功能:角色與物品的互動

最後,我們可以使用Two Bone IK約束上的IK解算,在下半身部分即腳部和指示部分的位置生成合適的動畫矯正。

高階動畫繫結功能:角色與物品的互動

腳部設定

我們發現使用Multi-Referential Constrain元件來製作腳部繫結的效果很好。通過建立多軸心腳部控制繫結,我們可以利用IK效應部分的控制功能,未來的動畫創作方案可能會和這種方法相似。

高階動畫繫結功能:角色與物品的互動

LeftHandGrip Rig

我們利用Left-Hand物件的層級的副本建立了一個完全不同的手部抓握姿勢。通過使用Rig元件的權重滑塊,我們可以在本地空間禁用或啟用多個Override Transform約束,每個約束作用於一個手指物件,從而重寫每個手指的本地角度。

高階動畫繫結功能:角色與物品的互動

高階動畫繫結功能:角色與物品的互動

為了將LHIK Effector物件對齊到AR_LHIK_Target_B物件,我們可以將AR_LHIK_Target的權重值設為0,將AR_LHIK_Target_B的權重值設為1。

然後,我們使用MonoBehaviour指令碼同步LeftHandGrip Rig物件的權重屬性和LeftArm IK及Muilti-Parent Constraint元件的來源權重屬性,即AR_LHIK_Target物件和AR_LHIK_Target_B物件,從而調整武器上的左手位置和抓握姿勢。

高階動畫繫結功能:角色與物品的互動

Twist Correction Rig

Twist Correction Rig物件是一個程式化的變形繫結,能夠影響手臂的上下部分,以及雙腳的上半部分。它能夠提取出腕部骨骼的旋轉角度,再根據特定權重值將旋轉效果分佈到每個手腕骨骼的本地X軸上。

在本示例中,Twist Correction在Rig Builder元件上位於Rig Layers部分的底部,這樣Twist Correction物件可以方便接收之前繫結約束中的改動。

高階動畫繫結功能:角色與物品的互動

專案中的筆記和知識點

由於我們使用Animator狀態機來控制約束屬性,即浮點型別的權重值,它們將會繼承狀態機上的過渡與混合效果,例如:在混合處理結束前,數值可能會是0.998。要避免這個問題,請確保在約束權重動畫開始之前,有足夠的時間完成混合過渡。

該方法有另一個副作用,你需要記錄受到之前狀態影響的屬性,從而避免這些屬性回到預設數值或狀態,當狀態的同步層上沒有剪輯時,需要特別注意這個問題。

在解決完這些問題後,我們就有了功能完善的結果。

小結

我們很高興能與你分享這次實驗的成果,希望得到你的反饋,分享你使用Animation Rigging資源包的體驗。

如果你有任何建議,請訪問Unity官方動畫論壇:https://forum.unity.com/threads/ ... nity-2019-1.661975/


作者:Unity  
來源:Unity官方平臺
原地址:https://mp.weixin.qq.com/s/wy_c_wjNqvdm-4T8IKTZxQ

相關文章