IK/FK之全面了解


很久以前就想寫這么一個帖子,但是覺得要寫起來需要配圖比較麻煩,但是又經常看到有人對IK/FK有錯誤的認識。所以決定還是開始寫,慢慢去完善和補充。我想這個帖子看下來,應該可以讓美術以及不了解IK/FK的技術美術有個正確的概念。

IK是Inverse Kinematics,逆向運動或者叫反向運動。與之相對應的是FK全名Forward Kinematics,正向運動也可以叫前向運動。

在美術的思維中,正向運動就是父物體帶動子物體,子物體無法影響父物體,反向運動則相反,子物體可以帶動父物體,而父物體對子物體的影響僅限於參與整個IK骨骼鏈的根骨骼,其他的骨骼無法影響子物體。

如果想要正確理解逆向運動,比如明白為什么不存在所謂的“無縫切換”。平時說的無縫切換是指切換的時候沒有抖動,但許多人以為,“無縫切換”就是無需切換,自動換用正向或逆向。要正確理解逆向,首先要換個方式去理解什么是正向以及什么是逆向。正向,就是從物體的變化求結果;逆向則是從結果求物體的變化。

比如說一個球在 0 0 0這個位置,正向運動就是向x方向移動10個單位,結果就是10 0 0。而逆向則是目標位置是10 0 0,這個球移動到該位置。

這個例子看起來似乎正向和反向沒什么差別,不過如果是一個復雜一點的結構的話。比如說人的胳膊,正向運動就是上臂旋轉四十五度,小臂旋轉四十五度,然后手腕處在一個位置,假設是 10 10 10。這里需要上臂和小臂的旋轉值。逆向呢,則是直接給出手腕的目標點 10 10 10,然后計算出小臂和上臂的旋轉值,當然在三維空間里這個的結果是無限多個,所以,動畫軟件里的逆向需要有個朝向約束。

為什么會需要有逆向運動和正向運動,比如說一個引體向上的動作,手的位置是固定的,身體被胳膊帶動,逆向運動很符合的子物體帶動父物體的需求。再比如一個人揮舞一塊板磚,如果只調節板磚或手腕的位置就可以完成整個胳膊的動畫是很便捷的。而正向運動呢,比如說一個掰手腕的動作,是在一個平面上,以肘部為支點以上臂的朝向為軸向旋轉,這個動作用逆向是非常難做的,不信的大可以用逆向做一下看看。二者都有其很方便的場合而且有時候一個很方便的時候恰恰是另一個很麻煩的時候。

 

我想現在應該已經可以理解為什么沒有“無縫切換”,二者的動畫計算方式是不同的,不可能同時使用兩種計算方式,在某一時刻整個骨骼鏈要么是正向運動要么是逆向運動。如果要切換二者,必須有一個參數里控制當前是正向還是逆向,如果是正向就從父級一層層變換下來,如果是逆向,就從目標體推算當前骨骼正確的變換。

 

這個帖子我會慢慢補充,后面會介紹軟件里的切換以及切換的原理,然后會介紹IK的一種比較快速的算法。有問題的請留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM