吳有力,袁利毫,徐家哲,周小龍,徐金文
(中國艦船研究設計中心,武漢430064)
海洋石油201船是中國首艘3 000 m深水鋪管起重船,該項目是國內自主設計和建造的第一個深水海洋工程船舶裝備項目。船長204.65 m,型寬39.2 m,型深14 m,設有世界上最先進的DP3動力定位系統,全電力推進并設置了7個推進器,具備3 000 m級深水鋪管能力和4 000 t級重型起重能力。該船不僅可適用于海上石油平臺上部模塊等大件的吊裝與拆除、導管架的輔助下水與就位,最重要的將用于深海海底油氣管道的鋪設、維修等作業。基于先進的仿真技術、網絡技術、系統集成技術和多媒體技術,研究直觀地反應深水鋪管起重船海上航行及作業的特點和規律的駕駛模擬視景仿真子系統[1]。
基于Vega Prime視景仿真主要包括三部分。視景模型的預處理、LynX Prime圖形界面設計和視景仿真程序設計。視景模型的預處理主要有兩個部分即MultiGen Creator三維建模軟件和Creator Terrain Studio(CTS)大面積地形建模;LynX Prime圖形界面設計主要包括基本環境設置、模型初始位置(主要指精細模型在大場景模型中的定位)、常用特效設置(如云、霧、雨、火和聲效等)和大場景應用設置等內容;視景仿真程序設計主要完成整個仿真過程,為用戶提供實時流暢的視景仿真結果,它可以通過Vega Prime提供的API函數直接調用視景模型預處理生成的模型庫,還可以調用由LynX Prime圖形界面設計生成的.acf文件實現對視景模型庫進行控制,通過接收仿真數據對整個場景進行驅動。主要內容包括波浪仿真、海洋特效仿真、大氣環境仿真、碰撞檢測與響應、目標船運動仿真、場景調度與管理、視點切換和渲染場景等內容。基于VegaPrime視景仿真三部分之間的關系及仿真框架設計見圖1。

圖1 基于Multigen Creator和Vega Prime的視景仿真開發流程
建立逼真的三維訓練視景仿真系統需要基于三維建模軟件Multigen Creator和視景渲染軟件Vega Prime平臺進行視景仿真開發,并利用Visual C++.NET 2005開發程序流程和用戶界面。主要分成兩部分:建立三維模型數據庫和開發視景仿真驅動軟件。
采用三維建模軟件MultiGen Creator對201船和地景模型進行建模,不僅有強大的多邊形建模功能,而且有獨創的用于描述三維虛擬場景的層次化OpenFlight數據結構,其模型數據庫可以在獲得極高渲染效率的同時保證實時交互的靈活性[2]。根據201船駕駛模擬系統虛擬場景的特點和層次結構,三維模型庫主要包含以下模型。
1)訓練地形。主要由島嶼、陸地和沿岸背景山脈組成。
2)碼頭景物及周邊建筑。該部分模型主要包括碼頭上的典型建筑物、起吊設備、橋梁、房屋、樹木、岸邊實景模型等。
3)船模型。采用Multigen Creator中的LOD建模方法,對201船分別建立3個不同精度的模型,即遠、中、近三層模型,精度逐漸增高。紋理也根據模型的不同精度,采用不同精度的貼圖[3]。
主要使用放樣工具對201船進行船體建模,放樣工具可以將一組關鍵多邊形平面放樣生成一個三維實體,通過將船體(主要指主甲板以下部分)的一組橫剖面按其位置排號,使用放樣工具即可將船體建立起來,同樣也可以利用船體的一組縱剖面進行放樣建模。上層建筑、甲板設備如主吊、輔吊、托管架模型則需要利用基本建模工具和變換參考網格進行建模;根據主吊、輔吊、托管架的結構特點,設置相應DOF節點;參考設計圖紙進行駕控臺及其操作面板的三維建模,見圖2。

