周立松
摘 要:現(xiàn)有內(nèi)河船舶操縱模擬器中僅能模擬人員落水場(chǎng)景,且模擬效果較差,很有必要對(duì)模擬器中虛擬人及其動(dòng)作的模擬進(jìn)行研究。采用分層表示模型將虛擬人分為骨骼層和皮膚層,在3Ds MAX中構(gòu)建虛擬人的骨骼模型,使用蒙皮骨骼技術(shù)將皮膚綁定在骨骼上,從而實(shí)現(xiàn)了虛擬人的幾何建模。根據(jù)人員動(dòng)作的關(guān)鍵姿勢(shì)生成關(guān)鍵幀,再由關(guān)鍵幀生成動(dòng)作的中間幀。用Cal3D骨骼動(dòng)畫引擎將虛擬人動(dòng)畫導(dǎo)出,并導(dǎo)入到OSG場(chǎng)景管理軟件中進(jìn)行繪制,最終實(shí)現(xiàn)了虛擬人及其運(yùn)動(dòng)的模擬。
關(guān)鍵詞:內(nèi)河船舶操縱模擬器 虛擬人 蒙皮骨骼 關(guān)鍵幀
內(nèi)河船舶操縱模擬器是內(nèi)河船員教學(xué)與培訓(xùn)的重要設(shè)備。在模擬器中,無論是人員行走、攀爬、落水后掙扎,還是船舶靠離碼頭時(shí)人員拋、接、系纜繩等場(chǎng)景都需要對(duì)人員及其動(dòng)作進(jìn)行模擬,現(xiàn)有的內(nèi)河船船操縱模擬器中僅能模擬人員落水場(chǎng)景,且模擬效果較差。所以很有必要對(duì)模擬器中虛擬人及其動(dòng)作的模擬進(jìn)行研究,從而豐富場(chǎng)景的顯示內(nèi)容,提高場(chǎng)景的真實(shí)感。
從上世紀(jì)80年代開始,有關(guān)虛擬人及其運(yùn)動(dòng)研究就得到了開展,隨著計(jì)算機(jī)處理能力的提高,一些關(guān)于虛擬人建模和運(yùn)動(dòng)的關(guān)鍵技術(shù)取得了較大的進(jìn)步。本文的主要工作是創(chuàng)建虛擬人模型,通過對(duì)人員行走、攀爬等的分析,獲得動(dòng)作關(guān)鍵幀,最后用場(chǎng)景驅(qū)動(dòng)軟件將虛擬人的動(dòng)作顯示到場(chǎng)景中。
虛擬人的幾何建模
虛擬人的幾何建模就是根據(jù)虛擬人的外觀和行為特征,在滿足逼真度要求的前提下,將虛擬人在計(jì)算機(jī)中進(jìn)行幾何表示的過程。對(duì)虛擬人進(jìn)行幾何建模是實(shí)現(xiàn)計(jì)算機(jī)人體模擬的必要條件,一些學(xué)者對(duì)這一領(lǐng)域做了深入研究,總結(jié)表面模型、體模型和分層表示模型等建模方法。
采用分層表示模型,一個(gè)虛擬人模型一般可以分為3個(gè)層次,即骨骼層、肌肉層和皮膚層。骨骼層包括人體主要骨架結(jié)構(gòu)和主要關(guān)節(jié),他們共同組合決定人體的基本姿態(tài),其狀態(tài)變化由各關(guān)節(jié)參數(shù)控制;肌肉層確定了人體運(yùn)動(dòng)過程中各部位的變形;皮膚層確定了人體的最終顯示外觀,其形狀變化受肌肉層影響。分層表示模型方法從人體生理結(jié)構(gòu)入手,直觀地反映了人體運(yùn)動(dòng)過程中各個(gè)層次的變化和相互影響,對(duì)虛擬人及其運(yùn)動(dòng)的模擬更為逼真,而且由于對(duì)虛擬人的運(yùn)動(dòng)控制只需在骨骼層上進(jìn)行,從而使得運(yùn)動(dòng)控制算法的設(shè)計(jì)更加簡(jiǎn)單,因此分層表示模型方法已成為目前最流行的虛擬人建模方法。
采用分層表示模型對(duì)虛擬人進(jìn)行幾何建模。由于人體的肌肉和皮膚形變十分復(fù)雜,根據(jù)內(nèi)河模擬器的實(shí)際需求,我們并沒有考慮虛擬人運(yùn)動(dòng)過程中的形變問題,只是將虛擬人體分成骨骼層和皮膚層,并采用蒙皮骨骼技術(shù)實(shí)現(xiàn)骨骼層和皮膚層的關(guān)聯(lián)。
蒙皮骨骼技術(shù)包含骨骼和蒙皮兩個(gè)部分。骨骼是用以控制蒙皮的一種抽象概念。蒙皮是一個(gè)整體網(wǎng)格,被骨骼控制并顯示在外部的因素。蒙皮骨骼動(dòng)畫中骨骼控制蒙皮運(yùn)動(dòng),而骨骼本身的運(yùn)動(dòng)是動(dòng)畫數(shù)據(jù),每個(gè)關(guān)鍵幀中包含時(shí)間和骨骼運(yùn)動(dòng)信息,運(yùn)動(dòng)信息可以用一個(gè)矩陣直接表示骨骼新的變換,也可用四元數(shù)表示骨骼的旋轉(zhuǎn)。蒙皮將網(wǎng)格中的頂點(diǎn)附著在骨骼之上,而且每個(gè)頂點(diǎn)可以被多個(gè)骨骼所控制,這樣在關(guān)節(jié)處的頂點(diǎn)由于同時(shí)受到父子骨骼的拉扯而改變位置就消除了裂縫。
采用3Ds MAX作為虛擬人的建模工具,其原因包括以下幾個(gè)方面:一是3Ds MAX建模功能非常強(qiáng)大,能夠較好的滿足對(duì)虛擬人進(jìn)行建模的需求,并且其在角色動(dòng)畫方面具備很明顯的優(yōu)勢(shì),另外豐富的插件也是其一大亮點(diǎn);二是由于3Ds MAX建立的模型具有較高的逼真度;三是3Ds MAX能夠與其他軟件進(jìn)行很好的配合,便于建模后相關(guān)操作的順利進(jìn)行。用3Ds MAX建立的人體骨骼如圖1(a)所示,進(jìn)行蒙皮后的人體模型如圖1(b)所示,人體模型是四肢張開的,這樣方便后面的處理。
虛擬人的動(dòng)作模擬
虛擬人的幾何模型建好后,得到了虛擬人的靜態(tài)顯示。為了對(duì)虛擬人在特定的環(huán)境和場(chǎng)景中的動(dòng)作進(jìn)行模擬,還需要對(duì)虛擬人進(jìn)行運(yùn)動(dòng)控制,使其具有動(dòng)態(tài)特性。在對(duì)虛擬人的運(yùn)動(dòng)控制研究方面采用的技術(shù)主要有:參數(shù)化關(guān)鍵幀技術(shù),過程動(dòng)畫技術(shù),運(yùn)動(dòng)捕捉技術(shù)。
參數(shù)化關(guān)鍵幀技術(shù)由關(guān)鍵幀動(dòng)畫技術(shù)演化而來,是較早使用的對(duì)虛擬人進(jìn)行運(yùn)動(dòng)控制的方法之一。使用該技術(shù)模擬人體運(yùn)動(dòng)時(shí),需要首先給定運(yùn)動(dòng)過程中的若干個(gè)關(guān)鍵姿態(tài),即關(guān)鍵幀,然后采用插補(bǔ)算法得到相鄰關(guān)鍵姿態(tài)間的若干個(gè)中間姿態(tài),即中間幀,這樣就實(shí)現(xiàn)了對(duì)人體運(yùn)動(dòng)的控制。該方法簡(jiǎn)單直觀,得到了廣泛的應(yīng)用,本文也采用此項(xiàng)技術(shù)實(shí)現(xiàn)虛擬人的動(dòng)作模擬。
在內(nèi)河模擬器中需要對(duì)人員行走、攀爬、落水后掙扎及船舶靠離碼頭時(shí)人員接纜繩等動(dòng)作進(jìn)行模擬,受篇幅的限制,以下僅以攀爬運(yùn)動(dòng)中腿、腳的動(dòng)作為例,對(duì)其關(guān)鍵幀進(jìn)行詳細(xì)分析。
人攀爬動(dòng)作的第一個(gè)周期可大致分為兩個(gè)階段:左臂向上移動(dòng)、右腿向上移動(dòng),右臂、左腿輔助運(yùn)動(dòng),同時(shí)身體向上移動(dòng);右臂向上移動(dòng)、左腿向上移動(dòng),左臂、右腿輔助運(yùn)動(dòng),同時(shí)身體向上移動(dòng)。這兩個(gè)階段是對(duì)稱的,所以研究其中一個(gè)階段即可。以下對(duì)第一個(gè)階段中腿和腳的動(dòng)作過程進(jìn)行研究,將這一過程分為三個(gè)關(guān)鍵姿勢(shì)。
第一個(gè)關(guān)鍵姿勢(shì)是右腳剛剛抬起向上跨步,左腿直立,如圖2(a)所示;第二個(gè)關(guān)鍵姿勢(shì)是右腳踏上臺(tái)階,左腿伸直,如圖2(b)所示;第三個(gè)關(guān)鍵姿勢(shì)是左腿剛要抬起離開臺(tái)階,如圖2(c)所示。
得到三個(gè)關(guān)鍵姿勢(shì)后,用這三個(gè)關(guān)鍵姿勢(shì)作為關(guān)鍵幀,接下來進(jìn)行關(guān)鍵幀插值。先對(duì)第一和第二關(guān)鍵幀進(jìn)行插值,如圖3(a)所示,這個(gè)階段從右腳剛剛抬起向上跨步開始,到右腳接觸臺(tái)階結(jié)束。再對(duì)第二和第三關(guān)鍵幀進(jìn)行插值,如圖3(b)所示,這個(gè)階段從左腳跟逐漸抬起到左腳的腳踝不能繼續(xù)向上抬起時(shí)為止。最后對(duì)第三關(guān)鍵幀和下一階段的第一關(guān)鍵幀進(jìn)行插值,如圖3(c)所示,這個(gè)階段的動(dòng)作是左腳逐漸抬起,右腳趨向直立。
虛擬人的顯示
1、顯示工具
建好的虛擬人模型要想在三維場(chǎng)景中顯示出來,需要用到場(chǎng)景驅(qū)動(dòng)軟件,目前主要的場(chǎng)景驅(qū)動(dòng)軟件有OpenGVS、VTree、Vega、OSG、OGRE等。其中OpenSceneGraph(簡(jiǎn)稱OSG)使用OpenGL技術(shù)開發(fā),是一套基于C++平臺(tái)的應(yīng)用程序接口(API),它讓程序員能夠更加快速、便捷地創(chuàng)建高性能、跨平臺(tái)的交互式圖形程序。本文選用OSG作為場(chǎng)景驅(qū)動(dòng)軟件來顯示虛擬人。
要想用OSG顯示虛擬人模型及其動(dòng)作,還需要用到Cal3D骨骼動(dòng)畫引擎。Cal3D使用的是基于關(guān)鍵幀的骨骼動(dòng)畫,它把數(shù)據(jù)分為三部分:骨骼(Skeleton)、網(wǎng)格(Mesh)和動(dòng)畫(Animation)。由一個(gè)文本配置文件(Cal3D.cfg)管理,每個(gè)動(dòng)畫文件是獨(dú)立的。Cal3D支持動(dòng)作混合,可以實(shí)現(xiàn)兩個(gè)動(dòng)作的混合執(zhí)行。其中,每一個(gè)動(dòng)作都有一個(gè)權(quán)重,即不同的動(dòng)作優(yōu)先級(jí)是不一樣的。
Cal3D主要由文件導(dǎo)出器和C++庫(kù)兩部分構(gòu)成。文件導(dǎo)出器的作用是將三維建模工具建立的模型轉(zhuǎn)化成C++庫(kù)所能夠加載的Cal3D文件格式;C++庫(kù)提供各種方法,以便于加載導(dǎo)出文件、創(chuàng)建人物、運(yùn)行動(dòng)畫并存儲(chǔ)必要的數(shù)據(jù),進(jìn)行三維圖形庫(kù)的繪制。
2、整體流程
虛擬人及其動(dòng)作的模擬的整個(gè)流程如圖4所示。第一步,在3Ds MAX中進(jìn)行人體建模、生成人體骨骼;第二步,對(duì)骨骼模型進(jìn)行蒙皮、并制作蒙皮骨骼動(dòng)畫;第三步,在3Ds MAX中裝載Cal3D文件導(dǎo)出器;并用導(dǎo)出器將蒙皮骨骼動(dòng)畫文件導(dǎo)出;第四步整理.cfg文件;第五步,用OSG中調(diào)用Cal3D導(dǎo)出文件,顯示虛擬人及其動(dòng)作。如圖5所示,分別是人員行走、攀爬、接纜繩及落水掙扎等動(dòng)作的模擬效果。
結(jié)論
以內(nèi)河船舶操縱模擬器為應(yīng)用背景,對(duì)虛擬人及其運(yùn)動(dòng)的模擬進(jìn)行了研究。采用分層表示模型,在3Ds MAX中建立了虛擬人骨骼模型,使用蒙皮骨骼技術(shù)將皮膚和骨骼進(jìn)行綁定;而后根據(jù)人員行走、攀爬等動(dòng)作生成關(guān)鍵幀,并根據(jù)關(guān)鍵幀生成了中間幀。使用Cal3D骨骼動(dòng)畫引擎將虛擬人蒙皮骨骼動(dòng)畫導(dǎo)出并引入到OSG場(chǎng)景驅(qū)動(dòng)軟件中進(jìn)行繪制。
今后還需要在以下方面做進(jìn)一步研究:將肌肉層添加到虛擬人模型中,同時(shí)將所做工作應(yīng)用到內(nèi)河船舶操縱模擬器中。
參考文獻(xiàn):
[1]徐愛國(guó).虛擬人動(dòng)畫中的三位服裝仿真技術(shù)研究:(博士學(xué)位論文). 杭州: 浙江大學(xué), 2006.
[2]景韶宇,沈治英.人機(jī)設(shè)計(jì)中的虛擬人仿真技術(shù)研究.計(jì)算機(jī)工程與應(yīng)用.2005, 41(6): 196-199.
[3] 羅冠,郝重陽(yáng).虛擬人骨骼結(jié)構(gòu)的多剛體系統(tǒng)建模方法研究.計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào).2005, 17(6): 1354-1358.
[4]羅冠.虛擬人的運(yùn)動(dòng)生成及控制技術(shù)研究:(博士學(xué)位論文). 西安:西北工業(yè)大學(xué), 2003.
[5] 黃錦軍.虛擬人運(yùn)動(dòng)控制技術(shù)的研究與實(shí)現(xiàn):(博士學(xué)位論文).武漢:華中科技大學(xué),2007.
[6]肖鵬,劉更代,徐明亮.OpenSceneGraph三維渲染引擎編程指南. 北京:清華大學(xué)出版社,2010.
[7]黃玲.捕捉虛擬人運(yùn)動(dòng)的運(yùn)動(dòng)控制技術(shù)的研究:(碩士學(xué)位論文).北京:首都師范大學(xué),2007.
(作者單位:廣西交通運(yùn)輸學(xué)校)