列 夫,蔡建平
(北京工業大學 軟件學院,北京100124)
數字皮影骨骼動畫技術是指在傳統骨骼動畫基礎上,通過分析皮影戲表演及皮影角色運動,進而提出一套適用于數字皮影動畫制作的骨骼動畫技術,使得人們可以借此來創作皮影動畫作品或在虛擬空間中進行皮影戲表演。當前,骨骼動畫技術以及運動控制的研究取得了很大進展,也產生了很多實用的技術。在骨骼動畫的研究中,動畫控制的研究與應用是一個十分重要的方向,其主要有正運動學、逆運動學、動力學等。
本文主要探討了數字皮影動畫的骨骼構建和逆動力學在二維動畫中的主要算法。通過對它們進行歸納、比較和實驗分析,提出一種數字皮影動畫中的二維逆動力學解決方法。該技術的研究有助于提高數字皮影動畫的真實性以及降低皮影動畫制作難度。
在傳統皮影戲表演中,皮影角色大致分為人物、四足動物、蛇形動物以及騎乘人物這幾類,由于皮影角色類型復雜,不利于動畫制作人員批次量、便捷的完成皮影建模。因此有必要對各個皮影角色類型進行總結、歸納,從而制定一套完整的皮影骨骼插件。
由于皮影的逆運動學特性,因此本章骨骼劃分工作便基于逆運動學末端點數量進行換分。
(1)三桿型皮影骨骼:該類型骨骼最大特點是整體運動靠頸部的支撐點帶動,手部細節動畫則由雙手末端點即IK末端效應器控制,是典型的兩段式骨骼動畫
(2)五桿型皮影骨骼:該類型骨骼大體上與三桿型皮影骨骼相同,唯一的區別在于該類型皮影的腿部有膝關節,因此腿部動畫也構成了逆運動學控制。該類型骨骼一共有5個控制點,即雙手、雙腿、頸部,其中頸部與三桿型相同,負責整體運動。
(3)手持道具型皮影骨骼:該類型的骨骼最大點為雙手固定在一個道具上(如:長矛、棍棒等)。通過對道具的控制即可實現對雙手的連帶運動效果,而雙手的運動仍舊是逆運動學,只是末端點轉移到道具上。
(4)條型骨骼:條型骨骼的特點在于該類型皮影角色通常都是蛇、龍、昆蟲等生物。主軀干骨骼貫穿整個模型,由多鏈IK控制,一般有首、尾、中段3個末端控制點。
(5)四足動物骨骼:在傳統皮影表演中四足動物類型的角色通常不具末端控制器,只有整體位移的屬性,因此四足動物的骨骼相對簡單,一般只要考慮頭部保留一個骨骼即可,負責頭部的旋轉。
皮影骨骼類型劃分見表1。

?
為了更好的模擬出皮影運動效果,首先對傳統皮影戲角色的運動進行分析。傳統皮影戲角色通常由以下幾個部位連接而成組成,其中包括:頭部、胸部、腹部、大腿、小腿、大臂、小臂及手。皮影的控制一般分為兩種,三桿控制及五桿控制。其中三桿控制的特點是每個皮影角色都有三根控制桿,主要的控制桿位于皮影角色的頸部,用來控制皮影角色的整體位移。其他兩根控制桿分別固定在皮影角色的腕部,控制皮影的上肢運動,其顯著特點為逆動力學控制。皮影角色腿部不設置控制桿,在皮影角色的運動中靠上半身的位移連帶產生動作。五桿控制的特點是皮影角色具有小腿部分及膝關節。兩支控制桿分別控制小腿末端,以實現特定的步行動作[1]。
通過對皮影角色的觀察,我們可以發現傳統皮影角色的構建特點,即構造簡單,同時各個部位由單點連接,具有極大的靈活性。由于皮影的運動具有逆運動學的特點,若要在數字平臺上模擬數字皮影角色,必須對皮影角色的結構進行一定程度的簡化及抽象。同時,針對應用的實際需要和表演需求,簡化骨骼模型,這樣就可以大幅提高數字皮影動畫的易用性及控制性,更加便于實際使用。
在骨骼動畫中關節不但是連接皮影各部分的重要節點,而且也帶動皮影角色各部位運動,起到連接及帶動作用。在骨骼動畫中關節通常被模擬為球鉸,因此其活動范圍沒有限制[2]。但皮影部分關節實際活動范圍嚴格意義僅僅是在二維空間,因此這里要引入自由度概念加以說明。
自由度是關于旋轉的屬性,而且自由度與維度密切相關。舉例來說,一個自由度的關節(OneDOF),例如膝蓋關節,其只能前后彎曲,只有一個旋轉方向,這種旋轉運動可視為繞X軸的轉動;兩個自由度的關節(TwoDOF),例如人的手腕,兩個自由度是擺動自由度。肘關節的兩個旋轉自由度的其中一個是自轉,另一個是繞X軸的擺動自由度。所以兩自由度的關節有兩種形式;3個自由度的關節(ThreeDOF),例如肩關節,鉸鏈模擬通常模擬3個自由度的關節,但是轉動仍然會有范圍的制約[3]。
在實際的皮影表演中,皮影角色運動通常是以二維的形式展現給觀眾,但是在實際幕后的操控中,皮影角色會在相對于幕布的方向上發生位移,進而產生模糊、投影以及形變效果。針對這一特點,我們對數字皮影各個骨骼的自由度做以下分析:
頭部:在傳統皮影表演中頭部會有點頭及后視的效果,因此頭部骨骼定義為兩個自由度
手臂:傳統皮影戲中手臂運動通常為單軸旋轉,因此定義為一個自由度
腹部:在實際表演中皮影角色腹部沒有控制桿,由上肢連帶運動,但在激烈打斗的表演中會產生微小的Z軸旋轉,因此定義為兩個自由度
腿部:與手臂運動相同,可定義為一個自由度
以上分析如表2所示

