謝云開,孟祥輝,張燕燕,劉青峰,王佳榮,梁世龍
(1.海軍研究院特種勤務(wù)研究所,北京 100072;2.哈爾濱工業(yè)大學(xué)機電工程學(xué)院,黑龍江 哈爾濱 150001)
在虛擬現(xiàn)實環(huán)境中,碰撞檢測用來確定虛擬場景中的物體是否發(fā)生接觸或穿透;依賴檢測結(jié)果,碰撞響應(yīng)負責(zé)根據(jù)物理規(guī)律對仿真實體的運動狀態(tài)或結(jié)構(gòu)特性變化進行仿真[1],為環(huán)境體驗者提供相應(yīng)的視覺或力覺反饋,從而帶給體驗者身臨其境的感覺。因此,精確的碰撞檢測及其響應(yīng)是體驗者與虛擬環(huán)境進行真實交互的重要基礎(chǔ)。
對于大型人在回路的虛擬仿真系統(tǒng)(如飛行模擬器、車輛模擬器等),為同時保證仿真精度和實時性,整個系統(tǒng)的仿真計算往往分布在多個仿真節(jié)點上并行處理,負責(zé)碰撞檢測計算的節(jié)點和負責(zé)碰撞響應(yīng)的節(jié)點常常相對獨立。在這種仿真環(huán)境中,仿真節(jié)點間的周期差異和數(shù)據(jù)傳輸延遲必將造成碰撞檢測和碰撞響應(yīng)的不匹配,導(dǎo)致虛擬場景中實體間的穿透現(xiàn)象,帶來不真實的虛擬體驗。為此,需要對分布仿真環(huán)境下碰撞檢測及其響應(yīng)的一致性問題進行研究。
碰撞檢測及其響應(yīng)直接影響虛擬仿真的真實感與沉浸感,因而一直是虛擬現(xiàn)實及相關(guān)領(lǐng)域重點研究的問題。對于碰撞檢測,相交性計算的加速是研究的重點。其中,基于包圍盒層次結(jié)構(gòu)研究高效的碰撞檢測方法是該領(lǐng)域的熱點方向[2-6],仿真對象包括剛體和柔性體,涉及AABB層次樹,包圍球?qū)哟螛?OBB層次樹,k-DOPs層次樹和混合層次包圍體樹等多種包圍體層次形式。針對包圍體層次結(jié)構(gòu)的特點,并行計算被用來提高算法的效率[7-9]。此外,空間分割方法也常用來作為加速碰撞檢測的工具[10-11]。對于碰撞響應(yīng),其實現(xiàn)則依賴于相關(guān)動力學(xué)仿真的研究[12-14]。在這些研究中,研究者側(cè)重的往往是碰撞檢測的效率與碰撞響應(yīng)的正確性,對分布式仿真環(huán)境下碰撞檢測及其響應(yīng)的一致性研究較少。
針對分布仿真,仿真節(jié)點間的時空一致是關(guān)鍵的基礎(chǔ)性問題,是獲得逼真的虛擬現(xiàn)實環(huán)境及正確仿真結(jié)果的重要保障[15]。相關(guān)的研究圍繞消除網(wǎng)絡(luò)延遲對節(jié)點間仿真一致性的影響展開,主要包括延遲補償和運動預(yù)測[16-18]。前者接收具有延遲的數(shù)據(jù),并通過外插等方式對實際仿真時刻的數(shù)據(jù)進行估算,實現(xiàn)延遲補償;后者在數(shù)據(jù)發(fā)送前對其未來狀態(tài)進行預(yù)測及修正,以彌補傳輸過程中的時間消耗。這些方法有效減少了網(wǎng)絡(luò)延遲的影響及對網(wǎng)絡(luò)帶寬的需求。但是在其針對的分布仿真系統(tǒng)中,每個仿真節(jié)點獨立完成一個或多個仿真實體的仿真,不涉及仿真節(jié)點間對于同一仿真實體的協(xié)同仿真問題。而針對大型模擬器的多節(jié)點并行仿真應(yīng)用,導(dǎo)致不一致問題的原因除網(wǎng)絡(luò)延遲外還包括節(jié)點仿真的不同步,這一點在碰撞過程中尤為突出。因而,本文重點針對這類問題展開碰撞檢測及響應(yīng)的一致性研究。
在分布仿真環(huán)境中,碰撞檢測仿真節(jié)點與碰撞響應(yīng)仿真節(jié)點相對獨立。這種仿真方式會導(dǎo)致碰撞檢測與其響應(yīng)不匹配的問題,生成與真實體驗相悖的仿真結(jié)果。為分析分布仿真環(huán)境中碰撞檢測與響應(yīng)不匹配的原因,將分布式仿真與集中式仿真的仿真流程進行對比,見圖1與圖2。
圖1 集中式仿真實現(xiàn)流程圖
圖2 分布式仿真實現(xiàn)流程圖
如圖1,在集中式仿真過程中,碰撞檢測模塊根據(jù)當前運動狀態(tài)進行計算,若沒有檢測到碰撞則進行基本動力學(xué)仿真,并使用解算結(jié)果更新實體狀態(tài),完成可視化;若檢測到碰撞則進行碰撞響應(yīng)動力學(xué)解算,對先前結(jié)果進行修正,并使用新結(jié)果進行實體狀態(tài)更新和可視化。碰撞檢測及其響應(yīng)在同一個仿真循環(huán)內(nèi)完成,整個仿真過程不存在二者不匹配的現(xiàn)象。
如圖2,在分布式仿真過程中,動力學(xué)仿真部分只負責(zé)動力學(xué)仿真解算,碰撞檢測結(jié)果來自于可視化仿真部分。由于二者仿真周期不一致且存在數(shù)據(jù)傳輸延遲,因此碰撞檢測結(jié)果對應(yīng)的是若干動力學(xué)仿真循環(huán)前的運動狀態(tài),無法在同一個仿真循環(huán)內(nèi)獲得當前碰撞狀態(tài)并及時更新運動狀態(tài)。可視化仿真部分負責(zé)碰撞檢測和實體狀態(tài)更新,在一個仿真循環(huán)中無論碰撞與否都使用當前循環(huán)接收的動力學(xué)解算結(jié)果更新實體狀態(tài)。與集中式仿真對比可看出,若沒有發(fā)生碰撞,二者的區(qū)別僅在于動力學(xué)仿真與可視化仿真間的網(wǎng)絡(luò)傳輸延遲;若發(fā)生碰撞,則除去兩仿真模塊間信息交互的網(wǎng)絡(luò)延遲外,還存在仿真循環(huán)間的不同步現(xiàn)象。
圖3進一步說明了這種循環(huán)不同步的現(xiàn)象。假設(shè)不考慮網(wǎng)絡(luò)傳輸延遲,對于第n個可視化仿真循環(huán),其接收到第n個動力學(xué)仿真循環(huán)的解算結(jié)果并檢測到碰撞。根據(jù)分布式可視化仿真的循環(huán)流程,其將碰撞檢測的結(jié)果發(fā)出,并在循環(huán)內(nèi)部繼續(xù)使用已經(jīng)接收的動力學(xué)仿真結(jié)果進行實體狀態(tài)更新及可視化。由上述分析可知,實體狀態(tài)更新所使用的仿真結(jié)果是沒有考慮碰撞響應(yīng)的,真正的碰撞響應(yīng)仿真結(jié)果要等到第n+m個循環(huán)后才能夠獲得。這樣第n幀的虛擬場景的碰撞檢測和響應(yīng)是無效的,即碰撞檢測和碰撞響應(yīng)不匹配,從而便會出現(xiàn)實體間的穿越現(xiàn)象。這種現(xiàn)象在網(wǎng)絡(luò)延遲和碰撞響應(yīng)解算的作用下會進一步凸現(xiàn),嚴重影響交互的真實感。
圖3 仿真循環(huán)不同步說明
綜上所述,在分布式仿真環(huán)境中,導(dǎo)致碰撞檢測與響應(yīng)不一致性的原因包括分布仿真循環(huán)不同步和網(wǎng)絡(luò)傳輸延遲兩個方面。
針對分布仿真中仿真節(jié)點循環(huán)不同步的問題,提出一種基于運動鎖的仿真對象狀態(tài)更新方式,避免檢測與響應(yīng)不同步造成的穿越現(xiàn)象。
如圖4,對于虛擬場景中的仿真實體,考慮分布仿真,將實體動力學(xué)仿真和碰撞檢測分離,即將仿真對象分為仿真實體A和檢測實體A’兩部分。仿真實體A代表虛擬世界中的仿真對象,由動力學(xué)仿真結(jié)果驅(qū)動;檢測實體A’是仿真實體幾何屬性的復(fù)本,接收相關(guān)參數(shù),用于碰撞檢測計算。在仿真循環(huán)周期內(nèi),檢測實體A’首先接受動力學(xué)仿真結(jié)果,并以此作為碰撞檢測的依據(jù),碰撞檢測計算使用包圍盒層次結(jié)構(gòu)加速[1]。當檢測到A’碰撞發(fā)生時,則對仿真實體A的狀態(tài)進行鎖定,即拋棄當前循環(huán)接收的仿真參數(shù),保持原有運動狀態(tài)。同時,將碰撞檢測結(jié)果反饋回動力學(xué)仿真單元。動力學(xué)仿真單元根據(jù)檢測結(jié)果進行碰撞響應(yīng)計算,對原有仿真結(jié)果進行修正,并將新的實體運動狀態(tài)發(fā)送回可視化仿真單元。此過程往復(fù)進行,直到可視化仿真單元中狀態(tài)更新后的檢測實體A’不再發(fā)生碰撞為止。此時仿真實體A的狀態(tài)解鎖,即使用接收到的動力學(xué)仿真計算結(jié)果更新運動狀態(tài),A與A’狀態(tài)重合。
圖4 基于運動鎖的分布仿真原理圖
針對可視化仿真循環(huán),循環(huán)開始時,來自動力學(xué)仿真的參數(shù)首先更新檢測實體A’,并依據(jù)A’的狀態(tài)進行碰撞檢測,而仿真實體A的狀態(tài)參數(shù)在循環(huán)結(jié)束前根據(jù)檢測的結(jié)果確定。若未發(fā)生碰撞,則在循環(huán)的末端使用當前循環(huán)接收的仿真參數(shù)更新仿真實體A的狀態(tài),整個循環(huán)結(jié)束。若發(fā)生碰撞,整個仿真的流程可描述為圖5,檢測到A’的碰撞后,仿真實體A經(jīng)過n個循環(huán)的運動鎖定后,使用動力學(xué)仿真參數(shù)進行狀態(tài)更新,實現(xiàn)運動解鎖。
對于仿真實體A,其在第N-1個分布循環(huán)中接收仿真參數(shù)進行狀態(tài)更新,該循環(huán)視作N’-1。此后一直等待,直到接收到第N+n個考慮碰撞響應(yīng)的仿真結(jié)果才進行下一次的狀態(tài)更新,該循環(huán)可視為N’。在這兩個循環(huán)內(nèi),碰撞檢測和碰撞響應(yīng)完全一致。對于中間的仿真狀態(tài),仿真實體A一直處于鎖定狀態(tài),更新的僅僅是檢測實體。采用這種強同步的方式,避免了碰撞檢測與響應(yīng)不一致性的現(xiàn)象。
仿真程序具有動力學(xué)仿真和可視化仿真兩個仿真循環(huán)。仿真環(huán)境可模擬可變的網(wǎng)絡(luò)延遲。為驗證本文方法的適用性,網(wǎng)絡(luò)延遲分別為50 ms、100 ms和150 ms。仿真實體受鍵盤指令控制,與虛擬場景中靜態(tài)物體碰撞。
一致性策略的有效性通過記錄經(jīng)過碰撞后分布仿真系統(tǒng)中可視化節(jié)點仿真實體的更新位置與相應(yīng)動力學(xué)仿真節(jié)點實體位置的偏差定量衡量。并且,一致性策略的效果也可由碰撞后實體響應(yīng)狀態(tài)的有效性定性說明。
由表1中結(jié)果可看出,本文方法能夠有效消除仿真節(jié)點間的不同步現(xiàn)象,在不同的網(wǎng)絡(luò)環(huán)境下均能有效保證節(jié)點間的一致性。
表1 不同仿真環(huán)境的仿真節(jié)點位置偏差記錄
本文所研究的基于運動鎖的仿真對象狀態(tài)更新方式,主要適用于分布仿真環(huán)境下仿真節(jié)點間的周期差異造成的碰撞檢測和碰撞響應(yīng)的不匹配問題,實際使用與實驗結(jié)果表明,該方式可有效避免檢測與響應(yīng)不同步造成的穿越現(xiàn)象,能帶來更加真實的虛擬體驗,具有推廣借鑒使用價值。