摘 要: 反向動力學中CCD算法具有局限性,分析幾何法應用于多自由度骨骼具有不可收斂性,而微分求解主要運用于小幅度的變化, 因此利用雅可比矩陣使骨骼具有收斂性,將分析幾何法與微分求解法融合,實驗結果表明,IK反向動力學算法的改進很有意義。
關鍵詞: 3D圖形學; IK反向動力學; 微分求解算法
肢體運動學的研究往往混略掉人們自身運動的特性或者引起運動的真正原因。參考文獻[1]綜述了隨著計算機的發展,虛擬人技術不斷改進,新興的3D場景圖建模是計算機圖形學處理三維世界發展的多層次數據結構,但由于機器人等運動學模型受外部約束以及內部節點的限制,很難實現一些舒服的姿勢和動作。參考文獻[2]主要對虛擬人技術的運動算法實現進行了研究;參考文獻[3]也對虛擬人技術運動算法做了研究,并提出反向動力學的思想,但都未對反向動力學算法帶來的問題進行解決。反向動力學是被開發來解決這些運動約束的圖形處理方法的分支,以模型葉節點為起點來計算根節點信息的方法[4]。
簡單地說,IK(Inverse Kinematics)算法就是首先確定末端骨骼的位置信息,根據末端骨骼的位置信息反向推導出該骨骼繼承鏈上N級父親骨骼的位置信息。通過這種方法指定角色的“姿勢”,即首先把渲染的角色表示成骨骼關節結構,所謂的姿勢表示成由此構成的夾角,包括狀態向量θ以及節點的方向向量和位置。對于IK算法,基本公式是:
θ=f-1(X) (1)
其中,X通常是最末端骨骼位置信息,用此算法來計算滿足條件的θ。
參考文獻[5]闡述了IK算法在計算機動畫中的應用,并重點研究了7個自由度骨骼的運動,但對奇異點病態方程的問題沒有提出有效的解決方法。
當前的計算機圖形學中,所有角色動畫簡單地由正向動力學算法計算已經不能滿足動畫逼真性的需求,一些游戲中正向動力學遇到很多問題,即使花大量時間也是很難去消除或協調的[6]。針對時效的問題,參考文獻[6]對反向動力學算法應用在多處理器中進行了研究,對速降法也提供了一些支持。近些年,隨著實時算法的發展,反向動力學越來越顯得不可缺少。本文主要通過幾何分析法與微分求解法的融合,使IK反向動力學算法有效摒棄CCD速降法帶來的算法不收斂性。CCD速降法對每個關節的限制會造成關節限制的制約束的合并,尤其是末端鏈僅僅產生移動,使畫面產生不自然的感覺。針對這一問題,首先通過幾何分析法來確定關節位置,局部采用微分求解法,并且在微分求解過程中引入稀疏矩陣來尋找并處理奇異點的問題。參考文獻[7]、[8]提及的渲染技術,利用HLSL語言進行畫面的模擬。
1 幾何分析法算法的研究
實現IK算法,目前應用最多的是CCD(Cyclic Coordinate Descent)。這是一個迭代算法,通過多次迭代向目標解逐步接近,通常5~10次就會得到很好的效果,絕大多數情況下骨骼的目標位置都會收斂到理想位置。但通常CCD算法的每一步都需要啟發式的構造,并且骨骼之間的關節不能任意角度旋轉。另一個問題是,當所有骨骼在一條直線上時,每一個骨骼都會認為自身不再需要旋轉,CCD的迭代算法會失效。相對于CCD算法,常用到的幾何分析法能夠很快地得到骨骼的目標位置信息,可以一步算出目標位置,有效地摒棄了CCD算法迭代的效率問題。但是幾何分析法也存在不足,即對于結構稍微比較復雜的框架骨骼,會得到無數多的解。
在IK反向動力學算法中,對于一個N級骨骼鏈,其N級父親骨骼信息T是相對于N-1級子骨骼信息T相對運動,相對于末端骨骼信息,可簡單表示為:
這里的α是斜率。對于關節權重的αi取值為一確定值矩陣的一列,并且值∈(0,1),確保?駐H的收斂性。然而,并非所有骨骼都可以旋轉無限制角度,以三鏈臂為例,θ1∈[-90,90],θ2∈[0,110],θ3∈[-20,20]。對每個不同位置的關節控制在可允許的范圍內,這樣,計算出的位置幅度范圍小,得出值的過程較快,并且同時確保了骨架姿勢的逼真性。
4 實驗結果
利用C#代碼、Direct9.0和HLSL渲染技術,在Visual Studio 2010環境下進行實驗,部分代碼如下(包括位置信息、骨骼權重和法線位置等)。
VS_OUTPUT Transform(
float4 inputPosition : POSITION,
float3 inputNormal : NORMAL,
float2 inputTexCoord :TEXCOORD0,
float4 weights : TEXCOORD1,
float4 bones : TEXCOORD2
)
{
VS_OUTPUT Out = (VS_OUTPUT)0;
float4 pos=mul(inputPosition, Local);
pos=mul(pos,BoneMatrices[(int)bones.x])*weights.x+
mul(pos,BoneMatrices[(int)bones.y])*weights.y+
mul(pos, BoneMatrices[(int)bones.z])*weights.z+
mul(pos,BoneMatrices[(int)bones.w])*weights.w;
Out.Pos = mul(pos, WorldViewProjection);
Out.Normal =mul(inputNormal,World);
Out.Texcoord = inputTexCoord;
Out.EyeDir = EyePosition - Out.Pos;
Out.Direction = LightPosition -Out.Pos;
return Out;
}
實驗結果如圖1所示。
表1為算法改進前后的實驗結果的對比。
由表1可以看出,本文算法具有很大的改進。然而,這些數據不是每次實驗都是這樣的,在實際操作中會有許多其他客觀因素加入,但只要能夠得出更好的實驗結果,證明改進還是正確的。由實驗分析可知,CCD速降法會得出更多錯誤位置,這是由于計算角度位置的幅度范圍太大造成的,而幾何分析法和微分求解法完美地融合就可以大幅度減小這些錯誤。此外,對中值期望角的改進求法在摒棄了復雜計算過程的同時,在小范圍內的求解計算并沒有增加過多的錯誤位置信息,還減少了計算時間,因此,改進算法很有意義。
在很多應用中,IK算法只是算取骨架的部分骨骼,主骨架位置還是由正向動力學算法求出。隨著3D圖像學的不斷進步以及實時算法的發展和改進,IK反向動力學會得到越來越廣的方面應用,也極大地推進了虛擬場景的動畫研究。分析幾何法可以快速地確定關節角度的大致位置,微分求解法可以小范圍內確保關節角度的最優,二者的結合可以達到揚長避短的效果,也使反向動力學算法更優化。
參考文獻
[1] 王兆其.虛擬人合成研究綜述[J]. 中國科學院研究生院報,2000,17(2):89-98.
[2] 洪炳熔, 賀懷清. 虛擬人的步行和跑步運動方法的實現[J]. 計算機應用研究,2000(11):15-19.
[3] 徐孟,孫守遷,潘云鶴.虛擬人運動控制技術的研究[J]. 系統仿真學報,2003,15(3):338-342.
[4] TOLANI D, GOSWANMI A, BALDER N I. Real-time inverse kinematics techniques for anthropomorphic limbs[J]. Graphical Models,2000,62(5):353-88.
[5] MACIEJEWSKI A A. Dealing with the ill-conditioned equations of motion for articulated figures[J]. Computer Graphics and Applications,2002,10(3):63-71.
[6] Chen Chun. Efficient scheduling algorithms for robot inverse dynamics computation on a multiprocessor system[J].Systems,Man and Cybernetics, 2002,18(5):729-743.
[7] DRIEMYER T, RAY M. 渲染技術超級手冊[M].費廣正,譯.北京:人民郵電出版社,2007.
[8] 向世明.Visual C++數字圖像與圖形處理[M].北京:電子工業出版社,2002.