◆徐 偉 黃 婧 楊 光
(中國電子科技集團公司第二十八研究所 江蘇 210007)
在現(xiàn)代軍事訓練領(lǐng)域中,虛擬仿真作為一項重要技術(shù),推動了訓練模式的創(chuàng)新與變革,而與動作捕捉技術(shù)的結(jié)合,更加提高了其沉浸式的訓練體驗。借助動作捕捉設(shè)備,實時采集受訓人員的體感數(shù)據(jù),輸入至虛擬仿真訓練系統(tǒng),驅(qū)動三維虛擬角色模型,在虛擬空間中映射人員動作[1],是提高受訓人員訓練效果的有效手段。
本文基于一種虛擬仿真模擬訓練系統(tǒng),以實現(xiàn)模擬訓練數(shù)據(jù)全面高效地采集與管理為目標,對體感及非體感兩類模擬數(shù)據(jù)的存儲進行研究。針對體感數(shù)據(jù)采樣率高、單幀數(shù)據(jù)量大[2]、存儲訪問時系統(tǒng)數(shù)據(jù)處理壓力大等問題,結(jié)合動作捕捉骨骼數(shù)據(jù)編碼優(yōu)化方法,提出一種高采樣率下空間定位數(shù)據(jù)的合批存儲方法,實現(xiàn)數(shù)據(jù)的高效存儲;同時,針對非體感數(shù)據(jù)事件存儲[3]下實體狀態(tài)需要逐層解析的問題,提出一種基于事件存儲的實體狀態(tài)參數(shù)化解析機制,實現(xiàn)了非體感數(shù)據(jù)的高效存儲和實體狀態(tài)的快速解析。
體感數(shù)據(jù)是指通過全身動作捕捉設(shè)備獲取的身體各關(guān)鍵節(jié)點的位置與旋轉(zhuǎn)數(shù)據(jù),共涉及了包括頭部、軀干、四肢在內(nèi)的共19個關(guān)節(jié)點,其采樣率達100Hz,每幀數(shù)據(jù)表示了捕捉對象的某一瞬時狀態(tài)。
訓練過程中,除了由穿戴體感設(shè)備的實兵產(chǎn)生的體感數(shù)據(jù)外,因戰(zhàn)場環(huán)境仿真[4]、虛實協(xié)同[5]需要,系統(tǒng)中的作戰(zhàn)人員、武器裝備等各類仿真實體會產(chǎn)生大量非體感訓練數(shù)據(jù),如圖1所示。
圖1 非體感訓練數(shù)據(jù)分類圖
(1)實體生成數(shù)據(jù),包含了實體的生成時間及初始狀態(tài),系統(tǒng)開始對實體屬性與狀態(tài)進行仿真解算,并在場景中繪制實體;實體銷毀數(shù)據(jù),描述實體銷毀時間,系統(tǒng)停止更新實體屬性與狀態(tài),并且不再繪制實體;
(2)實體位置數(shù)據(jù),描述實體當前在場景中的位置坐標,該數(shù)據(jù)主要通過實體移動尋路進行更新;
(3)實體朝向數(shù)據(jù),描述實體當前在場景中面朝的方向,該數(shù)據(jù)主要當實體沿路徑移動或播放特定動畫序列時發(fā)生變更;
(4)實體動畫狀態(tài)數(shù)據(jù),描述實體當前播放的動畫序列狀態(tài),該數(shù)據(jù)當實體狀態(tài)發(fā)生改變時也會相應(yīng)變更;
針對體感數(shù)據(jù)存儲優(yōu)化問題,從體感數(shù)據(jù)結(jié)構(gòu)、體感數(shù)據(jù)編碼優(yōu)化、體感數(shù)據(jù)合批存儲幾個方面進行研究,如圖2所示。
體感數(shù)據(jù)中記錄的關(guān)節(jié)點位置信息和旋轉(zhuǎn)信息均是通過3個單精度浮點數(shù)表示,分別對應(yīng)著以米為單位的空間坐標值X、Y、Z,和以X、Y、Z為旋轉(zhuǎn)軸的歐拉角度值。每個單精度浮點數(shù)以4字節(jié)計算,采樣率按100Hz計算,則每名受訓人員每分鐘會產(chǎn)生2.6兆字節(jié)數(shù)據(jù)。同時,每名受訓人員產(chǎn)生的體感數(shù)據(jù)都要以廣播的形式實時同步到其他客戶端,即網(wǎng)絡(luò)中的廣播數(shù)據(jù)量與受訓人員數(shù)量的平方成正比。當訓練系統(tǒng)的受訓人員數(shù)量進一步拓展時,訓練系統(tǒng)進行數(shù)據(jù)廣播時網(wǎng)絡(luò)帶寬壓力也會大幅度增加。
圖2 體感數(shù)據(jù)合批存儲技術(shù)路線
針對訓練人員數(shù)量拓展受限的問題,本節(jié)從節(jié)點信息冗余、采樣頻率冗余、數(shù)據(jù)精度冗余三個方面對數(shù)據(jù)編碼進行優(yōu)化。
節(jié)點信息冗余優(yōu)化:在單幀體感數(shù)據(jù)中,基于節(jié)點之間存在的拓撲關(guān)系進行單幀體感數(shù)據(jù)還原時,可從根節(jié)點出發(fā),沿著節(jié)點間以樹形拓撲關(guān)系構(gòu)成的正向運動鏈,逐級解算子節(jié)點的位置信息。因此,除根節(jié)點外,可將其余節(jié)點位置信息全部刪除,實現(xiàn)體感數(shù)據(jù)的冗余節(jié)點信息優(yōu)化。優(yōu)化前后的數(shù)據(jù)對比,如表1所示。
表1 節(jié)點信息冗余優(yōu)化前后數(shù)據(jù)量對比
采樣頻率冗余優(yōu)化:基于自適應(yīng)降頻采樣算法,在節(jié)點位置及旋轉(zhuǎn)信息變化速率較低時降低數(shù)據(jù)采樣頻率,在節(jié)點位置及旋轉(zhuǎn)信息變化速率較高時相應(yīng)保持較高的數(shù)據(jù)采樣頻率,實現(xiàn)體感數(shù)據(jù)的冗余采樣頻率優(yōu)化。
數(shù)據(jù)精度冗余優(yōu)化:由于單精度浮點數(shù)能夠支持的數(shù)據(jù)精度(有效數(shù)字達到七位)遠超體感數(shù)據(jù)的實際精度(動作捕捉設(shè)備測量的位置信息精度可達毫米級,旋轉(zhuǎn)信息精度可達1度)。因此,將單精度浮點數(shù)的小數(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ù)塊,以數(shù)據(jù)塊為基本單元進行數(shù)據(jù)的存儲與訪問。該方法可有效減少數(shù)據(jù)庫讀寫操作頻次,優(yōu)化體感數(shù)據(jù)存儲訪問效率,具體實現(xiàn)如下:
首先,統(tǒng)一體感數(shù)據(jù)幀的時間戳信息,采用基于二分搜索的插入排序算法[6],提升體感數(shù)據(jù)幀的合批排序效率。其次,將排序后的數(shù)據(jù)幀,以1分鐘為間隔拆分為數(shù)據(jù)塊,每個數(shù)據(jù)塊保存為一個數(shù)據(jù)文件存儲在硬盤上,同時在數(shù)據(jù)庫中保存文件索引信息,便于對文件進行檢索訪問。文件索引信息采用均衡二叉樹存儲,均衡二叉樹可以在數(shù)據(jù)結(jié)構(gòu)生成過程中,對樹結(jié)構(gòu)進行動態(tài)調(diào)整,使得二叉樹各分支始終保持相對一致的高度,提升檢索效率。整個存儲過程采用異步方式進行,不堵塞后臺數(shù)據(jù)服務(wù)的主線程。
非體感數(shù)據(jù)的存儲通常采用事件存儲的技術(shù)路線。事件存儲,通過將實體狀態(tài)的改變轉(zhuǎn)化為事件消息,以增量形式記錄非體感數(shù)據(jù),可大幅減少需要存儲的非體感數(shù)據(jù)量。但是進行實體狀態(tài)解析時,需要從實體初始狀態(tài)開始,逐一解析與實體相關(guān)的事件消息,逐層遞進式地還原實體狀態(tài),增加了實體狀態(tài)解析的處理復雜度。
本節(jié)針對事件存儲下實體狀態(tài)需要從初始狀態(tài)逐層解析的問題,對非體感數(shù)據(jù)的存儲與解析機制進行研究。
根據(jù)產(chǎn)生時間順序依次存儲各仿真實體的事件消息,形成各實體的狀態(tài)變更時間軸。時間軸上各節(jié)點表示實體相關(guān)的事件消息,實體在該時間點發(fā)生狀態(tài)變更,兩個節(jié)點之間的時間段實體處于前一節(jié)點所表示的狀態(tài),如圖3所示。
圖3 實體狀態(tài)變更示意圖
基于此原理,給定任意時間t,以及當前實體狀態(tài)S,在不經(jīng)由實體初始狀態(tài)及事件消息分步迭代計算的前提下,可通過實體狀態(tài)關(guān)于時間t的等價解算函數(shù),快速解算出實體在時間t的所有狀態(tài)數(shù)據(jù),即:
S_t=F_s(t)
其中t為時間,S_t為處于狀態(tài)S的實體在t時間的狀態(tài)數(shù)據(jù),F(xiàn)_s為狀態(tài)S的等價解算函數(shù)。
等價解算函數(shù)F_s主要涉及實體事件消息的數(shù)據(jù)結(jié)構(gòu)與實體狀態(tài)數(shù)據(jù)的參數(shù)化解析算法,需要根據(jù)各狀態(tài)的特性分別設(shè)定。
將仿真實體狀態(tài)進行歸納整理,梳理各類仿真實體狀態(tài)數(shù)據(jù)的可能變更方式,形成實體狀態(tài)事件消息清單,如表3所示。
表3 實體狀態(tài)事件消息清單
(1)實體位置狀態(tài)
實體位置狀態(tài)的事件消息記錄實體 ID、實體的移動路徑及實體的移動速度。其中,實體的移動路徑需要記錄移動路徑中的每一個路徑節(jié)點位置,任意兩個路徑節(jié)點之間實體做直線移動。每當實體重新進行尋路計算時,會產(chǎn)生一個新的實體位置狀態(tài)事件消息。
解析實體位置狀態(tài)時,根據(jù)時間參數(shù)t對實體路徑進行位置插值采樣,以此作為實體位置狀態(tài)的等價解算函數(shù)。首先,根據(jù)實體的移動速度,計算在時間t,實體位于哪兩個路徑節(jié)點之間。該計算可通過對路徑節(jié)點以抵達時間順序排序后,采用二分搜索算法計算得到。之后,計算在時間t,實體完成位移的百分比,可通過對時間t進行歸一化得到。最后,根據(jù)上一步計算的位移百分比,計算出實體的當前位置。
(2)實體朝向狀態(tài)
實體朝向狀態(tài)的事件消息記錄了實體 ID、實體朝向兩項數(shù)據(jù)。當實體朝向發(fā)生改變時,會產(chǎn)生一個新的實體朝向狀態(tài)事件消息。該事件消息直接獲取實體ID與新的實體朝向狀態(tài)數(shù)據(jù),并記錄于事件消息中。
解析實體朝向狀態(tài)時,由于實體在狀態(tài)持續(xù)時間內(nèi)不會發(fā)生朝向改變,因此實體朝向狀態(tài)的等價解析函數(shù)與時間t無關(guān),可直接返回事件消息記錄的實體朝向。
(3)實體動畫狀態(tài)
實體動畫狀態(tài)的事件消息記錄了實體ID、實體動畫ID及動畫播放時間(即,完整播放一遍動畫所需的時間)。實體動畫狀態(tài)是實體行為狀態(tài)的直觀表現(xiàn)。每當實體行為發(fā)生變化時,實體的動畫狀態(tài)也會相應(yīng)改變,產(chǎn)生一個新的實體動畫狀態(tài)事件消息。事件消息獲取實體ID、實體動畫ID及動畫播放時間,記錄于事件消息中。
解析實體動畫狀態(tài)時,根據(jù)時間參數(shù)t對實體動畫序列進行插值采樣,以此作為實體動畫狀態(tài)的等價解算函數(shù)。首先,計算在時間 t,實體動畫播放時間占動畫序列總長度的百分比。如果時間t不超過動畫序列單次播放所需時間,則直接計算時間百分比;如果時間t超過動畫序列單次播放所需時間,則考慮動畫循環(huán)播放的情況,需要從時間t減去已完成的動畫播放時間,再計算時間百分比。然后,根據(jù)時間百分比對動畫序列進行線性插值采樣,獲取當前實體動畫狀態(tài)。
(4)實體生成與銷毀狀態(tài)
實體生成狀態(tài)的事件消息可以刪除,改為通過解析實體其他狀態(tài),替代實體生成狀態(tài)的解析,以進一步優(yōu)化壓縮非體感數(shù)據(jù)的存儲編碼。當能夠解析出實體位置、旋轉(zhuǎn)等其他狀態(tài)時,表明實體存在,需要生成實體,反之實體不存在,應(yīng)銷毀實體。
本文研究了基于虛擬仿真的多人協(xié)同訓練數(shù)據(jù)存儲技術(shù)。針對體感數(shù)據(jù),形成了高效的壓縮編碼能力和合批存儲能力,有效降低訓練數(shù)據(jù)在網(wǎng)絡(luò)傳輸與存儲訪問時對系統(tǒng)產(chǎn)生的數(shù)據(jù)處理壓力。針對非體感數(shù)據(jù),提出了訓練數(shù)據(jù)的參數(shù)化解析機制,實現(xiàn)基于時間參數(shù)的實體狀態(tài)解算能力。在軍事仿真訓練領(lǐng)域,該研究成果將有效支撐虛擬仿真訓練系統(tǒng)的復盤與評估,幫助用戶深入了解訓練情況,開展訓練分析,從而提升訓練效能。