圖2 201船三維模型效果
4)目標船模型和助航標志模型。主要包括油船、貨船、集裝箱船等船型,鉆井平臺,纜樁、燈塔、燈標、方位標志等各類模型。
基于實時仿真軟件Vega Prime3.0和編程開發軟件Visual Studio 2005開發視景仿真驅動,主要開發以下功能模塊:場景漫游、波浪仿真、海洋特效仿真、大氣環境仿真和碰撞檢測。
可以切換至不同視角,以駕駛者視角及第三方不同站位視角觀察船舶運動;根據駕駛模擬系統的特點,以駕駛室為主視點,切換至船艏、船艉、左舷、右舷等多處視點,便于實時查看201船在海洋場景中的航行狀態。
用鍵盤控制視點的切換。實現該功能的程序框架如下。
//按下鍵“2”時,觀察者在駕駛室內觀察船的運動
case vrWindow::KEY_2:
//設置觀察對象
m_pObserver->setLookAt(NULL);
//設置觀察位置,隨Shiptransform運動
m_pObserver->setLookFrom(m_pShiptransform);
/*設置Shiptransform的位置,規定觀察者位于船舶中心點前方181.8 m,上方31.2 m的位置上*/
m_pShiptransform->setTranslate(0,181.8,31.2);
//設置觀察角度
m_pShiptransform->setRotate(0,0,0);
/*設置觀察者在駕駛室中做緩慢的UFO式漫游運動,這種運動模式便于觀察者根據意愿用鼠標移動來轉換視點,以便于看到駕駛室內的全貌*/
m_pShiptransform->setStrategy(vpMotion::find("myMotionUFO"));……
主要模擬與201船航行中的船艏浪花、艉跡等海洋特效。
3.2.1 船艏浪花
通常有兩種類型,成角度的浪花和水平方向的浪花。成角度的浪花是由于船艏劃破水表面時產生的浪花,與水平方向有一定角度,其尺寸大小與船舶干舷、橫梁、船艏寬度、船艏長度、船艏到船艏圓心點位移、吃水線長度、船舶在水中的實際航速、旋轉速率、縱傾角、橫搖角、上下位移等因素有關;水平方向的浪花可以根據粒子系統的船舶興波模型仿真,它與船舶速度、船艏到原點的偏移量、船艏寬度、干舷等有關。各種參數與船舶的對應關系見圖3。

圖3 船艏浪花控制參數示意
3.2.2 船艉艉跡
由于推進器氣穴現象和艉部的拖動所產生的艉跡,船舶速度和推進器轉速越大,艉跡所持續的時間越長,設置相關參數見圖4。

