陳密密
(解放軍61512部隊,北京 100088)
近年來,隨著計算機軟硬件及圖像圖形學技術的迅速發展,三維可視化技術在諸多領域得到了廣泛應用。相對于平面可視化,通過三維可視化技術可以獲取全方位、多層面、多維、多尺度的立體感知,提供更全面、更直觀的信息。
三維物體的建模與可視化是三維可視化技術的重要研究內容之一。3DSMax是使用最為普遍、功能較為全面的三維建模軟件。目前較多的三維可視化系統均是使用3DSMax軟件進行復雜物體的建模,輸出存儲模型數據的3DS圖形文件,結合VC編程開發工具和OpenGL、D3D等三維圖形開發接口讀取模型文件,并將三維物體導入到虛擬場景中。結合近期的三維建模作業任務,筆者研究發現3DS模型文件的信息冗余大,重復存儲的頂點數據多,結構比較復雜〔1〕,尤其是當三維模型相對復雜、數據量比較大時,程序的實時運行效率會受到嚴重影響。
針對3DS模型文件的缺點,本文提出一種新的基于索引機制的三維模型數據組織方法,引入頂點數組和索引數組,實現頂點數據的復用,避免了對共用頂點的冗余處理;另外,在模型顯示的過程中使用OpenGL的緩沖區對象擴展,充分發揮了圖形硬件的加速特性,大大提高了三維模型的渲染效率。
三維建模的目的是為了在虛擬場景中對其進行可視化展現,因而可視化的效率是衡量建模方法優劣的關鍵因素,也是在建模過程中必須要考慮的重要問題。
影響三維可視化效率的主要因素包括:1)模型的復雜程度。模型的精細化表達必然會造成數據量的劇增,從而導致繪制效率的降低,影響整個可視化系統的運行,因而只能在滿足一定繪制速度的條件下建立相應精細程度的幾何外形,以降低可視化的效果為代價換取可視化效率的提升;2)模型數據的組織方式。模型數據組織方式描述的是如何對組成這些物體的幾何圖形數據進行組織,以實現渲染效率的最大化。商業建模軟件如3DSMax、AutoCAD、Maya等,通常都是利用小三角形面片進行實體表面的擬合,將模型描述為若干個多邊形曲面的聯合體,這種數據組織形式結構簡單,但卻存在著大量的冗余信息,隨著模型復雜程度的增加,冗余信息將數倍于有用的信息,嚴重影響可視化的效率;3)模型的渲染方式。在OpenGL三維開發環境中,每渲染一個幾何圖元都要進行許多函數的調用。以三角形為組成模型的基本圖元,每個頂點調用一次函數,則繪制一個三角形至少需要3次函數調用。另外,由于三維物體除了幾何信息外往往還有紋理信息、顏色信息和光照信息,這進一步增加了為每個頂點調用的函數,使得繪制一個三角形時函數調用次數將增加三四倍。對于大部分系統而言,函數調用的開銷很大,因而這種渲染方式會嚴重地影響應用程序的性能。
通過上述分析,在保證可視化效果的前提下,改進三維模型的數據組織方式和渲染方式,是提高可視化效率的有效途徑。為了提高模型數據的讀取速度和顯示效率,模型數據只包含了三維模型兩方面最為重要和必要的信息,即幾何信息和材質信息。為便于更好地描述其組織結構,首先闡述以下幾個定義:
定義1,廣義材質:材質是三維模型與顯示相關的表面屬性信息的統稱,即模型某一部分顏色和紋理信息的集合。模型的顏色信息包括其環境光屬性、散射光屬性、鏡面光屬性、鏡面光反射強度屬性、光澤度屬性和自發光屬性等;紋理信息則主要是指模型紋理貼圖的信息,如貼圖文件的類型、大小、名稱以及是否進行壓縮等信息。每個模型都具有一種或多種材質。
定義2,廣義多邊形:廣義多邊形是模型中具有相同材質的所有三角形面片的集合,各三角形面片之間不需要空間位置上的聯系,如圖1所示,模型中具有材質M1的所有三角形面片 (T1,T2,T5,T11),具有材質M2的(T3,T6,T7,T8,T12),具有材質M3的(T4,T9,T10)分別構成三個不同的廣義多邊形。模型中材質的個數和廣義多邊形的個數是相同的。