表2 皮影骨骼編號
在骨骼動畫技術中,模型被抽象描述為骨骼模型,人們通過對骨骼的控制進而帶動模型運動[4]。針對這一技術特點,我們將數字皮影角色模型抽象為骨骼模型,將皮影的各個部分轉變為對應骨骼,并將骨骼關節抽象為有向線段,連接形成數字皮影骨骼結構的表達方法。為了更加直觀的描述骨骼模型,需要對骨骼進行一個編號處理。
本文主要通過分析數字皮影的運動學特性,結合二維逆運動學,在數字平臺上展開數字皮影運動控制技術的研究。因此,涉及到三桿型皮影的腿部自由擺動效果不做研究,保留其骨骼用于控制動畫,腿部特殊動作可由動畫特效及物理引擎實現。
由于數字皮影的上肢及下肢關節在骨骼運動中起到至關重要的作用,因而需要生成大臂、小臂以及下肢的腿部骨骼。在皮影重心附近,保留控制腿部運動的腿骨部分,并將皮影角色的根骨骼定義在腹部處。在頸部與頭部的結合處生成一根頸部骨骼,向下連接胸部骨骼,用以區分上肢旋轉及頭部旋轉運動。其余各部位均抽象成對應骨骼,用以動畫控制。最后得到的皮影骨骼模型共包括17個骨骼,如圖1所示。相應的關節及骨骼定義如表2所示。

圖1 骨骼結構樹
通過以上分析研究,皮影抽象骨骼模型基本構架已經有了大體輪廓,進一步工作就是確定各個骨骼之間的關系。在骨骼動畫技術中,相鄰骨骼之間有上下級關系,即父子關系[5]。在正運動學中上級骨骼運動帶動下級骨骼運動,下級骨骼運動不會帶動上級骨骼運動。而在逆運動學中,則情況相反[6]。在傳統類雙足動物骨骼構建的辦法中,一般將骨骼跟節點設置在胯骨部位,以控制模型的整體運動[7]。然而在傳統皮影戲中,整體控制桿位于皮影胸部位置,重心靠上以便更好的帶來表演效果。在數字皮影動畫中,由于不考慮皮影整體的物理仿真,重心位置便顯得不是十分重要,因此我們將根節點設置在腹部位置。從根節點向上一直到頭部骨骼,各骨骼依次為子骨骼。從胸部到手部也為同樣道理。沿根節點向下則是腿部的父子關系。
通過以上內容的分析,本文在Maya動畫平臺上通過內置MEL語言搭建皮影骨骼。數字皮影骨骼模型將皮影結構抽象成點和線,骨骼結構表示為點、線之間的連接關系,因而十分直觀方便。本文研究的數字皮影骨骼模型如圖2所示。

