嵇曉峰,張豐*,王中一,杜震洪,劉仁義
(1.浙江大學浙江省資源與環境信息系統重點實驗室,浙江杭州310028;2.浙江大學地理信息科學研究所,浙江 杭州310027)
洋流是指大洋表層海水常年大規模規律的海流運動,對海洋中物理、化學、生物、地質過程以及氣候、天氣的變化有重要影響。分析和掌握全球洋流時空變化規律可為海洋經濟、軍事等活動提供信息支撐。海洋流場科學計算可視化作為一種視覺表達手段和有效的數據分析方法,可直觀地從海量數據中提取信息,對于揭示全球洋流動態變化規律具有重要意義。
基于稀疏表達思想的流線可視化方法對流場局部細節的中等程度抽象,可以獲得良好的視覺感知,描述流體的時序變化,成為當前流場可視化的研究熱點[1]。TURK 等[2]提出了一種基于圖像的二維流線生成方法,但效率較低;為了得到均勻分布的流線,JOBARD 等[3]設置流線距離表征流線密度,優化了流線的空間分布;LI 等[4]通過流線相似度判斷規則,獲得了能夠表征流場特征的均勻分布流線;為解決三維流場中的遮擋問題,LI 等[5]進一步提出了基于圖像的流線種子點放置策略,提高流線可視化的視覺清晰度。在提升大規模場景下的流線可視化效率方面,聶俊嵐等[6]提出了一種與視點相關的多分辨率流場可視化算法,優化了可視化效果的同時也提升了渲染效率;為避免數值積分,賈志強[7]通過非結構網格與流線求交點的方式有效提升了流線生成速度;樊宇等[8]提出了基于幾何著色器的流線可視化方法,利用GPU的并行計算能力有效提升了流線繪制效率。
上述方法重點關注靜態可視化范疇下的流線空間分布與渲染效率的優化,而靜態可視化方法無法直觀表達流線流向、流速等信息,其表達的生動性、形象性與豐富性受到限制。因此,諸多學者開展了流線動態可視化的研究。何欣[9]用圓錐繪制流線頭部以表示流線流向,并不斷更新流線位置,產生流線流動效果;胡自和等[10]采用示蹤小球在流線上流動的方式呈現流線運動的效果;為進一步提升動畫效果,黃麒林[11]在流線上周期性繪制并更新具有更豐富信息的箭頭圖元等來產生圖元流動的效果,直觀體現流線流向信息。但上述流線可視化方法對箭頭等圖元設置要求較高,易出現視覺遮擋現象,且圖元位置的更新頻率會影響可視化效率,出現動畫不連續等問題。
針對靜態流線可視化方法表達信息受限,動態流線可視化方法易出現遮擋、效率較低的現狀,本文提出了一種基于著色模型實時構造的動態流線可視化方法。該方法基于三維紋理進行流線屬性信息存儲,滿足海量流線屬性信息存儲需求;進一步,設計了面向動態流線的著色模型和流線實時構造機制,通過流線本身的動態可視化,有效改善了傳統的基于圖元位置更新方法帶來的計算開銷和遮擋問題。流線顏色、透明度等映射屬性的設置直觀,體現流場流向、強度分布等特征,增強了可視化效果的生動性與層次感。與現有方法相比,該方法提升了流場動態可視化的渲染效率與表達效果,有助于研究人員探究洋流時空動態變化規律及其傳遞、表達過程。
目前,比較通用的流場數據格式包括Tecplot、PLOT3D、VTK、NetCDF、HDF、CGNS 等。其中,NetCDF 格式具有存儲空間小、讀取數據快、自描述和讀取方式靈活等優點,在大氣科學、水文和海洋等諸多領域作為數據存儲標準[12]。因此,本實驗的全球洋流數據以NetCDF 格式進行存儲。
首先,采用基于相似性的流線布置方法進行流線提取。該方法最早由CHEN 等[13]提出,通過流線相似距離表征流線相似度,相似距離的計算公式為