圖4 艉跡控制參數示意
3.2.3 用鍵盤調節海洋參數大小
以浪級的控制程序為例,說明如何實現海洋參數的大小的調節。
case SEA_STATE:
//首先為nValue賦初值
nValue=m_pWaveGenerator->getseaState();
/*每按下“+”(或“-”),nValue就增加(或減少)fSign的一倍,nValue變化的范圍是0~12*/
nValue=vuLimit(nValue+(int)fSign,0,12);
//重置浪級參數為變化后的nValue值
m_pWaveGenerator->setSeaState(nValue);
同理,還可以調節波浪表面風向和風速、有義波高、運動波浪水平位移計算參數、波形、波幅、波峰檢測參數、局部反射影像扭曲因數等海洋參數的大小。
為了逼真地模擬波浪效果,采用實時視景仿真軟件Vega Prime專用的三維動態海洋模塊Marine,其原理是通過一系列正弦波和余弦波疊加,采用快速傅里葉變換(FFT)算法求解疊加值,疊加值表示波的波幅。通過設置影響海況的各種參數模擬不同海況,主要參數如下。
1)海浪的主方向。與風的方向保持一直,波浪沿風的方向傳播。
2)波形態。根據外界因素的不同產生不同形態的波浪。
3)紋理變換因子。控制波浪紋理移動速度,動感更強烈。
4)抑制小波因子。控制波浪表面不同波長的波數。
5)波浪起伏因子。控制波浪水平方向的位移量。
6)能量分布因子。控制波幅與波長的分布,值越大,頻譜的能量部分向更大和更長的波靠攏。
模擬海洋環境可通過創建波浪生成類Marine Wave Generator FFT的實例,即可生成動態波浪效果,可以設置網格單元大小、網格單元的分辨率、風向、風速、波高、浪尖泡沫密度等參數。Marine模塊提供了功能強大的API函數,可以根據海況和蒲福風級的對應參數修改波浪的風度和波高,模擬不同海況下的波浪效果。
另外通過設置Marine模塊Marine Ship類的寬度、與船舶原點坐標的距離、擴散角度、消隱時間等參數來實現船艏浪花、艉跡的海洋特效模擬。
模擬不同的氣象環境,包括晴天、雨、雪、霧等惡劣天氣,提供按航海習慣劃分能見度等級的霧景,日晝光照連續變化,能夠反映白天、夜間、不同能見度等級時的逼真、精細的圖像。大氣環境仿真主要采用粒子系統模擬雨、雪效果,能夠反映風對雨、雪的影響。粒子系統隨著時間的推移,系統中己有粒子不僅不斷改變形狀、不斷運動,而且不斷有新的粒子加入,并有舊的粒子消失。利用粒子系統模擬雨雪特效的流程是:①在固定間隔時間內產生新的粒子加入系統中;②賦予每一新粒子以一定的屬性,其屬性主要包括:位置、大小;運動速度和方向;顏色;透明度;形狀;生命周期;③刪除那些已經超過其生命周期的粒子;④根據粒子的動態屬性對粒子進行移動和變換;⑤繪制并顯示由有生命的粒子組成的圖形[3]。
碰撞檢測軟件主要用于檢測201船是否與訓練場景、目標船只發生碰撞,并將這個信息發送到船舶操縱運動數學模型進行相應解算,調整201船運動姿態。
本系統采用自定義Box型Volume檢測法來測試碰撞。
Vega Prime通過Isector(分扇區)模塊和Volume(卷標)模塊提供了這樣一種機制,它可以在Isector實例所指定的目標和該Isector實例設定的方法所對應的Volume之間進行相交檢測,從而使程序方便地獲得許多有用的相交測試結果。Isector實例中都包含了一個對應的Volume,而在Vega中包括點、線、面在內的幾何圖元都可以用來定義Volume。為了讓系統區分出相交測試的目標對象,Isector和作為目標對象的地形模型的Isector類掩碼必須一致,或至少有一位相同。相交檢測中使用的Volume是由Isector的Method來確定的。本系統的Volume是由多條線段圍成的長方體,其大小和位置需要自己來定義。這需要用到Volume方法,它能關聯一個Volume實例,在運行過程中,把其它類型的Volume簡化為近似的Segment類型的Volume來進行相交測試。
這里用一個長方體盒形區域將船舶的待檢部分包圍起來,通過控制長方體對角點的坐標來控制盒形區域的大小和位置。使用這種檢測器可以良好地實現物體間的碰撞效果,防止穿墻。程序的實現過程見圖5。

圖5 程序基本構成
當檢測棒未檢測到碰撞目標時顯示為紅色,一旦發生碰撞,檢測到碰撞的檢測棒呈綠色作為提示,同時船舶急停,用編程的方法制造出巨大的碰撞聲,反饋出發生碰撞的位置信息提示。
對視景仿真平臺進行碰撞檢測要兼顧效率和精度,而在基于Vega Prime的視景虛擬仿真中,Vega Prime自帶的基于相交矢量的碰撞檢測方法在效率和精度上都不盡如人意。盒型檢測體與海洋船舶船體的下部結構形狀相似,因此設置適當的Box型檢測體恰好能將船體下部包圍起來,同時提高了碰撞檢測的效率和精度,從而獲得較好的環境真實性和用戶沉浸感。
系統采用三通道圖像生成系統,水平180°、垂直40°視場角視景。為了使訓練效果最佳、臨場感覺更逼真,需要將幾個投影通道進行水平拼接,從而得到連續的全景效果。每一通道的圖像由1臺計算機產生,如果生成的圖像相差太大,拼接后形成的畫面就不是一個整體。因此,多通道同步技術是系統的一個難點。
采用三通道圖形生成系統—主要由1個主節點計算機和3臺圖形節點計算機組成。由主節點計算機負責向從節點計算機發送視點參數和場景控制命令,保證視景畫面實時更新和各圖形顯示通道應能夠精確同步,不能出現肉眼可察覺的延遲或使場景出現跳躍感,每個通道都要達到30幀以上刷新速率以滿足用戶交互的需要,見圖6。

