Final IK學習筆記3:FABRIK

FABRIK(Forward and Backward Reaching Inverse Kinematics)基于以下論文:
"FABRIK: A fast, iterative solver for the inverse kinematics problem."
Aristidou, A., Lasenby, J. Department of Engineering, University of Cambridge, Cambridge CB2 1PZ, UK.

FABRIK是一種啟發(fā)式求解器,可以與任意數(shù)量的骨骼和旋轉(zhuǎn)限制一起使用。它是一種基于前向和后向迭代運動的方法,通過沿著一條線到下一個關(guān)節(jié)找到一個關(guān)節(jié)的新位置。 FABRIK建議在位置空間而不是方向空間中解決IK問題,因此它在方向約束下表現(xiàn)出比CCD更少的連續(xù)性,即使已經(jīng)對原始論文中描述的約束方法進行了某些修改以提高求解器穩(wěn)定性。它通常比CCD達到目標所需的迭代次數(shù)少,但每次迭代的迭代速度較慢,尤其是應(yīng)用了旋轉(zhuǎn)限制的時候。

FABRIK非常靈活,它甚至允許在場景視圖中直接操作骨骼,并且解算器將重新進行。骨骼長度也可以在運行時更改。每幀監(jiān)視和驗證IK鏈在性能上會很昂貴,因此在運行時更改骨骼層次結(jié)構(gòu)必須通過在求解器上調(diào)用SetChain(Transform []層次結(jié)構(gòu))來完成。如果層次結(jié)構(gòu)有效,則SetChain返回true。

使用步驟:

  • 將FABRIK組件添加到骨骼層級中的第一個GameObject
  • 將骨骼層級中的所有元素分配給組件中的“Bones”
  • 按“Play”,將weight設(shè)置為1

改變目標位置:

public FABRIK fabrik;
void LateUpdate () {
    fabrik.solver.IKPosition = something;
}

在運行時添加FABRIK:

  • 通過腳本添加FABRIK組件
  • 調(diào)用FABRIK.solver.SetChain()

使用帶旋轉(zhuǎn)限制的FABRIK:
只需將一個旋轉(zhuǎn)限制組件(RotationLimitAngle,RotationLimitHinge,RotationLimitPolygonal或RotationLimitSpline)添加到已分配給FABRIK組件的“bone”的骨骼中。 請注意,每個旋轉(zhuǎn)限制都會降低求解器的穩(wěn)定性和連續(xù)性。 如果FABRIK無法在某些目標位置解決高度約束的鏈,那很可能不是FinalIK的錯誤,而是FABRIK算法的一個根本障礙(記住,沒有IK算法是完美的)。


FABRIK

組件參數(shù):

  • timeStep - 如果為零,將更新每個LateUpdate()中的求解器,用于骨骼帶動畫時的情況。 如果大于零,將按頻率更新,以便求解器將在所有對象上同時到達其目標。
  • fixTransforms - 如果為true,則將解算器使用的所有Transforms修復為每個Update中的初始狀態(tài)。 這可以防止沒有動畫骨骼和animator的剔除的問題,并且性能成本很低。

求解參數(shù):

  • target - 目標變換。 如果已分配,則解算器IKPosition將自動設(shè)置為目標的位置。
  • weight - 用于平滑地混合IK效果的求解器權(quán)重
  • tolerance - 距離最后到達位置的最小距離。 如果與先前到達位置的差異小于容差,則將停止求解。 如果容差為零,將迭代直到maxIterations。
  • maxIterations - 每幀最大迭代次數(shù)。 如果tolerance為0,則將一直迭代直到maxIterations
  • useRotationLimits - 如果為true,將使用附加到骨骼的任何RotationLimit組件
  • bones - 求解程序用于到達目標的骨骼。 所有骨骼都需要按降序排序(父節(jié)點優(yōu)先)。 可以在層次結(jié)構(gòu)中跳過骨骼,骨骼層次結(jié)構(gòu)不能分支,這意味著您無法從雙手分配骨骼。 weight決定了解算器計算時它的權(quán)重。


    FABRIK組件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容