◆徐 偉 黃 婧 楊 光
(中國電子科技集團(tuán)公司第二十八研究所 江蘇 210007)
在現(xiàn)代軍事訓(xùn)練領(lǐng)域中,虛擬仿真作為一項(xiàng)重要技術(shù),推動了訓(xùn)練模式的創(chuàng)新與變革,而與動作捕捉技術(shù)的結(jié)合,更加提高了其沉浸式的訓(xùn)練體驗(yàn)。借助動作捕捉設(shè)備,實(shí)時(shí)采集受訓(xùn)人員的體感數(shù)據(jù),輸入至虛擬仿真訓(xùn)練系統(tǒng),驅(qū)動三維虛擬角色模型,在虛擬空間中映射人員動作[1],是提高受訓(xùn)人員訓(xùn)練效果的有效手段。
本文基于一種虛擬仿真模擬訓(xùn)練系統(tǒng),以實(shí)現(xiàn)模擬訓(xùn)練數(shù)據(jù)全面高效地采集與管理為目標(biāo),對體感及非體感兩類模擬數(shù)據(jù)的存儲進(jìn)行研究。針對體感數(shù)據(jù)采樣率高、單幀數(shù)據(jù)量大[2]、存儲訪問時(shí)系統(tǒng)數(shù)據(jù)處理壓力大等問題,結(jié)合動作捕捉骨骼數(shù)據(jù)編碼優(yōu)化方法,提出一種高采樣率下空間定位數(shù)據(jù)的合批存儲方法,實(shí)現(xiàn)數(shù)據(jù)的高效存儲;同時(shí),針對非體感數(shù)據(jù)事件存儲[3]下實(shí)體狀態(tài)需要逐層解析的問題,提出一種基于事件存儲的實(shí)體狀態(tài)參數(shù)化解析機(jī)制,實(shí)現(xiàn)了非體感數(shù)據(jù)的高效存儲和實(shí)體狀態(tài)的快速解析。
體感數(shù)據(jù)是指通過全身動作捕捉設(shè)備獲取的身體各關(guān)鍵節(jié)點(diǎn)的位置與旋轉(zhuǎn)數(shù)據(jù),共涉及了包括頭部、軀干、四肢在內(nèi)的共19個(gè)關(guān)節(jié)點(diǎn),其采樣率達(dá)100Hz,每幀數(shù)據(jù)表示了捕捉對象的某一瞬時(shí)狀態(tài)。
訓(xùn)練過程中,除了由穿戴體感設(shè)備的實(shí)兵產(chǎn)生的體感數(shù)據(jù)外,因戰(zhàn)場環(huán)境仿真[4]、虛實(shí)協(xié)同[5]需要,系統(tǒng)中的作戰(zhàn)人員、武器裝備等各類仿真實(shí)體會產(chǎn)生大量非體感訓(xùn)練數(shù)據(jù),如圖1所示。

圖1 非體感訓(xùn)練數(shù)據(jù)分類圖
(1)實(shí)體生成數(shù)據(jù),包含了實(shí)體的生成時(shí)間及初始狀態(tài),系統(tǒng)開始對實(shí)體屬性與狀態(tài)進(jìn)行仿真解算,并在場景中繪制實(shí)體;實(shí)體銷毀數(shù)據(jù),描述實(shí)體銷毀時(shí)間,系統(tǒng)停止更新實(shí)體屬性與狀態(tài),并且不再繪制實(shí)體;
(2)實(shí)體位置數(shù)據(jù),描述實(shí)體當(dāng)前在場景中的位置坐標(biāo),該數(shù)據(jù)主要通過實(shí)體移動尋路進(jìn)行更新;
(3)實(shí)體朝向數(shù)據(jù),描述實(shí)體當(dāng)前在場景中面朝的方向,該數(shù)據(jù)主要當(dāng)實(shí)體沿路徑移動或播放特定動畫序列時(shí)發(fā)生變更;
(4)實(shí)體動畫狀態(tài)數(shù)據(jù),描述實(shí)體當(dāng)前播放的動畫序列狀態(tài),該數(shù)據(jù)當(dāng)實(shí)體狀態(tài)發(fā)生改變時(shí)也會相應(yīng)變更;
針對體感數(shù)據(jù)存儲優(yōu)化問題,從體感數(shù)據(jù)結(jié)構(gòu)、體感數(shù)據(jù)編碼優(yōu)化、體感數(shù)據(jù)合批存儲幾個(gè)方面進(jìn)行研究,如圖2所示。
體感數(shù)據(jù)中記錄的關(guān)節(jié)點(diǎn)位置信息和旋轉(zhuǎn)信息均是通過3個(gè)單精度浮點(diǎn)數(shù)表示,分別對應(yīng)著以米為單位的空間坐標(biāo)值X、Y、Z,和以X、Y、Z為旋轉(zhuǎn)軸的歐拉角度值。每個(gè)單精度浮點(diǎn)數(shù)以4字節(jié)計(jì)算,采樣率按100Hz計(jì)算,則每名受訓(xùn)人員每分鐘會產(chǎn)生2.6兆字節(jié)數(shù)據(jù)。同時(shí),每名受訓(xùn)人員產(chǎn)生的體感數(shù)據(jù)都要以廣播的形式實(shí)時(shí)同步到其他客戶端,即網(wǎng)絡(luò)中的廣播數(shù)據(jù)量與受訓(xùn)人員數(shù)量的平方成正比。當(dāng)訓(xùn)練系統(tǒng)的受訓(xùn)人員數(shù)量進(jìn)一步拓展時(shí),訓(xùn)練系統(tǒng)進(jìn)行數(shù)據(jù)廣播時(shí)網(wǎng)絡(luò)帶寬壓力也會大幅度增加。