圖1 廣義多邊形的定義
定義3,頂點數組:頂點數組是存儲模型中所有各不相同頂點的相關屬性信息的數據集合〔2〕。頂點數組可以有多個,分別對應頂點的不同屬性信息,如頂點的幾何坐標數組、紋理坐標數組和法向量數組等。相鄰三角形的共用頂點在頂點數組中只記錄一次,因而頂點數組中沒有冗余信息。
定義4,索引數組:索引數組是指定訪問頂點數組順序的數組。如圖2所示,通過索引數組來指定構成幾何圖形的頂點在頂點數組中的位置,可以對頂點數據(頂點、法向量和紋理坐標)進行復用,而不是多次存儲,會帶來相當可觀的內存節省;另外在OpenGL中使用索引數組,還可以得到效率上的優化,將這些頂點只轉換一次,避免了共用頂點需要多次指定的問題,從而節省了可觀的轉換時間。

圖2 引用頂點數組的索引數組
根據上述定義和描述,設計如下的模型數據結構進行三維模型的表示,不再以簡單的三角形面片作為擬和模型表面的基本單元,取而代之以具有相同表面材質屬性的廣義多邊形作為表示模型組成的最小單元,并建立每個廣義多邊形的頂點數組和索引數組,從而以最小的信息冗余、最少的函數調用和最少的轉換開銷實現模型三維可視化效率的最大化。該模型數據結構可具體描述為如下形式:

近年來圖形處理器技術的迅速發展不僅帶來了處理速度的提高,還產生了很多全新的圖形硬件技術,各圖形硬件廠商也紛紛通過擴展的方式提供訪問圖形硬件新特性的接口,其中頂點緩沖區對象擴展就是一個典型的例子,該擴展定義了一個接口允許將不同類型的數據,特別是頂點數組數據,存儲在高速的圖形顯卡內存中,從而極大地提高數據傳輸的效率〔3〕。
基于索引機制的三維模型數據組織方法可以充分利用圖形顯卡高效的數據傳輸特性。在可視化的過程中,分別為頂點數據和索引數據映射相應的頂點緩沖區對象和索引緩沖區對象,可以一次發送成塊的數據到圖形顯卡內存中,實現圖形硬件優化的渲染性能,其整體流程如圖3所示。

圖3 三維模型可視化硬件加速實現的基本流程
基于OpenGL 3D圖形應用程序接口和glew擴展函數庫,在VC++6.0編程環境下對本文提出的三維建模與可視化方法進行了編程實現,圖4是對某航天器模型(該模型下載于www.nasa.gov,包括8104個頂點,15392個三角形)進行三維可視化的效果。
為檢驗算法的可視化效率,在DELL Precision 470計算機上進行了八組實驗,將本文提出的方法和傳統的基于3DS文件的三維模型可視化方法進行了對比。

圖4 航天器模型三維模型可視化效果
1)硬件環境:%
%CPU:Xeon,主頻2.99 GHz;
內存:1.0 GB;顯卡;nVidia Quadro FX 3400;
顯存:256M;
顯示器刷新頻率:72 Hz。
2)實驗結果
為便于進行顯示效率的比較,以圖4所示的航天器模型為基礎模型,同時復制多個模型進行顯示,逐漸增大模型整體的復雜程度,表1是分別采用兩種方法的顯示效率比較。

表1 三維模型可視化效率的比較
從上表可以看出,傳統的基于3DS模型的三維可視化方法,由于模型數據組織結構復雜并且可視化過程中沒有得到圖形硬件的優化,其顯示效率受模型復雜程度的影響比較大,隨著模型復雜程度的增加,其顯示效率迅速下降,當模型的復雜程度達到20倍于基礎模型時,該方法已不能達到實時渲染的要求。采用本文提出的基于硬件加速的模型可視化方法,由于其模型數據的組織方式充分利用了圖形硬件的優化特性,因而在可視化過程可以保持較高的渲染效率,隨著模型復雜程度的成倍增加其渲染幀率始終保持在72幀/秒左右,受模型復雜程度的影響極小,適合于復雜物體的建模和可視化。
[1]3D Studio File Format(3DS).Autodesk Inc.www.autodesk.com.
[2]Richard S.Wright.OpenGL超級寶典[M].北京人民郵電出版社,2005:376-580.
[3]董朝.基于可編程圖形硬件加速的若干技術研究[D].杭州:浙江大學,2005.