其中,dsim(p,si,sj)表示流線si的采樣點p與流線sj的相似距離,α為形狀系數,p0,p1,…,pm-1為以p為中心的窗口內流線si上的m個均勻采樣點,q為流線sj上離p最近的采樣點,q0,q1,…,qm-1為以q為中心的窗口內流線sj上的m個均勻采樣點。
基于相似性的流線布置方法,首先產生足夠多的種子點,采用自適應四階龍格-庫塔方法進行流線積分,計算新生成流線上的點與已有流線的相似距離,如相似距離小于自定義閾值dsep或流線到達流場邊界,則停止流線增長;為避免產生閉合流線,該算法還進行自相似性檢查,要求p和q的距離必須小于更小的閾值dselfsep。當流線停止增長后,將其加入已有流線隊列,重復上述過程即可生成均勻分布的流線。
最后,顧及數據存儲及可視化效率的需求,對通過上述步驟生成的流線進行節點重采樣。為在保持流線基本特征的同時較大程度地壓縮數據量,每間隔2個節點采樣1次,獲得具有位置、速度等屬性信息的流線節點。
通過上一節的流線提取方法獲得了包含空間位置、速度、頂點ID、所在流線ID 等屬性信息的海量流線節點。考慮到本文的動態流線可視化方法是基于著色器實現的,如何將包含多種屬性的流線節點數據從用戶應用程序中轉移到著色器程序是該算法的關鍵。
三維紋理因其三維結構特征具有較大的存儲能力,能夠滿足多種屬性信息的存儲需求且具有可擴展性。因此,本文設計了一種基于三維紋理的流線屬性信息存儲結構。在用戶應用程序階段將流線屬性信息存入三維紋理,然后將三維紋理添加到一致變量,著色器程序通過與之相關聯的紋理采樣器實現三維紋理的調用。
具體地,將頂點ID 存儲在頂點屬性變量中,將其他屬性存儲在三維紋理中。三維紋理中頂點按流線流向順序存儲,三維紋理的深度由參數的數量以及內部格式的設置確定。如圖1所示,同一個流線節點的不同參數放置在紋理相同位置的不同深度。例如,圖1中的頂點P1有9個參數。屬性集合P1.A123 放置在像素(0,0)處,深度為0;屬性集合P1.A456放置在深度為1的像素(0,0)處,依此類推。

圖1 基于三維紋理的流線屬性信息存儲結構Fig.1 The streamline attribute information storage structure based on threedimensional texture
在幾何著色器階段,通過三維紋理采樣器獲得三維紋理,進一步,建立流線節點和三維紋理單元之間的映射。幾何著色器中流線節點的屬性信息在三維紋理中的存儲位置的計算公式為

其中,indexV表示流線節點V的頂點索引,index Attr表示屬性索引,x(indexV,index Attr)、y(indexV,index Attr)和z(indexV,index Attr)則分別表示該流線第indexV個節點的第index Attr個屬性在三維紋理中的存儲位置坐標,widthT表示三維紋理的寬度。
為了實現動態流線的可視化效果,當前動態可視化方法多采用圖元位置更新方式,計算開銷較大且易出現視覺遮擋現象。而建立海洋流場數據屬性與光學屬性的映射可實現信息的有效表達[14]。著色模型是將數值化的物理量(如速度、時間等)轉化成可被人觀察的視覺元素(如顏色、透明度等)的重要手段[15-16]。
本文設計了一種面向動態流線的著色模型。該模型通過制定表征流速變化的幀索引,建立流場屬性信息與透明度、顏色等光學屬性的映射關系,從而實現對全球海洋流場流速、流向、強弱等特征的細致刻畫。
首先,為了描述流場流速的動態變化,設計了表征速率的幀索引。流線抽象為粒子從種子點出發沿流線運動的軌跡,由于流速的變化,單位時間步長內粒子走過的距離不相等,因此,粒子到達流線各個節點所需的時間不同。其中,相鄰流線節點間粒子運動的速度近似為兩節點所在位置的瞬時速度的平均值。通過為各流線節點設置表征粒子到達該節點時間的幀索引可較好反映流線上流速的動態變化,其遞推公式為