圖2 體感數(shù)據(jù)合批存儲技術(shù)路線
針對訓(xùn)練人員數(shù)量拓展受限的問題,本節(jié)從節(jié)點(diǎn)信息冗余、采樣頻率冗余、數(shù)據(jù)精度冗余三個(gè)方面對數(shù)據(jù)編碼進(jìn)行優(yōu)化。
節(jié)點(diǎn)信息冗余優(yōu)化:在單幀體感數(shù)據(jù)中,基于節(jié)點(diǎn)之間存在的拓?fù)潢P(guān)系進(jìn)行單幀體感數(shù)據(jù)還原時(shí),可從根節(jié)點(diǎn)出發(fā),沿著節(jié)點(diǎn)間以樹形拓?fù)潢P(guān)系構(gòu)成的正向運(yùn)動鏈,逐級解算子節(jié)點(diǎn)的位置信息。因此,除根節(jié)點(diǎn)外,可將其余節(jié)點(diǎn)位置信息全部刪除,實(shí)現(xiàn)體感數(shù)據(jù)的冗余節(jié)點(diǎn)信息優(yōu)化。優(yōu)化前后的數(shù)據(jù)對比,如表1所示。

表1 節(jié)點(diǎn)信息冗余優(yōu)化前后數(shù)據(jù)量對比
采樣頻率冗余優(yōu)化:基于自適應(yīng)降頻采樣算法,在節(jié)點(diǎn)位置及旋轉(zhuǎn)信息變化速率較低時(shí)降低數(shù)據(jù)采樣頻率,在節(jié)點(diǎn)位置及旋轉(zhuǎn)信息變化速率較高時(shí)相應(yīng)保持較高的數(shù)據(jù)采樣頻率,實(shí)現(xiàn)體感數(shù)據(jù)的冗余采樣頻率優(yōu)化。
數(shù)據(jù)精度冗余優(yōu)化:由于單精度浮點(diǎn)數(shù)能夠支持的數(shù)據(jù)精度(有效數(shù)字達(dá)到七位)遠(yuǎn)超體感數(shù)據(jù)的實(shí)際精度(動作捕捉設(shè)備測量的位置信息精度可達(dá)毫米級,旋轉(zhuǎn)信息精度可達(dá)1度)。因此,將單精度浮點(diǎn)數(shù)的小數(shù)點(diǎn)第四位后部分刪除,實(shí)現(xiàn)體感數(shù)據(jù)的冗余精度優(yōu)化。優(yōu)化前后的數(shù)據(jù)對比,如表2所示。

