孫利,谷曉英
(燕山大學,河北秦皇島 066004)
虛擬人運動是計算機動畫研究的前沿,如何使虛擬人運動得更逼真是研究的重點方向。基于運動捕捉的關鍵幀動畫雖然加快了速度,但是其無法應對環境變化而顯得死板僵硬的缺點也很明顯。利用基于物理描述的實時計算方法雖然可以使虛擬人運動顯得真實,但是其計算復雜、占用資源的缺點也限制了應用范圍[1]。
現階段虛擬人動畫基本分為骨骼動畫和頂點動畫兩種。其中制作網格模型活動畫面的最簡單方法[2]是頂點動畫,此種動畫是由關鍵幀技術產生的。每個關鍵幀都必須存儲所有頂點的位置,因此虛擬人動畫將耗費很大的存儲空間。此外頂點動畫的物理逼真度也難以驗證,可用骨骼動畫補充。運動的骨骼帶動蒙皮變形[3],相連骨骼的連續變化和位置改變可形成模型動畫。文中對骨架控制器進行存儲,矩陣對應節點,表達對初始位置做的旋轉和偏移量,通過此方式存儲空間得到了有效利用[4]。因此利用骨架動畫產生逼真虛擬人動畫的難點就在于對于骨架的運動控制[5]。為了更為逼真地模擬人的運動,先后將運動學、動力學、生物力學等多個學科的相關知識引入虛擬人運動的仿真中[6-7]。動力學原理是通過各關節上的力和力矩來計算運動的姿態[8],此方法可得到視覺上較為真實的運動。引入動力學后骨架動畫的物理逼真度有了很大改善,但計算復雜度也使得骨架動畫的應用受到極大的限制[9]。
現有的虛擬人運動研究主要有虛擬人行走[10]、虛擬人跑步、虛擬人游泳[11]和虛擬人行走與跑步之間的運動融合[12]。但是現有的模型都沒有考慮過地面的因素,在建立行走模型時都默認為是水平地面。這樣建立的模型在處理類似臺階這樣的有高度差的地形時就達不到逼真的效果。文中在分析現有的虛擬人行走模型的基礎上,對其面對有高度差的地形時的不足進行改進,提出一種基于反向動力學[13]的關鍵幀重載技術提高虛擬人運動的逼真度。
因為行走是一種周期性運動,所以研究虛擬人的行走,可以由一個周期來入手。又因為人體是左右對稱的,所以一個周期又可以拆分成兩個單步來進行考慮。可以通過腿部的骨架 (如圖1(a)所示)來直觀地演示行走的周期模型 (圖1(b)為從Z軸看去的側視圖)。

圖1 虛擬人腿骨簡圖
首先來看現行的虛擬人行走模型:
步驟0,靜止站立,如圖1(b)所示。
步驟1,保持身體的重心不動,先抬右腿,如圖2(a)所示。
步驟2,如圖2(b)所示,此圖表示在右腳未著地的情況下,為了保持重心力矩的平衡,身體的重心慢慢開始向前偏移。此過程為步驟 (1)和步驟(3)的中間動作,因而可以對這兩個步驟進行插值計算來表示。
步驟3,如圖2(c)所示,此時左腳還沒有離開地面,而右腳已經落地。
步驟4,左腳抬起,身體前傾,重心準備向前轉移。
步驟5,在左腳離開地面、右腿伸直的情況下,身體重心轉移到支撐腿正上方。

圖2 平地行走過程
這一模型將虛擬人行走的整個過程拆分成為5個階段,對這5個階段分別進行計算從而得出整個周期的運動,從而最終完成對虛擬人運動的仿真。可以根據這5個步驟制作預設關鍵幀來反映虛擬人的行走過程,這也是現在常用的方法。但是這一模型是建立在水平地面的基礎上的,因此當虛擬人上臺階時,它的運動模型與正常行走時有一定的相似性,其運動過程與在平地行走時基本一致,只有從步驟 (3)開始,由于臺階有高度差,所以關鍵幀開始出現不同,如圖3(a)所示。到了步驟4的時候雙腳的高度也有了明顯的差異,如圖3(b)所示。

圖3 臺階行走模擬圖
而臺階運動進行到步驟 (5)的時候除了根骨H有著明顯的高度變化之外,其結構又與正常步行時的骨骼結構基本一致 (圖4),只是這時虛擬人的重心高度上移了,如圖3(c)所示。