其中,indexj為第j節點的索引,indexj-1為第j-1節點的索引,s為相鄰節點的距離,vj-1為第j-1節點的瞬時速度,vj為第j節點的瞬時速度。
然后,設計了一種“時間-透明度”“流速-顏色”映射關系,進一步增強流場的可視化質量。若把流線想象成粒子在流場中的運動軌跡,通過透明度的變化讓人們更容易理解粒子穿越后痕跡逐漸變淡直至消失的動態過程,本文將透明度、顏色作為流速、時間映射的可視化屬性,速度越快,軌跡的透明度越低;痕跡停留時間越長,透明度越高。本文設計的流線透明度映射函數為

其中,alphaj表示第j個流線節點的透明度,currentindex表征流線頭部當前所在的節點位置索引。參數q的范圍為0~1,表示當前節點相對于前一節點不透明度減弱的比例,通過控制參數q調節透明度的時間敏感性。
此外,為進一步直觀地表征流場的強弱特征,按照速度大小對顏色進行分級劃分。首先,建立一張RGB 顏色映射表,然后依據具體可視化要求將顏色映射表劃分為若干等級,第i個等級的顏色表示為colormap[i-1]。那么,可制定以下速度與顏色的映射公式:

其中,colorj表示第j個流線節點的顏色值,vj表示第j個流線節點的瞬時速度,vmin表示所有節點中速度的最小值,vmax表示所有節點中速度的最大值,n表示顏色分級層數。
圖2刻畫了流線的構型過程,可以明顯看出,透明度設置直觀表達了流向信息;顏色設置,突出了流場的強弱特征。例如,流場中速度大的一般是特征點比較密集的區域,設置較大的不透明度,有助于提高流場內部特征的表達,同時,對于速度較小、流場較為平緩的區域,設置較小的不透明度,以減少對流場特征信息的判讀。

圖2 面向動態流線可視化的著色模型Fig.2 The shading model for dynamic streamline visualization
為實現流線節點著色狀態的更新,設計了基于一致變量回調的流線實時構造機制。
首先,建立一個一致變量并定義該變量的回調函數,用于獲取并更新當前系統時間,根據每幀渲染時間差并結合面向動態流線的著色模型,計算每幀更新狀態信息,從而實現流線的動畫效果。流線實時構造過程如下:
(1)新建一致變量,存儲時間戳信息,并設置初始值。
(2)利用一致變量更新回調,每幀更新當前索引currentindex。
(3)利用當前索引currentindex,代入式(4)計算每個頂點透明度屬性alphaj,將速度信息代入式(5),計算每個節點的RGB 顏色值colorj。
(4)將更新后顏色、透明度等信息保存到gl_FrontColor 變量,實現流線狀態更新。
為了模擬流場動態連續的過程,設置了生命周期,即在模擬過程中允許流線死亡與重新初始化。初始狀態下,所有頂點透明度為1,即未渲染狀態。隨著時間的變化,根據參數q修正每個節點的透明度。設置每條流線的生命周期T,保證在生命周期內流線能被完整繪制。當生命周期結束時,流線尾部的透明度接近于0。在生命周期T內流線上的每一個節點隨時間變化透明度越來越高,直至消失;然后,重新初始化流線,即流線在相同的位置生成和消失。通過不斷循環,模擬流線的流動過程(見圖3)。