表2 數(shù)據(jù)精度冗余優(yōu)化前后數(shù)據(jù)量對比
體感數(shù)據(jù)的存儲采用“化零為整”的思路,將數(shù)據(jù)幀按時(shí)間順序進(jìn)行合批,形成體感數(shù)據(jù)塊,以數(shù)據(jù)塊為基本單元進(jìn)行數(shù)據(jù)的存儲與訪問。該方法可有效減少數(shù)據(jù)庫讀寫操作頻次,優(yōu)化體感數(shù)據(jù)存儲訪問效率,具體實(shí)現(xiàn)如下:
首先,統(tǒng)一體感數(shù)據(jù)幀的時(shí)間戳信息,采用基于二分搜索的插入排序算法[6],提升體感數(shù)據(jù)幀的合批排序效率。其次,將排序后的數(shù)據(jù)幀,以1分鐘為間隔拆分為數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊保存為一個(gè)數(shù)據(jù)文件存儲在硬盤上,同時(shí)在數(shù)據(jù)庫中保存文件索引信息,便于對文件進(jìn)行檢索訪問。文件索引信息采用均衡二叉樹存儲,均衡二叉樹可以在數(shù)據(jù)結(jié)構(gòu)生成過程中,對樹結(jié)構(gòu)進(jìn)行動態(tài)調(diào)整,使得二叉樹各分支始終保持相對一致的高度,提升檢索效率。整個(gè)存儲過程采用異步方式進(jìn)行,不堵塞后臺數(shù)據(jù)服務(wù)的主線程。
非體感數(shù)據(jù)的存儲通常采用事件存儲的技術(shù)路線。事件存儲,通過將實(shí)體狀態(tài)的改變轉(zhuǎn)化為事件消息,以增量形式記錄非體感數(shù)據(jù),可大幅減少需要存儲的非體感數(shù)據(jù)量。但是進(jìn)行實(shí)體狀態(tài)解析時(shí),需要從實(shí)體初始狀態(tài)開始,逐一解析與實(shí)體相關(guān)的事件消息,逐層遞進(jìn)式地還原實(shí)體狀態(tài),增加了實(shí)體狀態(tài)解析的處理復(fù)雜度。
本節(jié)針對事件存儲下實(shí)體狀態(tài)需要從初始狀態(tài)逐層解析的問題,對非體感數(shù)據(jù)的存儲與解析機(jī)制進(jìn)行研究。
根據(jù)產(chǎn)生時(shí)間順序依次存儲各仿真實(shí)體的事件消息,形成各實(shí)體的狀態(tài)變更時(shí)間軸。時(shí)間軸上各節(jié)點(diǎn)表示實(shí)體相關(guān)的事件消息,實(shí)體在該時(shí)間點(diǎn)發(fā)生狀態(tài)變更,兩個(gè)節(jié)點(diǎn)之間的時(shí)間段實(shí)體處于前一節(jié)點(diǎn)所表示的狀態(tài),如圖3所示。

圖3 實(shí)體狀態(tài)變更示意圖
基于此原理,給定任意時(shí)間t,以及當(dāng)前實(shí)體狀態(tài)S,在不經(jīng)由實(shí)體初始狀態(tài)及事件消息分步迭代計(jì)算的前提下,可通過實(shí)體狀態(tài)關(guān)于時(shí)間t的等價(jià)解算函數(shù),快速解算出實(shí)體在時(shí)間t的所有狀態(tài)數(shù)據(jù),即:
S_t=F_s(t)
其中t為時(shí)間,S_t為處于狀態(tài)S的實(shí)體在t時(shí)間的狀態(tài)數(shù)據(jù),F(xiàn)_s為狀態(tài)S的等價(jià)解算函數(shù)。
等價(jià)解算函數(shù)F_s主要涉及實(shí)體事件消息的數(shù)據(jù)結(jié)構(gòu)與實(shí)體狀態(tài)數(shù)據(jù)的參數(shù)化解析算法,需要根據(jù)各狀態(tài)的特性分別設(shè)定。
將仿真實(shí)體狀態(tài)進(jìn)行歸納整理,梳理各類仿真實(shí)體狀態(tài)數(shù)據(jù)的可能變更方式,形成實(shí)體狀態(tài)事件消息清單,如表3所示。