圖2 數字皮影骨骼
本文二維IK解決辦法是在傳統的CCD(cyclic-coordinate descent)算法基礎上,針對二維骨骼動畫提出的一種解決二維IK問題改進辦法,它的基本思想是由末端骨骼開始,通過反復迭代的方法,每個骨骼依次對目標點做逼近式旋轉,進而末端效應器不斷接近目標點,最終達到目標位置。
Cyclic-Coordinate Descent算法是一個帶有啟發式的迭代搜索算法,通過每次改變一個參數的數值逐步使關節位移、旋轉進而更加接近目標,每次的迭代過程會涉及末端骨骼至根部骨骼即對末端至根部進行一次遍歷。每個骨骼關節參數立即被修改為最小化目標函數[8]。CCD算法的核心在于將多鏈骨骼問題轉化為單個骨骼求解問題進而簡化了骨骼計算的復雜程度,而求出每個目標函數最小化問題容易解決,可以通過解析法逐一解決,因此每一步的迭代相當快捷[9]。當求得各個骨骼關節的參數后,將其代入正運動學方程求得末端效器和每個關節的位置[10]。
然而CCD算法在面對二維IK問題時并不能很好的解決問題。首先,數字皮影動畫為二維動畫,傳統CCD算法中存在無解情況以及誤差。其次,針對數字皮影動畫的實時需求,傳統CCD算法有計算資源浪費的問題,三維骨骼動畫計算產生無用計算消耗。
針對這兩個問題,本文提出在傳統CCD算法思想的基礎上。提出一種適用于數字皮影骨骼動畫運動的二維IK解決方法,減少誤差并解決計算資源浪費問題。本解決辦法的基本思想是:
(1)在每一次的迭代解析計算中只求解一個自由度的旋轉角度。通過點乘原理求出骨骼旋轉角度的余弦值,進而得出骨骼旋轉角度;
(2)通過叉乘原理求出骨骼的旋轉方向。
3.2.1 求出各骨骼的旋轉角度
在T點(目標)與J點(骨骼關節)間建立一條最優參考線,骨骼B1以關節點J為圓心旋轉,使得E(末端效應器)與最優參考線相交,得出旋轉角度α,如圖3所示。在T點(目標)與J點(骨骼關節)間建立一條新的最優參考線,骨骼B2以J為圓心旋轉,B2骨骼帶動B1旋轉,使E與參考線相交得出B2骨骼旋轉角度,如圖4所示。以此類推對每個骨骼旋轉,以得出α值。
通過點乘理論我們可知
(e-j)·(t-j)=|e-t|·|t-j|cosα其中,e為末端效應器E的位置,j為骨骼關節點J的位置,t為目標點T的位置。
由此可得

3.2.2 求出各骨骼的旋轉方向


上述步驟可有效求得余弦值,進而得出骨骼的旋轉角度,但余弦值不能提供骨骼的旋轉方向,即逆時針或順時針的問題。因此下一步的主要工作是如何解決骨骼旋轉方向的問題。
由叉乘原理,我們可知

本文研究基于右手法則,其中n為垂直與A、B的單位向量。θ為向量A與向量B間的夾角,其取值范圍為[0,π],如圖5所示。

圖5 A向量與B向量的夾角

若我們將二維向量理解為xy平面上的三維向量,則通過叉乘理論我們可得出一個指向于z軸的三維向量

從叉乘的幾何解釋可知珤A×珝B=|A|×|B|sinθn中的單位向量n在z軸上非正即負

由此,nz的值定義為1或-1,x、y坐標上的值為零。
通過以上公式,針對坐標旋轉方向我們提取出z軸部分進行單獨討論

基于右手法則,當x軸指向右時y軸指向上方,z軸指向前方。通過該原理,我們可根據nz的值來判斷骨骼按順時針或逆時針來旋轉。當nz在z軸上為負時,骨骼按順時針旋轉;當nz在z軸上為正時,骨骼按逆時針旋轉。用數學描述為當nz=-1時順時針;當nz=1時逆時針。
由于θ的取值為[0,π],當nz=1時sin(θ)的值只能為正,即骨骼按逆時針旋轉。而當nz=-1時有

sin(θ)值為負,即骨骼按順時針旋轉。
由此我們引入一個新的參數β,為向量A與向量B的夾角,其取值范圍為[-π,π],由此可得
AxBy-AyBx=|A|×|B|sinθnz=|A|×|B|sinβ
將圖2中的數值帶入方程可得

當sinβ為正時骨骼按逆時針旋轉,當sinβ為負時順時針旋轉。
實驗1:本文在Maya平臺上給出一個例子測試本文的算法效果,其中骨骼構建部分通過調用Maya API完成數字皮影骨骼插件。二維IK解決辦法則由MEL語言在Maya平臺實現。這個例子以實現甩臂的逆運動學求解為例,如圖6所示,通過插件實現數字皮影角色骨骼和IK控制器的位置并給予旋轉及位移變量。通過本本研究辦法對數字皮影骨骼逆向運動的求解,輸出一段逼真的動畫。該實驗證明,本方法能真實的模擬皮影動畫,滿足動畫制作的需求。

