倪 昱,金建海,單威俊
(中國船舶科學研究中心,江蘇 無錫214082)
目前,對于虛擬實驗結果的可視化,一般通過商業CAE仿真后處理軟件來實現,包括MSC.Patran,EnSight,Tecplot,Femap等。這些商業軟件數據可視化功能已經比較全面,但是其可視化的具體方法和代碼并不開放,不能很好地應用于艦船水動力虛擬試驗中個性化的功能要求,同時針對水動力虛擬試驗而言,其可視化顯示效率還有改進的余地。
因此,在中國船舶科學研究中心“艦船綜合水動力虛擬水池試驗技術系統”的開發過程中,運用自主設計的相關算法或改進已有算法,實現了水動力虛擬試驗中大規模有限元模型及其結果信息的快速顯示。其中試驗結果可視化的關鍵技術主要包括虛擬試驗模型可視化技術、標量試驗結果可視化技術及矢量試驗結果可視化技術。本文分別就這三方面,討論虛擬試驗結果的可視化關鍵技術及其實現算法。
CFD的結果數據是在建立網格的基礎上得出來的,因此,進行數據可視化就需要己知流場中的網格數據。因此虛擬模型可視化是試驗結果可視化的基礎。
在計算機圖形學中,對于三維幾何模型的可視化,一般是通過OpenGL函數繪制點、線和多邊形等基本的幾何圖形來實現的。但在艦船虛擬試驗中幾何模型一般比較大[1],本文使用“三維模型外表面提取實現算法”和“網格消隱算法”,對于三維模型的內部單元和被遮擋的外部單元進行消隱,以提高模型的顯示速度和效果。
三維網格模型是由三維網格單元組成的,由于在三維模型可視化過程中需要顯示的只是所選擇的計算區域外表面的信息,因此三維網格數值模擬計算結果可視化快速實現問題,就轉化為快速的判斷在三維網格中哪些單元面是計算域外表面,以及哪些外表面可見的問題。
在三維模型網格中,內部單元面屬于并只屬于兩個單元;外部單元面只屬于某一個單元。形成結構外部單元面的一般方法為先形成結構中所有單元的單元面,然后對各個單元面進行比較,節點組成相同的面即為內部單元面,剩余的即為外部單元面。隨著網格單元數目的增加,這種方法的運算量將呈幾何級數增加。
本文使用了一種最小節點相關面表的方法,可快速得到位于結構表面的單元面的集合(且稱之為結構邊界面集合)。
步驟1。建立一個節點相關面表H(node)=(H1,H2,…,Hn)。
步驟2。按照后處理模型數據結構的設計要求,形成單元的各個單元面;將各個單元面分別加入節點相關面表;各面的第一個節點的整體編號即為其在節點相關面表中所屬的節點。對所有單元進行上述處理后,就形成了結構的最小節點相關面表。
步驟3。剔除內部單元面,形成外部單元面即結構邊界面。事實上,由于單元面的第一個節點是該單元面中節點號最小的節點,因此用上述方法形成的節點相關面表中,各表項是相互獨立的,即在不同的節點的相關面中沒有重合的單元面,重合的單元面只可能出現在相同節點的相關面中。對于某一節點而言,其相關面的數目是比較少的,這樣就大大減少了單元面重合判斷的計算量。對非空的Hi中的各相關面進行比較,剔除其中包含的節點的整體編號完全相同的單元面,剩余的即為結構的邊界面的集合。
目前主要的消隱算法有:Z緩沖區算法、畫家算法、掃描線算法和區域采樣算法。在這些經典的消隱算法中,Z緩沖區(Z.buffer)算法比較適合于處理結構化網格的消隱問題。
Z緩沖器中每個單元的值是對應像素點所反映對象的z坐標值。Z緩沖器中每個單元的初值取成z的極小值,幀緩沖器每個單元的初值可放對應背景顏色的值。圖形消隱的過程就是給幀緩沖器和Z緩沖器中相應單元填值的過程。在把顯示對象的每個面上每一點的屬性(顏色或灰度)值填入幀緩沖器相應單元前,要把這點的z坐標值和Z緩沖器中相應單元的值進行比較。只有前者大于后者時才改變幀緩沖器的那一單元的值,同時Z緩沖器中相應單元的值也要改成這點的z坐標值。如果這點的z坐標值小于Z緩沖器中的值,則說明對應像素已經顯示了對象上一個點的屬性,該點要比考慮的點更接近觀察點。對顯示對象的每個面上的每個點都做上述處理后,可得到消除了隱藏面的圖。
虛擬試驗模型網格顯示及消隱的算法可以描述為
1)將三維模型外表面數據讀入動態分配的數組,即上文建立的結構的邊界面的集合;
2)建立集合中各個單元面的法向量;
3)利用OpenGL基本庫提供的圖元繪制函數構造幾何圖元;
4)利用OpenGL庫函數實現實體的各種變化操作,包括幾何變換、投影變換、裁剪視區變換等,利用Z緩沖區算法來實現消隱;
5)建立光照模型。OpenGL把光照細分為4個獨立組成部分:環境光、發射光、散射光、反射光,在這4部分的共同作用下形成所要求的光照效果。
大部分的流場數據,都是通過數值求解流體模型方程Navier-Strokes方程、Euler方程等得到的,其中絕大部分是標量,如溫度、壓強等。對于流場標量數據的可視化處理,最重要的是云圖的顯示方法[2]。
艦船虛擬試驗生成的結果文件,一般數據量都比較大,甚至可能是大規模模型,而且可能會在某些區域的數據場變化劇烈。因此對于云圖的顯示,本文提供了兩種方法:①顏色是連續變化的,采用基于三角形的單元網格填充法;②顏色是分段離散的,采用改進的基于三角形的區域填充法。
2.2.1 顏色是連續變化的
1)查找表繪制。采用如圖1所示的線性的物理量-顏色映射方法。其中F min表示場量最小值,F max表示最大值,F min用藍色表示,F max用紅色表示,其中間值F mid一般用綠色表示。(F min,F max)整個區間內的值使用的顏色都是采用線性插值。

