張春明,楊天鴻
(1.東北大學資源與土木工程學院,沈陽 110006;2.東北大學資源與土木工程學院實驗中心,沈陽 110006)
東北大學金屬礦山巖石力學與安全開采虛擬仿真教學實驗中心2016年1月成功入選教育部國家級虛擬仿真實驗教學中心,我們自主研發(fā)的多款沉浸式多通道虛擬教學軟件成功地用于多門本科生課程的實驗教學,使學生可以實時地對虛擬空間的對象進行操作并得到反饋,加深學生對采礦生產(chǎn)工藝、基礎理論和巖石力學問題的理解,對改善實驗教學理念、開辟創(chuàng)新實驗教學新思路、改進實驗教學效果、促進教學實驗室建設與發(fā)展具有重要意義。值得一提的是,我們在虛擬現(xiàn)實教學軟件開發(fā)過程中使用的技術方法同樣適用于礦業(yè)虛擬現(xiàn)實軟件的開發(fā),如開采優(yōu)化設計、生產(chǎn)設備調度、人員培訓、事故過程模擬、各種逃生救災方案優(yōu)選對比等。總之,產(chǎn)學研相結合的應用前景十分廣闊,這也是本文的宗旨所在[1-3]。
國內礦山用戶早已開始使用三維礦業(yè)軟件進行CAD輔助設計、礦山地質建模、露天采礦設計、地下采礦設計和采掘計劃編排等。考慮到自主版權和本地化等因素,也涌現(xiàn)出一批優(yōu)秀的國產(chǎn)軟件,而專為國內用戶量身打造的3DMine三維礦業(yè)工程軟件更是其中的佼佼者,其創(chuàng)新的設計、簡單易用的接口和廣泛的兼容性,使之成為礦山工程師手中必備的利器。另一方面,隨著虛擬現(xiàn)實技術的不斷完善,其應用早已廣泛深入到礦業(yè)領域當中,但應用數(shù)量遠遠不能滿足實際需要,這是由研究對象、研究目標和應用需求決定的。因此,人們迫切需要在新建或已有的礦業(yè)應用軟件中引入虛擬現(xiàn)實技術,實現(xiàn)工作成果可視化,并打造出前所未有的立體視覺體驗[4-9]。這首先要求開發(fā)的虛擬現(xiàn)實應用軟件必須支持立體顯示技術,以獲得更為逼真的效果。其次,必須能夠實時、動態(tài)地生成具有景深感的立體場景,并且能夠實現(xiàn)實時互動,而不是像普通立體電影那樣需事先生成立體影片然后簡單地靜態(tài)播放。
考慮到工作量和成本等因素,礦業(yè)虛擬現(xiàn)實應用軟件的開發(fā)不應片面強調從底層做起,而是要更多采用專為虛擬現(xiàn)實、科學仿真、計算可視化等高性能圖形應用而開發(fā)設計的虛擬現(xiàn)實軟件開發(fā)平臺。如果用戶有程序開發(fā)基礎,可以選擇OSG等開源虛擬現(xiàn)實開發(fā)平臺,反之,可選擇VRP、Vizard、Virtools和U3D等可視化虛擬現(xiàn)實開發(fā)平臺。對于礦業(yè)工程師來說,應盡可能使用可視化開發(fā)平臺做開發(fā),減少在編寫與行業(yè)無關的源代碼上花費的時間,以便集中精力解決專業(yè)問題,取得事半功倍的效果。眾所周知,虛擬現(xiàn)實應用軟件的開發(fā)一般分成兩種開發(fā)模式:一種是完全在虛擬現(xiàn)實開發(fā)平臺上進行,利用其提供的腳本語言進行定制,以實現(xiàn)所需的專業(yè)功能,但限制較多;另一種是以通用語言作為宿主語言來調用虛擬現(xiàn)實開發(fā)引擎,既可解決虛擬現(xiàn)實平臺固有的限制問題(局限于虛擬現(xiàn)實功能和羸弱的腳本語言能力),又能充分發(fā)揮通用編程語言的優(yōu)勢(功能可以擴展到任何領域),而且對開發(fā)出的軟件在功能上沒有任何限制。我們采用的就是這種開發(fā)模式,它能集眾家之所長,是開發(fā)礦業(yè)虛擬現(xiàn)實軟件的一次有益嘗試。中視典數(shù)字科技有限公司開發(fā)的VRP是首個國產(chǎn)商用虛擬現(xiàn)實三維引擎,也是擁有自主知識產(chǎn)權的完全本地化的虛擬現(xiàn)實開發(fā)平臺。它可以直接導入其他建模軟件制作的三維模型,也可以方便地使用其他軟件(如3DMine等)生成的數(shù)據(jù)處理成果,并且支持主動立體和被動立體技術。在應用開發(fā)方面,VRP同時提供對上述兩種開發(fā)模式的支持。它自帶腳本語言和內嵌LUA腳本編程語言,但在數(shù)據(jù)庫和報表等功能上十分有限,因此,它還另外通過VRP-SDK系統(tǒng)二次開發(fā)包提供了與其他通用編程語言的開發(fā)接口,允許在其他語言中調用VRP提供的完備虛擬現(xiàn)實功能,與此同時,開發(fā)人員可以自由地加入VRP平臺本身不具備的礦業(yè)軟件功能[10-11],而且生成的虛擬現(xiàn)實應用軟件可以脫離VRP開發(fā)平臺獨立運行,減少了用戶成本。在立體顯示技術方面,VRP支持主動立體技術與被動立體技術,它們各有優(yōu)缺點。主動立體技術因其部署簡便而逐漸成為展示類應用的主流,開發(fā)也更為便捷,但主動立體(快門式)顯示模式存在一些固有的弊端,如只能使用VRP平臺本身的界面元素,Windows對話框和其他界面元素由于被信號刷新頻率達120Hz的立體畫面所遮擋而無法顯示,也就無法實現(xiàn)人機交互等。被動立體(不閃式)顯示模式則不存在上述問題,因此,更符合我們現(xiàn)階段的要求。我們使用的是大多影院采用的偏光或偏振式被動立體技術,雖然對投影機數(shù)量要求較多,但只需普通投影機加上偏振片即可,而且配套的偏振光立體眼鏡價格也十分低廉。正是基于以上幾個原因,我們最終決定在VRP二次開發(fā)平臺的基礎上開發(fā)各種沉浸式多通道礦業(yè)虛擬現(xiàn)實軟件。具體地說,只在需要立體顯示時才調用VRP-SDK二次開發(fā)包接口實現(xiàn)被動立體顯示,這樣可以確保所有對話框和Win?dows界面元素正常顯示,解決了主動立體看不到Windows對話框等界面元素及無法與之互動的問題,另一方面還可以盡情發(fā)揮宿主語言的優(yōu)勢。
沉浸式虛擬現(xiàn)實軟件效果逼真,能夠令人沉浸其中,其優(yōu)點不言而喻。要開發(fā)具有沉浸感的礦業(yè)虛擬現(xiàn)實軟件,必須滿足屏幕足夠大、視野足夠寬的要求,即人的視野不易受畫外因素干擾或脫離屏幕范圍。這是普通顯示器無論如何無法實現(xiàn)的,也是我們要采用多通道技術(多通道畫面無縫銜接)的原因所在[12]。
不失一般性,下面以雙通道為例說明多通道大屏幕虛擬現(xiàn)實系統(tǒng)軟硬件搭建和開發(fā)過程。
我們構建的被動立體系統(tǒng)硬件主要包括一塊大型金屬投影幕、兩臺VRP工作站(兩臺配置完全相同的主機)、一臺視頻矩陣切換器、兩臺硬件融合機和四臺被動立體投影機和二臺普通顯示器(當作監(jiān)視器使用),并通過交換機連接成一個內部數(shù)字網(wǎng)絡。矩陣切換器分別與VRP工作站和融合機相連。融合機內左右通道畫面在內部融合后分別生成左眼或右眼視頻信號,再輸出到相應的投影機上。系統(tǒng)體系結構如圖1所示。
圖1 系統(tǒng)體系結構
由于各通道之間要做邊緣融合處理,因此,相鄰投影機的投影畫面需要有部分重疊,且重疊部分寬度應不低于單臺投影機投影畫面寬度的20%。屏幕的最大寬度應根據(jù)下式確定:
屏幕的最大寬度=(0.8×通道數(shù)+0.2)×屏幕高度×單臺投影機分辨率的寬高比
我們構建的被動立體系統(tǒng)是多通道系統(tǒng),在其上運行的多通道程序的安裝和設置也比較復雜。假設我們開發(fā)的礦業(yè)虛擬現(xiàn)實程序命名為礦業(yè)VR軟件,下面簡要介紹其安裝和配置過程。
(1)首先在位于同一局域網(wǎng)內配置完全相同的所有VRP工作站上安裝VRP多通道管理器軟件包,其中一臺VRP工作站安裝netmanserver服務端程序作為多通道被動立體系統(tǒng)的服務端,余下的VRP工作站均安裝netmanClient客戶端程序作為多通道被動立體系統(tǒng)的客戶端。
(2)然后在所有VRP工作站上安裝上“礦業(yè)VR軟件”,安裝路徑必須完全相同。根據(jù)啟動軟件時傳入的參數(shù)不同,該軟件將分別作為(該軟件本身的)服務器端和客戶端運行。即在多通道被動立體系統(tǒng)服務端安裝該軟件的服務端(/S參數(shù)),在多通道被動立體系統(tǒng)客戶端安裝該軟件的客戶端(/C參數(shù))。
(3)由于多通道程序作為VRP多通道管理器NetMan的子進程使用,因此,程序的啟動、調用及參數(shù)設置均需要通過配置多通道管理器Com?mand腳本文件來實現(xiàn)。腳本文件包括由[]分隔的多個節(jié),例如:[2-0]表示其后面為位于NetMan用戶定制界面第三行第一列(行和列均從0開始計算)按鈕所對應程序的參數(shù)。若將該按鈕作為本程序的快捷按鈕,需要將caption設置為“礦業(yè)VR軟件”,即顯示在該按鈕上的文本。然后,設置run命令對應的動作act1和act2。需事先將拷貝到各VRP工作站安裝文件夾下的VRP二次開發(fā)程序可執(zhí)行文件xxx.exe重命名為VRP-Player.EXE,這樣做的好處是netman可以對最大化、關閉程序窗口等進行統(tǒng)一管理,省去了額外編制程序代碼的麻煩。下一步是設置命令行參數(shù),參數(shù)/S和/C分別代表程序作為服務端程序運行和作為客戶端程序運行,命令行最后面的參數(shù)用于指定多通道配置文件所在路徑。最后,通過Inc參數(shù)和exc參數(shù)指定在哪些IP地址的VRP工作站自動運行何種參數(shù)的命令。
(4)在服務端和客戶端主機上進行聯(lián)機多通道調試。從服務端多通道設置對話框左側列表中選擇不同的客戶端以設置其融合系數(shù),如融合寬度、曲面校正等。設置結果保存到多通道配置文件中供多通道程序運行時讀取。
(5)安裝和設置完成后,點擊多通道管理器NetMan服務端程序界面上的“礦業(yè)VR軟件”快捷程序圖標,自動在相應VRP工作站上啟動“礦業(yè)VR軟件”的服務端和客戶端程序。
由于“礦業(yè)VR軟件”使用了多通道,因此在交互操作必須使用同步鼠標,以便所有VRP工作站(各對應一個通道)上運行的“礦業(yè)VR軟件”實例能夠步調一致。而且,即使使用了同步鼠標,也會遇到各種問題。比如,在選擇同一控件時由于各工作站屏幕設置存在差異,也可能導致不同的操作結果,如不同的工作站選擇了不同的記錄等。這就要求所有VRP工作站的屏幕設置(如分辨率等)必須完全相同,Windows底部任務欄設置也必須完全相同,如均設置為“鎖定任務欄”和“自動隱藏”。注意:未經(jīng)特殊處理,切不可使用鍵盤,否則可能引起各工作站步調不一致。好在上述的鍵盤和同步鼠標問題借助一些編程技巧和特殊處理完美地得到了解決,詳見后面說明。
本文所述方法的特點是一次開發(fā),多場合適用,即開發(fā)出的軟件可以適用各種環(huán)境,包括立體和非立體(常規(guī))環(huán)境,以及服務端和客戶端環(huán)境。
(1)在同一命名空間內定義一個全局變量VRMODE,用于表示程序的當前模式或狀態(tài),默認為非立體模式(狀態(tài))。若程序運行時通過命令行傳入的參數(shù)為/S或/C,則表示當前處于被動立體模式(狀態(tài)),且分別作為服務端/客戶端程序運行。對于多通道程序來說,只有一臺VRP工作站作為服務端運行,其余均作為客服端運行。多通道程序的制作有別于一般程序,它要根據(jù)當前運行狀態(tài)(當前程序是作為服務端還是客戶端程序運行)執(zhí)行不同的流程。由于服務端程序與客戶端程序共享同一程序代碼(但運行在不同主機上,分屬不同的進程),因此,換個角度講也減少了分別編程帶來的巨大工作量。最典型的就是采用switch或if語句判斷當前狀態(tài),然后執(zhí)行相應的代碼。
(2)由于采用被動立體模式,因此要顯示出立體效果,無論服務端還是客戶端都必須設置為全屏模式。
(3)創(chuàng)建virtualReality類,并完成VR引擎的初始化,然后判斷VRMODE當前狀態(tài)。如果當前是服務端(為簡化代碼,普通非立體程序也執(zhí)行與服務端相同的代碼,只是沒有立體效果),那么調用VR引擎建立多通道服務器端實例、設置分屏模式(如水平雙屏)、讀取并裝入多通道配置文件、開啟多通道效果和顯示融合區(qū)等。如果當前是客戶端的話,那么用VR引擎建立多通道客戶端實例,連接到服務端并開啟多通道效果。客戶端在連接服務端的同時,服務端會自動將多通道配置參數(shù)推送給客戶端,并與之建立同步。其實現(xiàn)過程流程如圖2所示。
圖2 多通道程序實現(xiàn)流程及演示效果示例
(4)多通道程序一個需要著重考慮的問題是服務端和客戶端之間的同步可能存在差異,導致服務端角色的動作與客戶端角色的步調相差很大,甚至出現(xiàn)客戶端畫面中看不到角色,或者偶而才能看到角色。造成這種現(xiàn)象的根本原因在于程序無法保證服務器端和客戶端在同一時刻運行相同的代碼段,尤其是在內部循環(huán)中根本無法控制服務器端和客戶端始終處于同一循環(huán)步,如服務器端可能運行到第10步,而客戶端則可能才運行到第3步。同時,它也是造成同一幀畫面左右眼畫面不同步的一個重要因素。這些都需要在軟件中采取一定的措施和技巧加以規(guī)避。找到了問題原因,也就找到了解決辦法。首先把客戶端的主動執(zhí)行代碼去掉,然后服務端通過內部通道向客戶端發(fā)送腳本指令來間接執(zhí)行相關代碼,這樣可以保證兩者高度同步。而且要盡可能先讓客戶端執(zhí)行一個動作,然后服務器端再執(zhí)行同一個動作,這是因為向客戶端發(fā)出指令以及客戶端執(zhí)行指令都需要一定的時間。這一點可從示例流程圖中采用骨骼動畫實現(xiàn)的井下工人的一系列動作的執(zhí)行時序上加以體會。經(jīng)過手工同步后,可以確保進入偏光眼鏡的左右眼圖像保持同步,實現(xiàn)多通道聯(lián)動,并且在大腦中形成正確的立體視覺,這也是制作被動立體軟件的難點所在。
(5)多通道程序的鍵鼠同步問題前文已有述及,即采用同步鼠標進行交互操作,并確保所有VR工作站的屏幕設置完全一致,但在實踐中無法保證所有用戶嚴格遵照執(zhí)行,且鍵盤操作的問題也無法解決。因此,真正完美的解決方案還在于主動出擊,只有這樣才能變被動為主動。我們采取的辦法是將所有涉及交互的操作全部放到服務端執(zhí)行,即禁止在客戶端顯示交互界面,僅在程序判定當前為服務端時才動態(tài)顯示出操作界面。同理,對數(shù)據(jù)庫的所有操作,包括界面操作和存取操作也全部在服務端進行??蛻舳瞬伙@示交互界面對程序本身的運行以及對大屏幕的視覺效果沒有任何影響,這一切對用戶都是透明的,用戶無需了解其內部的工作機制。
(6)其他一些技巧問題。比如,VR相機設定為角色跟隨后,會因角色(如井下工作人員)在運動時伴有跳躍動作而出現(xiàn)上下晃動。此時將相機設定為跟蹤一個虛擬模型,其坐標與角色完全重合,且坐標軸方向也設置完全一致(如果設置模型坐標軸時出現(xiàn)z軸與角色z軸方向相反,這時可以將其沿y軸鏡像),最后將虛擬模型設為隱藏。此外,應設置較大的近剪裁面值0.43,以避免場景中的物體遮擋住目標。
通過推進產(chǎn)學研深度融合,我們在礦業(yè)虛擬現(xiàn)實應用軟件研發(fā)方面積累了一定的經(jīng)驗。以下是取得的一些典型成果。
例如,與招金集團下屬夏甸金礦合作完成的“基于虛擬現(xiàn)實技術的礦山圍巖穩(wěn)定性評價系統(tǒng)研發(fā)”獲得2015年中國黃金協(xié)會科技進步特等獎,成為產(chǎn)學研合作成功典范。
圖3 招金集團浸沉式多通道礦業(yè)虛擬現(xiàn)實軟件實例
與河北鋼鐵集團有限公司下屬礦山石人溝鐵礦及司家營鐵礦合作進行露天轉地下開采關鍵技術的科研攻關。隨后將相關科研成果轉化為虛擬仿真場景,成為礦山現(xiàn)場工作人員的培訓資源和學生認識露天轉地下開采過程的重要教學素材。科研成果分別獲得河北省科技進步獎一等獎及中國冶金礦山科學技術三等獎。
與濟南鋼鐵集團下屬張馬屯鐵礦合作,完成整個充填采礦方法的虛擬可視化,以幫助理解填充采礦工藝流程,并整合微震監(jiān)測技術,開發(fā)了微震實時監(jiān)測虛擬現(xiàn)實系統(tǒng)。我們知道,巖石等彈脆性材料在應力作用下產(chǎn)生局部彈性能集中,當能量積聚到臨界值后,會產(chǎn)生裂隙甚至引起破壞,并伴有能量的快速釋放和傳播。原始微震信號經(jīng)由傳感器接收后加以處理和分析,可以實現(xiàn)任一時間段(由起始時間和終止時間確定)、任一時間點、任意能量范圍(由最小原始能量和最大原始能量確定)的微震事件的空間定位和動態(tài)演示,而且可以任意視角觀察處于真三維空間的模型和事件,甚至可以對事件進行逐幀分析,它有助于厘清事件的時序及前后鄰近關系,統(tǒng)計事件時間間隔和距離間隔,找出內在規(guī)律以及預測破壞趨勢。為便于分析,采用能量球對微震事件進行可視化。其中:能量球的位置代表著聲源位置;能量球的大小代表著能級高低;能量球的顏色代表著微震事件發(fā)生的先后次序,顏色越淺表示事件發(fā)生得越早,顏色越深表示事件發(fā)生得越晚,之間的過渡色則代表此期間內發(fā)生的微震事件。為便于逐幀分析,還可顯示能量遷移線(即軌跡線)。