骨骼動畫反向動力學 IK 的實現

2022-06-18 10:54:12 字數 1080 閱讀 6447

反向動力學,inverse kinematics,簡稱ik。簡單地說,由父骨骼的方位和子骨骼的相對變換得到子骨骼的方位,稱為正向動力學(forward kinematics,fk);而ik則是先確定子骨骼的方位,反向推導出其繼承鏈上n級父骨骼方位的方法。

ik在遊戲裡最常見的應用是foot placement,就是當角色站在乙個不平的表面上(台階,斜坡)時,自動調整兩腳的高低(當然,同時會影響小腿和大腿的姿態)以便看上去腳是真正「踩」在地面上的,而不是浮在空氣中或者陷入地面以下。

如果不用ik的話,要解決這個問題就只能為所有可能的地形起伏情況製作不同的角色動作,其工作量是不可想象的。另外的應用就是象《波斯王子》,《古墓麗影》這樣的遊戲,經常會需要主角向前躍起然後抓住一樣東西,比如一根旗桿。主角的彈跳能力通常是固定的,遊戲也不可能要求玩家控制角色在乙個精確的特定地點朝乙個精確的特定方向跳躍,一般都是允許乙個誤差範圍。那麼問題就出現了,當主角飛到旗桿附近時,可能旗桿在頭頂上,也可能在肩膀之下,或者偏左偏右都有可能,這時ik就可以使主角的雙手自然地伸向旗桿,不管它在**(當然,必須physically

possible,也就是在生理學上夠得著的距離內)。

對所有受ik影響的骨骼,按從子骨骼到父骨骼的順序執行迭代操作:旋轉當前骨骼,使當前骨骼位置到目標骨骼的連線指向ik目標位置。由於所有骨骼是從乙個特定狀態出發開始ik計算,所得到的結果也會比較穩定。通常5~10次迭代之後就能得到很好的結果。

目前為止,指定骨骼到達指定位置已經沒問題了,但通常這是不夠的。如果是人體骨骼的話,不是所有的關節都可以向任意方向旋轉,所以我們必須對骨骼的旋轉加以限制,比如肘關節實際上只有乙個軸的自由度,而且不能向後彎曲。由於通常骨骼動畫都是用四元數來表示旋轉,而關節的角度限制只能用尤拉角來表示,所以在迭代過程中每次算出骨骼的旋轉後都要轉成尤拉角,看是否超過極限值,如果超過則需要校正,然後再轉回四元數進行計算。

限制了旋轉角之後,結果看起來就很好了。但是還有乙個細節需要注意,當所有需要ik控制的骨骼正好在一條直線上,而ik目標位置正好在也落在這條直線上時(如下圖),演算法就會失敗,因為不論迭代多少次,每乙個骨骼都會認為自己不需要旋轉。所以乙個小技巧是,如果發現骨骼鏈「很直」,就向骨骼允許的任意方向加一些細微的旋轉;或者乾脆在骨骼的限制角度資料中就禁止完全「伸直」。

骨骼動畫反向動力學 IK 的實現

反向動力學,inverse kinematics,簡稱ik。簡單地說,由父骨骼的方位和子骨骼的相對變換得到子骨骼的方位,稱為正向動力學 forward kinematics,fk 而ik則是先確定子骨骼的方位,反向推導出其繼承鏈上n級父骨骼方位的方法。ik在遊戲裡最常見的應用是foot placem...

「過載列車動力學的研究」獲得巨大成功

過載列車動力學的研究 獲得巨大成功 文 鏡湖客 1986年12月,我校接到鐵道部科技局的通知,我校正在開展的 過載列車動力學研究 專案被正式列入 七五 期間國家重點科技攻關專案。過載列車動力學研究,屬於我國過載及組合列車成套技術研究的乙個子專案,是發展過載列車的關鍵技術。我校機械工程系孫竹生教授 孫...

酶促反應動力學 酶在作物中的作用

高效性 孢酶的催化效率比無機催化劑更高,使得更快 專一性 一種酶只能催化一種或一類底物,如蛋白酶只能催化成多肽 二肽酶可催化各種 形成的二肽 溫和性 是指酶所催化的化學反應一般是在較溫和的條件下進行的。酶 enzyme 是由活細胞產生的 對其底物具有高度特異性和高度催化效能的蛋白質或rna。酶是一類...