馬建曉,劉 偉
(南陽師范學院 機電工程學院,河南 南陽 473061)
虛擬人作為參與者在虛擬現(xiàn)實中的表示,其逼真程度直接影響了參與者的沉浸感。運動捕獲方法就是通過捕獲真實人的運動數(shù)據(jù)記錄人體運動中豐富的細節(jié),生成具有很強真實感和較強實時性的人體動畫[1-2]。但是在虛擬人的運動過程中,并不是重復單個動作,往往需要做出各種不同的動作,因此必須解決動作之間的切換問題。一種實現(xiàn)動作過渡的簡單方法就是利用關鍵幀插值技術,將前后動作的一些特殊位置作為關鍵幀,然后通過參數(shù)插值實現(xiàn)運動[3-4]。這種方法雖然簡單,但是處理效果并不理想,尤其是當動作與動作間的過渡時間較長時,在過渡時間內可能會出現(xiàn)新的特殊位置,所以僅僅依靠運動變化前后兩個關鍵幀是無法通過參數(shù)插值來實現(xiàn)的。文獻[5]提出一種數(shù)據(jù)驅動的虛擬人運動生成模式。當直接使用運動捕獲的數(shù)據(jù)無法保證與虛擬環(huán)境實時交互時,可將人體的物理性質與運動捕獲數(shù)據(jù)聯(lián)合計算,以獲取物理正確性的控制參數(shù),通過運動分割器和姿態(tài)生成器得到運動參數(shù)。這種動力學控制方法雖然部分解決了生成動作機械化的問題,但由于人體物理性質的復雜性,在復雜虛擬環(huán)境中還會出現(xiàn)動作失真的現(xiàn)象[6-7]。另外,在虛擬現(xiàn)實中虛擬人還經常在同一時刻做出多個動作。比如在作戰(zhàn)仿真系統(tǒng)[8]中,步行動作和射擊動作作為兩種不同的基本動作,常常是同時進行的。甚至有時候虛擬人會同時做出兩種以上不同的動作。比如在步行前進射擊的過程中,做出臥倒動作,這些都屬于虛擬人運動合成的問題。逼真的虛擬人運動合成目前主要面臨以下困難[9]:(1)在交互式虛擬現(xiàn)實中,虛擬人的運動要受到使用者的控制,然而這種控制通常是較高層次的控制,如運動的方向、速度等,而不是對某個關節(jié)角度或肢體形態(tài)等底層的控制,缺少靈活的動作切換和合成技術將有損系統(tǒng)的交互性。(2)虛擬人運動具有內在的結構和時序性。例如,行走通常要包括右腳支撐、左腳支撐再到右腳支撐等過程,合成在結構上不完整的運動是沒有意義的。
針對以上問題,必須找到一種合適的運動融合方法來合成滿足控制信息和環(huán)境約束的動作。運動融合的基本思想就是把運動看成基于時間的一組信號,從而可以對兩種或兩種以上的運動信號進行按權重相加,合成一種新運動[2,10]。該文對傳統(tǒng)的基于固定權重相加的運動融合技術進行改進,提出一種基于實時權重相加的運動融合技術,在進行虛擬人交互式控制時,通過在運動過程中實時計算被融合運動的權重進行動作合成,使合成的動作既滿足控制者的需要,又滿足環(huán)境約束條件。
在虛擬現(xiàn)實中,虛擬人經常需要在步行、跑步和跳躍等動作之間切換,如果忽略中間的過渡階段,直接將虛擬人從一個動作轉換到下一個動作,則無法實現(xiàn)平滑過渡,視覺效果較差[11-12]。以步行運動和跑步運動為例,兩種動作都是周期型運動,具有較強的相似性。但是在融合的過程中運動信號還必須基于時間對齊,即運動序列在時間上對齊,否則融合的運動將完全沒有意義。例如,將跑步運動中落地階段的動作與步行運動中腳在空中的動作進行融合,融合的結果就沒有意義。
時間變換[13]是對運動中的時間進行重新映射,通過這種變換將信號表示在一個新的時間段里,這一過程即為運動序列對齊。時間變換可以實現(xiàn)對信號的膨脹和壓縮,這樣處理能夠使兩個不同步信號變換為時間上同步協(xié)同的信號。
通過運動融合技術,實現(xiàn)動作θ1(t)到θ2(t)的切換,基本思路是,將動作θ1(t)結束時間段里的運動關節(jié)參數(shù)和動作θ2(t)起始時間段里的運動關節(jié)參數(shù)按照一定的比例權重進行疊加,就可在這個重疊時間段里實現(xiàn)運動θ1(t)到運動θ2(t)的過渡[14]。過渡動作的計算公式如下:
θ(t)=s(t)θ1(t)+(1-s(t))θ2(t)
(1)
其中,s(t)為過渡函數(shù),是關于時間t的函數(shù),在過渡階段,隨著時間的推移而發(fā)生變化,決定了在過渡過程中兩個不同動作的權重;θ(t)表示過渡動作關節(jié)參數(shù)關于時間t的函數(shù)。從公式(1)可知,動作切換實質上是將前后兩個基于時間的動作關節(jié)參數(shù)信號按權重進行相加,不同的過渡函數(shù)s(t)決定了不同的切換效果。因此,針對不同的運動切換必須設定與運動類型相一致的過渡函數(shù)才能保證切換效果的真實性。
在研究兩種動作之間的切換時,由于兩個動作的權重和等于1,所以只需設定一個動作的權重函數(shù)即可。權重函數(shù)一般可分為線性過渡函數(shù)和非線性過渡函數(shù)兩大類。常用的線性函數(shù)表達式如公式(2)。
(2)
在實際的虛擬人運動關節(jié)參數(shù)計算時,時間按照運動幀的間隔向前推進,因此常用的是其離散表達式,如公式(3)。
(3)
非線性過渡函數(shù)的表達式有多種,常用的是指數(shù)衰減函數(shù),表達式如公式(4)。
s(t)=e-αt-e-αN,α為衰減系數(shù)
(4)
離散表達式如公式(5)。
s(i)=e-αni-e-αN,0≤ni≤N,α為衰減系數(shù)
(5)
在以上表達式中,N指過渡時間內需要重新編輯的幀數(shù),ni為當前的幀為第i個編輯幀。s(i)為前一個動作過渡時間內的第i個運動幀的關節(jié)參數(shù),由s(i)表達式可知,在運動切換的過程中,前一個動作的權重逐漸減小,后一個動作的權重逐漸增大。具體過渡函數(shù)的選擇要結合兩個切換動作本身的時空特性來決定,一般來講,相似動作的過渡,例如步行動作與跑步動作的過渡一般選用線性函數(shù),而差別較大的動作,例如在跑步前進中,從跑步動作突然到跳躍動作的過渡一般選用非線性函數(shù)。
為了實現(xiàn)步行運動到跑步運動的切換,選擇步行和跑步的一個單步運動周期作為運動過渡的重疊區(qū)間。由于行走和跑步的速度不一樣,所以步行運動和跑步運動的單步運動周期不同。如果采用相同的采樣頻率,所獲得的采樣幀數(shù)就不同。針對這個問題,該文采用時間變換的方法是將單步運動周期統(tǒng)一縮放到[0,1]區(qū)間內,建立一種從t到t'的映射關系t'=g(t),只要給定每一幀的運動時間,通過映射關系就可以找到經過時間變換的相對運動時間。由于步行運動和跑步動作均為周期運動,因此,該文選擇線性時間變換函數(shù),其表達式如公式(6)。
(6)
其中,tp為對應跑步運動和步行運動的單步運動周期,n為當前的幀為第幾個編輯幀。通過函數(shù)變換,可以將時間長度映射到[0,1]區(qū)間內,使步行運動和跑步運動在一個單步周期內同步。通過時間變換和運動采樣分析,保證每個運動的采樣幀在映射區(qū)間內均勻分布且數(shù)量相等。
跑步運動曲線如圖1所示,紅線表示腳尖的軌跡曲線,綠線表示腳后跟的軌跡曲線。在時空特性分析的過程中,采用與步行運動相同的采樣頻率進行采樣,同時記錄每一個采樣點處的運動關節(jié)坐標,并保存到相應的數(shù)據(jù)結構中。
圖1 跑步運動關鍵節(jié)點曲線
在實現(xiàn)運動切換時,依然采用按幀運動編輯的方法進行運動編輯。即在一個單步運動周期內按照固定的采樣間隔逐幀對虛擬人的運動姿態(tài)進行編輯,由于采樣間隔一般小于運動幀間隔,所以進行編輯后還要運用四元數(shù)球狀線性插值技術實現(xiàn)兩個被編輯幀之間的運動序列。運動編輯公式如公式(7)。
(7)
其中,s(i)為第i個被編輯幀步行運動的權重,k為第幾個需要計算的運動關節(jié),K為總的需要編輯的運動關節(jié)個數(shù),wk(ni)為步行運動中第i個采樣幀處第k個運動關節(jié)的坐標位置,rk(ni)為跑步運動中第i個采樣幀處第k個運動關節(jié)的坐標位置。
在計算運動關節(jié)坐標時,根據(jù)構建的虛擬人簡化幾何模型,針對步行運動和跑步運動,只需關注虛擬人下體運動關節(jié)坐標位置的變化過程,所以在實際仿真時,只對臀關節(jié)、左右股關節(jié)、左右膝關節(jié)以及左右踝關節(jié)的坐標位置進行編輯。運動切換過程中虛擬人上體運動關節(jié)坐標位置的變化,通過計算腳后跟到身體中心線的連線與地面的夾角,來設置虛擬人上體的傾斜度。即上體關節(jié)坐標只跟虛擬人兩個動作切換的速度傾斜一定角度。具體的步行運動到跑步運動切換的計算流程如圖2所示。
圖2 運動切換流程
運動切換可以看作是兩種動作的合成,但是在虛擬現(xiàn)實中,虛擬人僅僅實現(xiàn)兩種動作的合成是遠遠不夠的,經常需要多種動作的合成。常見的基于運動融合技術的運動合成方法大體可以分為兩大類[15-16],即基于固定權重的運動合成和基于實時權重的運動合成。前者通過人為設定被合成運動的權重來合成運動,后者主要根據(jù)一些關鍵幀的運動姿態(tài)實時計算被合成動作的權重來合成運動。
基于固定權重的運動合成是指在由一些基本運動構成的樣本動作庫中,給出一組系數(shù)θi,即每個樣本動作的權重。由這組系數(shù)θi和原始樣本動作ri合成出一個新的動作x,數(shù)學表達式如公式(8)。
(8)
其中,m為樣本動作個數(shù),從公式(8)可以看出,合成的運動實際上是對樣本運動的線性融合,因此,合成結果的連續(xù)性與所采用的基本動作的連續(xù)性是相同的。此方法需要人為直接設定每個樣本動作的權重來合成新動作,對操作者的要求較高。在實際應用中,通常需要經過反復實驗合成出一些接近真實人運動效果的固定動作,在運動過程中不能夠根據(jù)環(huán)境約束改變動作,靈活性較差,主要應用在環(huán)境約束影響小且場景比較簡單的虛擬現(xiàn)實中。
3.2.1 基于實時權重的運動合成方法概述
傳統(tǒng)的運動合成方法主要有逆向運動學方法和基于控制器的方法[16]。逆向運動學方法是通過某些末端關節(jié)的位姿來反求中間運動關節(jié)坐標信息,不考慮合成運動的權重,直接生成新的動作,不足之處是需要計算的關節(jié)坐標信息太多,且基于反復迭代思路進行問題求解,所求結果可能不滿足人體要求?;诳刂破鞯姆椒ㄊ歉鶕?jù)末端關節(jié)的位姿計算虛擬人每個關節(jié)的所需控制力矩,實現(xiàn)特定動作的生成與控制。此方法只考慮了人體的機械特性,仿真的動作太過僵硬、正規(guī)。
基于實時權重的運動合成方法是指根據(jù)環(huán)境約束生成某個時間序列上虛擬人應該達到的運動姿態(tài),然后依據(jù)該關鍵幀的運動姿態(tài)反求出各個樣本動作的權重進而合成出整個運動序列。與逆向運動學方法相比,該方法不需要通過末端關節(jié)的位姿來反求中間所有的運動關節(jié)坐標信息,只需求出某些關鍵運動關節(jié)坐標信息,再求出被合成動作的權重。該文提出一種基于時間序列的矩陣方程算法,來實時求解運動權重,此方法能夠根據(jù)環(huán)境約束的改變和交互控制者的需要實時計算運動權重,并且新動作是虛擬人基本動作的合成,因此確保了動作不失真。
例如,在合成虛擬人上臺階的動作時,首先根據(jù)虛擬環(huán)境中臺階的高度和寬度以及控制信息計算出虛擬人在某時刻的足跡位置,然后運用逆向運動學算法計算足跡位置處的虛擬人運動姿態(tài),即某些關鍵運動關節(jié)坐標,主要包括臀關節(jié)、左右股關節(jié)、左右膝關節(jié)等。其次,根據(jù)關鍵運動關節(jié)坐標信息計算被合成動作的權重,最后根據(jù)各個動作的權重合成出從當前位置到足跡位置的整個虛擬人人體的運動序列。
該方法的核心技術主要有以下兩點:①根據(jù)虛擬人末端效應器的運動目標位置,運用逆向運動學算法求解虛擬人的關鍵運動關節(jié)坐標;②根據(jù)虛擬人的關鍵運動關節(jié)坐標求解被合成動作的權重。關于逆向運動學算法求解虛擬人的關鍵運動關節(jié)坐標,筆者在其他文章中有專門論述,該文重點研究實時權重的計算方法。
3.2.2 實時權重的計算方法
在進行運動合成時,被合成的運動是多樣化的,運動類型各不相同,即有可能存在周期型運動與非周期型運動的合成,所以不能按照上述設定過渡函數(shù)的方法來實時計算運動權重,必須在基于關鍵幀姿態(tài)的約束下設計合適的算法來實時計算被合成運動的權重。
為了能夠實時計算運動權重,該文引入了運動組的概念,每個運動組包含多個周期運動和一個非周期運動。周期運動一般是指步行運動、跑步運動以及左右跨步運動等,非周期運動主要是指射擊、跳躍等。在進行運動合成時,約定周期運動的速度均大于零,非周期運動的速度均等于零。由于每個運動組只包含一個非周期運動,所以如果被合成的運動包含多個非周期運動,就要設定多個運動組來計算權重。
下面給出一種實時權重的計算方法。
假定被合成的運動中只有一個非周期運動,則構建一個運動組就可以實現(xiàn)運動合成。給定運動組M,里面包含m個周期運動和1個非周期運動。首先運用時間變換的方法將周期運動的周期統(tǒng)一映射到[0,1]區(qū)間上。
在給定時刻t,需要虛擬人達到姿態(tài)p,被合成運動權重的計算方法如下:
(1)將時刻t轉換為運動組中周期型運動在一個周期內的時刻t';
(2)計算每個周期運動在時刻t'的運動姿態(tài)ri;
(3)合成新運動的問題轉化為公式(9)的最優(yōu)化問題。
(9)
其中,z是指非周期運動的運動姿態(tài)。構造矩陣A=[r1r2…rmz],則上述問題可以通過計算α=A-·p求解,其中A-為A的偽逆矩陣,α=[α1α2…αmα]為權重組成的列向量。通過求解偽逆矩陣方程可以求得單個運動的權重。
如果被合成的運動中包含多個非周期運動,則構建多個運動組M1,M2,…,Mn,然后給每個運動組再設定一個組權重βn,則最優(yōu)化公式可表示公式(10)。
(10)
將公式(10)進行化簡后,按照相同的方法求解偽逆矩陣方程可以得到被合成運動的權重。其中每個周期型運動的權重值是所有運動組中運動權重值的和。即第i個運動幀參數(shù)的最終權重為:(β1+β2+…+βn)αi。以上通過構建運動組和偽逆矩陣方程,基于特定的關鍵幀姿態(tài)求解被合成運動的權重,達到了實時計算權重的目的。
Unity是一個跨平臺的3D游戲開發(fā)工具,可以非常方便地導入3D模型。在Unity中,腳本主要用來定義用戶在系統(tǒng)中的行為,通過腳本編程可實現(xiàn)虛擬人模型的各種動作。在本次編程實驗中,主要用到兩個類。一個是表示對象位置的類Transform,里面包含對象的位置參數(shù)、旋轉參數(shù)以及大小參數(shù)等。另外一個是在插值求解時,要用到Unity里的矩陣運算類Quaternion(即四元數(shù)),四元數(shù)能夠簡化旋轉矩陣在計算旋轉時繁瑣的運算,同時又避免了歐拉角的萬向節(jié)鎖問題。
在進行步行運動到跑步運動切換時,選擇公式(7)的過渡函數(shù),在虛擬人運動過程中,權重隨時間幀線性變化。圖3和圖4給出了虛擬人步行運動與跑步運動切換的實驗效果圖。根據(jù)實驗結果可知,當虛擬人在步行運動和跑步運動之間切換時,除了腿部運動關節(jié)坐標發(fā)生改變外,虛擬人上體的運動關節(jié)坐標也發(fā)生了明顯改變,虛擬人的身體在跑步運動時相對于步行運動有更大的傾斜度。因此,這種變化僅僅依靠單純的運動編輯是無法實現(xiàn)的,必須結合切換前后兩個動作的運動姿態(tài)依靠運動融合方法才能得到準確的虛擬人運動姿態(tài)。在作戰(zhàn)仿真系統(tǒng)中,虛擬士兵經常需要在多種動作之間進行切換,此方法不僅可以應用到步行運動和跑步運動之間,還可以應用到任意兩種動作的切換,比如跑步中的跳躍、射擊等。
圖3 步行運動到跑步運動切換的實驗效果
圖4 跑步運動到步行運動切換的實驗效果
以虛擬士兵為例,在進行運動合成仿真時,共選擇5個基礎動作,分別是:步行、跑步、射擊、瞄準、休息(靜止)。其中每個動作又可分為不同的運行狀態(tài),比如步行動作可分為:朝前(WalkForward)、朝后(WalkBackward)、朝左(WalkStrafeLeft)、朝右(WalkStrafeRight)、正常先進(WalkIdle)、快步前進(WalkRun)等。圖5給出了運動合成的權重圖,左半部分表明當虛擬人開始步行運動時,步行運動的權重從0逐漸增加到1,即從靜止狀態(tài)到完全的步行狀態(tài)中間有一個過程,比較符合真實人的運動情況。如圖5左半圖所示的時刻,虛擬人從靜止狀態(tài)開始前進,第一只腳剛剛抬起還未放下時,此刻步行朝前(WalkForward)的權重為0.651,休息動作(Idle1)的權重為0.349。右半部分表明虛擬人在步行運動和跑步運動之間切換時,在有環(huán)境約束的情況下(即臺階引起的地面高度變化),兩個運動的權重是此消彼長的過程。如圖5右半圖所示的時刻,在交互者控制運動時,虛擬人左腳的目標位置已經確定,要快速登上臺階,此刻步行朝前(WalkForward)的權重為0.425,跑步朝前(RunForward)的權重為0.567,跑步朝左(RunStrafeLeft)的權重為0.008(說明此刻虛擬人有朝左運動的趨勢)。
需要說明的是,各個動作的權重受交互者的控制而實時變化,動作權重根據(jù)虛擬人的目標運行位置和關鍵關節(jié)的坐標信息(通過逆向運動學求得),按照3.2.2節(jié)的矩陣方程求得,與虛擬人當前的運動姿態(tài)沒有直接關系。運動融合技術從本質上來講是對運動編輯技術的延伸,根據(jù)以上實驗結果可知,當虛擬人根據(jù)時空約束需要做出新動作時,如果依靠調整單個動作(即運動編輯)不能完成時,就必須通過實時計算運動權重進行多個動作的合成來完成這個新動作。因此,在開發(fā)虛擬人仿真系統(tǒng)時,一般將這兩種技術結合使用,根據(jù)時空約束的復雜程度選擇合適的技術實現(xiàn)虛擬人豐富多彩的運動。
針對虛擬人多個運動的合成問題,提出了一種基于實時權重相加的運動融合技術。首先,通過時間變換和設定運動過渡函數(shù),在過渡時間內對虛擬人的運動姿態(tài)進行重新編輯,實現(xiàn)了步行運動到跑步運動的切換。其次,重點對基于實時權重的運動合成方法進行研究,提出了一種實時權重的計算方法,基于虛擬人的關鍵幀姿態(tài)實時求解被合成運動的權重,實現(xiàn)了多個運動的合成。但是在實驗仿真時,構建的虛擬場景相對簡單,在對提出的方法進行驗證時,由于Unity平臺的動畫是基于腳本進行控制的,因此無法將運動過程中的相關數(shù)據(jù)保存分析,只滿足了開發(fā)者視覺上的需求,沒有一套完整的數(shù)據(jù)指標定量分析實驗結果。尤其在構建復雜虛擬現(xiàn)實場景時,僅僅依靠視覺效果是無法滿足開發(fā)者的各類需求的,必須給出一套參數(shù)用來衡量系統(tǒng)的優(yōu)劣,在標準化方面有待進一步完善。