圖4 行走步驟4、5示意圖
綜上所述,平地步行與上臺階時的動作之間的差異主要出現在步驟3和步驟4,正是這兩個步驟的差異使得平地行走與上臺階的運動模型有了很大的不同,原有模型未能考慮這一點而使得由原有模型求出的虛擬人行走模型在上臺階時產生了一種“平滑上移”的現象,也就是人物的重心是順著臺階的傾斜平面滑動上移的,而不是一步一步隨著腳踩在臺階表面行走而按階段有規律地起伏,這大大降低了虛擬人臺階行走的逼真度。
如圖5所示,這是一個上臺階單步周期的腿部線骨骼的路線圖。從起始位置F0的腿直立狀態到在Fn位置完成一個單步周期時腿部再次回復到直立狀態。在這一過程中需要計算并獲取一幅中間幀用以替換掉在平地行走關鍵幀系統中對應的那幅預設關鍵幀。運動實驗表明:人體在上臺階時,在前腳沒有踩在臺階上之前,人體的重心基本是不動的。只有在腳踩在地面之前很短的時間內才開始大幅度移動重心,并由前腿發力開始提升重心,因此可以簡化模型認為在腳沒有落地前重心是不動的。
如圖5中所示,根據臺階的高度h和臺階的寬度s,以及虛擬人的腿長數據l1、l2,得到了端點F的坐標 (X+s,Y+h,Z)和髖骨坐標 (X,Y+l1+l2,Z),根據這兩個坐標以及大腿長度l1和小腿長度l2,可以聯立方程組公式 (1)和公式 (2)來求解膝關節的坐標:


