UE5 雙手握劍的實現 IK
前言
什么是IK?
UE官方給我們提供了很多對于IK處理的節點,比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等,但是看到這,很多人就好奇了,什么是IK?
首先我們來看看虛幻小白人的骨骼
前向知識
它其實是由多個骨骼構成的,具體的原理就是,我們有一個最基礎的Root點,它存儲了自身的Transform信息,后面再添加它的子節點,里面存儲的是相對于它父類的Transform變化,意味著,我們只需要用父類的Transform乘以子類的Transform,就可以得到子類真正的位置,意味著我們每個骨骼只需要存儲一個Transform信息,就可以完成對每個骨骼位置信息的計算。
FK
正向運動學(Forward kinematics, FK):Forward Kinematics是一種計算骨骼動畫的方法。具體來說,它通過直接設置和調整每個骨骼關節的位置和旋轉,來確定骨架的姿態和動畫。每個關節的位置和旋轉會影響到其子關節的位置和姿態,形成一個鏈式反應。例如,如果你調整角色手臂的上臂位置,前臂和手的姿態也會隨之改變。
IK
逆向運動學(Inverse kinematics, IK):Inverse Kinematics是一種計算骨骼動畫的方法,與Forward Kinematics(FK,前向運動學)相對。IK的工作原理是通過設定一個目標位置,然后反向計算各個關節的角度和位置,以使骨骼末端(通常是手或腳)達到這個目標位置。例如,當你設定角色的手觸碰某個位置時,IK會自動計算手臂和手的各個關節如何調整來實現這一動作。
我們通常用它來處理雙手握劍,有一個手握不住劍的問題,或者是拿槍時候,手部位置不對,比如下圖,紅色部分手掌就沒有抓主劍柄的位置,這時候,我們可通過IK來處理這個問題。
雙骨骼IK(Two Bone IK)
Two Bone IK是一種用于控制和計算骨骼動畫的逆向運動學(IK)解算器,專門用于處理兩段骨骼鏈的情況,例如上臂和前臂(手臂)或者大腿和小腿(腿部)。
IKBone:就是大家選定的骨骼,需要綁定到某個位置,比如我們雙手握劍時候,右手是正常抓握劍的,但是左手不是,這時候,我們需要在左手找一個骨骼節點,作為我們需要綁定到目標點的位置。
Effector Location:也就是我們目標位置,手掌企圖抓住的位置。
Joint Target Location:設置中間關節(如肘部)的目標位置,用于控制關節的彎曲方向。
Alpha:就是用于和原始動畫做lerp的值,1的時候,就完全是經過雙骨骼IK變換之后的動畫,為0則是原始動畫。當然,你也可以把它修改成bool類型,用開關的形式,但是如果是這樣的話,原始動畫,和IK計算后的動畫差距很大的話,它可能會閃現到新的位置。
如果Effector Location與Joint Target Location是固定值,那么你選中這個節點,可以在動畫藍圖里面去拖拽這個倆個變量的位置。
FABRIK
它其實與雙骨骼IK相似,但是它不用傳中間點,它會幫你計算(自己處理的中間位置骨骼,可能不太理想就可以考慮采用FABRIK)
Effector Transform:和雙骨骼IK一樣,只不過它變成了目標位置的Transform。
Effector Target:比如此處我們想要左手握住劍,那么這時候,把左手的骨骼選中就行。
Tip Bone:骨骼鏈尖端的骨骼,比如我們整個手臂的骨骼鏈,手位置就是這個骨骼鏈的尖端,比如下圖是Hand_l。
Root Bone:根骨骼,比如下圖是spine_01。
如果Effector Transform是固定值,那么你選中這個節點,可以在動畫藍圖里面去拖拽這個變量的位置。
其他IK就不講了,需要的去查一下文檔就行。