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
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
互相交流!