untiy 反向動力學插件 Final IK

一般遊戲中的人物的動畫都是通過加載一個骨骼動畫,來表現人物動作.   動作由遊戲動畫師,在3d軟件中調整人物骨架在不同時間的姿勢, 生成連續的動畫. 或是由動作捕捉,記錄人的動作,最終導入遊戲引擎內.

這兩種方式雖然製作過程方式不一樣,但最終對於遊戲引擎來說,沒有什麼太大的區別-----兩者的動作都是固定,不能改變.    但是在遊戲中,這種類型的骨骼動畫常常不能滿足需求,比如: 一個撿起地面上道具的動畫,在遊戲中道具不一定在地面上,而是在桌子上,或是放在牆上,.而我們不可能爲每種情況都去做一個對應位置的撿道具的動畫,在這個時候,我們就需要一種新的方法來,來驅動全身的骨骼,去完成"撿"的動作.   而這就要用到Final IK這個插件.此外對於沒有骨骼的物體組合,比如機械臂,也可以實現非常自然的動作. 

爲什麼要用這個插件:

  • 相比較unity的自帶IK系統,final ik 設置更加方便,用途更廣.有很多情景化的應用,如針對和物體交互的動作系統.
  • 用好這個插件,就可以使用少量的固定動畫,在此基礎上融合IK 動作,做出千變萬化的交互動作!  對於製作rpg,fps遊戲非常有用.
  • VR遊戲也是一個非常有趣的應用方向: 現在的第一人稱的vr遊戲基本沒有身體,只有一雙手,如果通過vr手柄和VR眼鏡的定位信息,來驅動遊戲中玩家人物的全身骨骼,近似得同步現實中玩家的動作,一旦實現,便會大大提高代入感.

Biped IK:比Unity自帶IK多一個頭部IK控制

 

Full Body Biped IK:上面的強化版,控制部位更多(手肘、肩部、腰部、膝部、胯部等)

Time step:等於0,每幀(LastUpdate)解析一次IK,大於0,則是固定時間,固定的頻率解析IK

Fix Transforms:打鉤後,即使在人物沒有播放動作的情況下,也會解析骨骼IK,建議勾上

References:角色骨骼,添加此腳本後,自動識別骨骼

 

Weight:Animator動畫和Ik動畫融合的權重,0表示不收IK動畫影響,

Iterations:IK動畫的解析次數,數值爲0,禁用Ik,數值越大IK動畫越平滑,在角色離得比較遠時,可以降低該數值,優化性能。

 

Body,:身體的IK的控制器,通過這些IK控制器的位置來影響全身骨骼。

Target:Ik控制器引用的物體,Ik控制器同步該物體的位置和旋轉角度,

Postion Weight:同步引用物體的位置權重,數值爲0,不受target的影響,數值1,完全被target控制

UseThighs:是否腿部下體

Spine Stiffness:脊椎僵硬值,數值1脊椎不會彎曲

PullbodyVertical:手部IK影響身體縱向的權重

PullBodyHorizontal:手部IK影響身體橫向的權重

 

Spine Iterations:脊椎骨骼的解算次數

Spline Twist Weight:胸部朝向對扭轉脊椎的影響權重,(比較耗性能,沒什麼脊椎扭轉,設爲0)

Maintain HeadRot:保持頭部轉向不受其他IK影響

 

LeftArm:左手左肩的IK的控制器,通過這些IK控制器的位置來影響全身骨骼。

Rotation Weight:Target的朝向對IK控制器的影響權重,爲1時:手部的轉向和Target一直,胳膊會受到影響而扭曲

Maintain Relative Pos:保持胳膊和胸的相對位置一直,如果是腿部則和臀部一致

 

pull:對身體的拉力,如果其他手腳的Ik控制器的Pull值爲0,則全身上下都受此IK的拉力影響

Reach:收穫叫IK控制器位置器頂部關節(關節和臀)的吸力,值越大,頂部關節越解決他

Push:手或腳IK控制器位置離其頂部關節比較近是,會對頂部關節產生一個排斥力,使兩者保持距

 

Bend Goal:膝蓋或肘部關節朝向的方向

Bend Goal Weight : Bend Goal影響朝向的權重

 

Mapping Weight:整個臂膀或腿部受IK影響值

Maintain Hand Rot:保持手或腳的旋轉值不變

步驟:

a、給模型添加該組件腳本

b、填入根節點

c、要控制某個IK就增加權重,運行時就出現有一個立方形控制器,通過它可控制對應的IK

d、腳本控制:

public FullBodyBipedIK ik;

public FullBodyBipedEffector effector;//枚舉變量,自己選擇

ik.solver.leftHandEffector.position = leftHandTarget.position;

//給右手IK控制點賦位置,即讓右手移動到指定點

ik.solver.GetEffector(effector).position = target.position;

//給指定部位賦目標

 

Grounder FBBIK:(使角色在上下樓梯的時候正確走上每一個臺階)

步驟:

a、給模型添加該組件

b、參數填寫模型對象

c、模型要添加剛體及碰撞器

d、運行後,模型腳部的網格會貼合地形(腳掌會保持平面,但是會根據地形有不同的傾斜)

e、只需要行走動畫,就可以呈現出在各種地形(樓梯、斜坡)上行走的動畫效果

 

Grounder IK:效果同上,爲未知足數的模型可用,足數可自定義

步驟:

a、給模型的每條腿添加limb IK,並從腿根到腳填入骨骼參數

b、給模型添加grounderIK組件,並填入所有腿、模型網格對象及角色控制器對象

c、自定義行走控制器,運行後可在任意地形上行走

 

Aim IK:目標(提供一個目標的位置)

