汪晗,吳巧巧,張鵬,張俊
武漢工程大學(xué)計算機(jī)科學(xué)與工程學(xué)院,湖北 武漢 430205
基于四元數(shù)插值的虛擬人運(yùn)動建模及實現(xiàn)
汪晗,吳巧巧,張鵬,張俊*
武漢工程大學(xué)計算機(jī)科學(xué)與工程學(xué)院,湖北武漢430205
針對關(guān)鍵幀動畫中,歐拉角描述旋轉(zhuǎn)運(yùn)動時自由度的丟失,提出了四元數(shù)插值方法來模擬人體運(yùn)動.首先根據(jù)人體結(jié)構(gòu)建立虛擬人骨架模型,其次模擬人體運(yùn)動建立虛擬人運(yùn)動模型,然后基于XML表示法建立關(guān)鍵幀數(shù)據(jù)模型來存儲關(guān)鍵幀信息,最后采用四元數(shù)方法對給定的關(guān)鍵幀進(jìn)行插值生成中間幀,并基于OpenGL實現(xiàn)可視化編程.實驗結(jié)果表明,該方法能對虛擬人的運(yùn)動過程進(jìn)行平滑地插值,該算法框架具有通用性,通過修改關(guān)鍵幀信息可以很好地模擬人體的不同運(yùn)動.
歐拉角;虛擬人運(yùn)動;四元數(shù)插值
近年來計算機(jī)性能逐步提高,計算機(jī)圖形學(xué)和計算機(jī)視覺等領(lǐng)域的理論研究取得重大突破,虛擬現(xiàn)實技術(shù)的發(fā)展也上了一個新的臺階,三維人物動畫是虛擬現(xiàn)實中重要的組成部分,在影視、游戲娛樂、醫(yī)療、航天事業(yè),建筑仿真等多個領(lǐng)域的應(yīng)用越來越廣泛.
針對以上現(xiàn)狀,提出對虛擬人運(yùn)動的研究.三維人物動畫制作中最關(guān)鍵的技術(shù)是人體建模技術(shù)和運(yùn)動控制技術(shù)[1],本文是基于D-H機(jī)器人表示方法[2],建立人體的骨架模型,基于四元數(shù)插值理論,建立人體行走模型,并利用OpenGL編程技術(shù),實現(xiàn)人體行走過程的可視化.
關(guān)鍵幀動畫中,一個剛性物體的運(yùn)動其實就是一個旋轉(zhuǎn)運(yùn)動和平移運(yùn)動的復(fù)合運(yùn)動,可以表示為一個旋轉(zhuǎn)矩陣和一個平移向量,旋轉(zhuǎn)矩陣用來確定物體的朝向,平移向量確定物體的位置,然后根據(jù)物體在各關(guān)鍵幀處的狀態(tài)通過插值來實現(xiàn)它的運(yùn)動.
在計算機(jī)動畫領(lǐng)域,國內(nèi)從事相關(guān)技術(shù)的研究人員不斷增加,《中國圖形圖像學(xué)報》、《計算機(jī)輔助設(shè)計與圖形學(xué)報》等國內(nèi)學(xué)術(shù)期刊以及China?graph等國內(nèi)學(xué)術(shù)會議都為國內(nèi)研究開發(fā)人員提供了很好的交流機(jī)會,浙江大學(xué)的CAD&CG國家重點(diǎn)實驗室更是在這一領(lǐng)域起著重要帶頭作用[3].中國科學(xué)院的王兆其等人做了大量關(guān)于運(yùn)動生成和控制、人體行為交互等方面的研究,應(yīng)用人體運(yùn)動合成技術(shù)實現(xiàn)了人體行為交互的主要工作,并利用其研究成果在聾啞人手語交互、人體行走等方面做了大量應(yīng)用[4].在國外,由蒙特利爾大學(xué)Thalmann領(lǐng)導(dǎo)的LIG實驗室是在研究人體動畫領(lǐng)域里的一支比較著名的團(tuán)隊.LIG實驗室主要從事運(yùn)動控制系統(tǒng)、運(yùn)動捕獲[5]、人體平衡控制、人體建模及變形[6]、人的動作[7]、基于網(wǎng)絡(luò)的人體運(yùn)動以及碰撞檢測技術(shù)等方面的研究.
2.1線性插值
對于兩個四元數(shù)q1,q2其線性插值方程為
q(t)=q1+t·(q2-q1)(0≤t≤1)
其中t為插值變量,當(dāng)t從0變化到1時,即可實現(xiàn)從q1到q2的變化.在虛擬人運(yùn)動動畫中,對應(yīng)于從一幀到另一幀的過渡.
2.2球面插值
對于兩個四元數(shù)q1,q2,其球面插值方程為
其中t為插值變量,θ為q1、q2之間的夾角,cos θ=dot(q1,q2),這里需要指出的是,計算夾角余弦值時q1,q2需化成單位四元數(shù).
2.3四元數(shù)與歐拉角的轉(zhuǎn)換
設(shè)繞x,y,z軸旋轉(zhuǎn)的歐拉角分別為θ1,θ2,θ3,對應(yīng)的四元數(shù)為qθ1,qθ2,qθ3,由式Rq(P)=pqp-1對應(yīng)的四元數(shù)為[8]則有:
在虛擬人動畫中,認(rèn)為骨骼在運(yùn)動中不發(fā)生形變,即把人體當(dāng)做是剛體.但是人體與多剛體系統(tǒng)又有很大區(qū)別,人體的骨骼之間都受到關(guān)節(jié)的連帶約束,而且每個關(guān)節(jié)的旋轉(zhuǎn)范圍都受到一定的約束,由此人體的建模方法有別于一般的物體.
3.1人體骨架模型
由于本文主要研究的是虛擬人行走時使用四元數(shù)做旋轉(zhuǎn)插值生成動作,考慮的主要是虛擬人的行走的過程中骨骼在關(guān)節(jié)位置的旋轉(zhuǎn),不注重人體繪制是否逼真,所以為了簡化繪制工作,直接將人體所有的部分使用相應(yīng)大小的立方體代替.簡化的人體模型如圖1所示.整個人體是由骨骼和關(guān)節(jié)交替形成,關(guān)節(jié)是骨骼的旋轉(zhuǎn)點(diǎn),而且父關(guān)節(jié)的轉(zhuǎn)動會帶動子骨骼的轉(zhuǎn)動,也會帶動子關(guān)節(jié)的轉(zhuǎn)動,總而言之,就是整個人體骨架系統(tǒng)是有層次的,其實這種方法是D-H方法的簡化版.
圖1 虛擬人體模型Fig.1Model of virtual human body
3.2關(guān)節(jié)空間相對位置的計算
首先是對人體的每個關(guān)節(jié)空間的局部坐標(biāo)系進(jìn)行定義:坐標(biāo)原點(diǎn)都是關(guān)節(jié)點(diǎn),坐標(biāo)系建立在每個關(guān)節(jié)處,規(guī)定坐標(biāo)軸在人體初始狀態(tài)的時候,X軸正方向向左,Y軸正方向向上,Z軸正方向向前,可以看得出初始狀態(tài)的時候他們的坐標(biāo)軸都是同世界坐標(biāo)系的坐標(biāo)軸平行的.設(shè)關(guān)節(jié)點(diǎn)i和i+1,相鄰關(guān)節(jié)空間轉(zhuǎn)化過程如圖2所示[9].
首先,將i+1關(guān)節(jié)空間的坐標(biāo)原點(diǎn)即關(guān)節(jié)點(diǎn)平移到關(guān)節(jié)點(diǎn)i的位置,這一過程記為trans(i,i+1)-1,這個時候相鄰的兩個關(guān)節(jié)空間的坐標(biāo)原點(diǎn)重合.
然后將關(guān)節(jié)i+1的坐標(biāo)系左旋轉(zhuǎn)使其和關(guān)節(jié)i的坐標(biāo)空間的坐標(biāo)軸平行,這個過程記為rotate(i,i+1)-1,這時兩個坐標(biāo)系實際上是重合的.
圖2 相鄰關(guān)節(jié)空間坐標(biāo)變換Fig.2Space coordinates transformation of adjacent joint
這個變換坐標(biāo)系的過程沒有改變點(diǎn)的位置,所以關(guān)節(jié)空間i+1中的點(diǎn)要做這個過程的逆過程,先做rotate(i)旋轉(zhuǎn),再做trans(i,i+1)的平移,這個過程用矩陣Ti+1i表示如下:
3.3骨骼和關(guān)節(jié)的連接結(jié)構(gòu)
人體骨架系統(tǒng)是由骨骼和關(guān)節(jié)相互連接組成的,骨骼和關(guān)節(jié)之間使用指針鏈接,而且這個鏈接是有序的,關(guān)節(jié)所指向的骨骼的轉(zhuǎn)動是被關(guān)節(jié)控制的,骨骼所指向的關(guān)節(jié)是依附在該骨骼上的,整個人體的關(guān)節(jié)鏈接順序如圖3所示[10].在圖中有一個root關(guān)節(jié),這個關(guān)節(jié)是附加的,但這個關(guān)節(jié)在計算世界坐標(biāo)和關(guān)節(jié)空間的相對坐標(biāo)的轉(zhuǎn)換時很重要,如果將人體行走的過程看作人體的中心高度不變,那么可認(rèn)為世界坐標(biāo)是關(guān)節(jié)0的坐標(biāo)空間,這里的人體中心root就是關(guān)節(jié)1,root關(guān)節(jié)自然成為人體其他關(guān)節(jié)空間和世界坐標(biāo)轉(zhuǎn)換的橋梁.一般來說這個root關(guān)節(jié)可以設(shè)置到人體的任何位置,但是最好的位置是世界坐標(biāo)中不動的點(diǎn)或者是一個簡單運(yùn)動的點(diǎn).
圖3 關(guān)節(jié)和骨骼連接圖Fig.3Connection diagram of joints and bones
3.4運(yùn)動模型
行走是人類最基本的運(yùn)動之一,也是描述虛擬人所不可缺少的.在設(shè)計虛擬運(yùn)動系統(tǒng)時,考慮建立基于關(guān)鍵幀的虛擬人行走動畫,并且對這個人體有一定的可控制性,比如控制行走的速度、方向.正是基于這樣的思考,關(guān)注于設(shè)計一個可生成水平面上直線,運(yùn)動的虛擬人運(yùn)動系統(tǒng),并且盡量保證運(yùn)動的實時性、連續(xù)性和真實性.
走路的姿勢可分解成開始抬左手邁右腿向后揮右手,當(dāng)右腿落地后收回左手,揮右手,左腿向前幾個過程,這是一個循環(huán)且重復(fù)的過程,也意味著制作出一套最小的循環(huán)動作即可.不考慮外界的干擾,人體運(yùn)動可以簡化成骨骼在關(guān)節(jié)處做相對旋轉(zhuǎn),知道人體的一個端點(diǎn)在世界坐標(biāo)系中的位置,整個人體的其他部分就可以通過計算得到它在世界坐標(biāo)系中的位置.人體行走除了自身的關(guān)節(jié)之間的旋轉(zhuǎn),還有自身的平移運(yùn)動,這個效果可以通過控制移動速度來實現(xiàn).
研究表明,在正常行走速度下,幾乎所有“行走運(yùn)動時刻”都具有固定的區(qū)間值.人體的平行移動是依靠每次單腳著地,以那只腳為旋轉(zhuǎn)點(diǎn),以臀關(guān)節(jié)的高度為半徑,以一個角度為θ的角度做旋轉(zhuǎn),然后再以另一只腳,以同樣的方式做旋轉(zhuǎn)運(yùn)動,這種過程才導(dǎo)致了整個身體的平行移動,如圖4所示.人體移動的速度V,一步最大距離DC和完成一個周期的基本運(yùn)動時間TC之間的計算公式如下[11]:
其中H表示LHip(RHip)關(guān)節(jié)到LAnkle(RAnkle)關(guān)節(jié)的距離,θmin表示lupperleg骨骼與人體中心垂直向下直線的最小夾角,θmax表示Rupperleg骨骼與人體中心垂直向下直線的最大夾角.
圖4 人體步行分析Fig.4Analysis of human walking
人體行走可認(rèn)為人體的中心高度一直沒變,那么就以人體的中心作為第1個關(guān)節(jié),而世界坐標(biāo)空間當(dāng)做是第0個關(guān)節(jié)的坐標(biāo)空間,當(dāng)然這是虛擬的,方便人體更好的映射到世界坐標(biāo)系中,現(xiàn)做如下假設(shè),人體行走的平面在XOY平面,頭頂?shù)姆较蚴荶軸的正方向.在第1個關(guān)節(jié)的關(guān)節(jié)空間是這樣定義的,同樣是以頭頂為Z軸的正方向,前方是Y軸正方向,左邊是X軸的正方向.這樣人體中第i個關(guān)節(jié)空間的點(diǎn)可以很方便地轉(zhuǎn)換到世界坐標(biāo)系中,設(shè)關(guān)節(jié)i中的曲線q′t(t),qi(t)是世界坐標(biāo)系中表示的曲線[12],轉(zhuǎn)化公式如下:
如果人體是做直線運(yùn)動那么曲線q1(t)= q1(0)+vt.
4.1選取關(guān)鍵幀
關(guān)鍵幀是物體運(yùn)動或變化中的關(guān)鍵動作所處的那一幀,是運(yùn)動狀態(tài)即將改變的臨界點(diǎn),如手臂揮手的過程當(dāng)手臂揮到最大的幅度的時候,如果不把最大值的位置作為關(guān)鍵幀,使用插值算法是不可能計算出一個位置大于插值端點(diǎn)的值,就不能很好地模擬人行走的運(yùn)動.關(guān)鍵幀中記錄的是在某個時刻人體的所有關(guān)節(jié)的角位移,從這一幀到下一幀過渡過程持續(xù)的時間等.
考慮到程序可能需要對關(guān)鍵幀的一些值反復(fù)測試,不適合固化到程序里面,所以關(guān)鍵幀的信息是存放在xml格式文件中,然后程序在初始化的時候讀取關(guān)鍵幀的信息構(gòu)造關(guān)鍵幀對象.使用xml格式很顯然可讀性更強(qiáng),而且這些數(shù)據(jù)的組織方式和與模型的結(jié)構(gòu)是一致的.
4.2生成中間幀
雖然給出了人體模型,以及人體骨骼和關(guān)節(jié)的組織方式,但還是不能讓模型動起來,還需要給出關(guān)鍵幀和在關(guān)鍵幀之間插值算法.常用的四元數(shù)插值方法有線性插值、球面線性插值和樣條插值等,針對不同的情形采用不同的插值算法,使人體行走看起來連貫、平滑.本文中除neckbase和root關(guān)節(jié)采用線性插值外,由于其它關(guān)節(jié)涉及到的都是關(guān)節(jié)的旋轉(zhuǎn),所以插值是旋轉(zhuǎn)插值.根據(jù)上面的分析人體的行走過程是一個循環(huán),只需要得到一個運(yùn)動周期的關(guān)鍵幀信息就可以了.
中間幀中的關(guān)節(jié)角可由關(guān)鍵幀中關(guān)節(jié)角通過插值而得.在表示關(guān)節(jié)的旋轉(zhuǎn)時是用歐拉角表示的,歐拉角表示起來比四元數(shù)簡單,而且更容易看出虛擬人在運(yùn)動過程中各關(guān)節(jié)的角度變化.但是如果采用歐拉角插值的方法,會產(chǎn)生病態(tài)現(xiàn)象[15],因為歐拉角的3個角度沒有直接關(guān)系.為了避免這種問題的出現(xiàn),可以在插值前將歐拉角轉(zhuǎn)化成四元數(shù),再采用四元數(shù)方法完成插值,這樣就可以生成一系列的中間幀,形成一個動態(tài)的過程,即動畫.
在Visual Studio 2013環(huán)境下,利用OpenGL圖形庫可視化編程,實現(xiàn)基于四元數(shù)插值的虛擬人行走動畫.如圖5所示,給出了由給定關(guān)鍵幀生成中間幀的截圖,實驗表明,生成的中間幀過渡自然,較好的模擬了人體行走過程.該方法可以和運(yùn)動學(xué)方法相結(jié)合來實現(xiàn)虛擬人的運(yùn)動控制,也可以用于三維動畫制作.
在基于四元數(shù)插值的虛擬人行走模型的基礎(chǔ)上,修改關(guān)鍵幀中的各關(guān)節(jié)的角位移信息,可得到虛擬人跑動過程動畫,如圖6所示.可以看出,該模型較好的模擬了虛擬人跑動過程,該算法框架具有通用性.
圖5 虛擬人行走動畫Fig.5Walking animation of virtual human
圖6 虛擬人跑動畫Fig.6Running animation of virtual human
以上介紹的基于四元數(shù)插值虛擬人運(yùn)動模型,實現(xiàn)了由給定關(guān)鍵幀生成中間幀的方法,且生成的中間幀過渡平滑.但本文中虛擬人的運(yùn)動是簡單的直線運(yùn)動,只能進(jìn)行簡單的向左向右轉(zhuǎn)向.本文以人體的中心作為根節(jié)點(diǎn)來連接人體各關(guān)節(jié),人體的重心高度保持不變,不能模擬人體起跳過程等,利用逆運(yùn)動學(xué)方法模擬虛擬人運(yùn)動和模擬復(fù)雜運(yùn)動將是下一步的研究工作.
[1]BADLER N,BINDIGANAVALE R.Animation control for real-time virtual humans[J].Communications of the ACM,1999,42(8):64-73.
[2]DENAVITJ,HARTENBERGRS.Akinematic notation for lower-pair mechanisms based on matrices[J].A SME journal of applied mechanics,1955,22(2):215-221.
[3]李丹.計算機(jī)動畫中運(yùn)動生成與控制問題研究[D].武漢:華中科技大學(xué),2008.
[4]王兆其.虛擬人合成研究綜述[J].中國科學(xué)院研究生院學(xué)報,2000,17(2):89-98. WANG Z Q.Study on synthesis of virtual human[J]. Journal of the graduate school of the Chinese academy of sciences,2000,17(2):89-98.
[5]HEGRON G,PALAMIDESE P,THALMANN D.Motion control in animation,simulation and visualization[J]. Computer graphics forum,1989,8(4):347-352.
[6]THALMANN D,BOULIC R.Combined direct and inverse kinematic control for articulated figure motion editing[J].Computer graphics forum,1992,11(4):189-202.
[7]THALMANN N M,THALMANN D.Complex models for visualizing synthetic actors[J].IEEE computergraphics and application,1991,11(9):32-44.
[8]金小剛,彭群生.四元數(shù)及其在計算機(jī)動畫中的應(yīng)用[J].計算機(jī)輔助設(shè)計與圖形學(xué)學(xué)報,1994,7(3):174-181. JIN X G,PENG Q S.Quaternion and its application in computer animation[J],Journal of computer-aided design&computer graphics,1994,7(3):174-183.
[9]何懷青,洪炳羅.一種虛擬人運(yùn)動擬合算法[J].電子學(xué)報,2001,29(8):1107-1109. HE H Q,HONG B L.A motion fitting algorithm for virtual humans[J].Acta electronica sinica,2001,29(8):1107-1109.
[10]陳麗,王越超,李斌.蛇形機(jī)器人研究現(xiàn)況與進(jìn)展[J].機(jī)器人,2002,24(6):559-563. CHEN L,WANG Y C,LI B.Present state and future direction towards snake-robot research[J].Robot,2002,24(6):559-563.
[11]KELLY S D,MURRAY R M.Geometric phases and robotic locomotion[J].Journal of robotic systems,1995,12(6):417-431.
[12]JANZEN L,METAXAS D.Recursive dynamics and optimal control techniques for human motion planning[J].Multibody system dynamics,2002,8(4):433-458.
[13]孔德慧,王立春,鄭重雨.增強(qiáng)骨骼動畫運(yùn)動細(xì)節(jié)的關(guān)鍵幀插值方法[J].北京工業(yè)大學(xué)學(xué)報,2011,37(8):1255-1260. KONG D H,WANG L C,ZHENG Z Y.A key frame interpolationmethodenhancingmotiondetailsof skeletal animation[J].Journal of Beijing university of technology,2011,37(8):1225-1260.
[14]沈軍行,孫守遷,潘云鶴.從運(yùn)動捕獲數(shù)據(jù)中提取關(guān)鍵幀[J].計算機(jī)輔助設(shè)計與圖形學(xué)學(xué)報,2004,16(5):719-723. SHEN J X,SUN S Q,PAN Y H.Key-frame extraction from motion capture data[J].Journal of computeraided design&computer graphics,2004,16(5):719-723.
[15]李全棟,陳樹越,張微.一種改進(jìn)的無監(jiān)督聚類的關(guān)鍵幀提取算法[J].應(yīng)用光學(xué),2010,31(5):741-744. LI Q D,CHEN S Y,ZHANG W.Improved algorithm forkeyframeextractionbasedonunsupervised clustering[J].Journal of applied optics,2010,31(5):741-744.
本文編輯:陳小平
Modeling and Implementation of Virtual Human Movement Based on Quaternion Interpolation
WANG Han,WU Qiaoqiao,ZHANG Peng,ZHANG Jun*
School of Computer Science and Engineering,Wuhan Institute of Technology,Wuhan 430205,China
Aimed at the loss of freedom degree in rotary motion depiction by Euler angles in keyframe anima?tion,the quaternion interpolation method was proposed to simulate human motion.Firstly,a virtual human skel?eton model was established according to the human body structure.Secondly,we simulated human body move?ment to establish a virtual human motion model.Then a key frame data model based on XML representation was established to store the keyframe information.Finally,we used quaternion method to interpolate for a given key frame to generate intermediate frames,and implemented its visual programming based on OpenGL.The results show that the method can interpolate smoothly in the process of virtual human motion,and the algorithm frame?work is versatile,in which different motions of human body can be well simulated by modifying the key frame information.
Euler angles;virtual human movement;quaternion interpolation
TP391.41
A
10.3969/j.issn.1674?2869.2016.05.019
1674-2869(2016)05-0511-06
2016-03-04
武漢工程校長基金項目(2015049);2015年省級大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目(201510490027)
汪晗.E-mail:1135962588@qq.com
張俊,碩士,副教授.E-mail:wity@263.net