方向
摘 要:本文主要針對計算機動畫中的關節動畫,以關節鏈結構為基本單位架構骨架系統,對于角色動畫中關節動畫的一些關鍵算法進行了分析探討。
關鍵詞:關節動畫;關鍵算法;逆運動法
三維計算機動畫中,基于人體運動的角色動畫具有廣泛的應用前景,在影視制作、計算機游戲、廣告動畫設計、虛擬現實等諸多領域都有著重要的用途。關節動畫是計算機動畫中富有挑戰性的技術之一。在關節動畫中,以關節鏈結構為基本單位構架骨架系統,用運動學方法來控制運動。
計算機動畫一般包含四個重要的過程:造型,動畫,繪制和合成。計算機動畫中研究的首要內容是動畫,即生成物體的各種運動和變化,或者稱為運動控制。本文在研究關節動畫時,主要涉及的也只有動畫部分。
1 骨骼皮膚動畫
三維角色動畫本質上是擬人動畫——從運動考慮。它從誕生開始就得到廣泛的應用,并且在不同的應用領域有不同的技術要求。例如,在電影、仿真應用中,要求極具真實感的角色;而游戲、輔助訓練應用中,要求在保證速度的基礎上具有較好的真實感。不過相同的是運動控制和角色造型是角色動畫的關鍵和難點。
從角色造型過程中的分層角度可以把造型建模技術分為四種:桿狀模型,皮膚模型,骨骼皮膚模型和多層模型。根據角色表達方式一一建模技術的不同,角色動畫也可以分為:桿狀動畫,頂點動畫,骨骼皮膚動畫和多層模型動畫四種。
骨骼皮膚動畫包含兩部分信息:一是層次化骨架;另一個部分是蒙在骨架上的皮膚。用骨骼承載運動,用皮膚模型表達角色,再利用骨骼控制皮膚變形,就達到了角色動畫模擬的目的。
由于在骨骼皮膚動畫中,運動的控制實際上是對骨骼運動的控制。人體的整個骨架系統可以看作很多個關節鏈結構組成的N-元樹結構,或者說骨架系統可以分解為很多個相關聯的關節結構。因此,本文中的關節動畫和骨骼動畫在某種意義上是等價的。
2 骨架系統的建立和運動控制
關節鏈結構是由一系列依次相連的剛體連接而成的開鏈,兩剛體的連接點成為關節,連接兩相鄰關節的剛體成為鏈桿,可抽象看作一條線段。在計算機動畫中,一般把關節限制為旋轉關節,即相鄰的剛體在其連接關節處只能作相對旋轉運動,而不能做平移等其他運動。
在關節鏈結構中有兩個端點,關節鏈的起點為基結點,其自由末端為末端影響器;能夠完全確定關節鏈結構狀態所需要的獨立變量個數稱為自由度;關節鏈結構的所有可能形態的向量空間稱為狀態空間,其每一個向量定義一種形態。
建立運動方程:
其中,:關節鏈末端影響器關于世界坐標系的方位;:關節鏈結構的狀態向量。運動方程式關節鏈結構的顯式運動描述,根據提出的問題不同,有兩種求解方法,實際上是兩類問題的不同求解方法——正向運動學法(Forward kinematics)和逆向運動學法(Inverse Kinematics)。
我們得出了求解單鏈結構的一般方法,進而得出單鏈結構的運動控制。但是角色動畫中的骨架一般都不是單鏈結構,往往是很復雜的,而且是多分支關節結構的。采用的方法是把復雜的多分支骨架系統分解成若干個單鏈結構,即把骨架的求解問題轉化為單鏈結構問題來處理。
一般情況下,角色的骨架結構在一些關節處具有多個分枝,而所有的鏈桿在關節處形成了一個網狀結構。為此,我們把復雜骨架表達為一關節的樹狀層次結構,樹中每一結點均對應于一個關節。描述一個簡化之后的人體骨架樹層次結構。這樣的骨架樹結構中有一個根結點,從根節點出發遍歷骨架樹可以達到任何一個結點;從任何結點出發向上搜索可到任意一個結點,直至根結點。骨架的分解過程,實際上就是選擇若干結點對。每一對結點確定一條開得單鏈結構,其中一個結點作為基結點,另一個結點作為末端影響器。在選擇結點對時,要保證基結點在骨架樹結構中的層次高于末端影響器對應結點的層次。這樣骨架就被分解成若干個單鏈結結構,進而分別采用單鏈結構的運動控制來完成骨架系統的運動控制。根據樹狀層次結構,正運動學方法的求解仍然是顯示的;對于逆運動學方法,則需要采用分解方法來分別處理。在角色動畫的應用中,一般采用逆運動學方法。由于運動捕捉技術的發展,獲取人體骨架中各個狀態參數值是一件比較容易的事,而只設定末端影響器的位置參數對于動畫制作者來說很容易,相對設定整個骨架的狀態參數。
舉個例子來說明:動畫制作者設定右手骨運動后的位置參數,我們就可以選擇“髖骨(基結點)—脊椎骨—右肩骨—右上臂—右前臂—右手骨(末端影響器)”這條單鏈結構,用逆運動學方法處理問題。關節鏈結構是一種冗余結構,運動求解往往有多組解。如果采用單鏈結構,最終使得髖骨的狀態發生變化,則需要處理由于髖骨的狀態變化而影響的整個人體的狀態變化。假如動畫制作者同時限定了右肩骨狀態參數沒有變化,則選擇“右上臂(基結點)—右前臂—右手骨(末端影響器)”這條單鏈結構來處理問題。因此,在具體的問題求解中需要結合問題來選擇單鏈結構。
關節模型的定義如下:
class CAnimationBone
{……
private:
//本地位移
CVector4f mTranslation;
//本地旋轉,四元數格式
CVector4f mRotation;
//全局變換矩陣
float mGlobalMatrix[16];
//子節點數組
CAnimationBone*
mChildList;
//子節點的數目
Unsigned char
mNumChildren;
//父節點
CAnimationBone*
mParent;
……};
其中mTranslation是骨骼相對于它的父節點的位移,mRotation是骨骼相對于其父節點的旋轉。它們的幾何意義分別是骨骼的長度和兩塊骨骼之間關節的旋轉。mGlobalMatrix是骨骼相對于全局坐標系的變換矩陣。根據骨架的層次結構,結合骨架系統的知識可以建立一個人體的骨架系統。
3 結語
本文首先介紹了構成骨架系統的基本單元——關節鏈結構。在此基礎上建立骨架系統,從而得出骨架系統的運動求解的一般方法,即建立對整個骨架的運動控制方法。
參考文獻:
[1] 金小剛,鮑虎軍,彭群生.計算機動畫技術綜述[J].軟件學報,1997(04).
[2] Dave Shreiner . OpenGL編程指南[M].北京:機械工業出版社,2011.
[3] 宋人杰,史長東,崔衛麗.復雜場景中多細節層次模型生成新算法[J].東北電力大學學報,2014(3).