表3 實(shí)體狀態(tài)事件消息清單
(1)實(shí)體位置狀態(tài)
實(shí)體位置狀態(tài)的事件消息記錄實(shí)體 ID、實(shí)體的移動路徑及實(shí)體的移動速度。其中,實(shí)體的移動路徑需要記錄移動路徑中的每一個(gè)路徑節(jié)點(diǎn)位置,任意兩個(gè)路徑節(jié)點(diǎn)之間實(shí)體做直線移動。每當(dāng)實(shí)體重新進(jìn)行尋路計(jì)算時(shí),會產(chǎn)生一個(gè)新的實(shí)體位置狀態(tài)事件消息。
解析實(shí)體位置狀態(tài)時(shí),根據(jù)時(shí)間參數(shù)t對實(shí)體路徑進(jìn)行位置插值采樣,以此作為實(shí)體位置狀態(tài)的等價(jià)解算函數(shù)。首先,根據(jù)實(shí)體的移動速度,計(jì)算在時(shí)間t,實(shí)體位于哪兩個(gè)路徑節(jié)點(diǎn)之間。該計(jì)算可通過對路徑節(jié)點(diǎn)以抵達(dá)時(shí)間順序排序后,采用二分搜索算法計(jì)算得到。之后,計(jì)算在時(shí)間t,實(shí)體完成位移的百分比,可通過對時(shí)間t進(jìn)行歸一化得到。最后,根據(jù)上一步計(jì)算的位移百分比,計(jì)算出實(shí)體的當(dāng)前位置。
(2)實(shí)體朝向狀態(tài)
實(shí)體朝向狀態(tài)的事件消息記錄了實(shí)體 ID、實(shí)體朝向兩項(xiàng)數(shù)據(jù)。當(dāng)實(shí)體朝向發(fā)生改變時(shí),會產(chǎn)生一個(gè)新的實(shí)體朝向狀態(tài)事件消息。該事件消息直接獲取實(shí)體ID與新的實(shí)體朝向狀態(tài)數(shù)據(jù),并記錄于事件消息中。
解析實(shí)體朝向狀態(tài)時(shí),由于實(shí)體在狀態(tài)持續(xù)時(shí)間內(nèi)不會發(fā)生朝向改變,因此實(shí)體朝向狀態(tài)的等價(jià)解析函數(shù)與時(shí)間t無關(guān),可直接返回事件消息記錄的實(shí)體朝向。
(3)實(shí)體動畫狀態(tài)
實(shí)體動畫狀態(tài)的事件消息記錄了實(shí)體ID、實(shí)體動畫ID及動畫播放時(shí)間(即,完整播放一遍動畫所需的時(shí)間)。實(shí)體動畫狀態(tài)是實(shí)體行為狀態(tài)的直觀表現(xiàn)。每當(dāng)實(shí)體行為發(fā)生變化時(shí),實(shí)體的動畫狀態(tài)也會相應(yīng)改變,產(chǎn)生一個(gè)新的實(shí)體動畫狀態(tài)事件消息。事件消息獲取實(shí)體ID、實(shí)體動畫ID及動畫播放時(shí)間,記錄于事件消息中。
解析實(shí)體動畫狀態(tài)時(shí),根據(jù)時(shí)間參數(shù)t對實(shí)體動畫序列進(jìn)行插值采樣,以此作為實(shí)體動畫狀態(tài)的等價(jià)解算函數(shù)。首先,計(jì)算在時(shí)間 t,實(shí)體動畫播放時(shí)間占動畫序列總長度的百分比。如果時(shí)間t不超過動畫序列單次播放所需時(shí)間,則直接計(jì)算時(shí)間百分比;如果時(shí)間t超過動畫序列單次播放所需時(shí)間,則考慮動畫循環(huán)播放的情況,需要從時(shí)間t減去已完成的動畫播放時(shí)間,再計(jì)算時(shí)間百分比。然后,根據(jù)時(shí)間百分比對動畫序列進(jìn)行線性插值采樣,獲取當(dāng)前實(shí)體動畫狀態(tài)。
(4)實(shí)體生成與銷毀狀態(tài)
實(shí)體生成狀態(tài)的事件消息可以刪除,改為通過解析實(shí)體其他狀態(tài),替代實(shí)體生成狀態(tài)的解析,以進(jìn)一步優(yōu)化壓縮非體感數(shù)據(jù)的存儲編碼。當(dāng)能夠解析出實(shí)體位置、旋轉(zhuǎn)等其他狀態(tài)時(shí),表明實(shí)體存在,需要生成實(shí)體,反之實(shí)體不存在,應(yīng)銷毀實(shí)體。
本文研究了基于虛擬仿真的多人協(xié)同訓(xùn)練數(shù)據(jù)存儲技術(shù)。針對體感數(shù)據(jù),形成了高效的壓縮編碼能力和合批存儲能力,有效降低訓(xùn)練數(shù)據(jù)在網(wǎng)絡(luò)傳輸與存儲訪問時(shí)對系統(tǒng)產(chǎn)生的數(shù)據(jù)處理壓力。針對非體感數(shù)據(jù),提出了訓(xùn)練數(shù)據(jù)的參數(shù)化解析機(jī)制,實(shí)現(xiàn)基于時(shí)間參數(shù)的實(shí)體狀態(tài)解算能力。在軍事仿真訓(xùn)練領(lǐng)域,該研究成果將有效支撐虛擬仿真訓(xùn)練系統(tǒng)的復(fù)盤與評估,幫助用戶深入了解訓(xùn)練情況,開展訓(xùn)練分析,從而提升訓(xùn)練效能。