摘 要: 根據視景仿真" title="視景仿真">視景仿真對建模的要求和特點,論述了如何利用專業實時三維建模軟件MultiGen Creator構建大規模地形和對象模型,以及使用MultiGen Creator提供的OpenFlight API進行輔助建模的方法。
關鍵詞: 建模 視景仿真 MultiGen Creator軟件 三維地形 OpenFlight API接口
近年來,隨著計算機圖形學、計算機網絡技術、仿真技術以及相關硬件技術的迅速發展,視景仿真及建模技術已經在軍事模擬訓練、工程建筑、影視娛樂、醫療和教育培訓等諸多領域得到了廣泛應用。虛擬環境中仿真對象及其場景建模是整個視景仿真系統建立的基礎。參與仿真系統的模型不僅需要能夠逼真地再現真實場景和對象,而且必須滿足實時渲染與交互性的要求,這樣才能使參與者在虛擬現實系統中產生沉浸感。因此,針對虛擬環境建模技術的研究對于視景仿真系統的實現具有重要意義。
在虛擬現實環境中,常用的建模技術主要包括幾何建模" title="幾何建模">幾何建模、物理建模、行為建模、模型分割以及音頻建模等。其中,幾何建模是虛擬環境建模的基礎,行為建模、物理建模等則體現了虛擬環境中模型的特征。幾何建模處理物體的幾何和形狀的表示,研究圖形數據結構與算法等問題。行為建模、物理建模主要處理物體的運動和行為等內在屬性的描述。只有將現實環境中對象的幾何外形和行為規則與其物理屬性有機結合,才能構造出符合仿真應用要求的三維對象模型。同時,所構建的模型還需滿足虛擬建模技術的常用指標———交互顯示能力、交互式操縱能力、易于構造能力的要求。
本文根據視景仿真對建模的要求和特點,論述了如何利用專業實時三維建模軟件MultiGen Creator構建大規模地形和對象模型,以及使用MultiGen Creator提供的OpenFlight API進行輔助建模的方法。
1 MultiGen Creator簡介
MultiGen Creator是美國MULTIGEN-PARADIGM公司推出的專業實時仿真三維建模軟件,它較好地解決了實時運行中真實感與實時渲染的關系,是惟一將多邊形建模、矢量建模和地形生成集成在一個軟件包中的手動建模工具。由于其具備強大便捷的矢量編輯、交互式建模與裝配以及地形地貌生成功能,所以已成為視景仿真領域應用最廣的建模工具。
MultiGen Creator軟件主要由基本建模環境模塊、地形建模" title="地形建模">地形建模模塊和特殊用途模塊組成。其中基本建模環境模塊給建模人員提供一個交互的、可視化建模環境,用戶可以便捷地進行仿真對象建模。地形建模模塊提供了強大的批處理三維地形、地貌生成工具。特殊用途模塊主要包括公路、儀表構建模塊等。
2 基于MultiGen Creator的三維地形建模
三維地形建模是指將一定范圍內適當比例尺的真實地形高程數據、地貌特征數據,根據不同的地形轉換算法" title="轉換算法">轉換算法,結合包含真實地形表面細節的紋理,生成具有一定組織序列、能夠近似表示部分地球表面狀況的多邊形集合。地形建模的整體流程如圖1所示。
2.1 三維地形建模過程
2.1.1 規劃地形數據庫
根據仿真目的和對場景的要求,結合現有實時系統" title="實時系統">實時系統的硬件和軟件平臺性能,在滿足實時性要求的前提下,對應用于仿真系統的整個模型數據庫的多邊形預估。最簡單的多邊形估算方法是:實時系統硬件每秒鐘處理多邊形數量除以幀頻。對于所創建的地形模型而言,通用的規則是將多邊形預算的1/3用于地形模型,1/3用于地物模型(如房屋、樹木等),其余1/3用于場景中的運動物體模型。
2.1.2 地形數據的預處理
目前常用的地形高程數據有美國地質測量局(USGS)的DEM數據、美國圖像地圖局(NIMA)的DTED數據和一些其他來源的數據。這些格式的地形數據不能直接在MultiGen Creator軟件中使用,必須進行處理,轉換成Creator的DED專用數據格式。為此MultiGen Creator提供了相應的轉換工具,如readusgs、image2ded、float2ded、image2ded以及catdma等。
2.1.3 創建地形參數設置
(1)導入DED格式地形高程數據,在相應的高程比例尺上設置顏色、紋理和材質。這些屬性將應用于生成的地形模型。
(2)選擇要創建地形的目標區域,建模人員可以通過鼠標或指定經緯度的方式進行確認。同時,根據仿真的應用類型,確定生成地形的LOD細節層次數目。
(3)設置地圖投影類型。MultiGen Creator提供了五種地圖投影類型:Flat Earth、UTM、Geocentric、Lambert Conic Conformal以及Trapezoidal。用戶可以根據仿真要求和即將創建地形的真實地球區域,選擇最適合的投影方式以減少投影誤差。
2.1.4 地形轉換算法選擇
對地形模型有不同需要的仿真類型,選擇不同的轉換算法和參數,生成地形的多邊形數量和場景外觀也會有很大差異,進而最終影響仿真系統的性能和顯示效果。因此必須根據具體情況選擇最適合的地形轉換算法。MultiGen Creator提供了Polymesh、Delaunay、TCT以及CAT四種三角形化算法將高程數據轉換為地形模型。
(1)Polymesh算法
Polymesh轉換算法根據設定的高程信息采樣率在原始DED文件中進行有規律采樣,以獲得地形多邊形頂點坐標,進而創建矩形網格面的地形模型。一個地形模型的組節點是由X方向乘以Y方向的2×2個地形組節點構成,每四個低級的LOD地形組節點構成更高級的地形組節點,不同的LOD模型組節點包含的地形節點數量保持不變。生成地形的頂點高度根據Z Scale參數對原始的采樣高程數據縮放得到。Polymesh算法提供了四種地形三角形化的方法。Best Fit根據三個相鄰頂點高程相同則生成一個三角形的規則創建地形,生成的地形模型用于地形與海岸線連接的平坦區域。BottomRight/UpperLeft根據SGI Performer中三角形化規則生成地形三角形模型。BottomLeft/UpperRight則按照普通圖形硬件的三角形化規則生成地形三角形模型。QuadsinFlatArea通過四個高程相同頂點形成一個四邊形來代替兩個三角形的規則創建地形。用戶可以根據High LOD Polygon Count參數提示,調整高程采樣率,以控制最高級LOD模型多邊形數量,從而滿足實時系統多邊形預算的要求。
(2)Delaunay算法
Delaunay轉換算法是基于Delaunay三角網的地形生成算法。與Polymesh算法不同,它對原始數據中的每個高程點都進行處理,從最低分辨率的LOD開始生成地形。較低LOD地形模型的頂點被結合到更高級的LOD中,以保持每一個LOD的頂點與更高級分辨率LOD的頂點相符,使不同LOD地形模型之間平滑過渡。通常情況下,生成同樣精度的地形模型,Delaunay算法比Polymesh算法使用多邊形的數量少。
如果需要對山脊和山谷檢測,則構成山脊和山谷的高程點將被加入到三角化處理中。如要保護海岸線,Creator將生成的地形多邊形與海岸線進行相交測試,并將沿海的高程點加入三角化計算中。這一過程重復執行,直到數據中未使用的高程點與相鄰高程點的平均高程的差值小于Terrain Accuracy Tolerance的公差,或者地形多邊形數量達到最大面與組的限制。
(3)CAT算法
CAT轉換算法對Delaunay算法進行了改進。它改變了地形的分塊模式,采用相鄰LOD間的三維變形(Morphing)技術來平滑過渡層次間的切換,可消除瓷片邊界現象。但是只有SGI Performer2.0以上版本才支持此算法。與其他算法不同,CAT算法創建的LOD模型不使用分塊地形,LOD間的切換是在面到面級別的替換,它隨著視點在地形數據庫上的靠近,動態使用較高級LOD的多邊形代替低級的LOD中相應的多邊形,從而保證地形LOD轉換的平滑過渡效果,而不會出現“突躍”現象。
(4)TCT算法
TCT轉換算法實際是一種限制性的Delaunay算法。使用TCT算法創建的地形模型只有一個LOD,因此只能用于批處理地形轉換。與其他算法不同,它可以將地貌矢量特征數據DFD與地形高程數據一起處理,生成包含地貌特征(如道路、河流以及湖泊等)的完整地形模型。地貌特征不是簡單地投影到地形表面,而是成為地表上的一部分。用戶可以選擇隨地形一起生成的地貌特征種類。與其他算法相比,TCT算法所生成地形模型的多邊形數量將顯著增加。
2.1.5 地形模型的生成與測試發布
設置完成創建地形所需的參數和規則后,生成地形模型的工作就由MultiGen Creator自動完成了。生成地形數據庫后,應首先在MultiGen Creator中瀏覽,仔細檢查可能出現的如細長三角形(Edge Slivers)、切換LOD時出現的垂直邊界(Wall/Gaps)等異常現象。對于檢查通過的地形模型還應在實時系統中加載測試,查看系統運行時幀頻是否滿足要求、切換LOD時是否平滑過渡以及地形紋理和地貌特征數據是否符合要求等。如果出現問題,應該調整參數,重新生成地形數據庫,直至滿足系統運行要求。
對于沒有大瑕疵的地形模型,最后仍需對部分地形紋理以及地貌模型進行修正調整,經過反復測試,才能投入使用。圖2為一塊映射地形紋理和地貌數據(公路)的地形模型。
2.2 地形紋理的應用
地形紋理貼圖是增強三維地形模型真實感的一個重要途徑。對于細節層次較低的模型,甚至可以直接使用紋理代替地形多邊形,從而提高地形模型的多邊形使用效率。
滿足MultiGen Creator要求的地形紋理可由衛星、航拍及其他來源的影像資料經過優化處理得到。建模人員可以在地形高程比例尺指定不同高程顏色的同時,進行相應的紋理設置,包含真實地理坐標信息的地形紋理可以采用同樣方式進行映射。另一種方式是使用間接紋理映射,即將地形多邊形的顏色、紋理以及材質等屬性對應到一個特殊圖像文件上,再將圖像文件映射到地形模型。圖像像素顏色與地形多邊形屬性之間的對應關系保存在后綴為.indrect的文件中。在地形轉換過程中,當地形多邊形的頂點與相應的間接紋理控制文件信息匹配時,對應的多邊形屬性會被自動應用到相應的地形多邊形上。
同時,MultiGen Creator提供了多分辨率紋理(mipmap)和索引分塊(clip texture)技術,用來解決因大量應用紋理而消耗內存、影響系統性能的問題。多分辨率紋理是指將對應相同地區的地形紋理分成一組不同分辨率的紋理組。在實時運行中,隨著視點變化,選用相應分辨率的紋理,減少內存使用。紋理分塊技術指將較大的地形紋理進行分塊索引,在應用中根據需要將分塊紋理根據一定算法調入調出內存,從而實現通過紋理的分塊調度來提高系統的運行效率。
2.3 地貌特征的應用
地貌特征主要指存在于真實地形之上的河流、湖泊、森林等自然景觀以及公路、橋梁、建筑等人文景觀。在地形數據庫中添加這些地貌特征,對于增強地形模型的真實性具有重要意義。
目前常見的原始地貌特征數據格式有DFAD、DLG和其他矢量數據。用戶可以使用MultiGen Creator提供的工具,根據需要方便地將所需特征轉換為MultiGen的DFD格式,在地形建模過程中使用。DFD數據格式使用特征類型碼(FID)對地形特征進行分類,每個特征類型碼對應一組定義特征表面材質屬性的代碼(SMC)。兩者結合決定特征數據映射到地形模型上時的紋理、材質以及顏色等屬性。
將地貌特征數據映射到地形模型上的方法主要分為預先映射和事后映射。預先映射主要指在地形模型生成之前設置需要映射的地貌特征。地形的多邊形將圍繞地貌特征生成,例如將河流選擇為預先映射方式處理,則河流會成為地形多邊形的組成部分。這對于地面仿真應用具有更加真實的視覺效果,但是會大量增加地形多邊形的數量。事后映射方式指在地形模型生成之后,再投影所需地貌數據。
3 基于MultiGen Creator的三維對象建模
在計算機輔助設計(CAD)、三維動畫和其他領域,通常使用大量的曲線曲面以及復雜的紋理構建三維模型。但從視景仿真領域的觀點看來,這種基于工程設計或動畫的建模思路,由于沒有考慮渲染效率,根本不能滿足實時系統的要求。使用3DMAX、MAYA等建模工具創建的三維模型,必須進行精簡優化,才能在實時系統中使用。雖然建模人員可以使用MultiGen Creator提供的Vsimplify工具對引入模型簡化,但仍然需要大量繁瑣的手工工作,例如構建適當的LOD、面缺失等問題。因此,多數情況下更多使用MultiGen Creator重新建模。
與MultiGen Creator所提供的三維地形建模中強大的批處理功能相比,在三維實體建模方面MultiGen Creator略顯簡單,看起來不如3DMAX等建模軟件便捷。但建模目的不同,建模思路也不盡相同。MultiGen Creator主要針對實時系統設計,通過高效的層次數據結構、LOD技術以及紋理技術等方面的設計優化,在協調處理模型真實感與實時渲染之間具有其他建模軟件無法比擬的優勢。
使用MultiGen Creator進行對象建模,應在首先滿足實時渲染的基礎上,盡可能地提高模型的逼真度。建模人員綜合運用好MultiGen Creator提供的建模功能,同樣可以構建具有高度真實感的實體模型。
(1)邏輯化層次結構。MultiGen Creator采用的openflight格式是一種高效的邏輯化層次數據結構。因此,建模人員必須針對對象模型的特點,采用模塊化設計方法,合理細分層次節點。這種做法不僅有助于模型的編輯、LOD設置、外部引用以及數據庫的重組和優化,同時也為提高實時系統效率構建了良好的基礎。
(2)LOD技術。LOD是一組代表同一物體不同分辨率的模型組。實時系統在處理模型時,會根據設定的LOD距離切換不同細節層次的模型,從而有效地提高系統多邊形利用效率。因此,在建模過程中合理地設置LOD層次顯得尤為重要。通常的做法是首先構建細節層次最高的模型,然后通過自動(Vsimplify工具)和手工(如構建包圍盒)結合的方式,自高而低地構造不同細節層次模型。
(3)紋理映射技術。使用紋理貼圖代替物體建模過程中可模擬或難以模擬的細節,可以有效地提高模型的逼真度和渲染速度。例如使用透明紋理模擬門窗和欄桿,可以有效地降低模型的復雜度。而利用各向同性構建樹木、標牌等的BillBoard技術,創建的模型僅是單個平面。紋理圖片的來源大多是拍攝實物對象的三維正投影照片,經修正處理得到。需要注意的是,紋理大小應是2的冪次,否則在Vega驅動時無法正常顯示。
在MultiGen Creator環境下也可以進行構建和連接物體的運動建模。Creator提供了DOF技術,DOF節點可以控制其子節點按照設置的自由度范圍進行移動和轉動,使物體表現出合乎邏輯的運動方式。聲音節點也可以在物體建模的過程中加入,從而豐富視聽內容,增強視景仿真的綜合效果。
4 OpenFlight API輔助建模
OpenFlightAPI是MultiGen Creator提供的用于操作Creator和OpenFlight(flt)格式文件的編程接口,它由一系列C語言的頭文件和相應函數庫組成。OpenFlight API提供讀、寫和建立flt格式文件的功能,用戶也可以利用它自定義數據格式及創建插件。在輔助建模方面,使用OpenFlight API可以幫助建模人員以編程的形式方便、準確地完成手工難以完成的建模任務,例如規定弧度的彎曲物體等一些真實尺寸要求較高情況。使用編程方式讀取數據創建控制線、放樣面,再結合手工處理,可以極大地加速建模過程。甚至對于地形模型,也可以使用OpenFlight API進行編程處理。
下面是利用OpenFlight API創建flt文件的部分偽代碼。利用從CAD中導出的數據,在flt文件中創建放樣面,再結合手工處理放樣(Loft),生成精確的機翼模型。圖3為部分放樣和完全放樣的模型圖。
#include ″mgapiall.h″//必須包括此頭文件
mgrec *dbroot,*AerofoilNode,*AFPart1,*pNode,*vNode;
mgInit(&argc,argv);//初始化OpenFlight API runtime
if(!(dbroot=mgNewDb(″XXX.flt″))) {//創建數據庫
mgExit();
}
//創建一組具有層次關系的數據庫節點
AerofoilNode=mgNewRec(fltGroup);
mgAttach(dbroot,AerofoilNode);
AFPart1=mgNewRec(fltGroup);
mgAttach(AerofoilNode,AFPart1);
for(index1<NUMPOLY創建多邊形數量)
{ //創建多邊形節點
polynode=mgNewRec(fltPolygon);
mgAppend(dbroot,polynode);
for(index2<NUMVEX該多邊形頂點數量)
{//創建Vertex節點
vNode=mgNewRec(fltVertex);
mgAppend(prec,vNode);
mgSetCoord3d(vrec,fltCoord3d,x,y,z);
}
……
mgWriteDb(dbroot);//關閉數據庫
mgCloseDb(dbroot);
mgExit();
……
視景仿真已經成為現代仿真技術的一個新的研究領域,在軍事模擬訓練、影視娛樂等諸多領域得到了廣泛應用。虛擬環境中仿真對象及其場景建模是整個視景仿真系統建立的基礎。如何有效地協調實時運行中真實感與實時渲染的關系,是虛擬環境建模的重點。本文就如何使用MultiGen Creator創建高效的三維地形、對象模型進行了討論,同時介紹了利用MultiGen的Openflight API進行編程輔助建模的方法。希望能對業界的同行提供一定的借鑒。
參考文獻
1 王 乘,周均清,李立軍.Creator可視化仿真建模技術[M].武漢:華中科技大學出版社,2005
2 甚 蔚,夏立文.虛擬現實技術[M].北京:北京希望電子出版社,2002
3 MultiGenUser′s Guide[M].Multigen-Paradigm Inc,U.S.A,2002
4 萬 剛.虛擬地景仿真中地物的幾何建模技術[J].系統仿真學報,2001;13(增刊)
5 李 穎,薛海斌,朱伯立等.OpenGL技術應用實例精粹[M].北京:國防工業出版社,2001,45~70
6 曾芬芳.虛擬現實技術[M].上海:上海交通大學出版社,1997