圖6 三通道視景硬件系統結構
3.6.1 Vega Prime DR模塊實現原理
Vega Prime分布式渲染(DR)模塊是實現完全同步的多通道應用開發和調度的理想工具,能夠在多臺圖形節點上進行連續一致的渲染,包括能夠通過局域網對多通道應用進行簡單設置和配置的工具DR Utilities(distributed rendering utili)和MPI Agent(multiGen-paradigm agent)。DR Utilies用來設置主機和從機的角色,所在分布式渲染組(Group),所用的虛擬管道(visual pipeline)等等。MPI Agent通過網絡來響應這些設置,完成啟動/關閉應用程序、修改配置、響應主機的參與請求等。Vega Prime DR模塊的同步原理圖見圖7。
3.6.2 三通道視景系統的具體實現

圖7 Vega Prime DR模塊的同步原理
要實現三通道視景仿真系統,需要建立三通道的ACF文件,用DR Utilies和MPI Agent正確的設置主機和從機的參數,利用Vega Prime API函數生成應用程序,最后分別在主機和從機中建立相應的數據庫。
1)建立三通道ACF。在Vega Prime的Lynx Prime面板中創建3個channel,并將它們是視錐體設置為非對稱形式,分別設置左、中、右3個channel的邊界值參數。然后,建立3個Window和3個Pipeline,讓每個通道都對應1個Window和1個Pipeline。
2)配置主從機參數。在主機和每個從機上運行MPI Agent。在DR Utilies設置主機的Role為Master,從機的Role為Slave。將主機和從機的所在分布式渲染組設置為相同,為主機和從機各分配一個虛擬管道(Visual Pipeline),并且這3個虛擬管道的名稱,要和ACF中建立的3個Pipeline名稱相同。
3)生成應用程序。主要代碼如下。
//設置同步標志vuDistributed::setSyncEnable(vuDistributed::SYNC_LABEL_PRE_SWAPBUFFERS,true);
vuDistributed::SetSyncEnable(vuDistributed::
SYNC_LABEL_POST_SWAPBUFFERS,false);
//同步ACF
vuDistributed::setSyncEnable(vuDistributed::SYNC_
IABEL_ACF,true);
//同步時間
vuDistributed::SetSyncEnable(vuDistributed::SYNC_lABEL_TIME,true);
//同步窗口消息
vuDistrihuted::setSyncEnable(vuDistributed::SYNC_LABEL_MESSAGES,true);
//同步輸入設備
vuDistributed::setSyncEnable(vuDistributed::SYNC_LABEL_INPUT,true);…………
4)建立數據庫。將做好的*.exe文件和*.acf文件拷貝到主機和從機中。為了方便,在主機和從機中,將文件放在同一路徑下。
基于MultiGen Creator和Vega Prime仿真軟件平臺開發出了深水鋪管起重船作業視景仿真子系統。采用真實的照片紋理和LOD技術來彌補了為降低內存消耗而減少實體模型面數引起的模型表現力上的不足;自定義Box型Volume檢測法符合船型特點,減少資源浪費,提高了碰撞檢測的效率和精度;逼真的海洋環境和特效模擬,再配上一定的音響效果,使受訓人員通過視覺、聽覺等感官信息獲得接近實船操作的體驗。經過測試,視景仿真系統的穩定性、安全性和實用性均達到了令人滿意的效果。
[1]金一丞,尹 勇.航海模擬器的視景系統[J].大連海事大學學報,2001,27(2):16-20.
[2]洪 光,李洪儒,牟建國.基于Creator三維模型的簡化研究[J].計算機仿真,2004,21(1):57-55.
[3]袁利毫.船舶操縱模擬器視景仿真研究[D].哈爾濱:哈爾濱工程大學,2007.