圖1 顏色連續線性變化
2)模型云圖繪制。在繪制模型網格時,采用基于三角形的單元網格填充法,把每個網格節點上的物理量轉化成顏色表中對應的某一種顏色后,單元內部每個空間點上的值,運用OpenGL相關函數,自動使用向內Lagrange線性插值的方式完成,見圖2。最終實現的效果圖如圖3。
2.2.2 顏色是離散分段的

1)查找表繪制。采用如圖4所示的線性的物理量-顏色映射方法,其中F min與F max分別表示場量的最小值與最大值,將F min用藍色color(0,0,255)表示,將F max用紅色color(255,0,0)來表示,其中間值F mid一般用綠色表示。(F min,F max)整個區間內的按照劃分段數,按照一定的階梯分成有限個單一顏色。

圖4 顏色按梯隊逐漸變化
2)模型云圖繪制。在繪制模型網格時,采用改進的基于三角形的區域填充法,依次獲得三角形網格(四邊形可以當做兩個三角形處理)。每個節點上的物理量轉化成顏色表中對應的某一種顏色后,如果它們在同一個顏色范圍內,則直接填充,此時三角形網格就一種單一的顏色;如果它們處于不同的顏色區間,求出交點,并依次用不同顏色填充三角形被分割之后的兩個部分,這兩種不同顏色的分界線,其實也就是等值線。最后實現的效果圖見圖5。
在艦船虛擬試驗的結果數據中,除了標量數據,還有大量的矢量結果數據。矢量的可視化方法與標量不盡相同,它既要顯示物理量的大小,又要顯示物理量的方向[3]。

圖5 顏色離散變化效果
矢量可視化方法一般可以分為點圖標法、矢量線法、特征法和紋理法。按照艦船虛擬試驗系統的要求,本文提供點圖標法、矢量線法兩種最常用方法的矢量可視化技術。
點圖標是最直觀的顯示矢量數據的方法。對于每一個采樣點,采樣點處矢量的大小和方向可以通過具有大小和方向的圖標(一般是箭頭)來表示。對矢量場進行映射時,用箭頭的長短和方向來表示矢量的大小和方向。
在二維矢量場中,箭頭可以很好地反映出矢量的方向和大小,在計算流體力學中箭頭表示法應用較多。在三維矢量場中,對于數據量大、采樣密集的矢量場,過多的箭頭會導致像雜亂無章,顯示結果不理想,但如果顯示的箭頭太少,又會丟失一些數據信息。
有兩種方法可以解決這個問題,一種方法是使用低分辨率對矢量場重新采樣,減少需要顯示的箭頭數量;另一種方法是只對關注的局部矢量場數據進行可視化處理。另外,流場的矢量場,通常在某些區域變化很大,導致這些區域的部分箭頭重疊,這樣的矢量圖在細節上不準確,且難以辨識。可以通過將矢量的大小非線性映射到箭頭長短上的方法來解決這個問題。
綜上所述,矢量場點(箭頭)映射算法可描述如下。
1)計算出流場控件網格數據點上的矢量值;
2)搜索所有網格數據點矢量的最大值和最小值;
3)將矢量大小非線性映射為箭頭長短;
4)計算箭頭坐標的旋轉方向,旋轉箭頭。
其實現的效果見圖6。

圖6 點圖標法效果
矢量線法源于試驗型流場的可視化技術[4]。與試驗方法類似,矢量線包括流線、時線、脈線和跡線。艦船虛擬試驗數據,一般都需要進行流線的顯示,因此本文將給出流線的顯示技術[5-6]。
流線指的是某一瞬時的這樣一條曲線,曲線上的每一個點的速度矢量,總在該點與曲線相切。數值積分法是生成流線最常用的方法,整個過程可以看成是選定初始位置,然后通過數值積分依次獲取所有的質點,連接所有的質點就能夠獲取隨時間變化的曲線。
流線的計算包括3個主要過程。
1)速度插值。在求解流線時,由于速度是定義在離散的網格點上,當需要得到空間中任意一點的速度時,需要對速度插值。常用的插值算法主要有線性基函數插值方法、三次樣條法、面積加權法等。由于面積加權法一般用于三角網格單元中,精度可以控制的比較高,同時速度又快,所以本文采用面積加權方法。
面積加權法的原理如圖7所示。