Time step:爲0,每幀解算一次IK動作,<0,便會以固定頻率來解算IK

Fix Transforms:如果打鉤,即使在沒有播放動畫的情況下也解算IK,建議勾上

Target:註釋目標

PoleTarget:被約束注視的物體,它的y軸,(或有下方Pole Axis參數定義的軸向)所指向的目標

Aim Transfrom:被約束注視的物體

Aim Axis:注視的軸向

Pole Axis:垂直於注視方向的軸向

Weight:注視的權重,0表示不注視

Pole Weight:垂直注視軸向的權重

Tolerance:如果超過上一次動作偏差的角度,便會停止解算IK,如果爲0,則將在該幀內解算max  lteration的數值次數

Max Iteration:每幀最多解算次數,如果Tolerance爲0,該參數有效,如(如果要得到更平滑的IK動作,可以調高該數值)

ClampWeight:限制骨骼注視的影響範圍,如果數值爲0,即注視目標在身後180度位置,脊椎依然會轉過去注視,但是會有識別錯誤,爲0.5:注視有效範圍在正前方180內,爲1:沒有注視效果

Clamp Smoothing:識別範圍有過度效果,不會因爲剛剛超過Clampweight值,便馬上轉向

Use Rotation Limits:如果clampweight不爲0;這在每幀的結算時會限定骨骼的轉向

Bone:此處填入的骨骼不能有分支,如同填入兩隻手臂的不被允許的,同時要按照層級關係從上到下填入列表,(如順序:脊椎1,脊椎2,左肩,左手肘,左手),也可以將被約束注視目標(AimTransfrom)填入

weight:控制每個骨骼影響的權重,一般越靠近臀部的脊椎受影響越小。

a、在模型頭節點處添加Aim空物體並reset

b、給模型添加Aim IK組件,並填上Aim Transform及根脊椎到頭的4節關節(可以設置權重)

c、創建目標target(空物體)於臉的正前方,

d、在模型上添加空物體Pin,位置與target一致

e、給target添加Aim Boxing腳本,參數爲模型對象及pin


f、運行後移動target,模型的臉帶動上半身的身體並始終朝向target

 

 

Hinge Joint:鎖鏈關節(幾個物體相連接)

 

 

LookAtIK:讓模型朝向某點,作爲頭部朝向時優於Aim IK,而且容易配合biped ik使用。

步驟:

a、給模型添加LookAtIK組件

b、添加頭部

c、從根部到頸部添加spine

d、運行

 

Limb IK:(肢體)讓身體上的肢體朝一個方向

3個點,連接3節骨骼,末端點帶動2節骨骼,注意添加Bend Goal控制收縮時的方向

1.在Bone位置處添加骨骼(一段骨骼)

2.在Bend Goal添加一個目標作爲骨骼的方向

 

Interaction Target:交互目標(肢體和物體進行交互)

1.把想要交互的肢體複製一遍;

2.把複製的肢體上添加以上組件;

3.在把想要交互的物體裏創建空物體;

4.創建好的空物體裏面放入複製的肢體交互部分;

5.在組件上的Effector Type裏選擇你要和物體交互的肢體;

6.在pivot裏把現在的父物體拖進去;

7.在交互的物體上添加 Interaction Object組件;

 

 

Interaction Object:交互物體(通常放在交互的物體上)

Other Look At Target:    朝向的目標

Other Targets Root:要執行的人

 

Interaction Trigger:交互觸發

 

 

7.運行

(要交互的人身上要有Interaction System組件纔可以交互)

Interaction System:相互作用系統,可以獲取指定的ik並控制,呈現出相向移動的效果(通常放在交互的人身上)

步驟:

a、創建空物體Box,添加Interaction object腳本
b、截取手掌骨骼,添加Inateraction Target腳本,設置參數後旋轉手掌角度,此爲觸碰對象平面時的擺放角度
c、將手掌添加到Box下
d、模型添加Interaction System
e、添加控制腳本:
interactionSystem.StartInteraction(FullBodyBipedEffector.RightHand, box, bool);
//執行事件

 

CCDIK:Limb IK的增強版,可以連接多個骨骼,可以用來製作尾巴、繩索、機械手臂等

(遊戲物體可以沒有骨骼)

 

FABRIK:類似CCDIK,但是更顯柔韌的效果,可以用來製作鋼條、樹幹等

 

 

這個組件是放在父物體裏面的,控制父物體的旋轉

Axis:X(控制父物體的x旋轉),Y(控制父物體的y旋轉),Z(控制父物體的z旋轉)

 

 

Rotation Limit Hinge:旋轉限制樞紐(一般用在機械手臂上,主要放在兩個骨架交互的地方,因爲要控制旋轉度數)

Axis :X(控制x的旋轉),Y(控制y的旋轉),Z(控制z的旋轉)

Use Limite:取消組件所在物體的控制

min:最小度數

max:最大度數

各種例子的解析:

a、拳擊:有專門的FBIK Boxing腳本控制,手部權重隨曲線變化,收拳時爲谷底,擊中目標時爲峯值

b、握手、推拉、拾取:用到相互作用系統

c、駕駛:有專門的FBIK Driving Rig腳本控制

d、機器腳:應用角度限制和關節限制

e、擊飛效果:手持長棍,揮擊目標,可以擊飛目標;應用到Motion Absorb的2個腳本。

f、接吻:有專門的Kissing Rig腳本

g、推牆:專門的Touch Walls腳本

 

 

這個插件適合很多場合,之前有做過第三人稱射擊題材的遊戲就有用到過IK插件,

有說的不對的地方可以私密我或者加QQ羣:636926481 

互相交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章