圖3 流場實時構造示意圖Fig.3 Flow field real-time schematic diagram
基于上述研究,流線動態可視化實驗基于Microsoft Visual Studio 2010 采用C++開發語言,客戶端基于OSGEarth(OpenSceneGraph Earth,面向地理空間的開源三維可視化引擎)搭建,著色器采用GLSL 編寫。實驗硬件條件:Inter Core i7-4790 3.6 GHz CPU,16 G DDR3 1 600 MHz內 存,NVIDIA GeForce GTX 960 顯卡。實驗數據采用全球海洋環境預報資料混合坐標大洋模式數據(HYCOM),包含流場、溫度和鹽度等信息,原始數據量為24.3 GB,網格分辨率為0.08°,數據空間范圍為180 °W~180 °E,90 °S~90 °N。
為充分比較各流線的可視化性能,本文選取靜態流線CPU 繪制、靜態流線GPU 繪制、動態CPU流線繪制、基于箭頭圖元的動態流線繪制以及本文的基于著色模型實時構造的動態流線可視化方法進行可視化效率對比實驗。實驗數據為2016年5月1日至2016年10月1日全球HYCOM數據,并按不同流線數量進行采樣,從而劃分子數據集。
從圖4的分析中可得,基于CPU 進行靜態流線繪制時,隨著流線數量的增加,繪制效率顯著降低;GPU 加速后,靜態流線繪制效率始終保持在60 FPS 左右,其中,60 FPS為當前硬件配置下顯示性能優化的極限。接著,通過動態可視化方法的效率對比發現,基于CPU 進行動態流線繪制時,隨著流線數量的增加,繪制效率呈驟降趨勢,并且較靜態流線繪制效率更低;在GPU 加速后,采用基于箭頭圖元的方法進行動態流線繪制時,雖然效率較CPU 環境下有很大提升,但隨著流線數量的不斷增加,繪制幀率呈不斷下降趨勢;本文的基于著色器的動態流線可視化方法其幀率一直保持在60 FPS 左右,與靜態流線GPU 繪制方式效率不相上下。
綜上所述,本文設計的基于著色模型實時構造的動態流線可視化方法無須頻繁改變流線位置,只需更新著色映射結果,因此能夠充分利用GPU的并行計算能力,極大提升了動態流線的繪制效率。

圖4 流線可視化方法繪制效率對比Fig.4 Streamline visualization method drawing efficiency comparison
對比了多種流線可視化方法在表達效果上的差異。圖5(a)描述了靜態流線可視化方法繪制的全球洋流整體效果圖;圖5(b)為本文的基于著色模型實時構造的動態流線可視化方法繪制的整體效果圖。不難發現,靜態流線法繪制的流線較為密集,容易導致視覺混亂;基于著色模型實時構造的動態流線可視化方法的渲染效果通過透明度、顏色等設置策略有效緩解了靜態密集分布帶來的視覺干擾,顏色映射有利于突出全球流場局部關鍵特征,過濾了冗余干擾信息,透明度設置直觀體現流速、流向表達海洋流場運動本質的信息,對于觀察渦流結構等洋流規律具有重要作用。基于著色模型實時構造的動態流線可視化方法較靜態流線可視化方法效果更清晰生動。
為進一步比較各模型的可視化效果,本文進行了局部流場的渲染效果對比,如圖6所示。其中,(a)表達的是靜態流線可視化方法下的局部流場渲染效果;(b)描述的是采用箭頭圖元表示流線動態效果的局部渲染效果;(c)-1 至(c)-4 描述的是采用本文基于著色模型實時構造的動態流線可視化方法繪制的具有時序特征的局部放大效果。從圖中可以看出,靜態流線可視化方法缺少流線方向信息的表征;而采用箭頭圖元的方式雖然能夠表達流場動態特征,但可視化效果易受圖元形狀大小等因素影響,尤其在流線密集區域會產生一定視覺干擾,并且動畫不連續;基于著色器的動態流線可視化方法,通過透明度等可視化屬性能夠直觀表達洋流運動方向及流速特征,從視覺顏色及動態性兩個角度幫助用戶理解和掌握流場內部特征與時空變化規律。

圖6 流場可視化局部放大效果圖Fig.6 Flow field visualization local enlargement effect diagram
提出了基于著色模型實時構造的海洋流場動態流線可視化方法。由于引入了三維紋理進行流線屬性信息存儲,可向著色器傳遞大量數據信息;進一步設計了面向動態流線的著色模型和實時構造機制,通過顏色、透明度等屬性,直觀表達流場的流向、強度分布等特征。與基于動態圖元的流線可視化方法相比,本文結果改善了視覺遮擋現象并提升了可視化的效率,可為全球洋流時空變化規律研究工作提供支持。下一步將重點考慮構建LOD模型,進一步優化渲染效果。