圖7 面積加權法
設三角形內一點P,要得到該點處的數值。通過將三角形的各頂點與該點相連形成三個三角形,然后利用它所對應的小三角形的面積占總面積比例決定這個三角形的每個節點的權值,即


式中:wA,wB,wC——P點在△ABC中的面積坐標。
要使得面積坐標的3個分量(wA,wB,wC)在0~1之間,只有讓P點位于三角形△ABC內。
2)數值積分。常用的流線積分方法有Euler法、二階Runge-Kutta法和四階Runge-Kutta法等。可以依據計算精度和計算效率來進行選擇流線積分的階數和步長,為了解決流線跟蹤過程中的效率與精度之間的問題,本文采用變步長的自適應積分方法,見圖8,可以得到公式

圖8 流線積分過程中的自適應步長
積分(步長h)有

假設A、|V0|分別為流線起點所在三角形單元以及流線起始點的速度大小,則可以推導出初始積分步長為
3)三角網格中的點定位。三角網格中的點定位十分重要,其算法效率的高低直接關系到整個流線生成的算法的效率。假設一點P的坐標,該點坐標在物理空間內,為了獲取P點所在的三角形單元以便插值計算得到該點的速度值,需要進行一次點定位操作。這樣導致在整個流線構造過程中每一個點都要執行一次點定位算法。因此有必要對該過程進行簡化。本文充分利用Delaunay網格三角化的優勢,Delaunay三角網格共一條邊最多只有兩個三角形,在設計數據結構時,將三個頂點的指針和該三角形公共邊所在的另一個三角形的指針記錄在三角形數據結構中。當該三角形的邊位于邊界上時,則將相對三角形指針設為NULL。本文采用基于公共邊點定位快速算法,來判斷流場空間中的一點位于哪個三角形單元中。
基于公共邊點定位快速算法的描述如下。
步驟1。在三角形單元幾何的鏈表T上任意取一個三角形A,作為搜索出發點。
步驟2。取流線上的任意一點P。
步驟3。計算點P在A中的面積坐標:根據坐標的正負可以判斷出點P與三角形對應的位置關系;如果為正,則說明點在三角形內,停止搜索,輸出A,結束。如果為負,說明點在此三角形外,并且能夠獲知公共邊信息。根據鄰接拓撲關系找到此三角形共此邊的鄰接三角形,并以鄰接三角形為出發點A繼續搜索,轉到步驟3。
步驟4。算法結束。
假設三角剖分后共由n個三角形單元組成,若利用傳統算法判斷點位于哪個三角形中的算法復雜度為O(n)。若領用本文所采用基于公共邊點定位快速算法,算法效率能夠達到通過比較可以得知,若三角形單元的個數越大,則本文所提出的算法的效率就越高,使用該算法可以大大加快流線的追蹤速度。
整個流線生成的具體算法如下。
步驟1。給定流線生成的種子點。
步驟2。對于每個種子點P,調用基于公共邊點定位快速算法,找出包含P點的三角形網格單元。
步驟3。當P點不是臨界點時并且P點在流場邊界內,則①P點處的速度矢量值通過插值求得,同時根據P點處的速度以及P點所在的網格大小確定需要積分的步長;②采用自適應步長數值積分方法計算下一步位置點P',同時存儲P'點坐標,令P=P';③采用基于公共邊點定位快速算法,找出包含P點的三角形網格單元。
步驟4。算法結束。
在中國船舶科學研究中心開發的“艦船綜合水動力虛擬水池試驗技術系統”基礎上,研究了艦船虛擬實驗結果的可視化關鍵技術,重點介紹了其中的關鍵算法,包括三維模型顯示、云圖顯示、矢量顯示等。通過這些關鍵技術的突破和有機整合,不僅成功實現了虛擬水池試驗結果可視化的基本功能要求,而且能獲得更快的顯示速度。
上述可視化研究主要針對虛擬試驗結果數據的后處理,今后將在試驗結果的交互式方面做更多研究工作,使用戶可以通過交互方式修改原始數據、邊界條件或其它參數,實現用戶對虛擬實驗過程的交互控制和引導。
[1]LEE SY,LEE S,NISHIDO S.Development of a new simulation method of mold filling based on a body-fitted coordinate system[J].Cast Metals,2002,15(4):389-393.
[2]李建波,陳健云,林 皋.針對三維有限元數據場的精確后處理算法[J].計算機輔助設計與圖形學學報,2004,16(8):1169-1175.
[3]WARD M O.A taxonomy of glyph placement strategies for multidimensional data visualization[J].Information Visualization.2002(1):194-210.
[4]ROBERT SL.Interactive 3D flow visualization based on textures and geometric primitives[D].Vienna,Austria:Vienna University of Technology,2004.
[5]吳曉莉.面向空間遙科學實驗的流場可視化技術研究[D].長沙:國防科學技術大學,2007.
[6]崔加勝.流線可視化技術的研究與應用[D].鎮江:江蘇大學,2008.