圖5 步驟3在臺階行走時的變形
根據這樣的公式獲取到的坐標點有可能不是唯一的,這時就需要根據膝關節活動角度的約束條件來確定唯一值。
在分別獲取雙腿膝關節、雙腿腳踝和重心 (髖關節)這5個點的坐標后,可以根據這5個點的坐標繪制出雙腿在該時間點上的關鍵幀,即上臺階過程步驟3的對應關鍵幀;然后再將該關鍵幀替換掉預制關鍵幀中的步驟3,再進行插值計算就得到了與實際環境相適應的動畫效果。
算法1:對于相應的步驟3的關鍵幀進行符合實際環境的重繪
輸入:臺階高度h,臺階寬度s,大腿長度l1,小腿長度l2,該關鍵幀對應的時間t,以及該時間點的坐標點 (x,y)。
輸出:該時間點的對應的重繪過的關鍵幀newframe1.model,并將這一model替換掉原有的關鍵幀組中的該時間點的關鍵幀數據。
Redraw(h,s,l1,l2,x,y){//只對步驟 3 所對應的關鍵幀進行重繪


算法描述:Math()方法是計算關節點的算法,簡單的計算可以采用前文所述的方法,也可以使用反向動力學計算的方法由時間點確定該關鍵幀。將這一方法獨立出來可以在使用中取得更靈活的應用。Model()方法則是在計算關鍵幀完成后將各關節點鏈接并生成骨骼的方法,這一方法的模塊化有助于未來升級的需要。
在進行關鍵幀計算的過程中,可以利用CCD算法對于人體的腿部骨骼結構及關節進行定位計算,獲取對應的坐標點信息。
僅憑關鍵幀是無法生成動畫的。在關鍵幀生成成功之后,為得到更為流暢的動畫效果,可針對不同情況對關鍵幀采用不同的插值方法。算法2為獲取中間幀的算法,在獲取關鍵幀數據之后,將其加入關鍵幀組中,通過迭代的方式,最終可輸出一個按時間軸順序排列的關鍵幀組數據,其中迭代次數可由外部進行定義。
算法2:獲取中間幀算法
輸入:包括每個關鍵幀中的關節點的位置、角度等一系列關鍵幀數據。
輸出:包含關鍵幀序列的組。

插值方式分兩種:線性插值法和球面插值法。線性插值法擁有計算簡單、速度快的優點,但是在描述旋轉的情況時,球面插值法則比線性插值法更具優勢。文中通過judge(q1,q2)進行判斷,如果q1.q2的值大于某固定值采取線性插值法,否則采取球面插值法提高計算速度。
如前文所提到的,平地行走與具有高度差的地形行走,兩者之間行走的動作是不相同的,因此,在臺階這樣地形上的行走模式與平地行走不同,所以如果都用平地行走模式建立的模型,遇到有高度差的地形時,就顯得極其不真實,給人很差的視覺效果,從而導致了動畫效果的逼真度降低。而且大量的資源會在這種完全采用計算的形式下被占用,造成整體運算速度的下降,在很大程度上限制了其在實際中的應用。而采用動作捕捉等一系列技術的預設關鍵幀的方式,能彌補其在速度和逼真度上的不足。為了充分利用預設關鍵幀的優勢之處,文中針對平地地形和具有高度差的地形有不同的虛擬人模型行走策略,首先根據臺階高度判斷是否需要重繪關鍵幀,如果為平地行走,則直接使用預制關鍵幀,否則調用關鍵幀重繪模塊,重新實時繪制并替換符合實際的關鍵幀。這樣既可以減少系統資源占有率,提高繪制速度,還可以提高動畫的實時性與逼真性,能夠達到實時繪制的要求。當虛擬人行走時,則調用虛擬人行走動作繪制模塊,如下所描述。

算法描述:將預制的關鍵幀進行編組,按時間順序調取,進行判斷。如果不需要重繪步驟3對應的關鍵幀,就按照時間先后順序調出預制關鍵幀,通過插值計算的方式獲取完整的過程動畫;如果判斷結果為重新生成,調出實時生成關鍵幀的步驟,利用反向動力學方法重新生成第3步數據,得到另一組關鍵幀,再通過插值計算的方式最終生成虛擬人行走動畫的逼真效果。
首先利用MATLAB7對虛擬人10 cm和20 cm兩種不同高度臺階的行走進行了簡單的模擬實驗。實驗結果如圖6所示。

圖6 平地與不同高度臺階行走模擬
圖6(a)顯示的是采用不變關鍵幀的傳統方法的虛擬人上臺階時的顯示效果。圖6(b)和圖6(c)顯示的是采用重載關鍵幀方法的虛擬人在遇到10 cm高度和20 cm高度兩種不同高度的臺階時所生成的行走效果。
如圖6(a)所示,不變關鍵幀在處理臺階時由于地形高度差的緣故而使動作產生了嚴重的脫節,外在表現就是使虛擬人產生了瞬移或彈跳的效果,這降低了虛擬人動作的逼真度和連貫性。而采用重載關鍵幀方法的虛擬人對應不同高度的臺階繪制了不同的對應關鍵幀,保持了動作的連貫性,生成了更為逼真的運動動畫。
圖7為虛擬人在面對平地、15 cm、25 cm等3種地形時,利用重載關鍵幀方法獲取新關鍵幀后的效果圖的對比演示。

圖7 平地、15 cm、25 cm 3種地形獲取重載幀的對比演示
實驗證明了文中提出的關鍵幀重載方法的有效性。當虛擬人在平地或地形變化不大的情況下不進行關鍵幀重載,這可以充分利用預制關鍵幀動畫的計算快速和相對逼真的優點;而當面對顯著的地形變化時,采用關鍵幀重載技術又避免了動作與環境不協調的缺點。通過對關鍵步驟采用關鍵幀重載方法,使虛擬人行走模型能夠面對各種情況,產生快速、逼真、多變的虛擬人行走動畫。
將反動力學應用到虛擬人運動中,提出了基于關鍵幀重載技術的虛擬人運動方法,此方法能較好模擬人的運動,提高了虛擬人動作的逼真度和連貫性。但研究也存在不足之處,目前在判斷是否需要重載關鍵幀的環節僅僅采用了兩腳所在地面高度差判定的方法,而這一方法在面對如“門檻”之類的地形時完全沒法判斷,從而引發錯誤,而且在計算臺階上的關鍵幀時,也沒有考慮在符合人體舒適前提下腿部運動的關節角度的問題。這些都是下一步研究的方向。
[1]李石磊,梁加紅,吳冰,等.虛擬人運動生成與控制技術綜述[J].系統仿真學報.2011,23(9):1758-1771.
[2]STEKETEE Scott N,BADLER Norman I.Parametric Keyframe Interpolation Incorporating Kinetic Adjustment and Phrasing Control[C]//Proceedings of SIGGRAPH'85,1985:255-262.
[3]KRAVTSOV D,FRYAZINOV O,ADZHIEV V,et al.Real-Time Controlled Metamorphosis of Animated Meshes Using Polygonal-FunctionalHybrids[C]//SIGGRAPH Asia 2010,Seoul,South Korea,2010:15 -18.
[4]劉賢梅,李冰,吳瓊.基于運動捕獲數據的虛擬人動畫研究[J].計算機工程與應用,2008,44(8):113 -119.
[5]杜娟.虛擬試衣中人體骨架運動協同的研究[D].上海:東華大學,2012.
[6]MICHAEL Girard.Computational Modeling for the Computer Animation of Legged Figures[C]//Proceeding of ACM SIGGRAPH'85,1985:263 - 270.
[7]RAIBERT M H,HODGINS J K.Animation of Dynamic Legged Locomotion[C]//Proceeding of Siggraph'91,CAN SIGGRAPH Computer Graphics,1991:349 -358.
[8]譚同德,張關鋒,趙新燦,等.基于骨骼蒙皮的虛擬人運動仿真[J].微計算機信息,2009(31):30-32.
[9]何凱,姜昱明.基于逆運動學的虛擬人行走[J].系統仿真學報,2004(16):1343-1345.
[10]趙超,梁加紅,李猛.基于PCA方法的虛擬人行走引擎研究[J].計算機工程,2013,39(8):288 -291.
[11]陽小濤.虛擬人建模及游泳運動控制技術的研究[D].武漢:武漢理工大學,2009:40-43.
[12]YAMANE Katsu,NAKAMURA Yoshihiko.Robot Kinematics and Dynamics for Modeling the Human Body[J].Robotics Research,2011,66:49 -60.
[13]RIGHETTI L,BUCHLI J,MISTRY M,et al.Inverse Dynamics Control of Floating-Base Robots with External Constraints:A Unified View[C]//Proceedings of the 2011 IEEE International Conference on Robotics and Automation(ICRA 2011),2011:1085-1090.