圖6 實驗-甩臂
實驗2:本實驗在實驗室內的Intel Core2 2.66GHz CPU,3.50GB內存,NVIDIA GeForce 8600GT顯卡的高檔微機上對傳統CCD算法以及本文研究方法進行試驗。本文算法與CCD算法一樣都屬于迭代法,用于解決交互操作的逆運動學問題。它們都設法把每一步迭代的代價都降為最小。在接近運動學奇異點時,都能保證數值上的穩定。圖7中黑點代表的是本文算法,圓圈代表的是傳統CCD算法。從圖7中(a)側我們可以看出,在精度要求相同的情況下,傳統CCD算法曲線呈指數趨勢,效率明顯低于本文算法。由此可知本文算法的效率高一些。而在圖7中(b)側可知,在對兩種算法迭代速度的對比中,本文算法速度較為平均,明顯低于傳統CCD算法,可以得知本文算法效率較高。
實驗3:本實驗通過使用兩種算法實現單個手臂運動,并對產生的動畫效果進行對比,觀察結果是否出現失真以及較大誤差情況。其中,圖8為傳統CCD算法實現的手臂運動,圖9為本文算法實現的手臂運動。由由兩圖的對比可以看出,當只有皮影角色手臂運動的前提下。本文算法要比傳統CCD算法準確性高,也沒有出現失真以及畫面不合理的情況。

圖7 兩種算法的比較


本文針對數字皮影戲的特點,通過對皮影角色的分析,詳細介紹了數字皮影角色骨骼的構建方法。針對二維骨骼逆運動學的問題,提出一種有效的解決辦法。本方法在傳統CCD算法的基礎上,對解算過程進行簡化和降維處理。實驗結果表明,本辦法有效的節約了計算資源并提高動畫演示的真實度。研究的下一步工作是針對本辦法無法解決目標點與骨骼同在一條線兒無解的問題。
[1]GAO Lujing,CAI Jianping.Analysis and implementation of features of character’s action in shadowgraph animation[J].Computer Engineering and Design,2010,31(10):2335-2342(in Chinese).[高璐靜,蔡建平.皮影動畫中人物運動的特性分析與實現[J].計算機工程與設計,2010,31(10):2335-2342.]
[2]YUAN Hui-jie.Skeletal animation technology research and realization[D].Chengdu:University of Electronic Science and Technology of China,2010(in Chinese).[袁會杰.骨骼動畫技術的研究與實現[D].成都:電子科技大學,2010.]
[3]Jeff Land.Making kine more flexible[J].Game Developer,1998,5(3):15-22.
[4]DING Peng,JIA Yuele,ZHANG Jing,et al.Design and implementation of skinned mesh animation[J].Technology and Market,2009,16(10):11-12(in Chinese).[丁鵬,賈月樂,張靜,等.骨骼蒙皮動畫設計與實現[J].技術與市場,2009,16(10):11-12.]
[5]JI Zhuo’er,ZHANG Jingqiao.Programmable GPU technology in skeletal animations and their comparison[J].Computer Engineering and Design,2008,29(21):5550-5554(in Chinese).[季卓爾,張景嶠.基于可編程圖形處理器的骨骼動畫算法及其比較[J].計算機工程與設計,2008,29(21):5550-5554.]
[6]FENG Bo.Motion control technology in 3Dcharacter animation[J].Science & Technology Information,2007(27):95-96(in Chinese).[馮波.三維角色動畫中運動控制的主要技術[J].科技資訊,2007(27):95-96.]
[7]LI Qingling,SHANG Xinhua,WU Haiyan.Research on motion control of human skeleton based on kinematics[J].Journal of Xinyang Agricultural College,2008,18(2):128-129(in Chinese).[李清玲,商信華,吳海燕.基于運動學的骨骼動畫控制研究[J].信陽農業高等專科學校學報,2008,18(2):128-129.]
[8]Chris Welman.Inverse kinematics and geometric constrains for articulated figure manipulation[D].Simon Fraser University,1993.
[9]LI Chunxia,YANG Kejian,LI Bo.A modeling of human skeleton and a method of solving IK problem[J].Journal of Wuhan University of Technology,2005,12(6):815-819(in Chinese).[李春霞,楊克儉,李波.人體骨骼模型的簡歷及IK問題的一種解決方式[J].武漢理工大學學報,2005,12(6):815-819.]
[10]YANG Xiaotao,YANG Kejian.CCD algorithm and its application and realization in inverse kinematics[J].Journal of Chongqing Institute of Technology(Natural Science),2008,22(5):65-68(in Chinese).[陽小濤,楊克儉.CCD算法及其在逆運動學中的應用與實現[J].云南民族大學學報(自然科學版),2008,22(5):65-68.]