李志遠,張 翔
(1.武漢大學資源與環(huán)境科學學院,湖北 武漢 430070)
矢量場可視化[1-2]是科學可視化[3]的重要組成部分,它主要是基于計算機圖形學和圖形處理等技術,通過一些通用的編程語言或者可視化平臺來生成便于理解和認知的圖形圖像表征矢量場[4]。目前已普遍應用于氣象,航空等領域,具有巨大的研究價值和發(fā)展?jié)摿Α?/p>
矢量場地圖制圖具有悠久的歷史,早在17 世紀,人們就開始使用箭頭的形式來呈現(xiàn)大西洋表面的風場[5]。目前,矢量場的可視化方法可以籠統(tǒng)分為點符號法、線狀符號法、面狀符號法[6]。點符號法的主要表現(xiàn)形式為箭標圖,而線狀符號法則一般表現(xiàn)為流線型矢量圖[7],在二維矢量場[8-9]這個維度,它能夠很好地表現(xiàn)出矢量場的分布及規(guī)律(圖1)。
上述兩種方法是一種靜態(tài)的可視化表現(xiàn)手段,不能呈現(xiàn)動態(tài)地學現(xiàn)象時空規(guī)律及氣旋、鋒面等結構。本文針對兩種圖形架構的特點,設計了不同的矢量場動態(tài)制圖技術路線,探討并對比了矢量場動態(tài)可視化在消費級設備上的可行性及各自的優(yōu)缺點[10-14]。
圖1 箭標圖a 和流線圖b
傳統(tǒng)的矢量場可視化方法如箭標圖,流線圖等都是直接對符號化后的矢量場進行可視化,本文不直接繪制矢量場,而是通過粒子的運動來表現(xiàn)矢量場結構,并用視覺變量來控制展現(xiàn)矢量場的不同特征。通過向矢量場中隨機放置指定數(shù)量的粒子,通過粒子在矢量場中受力作用而產(chǎn)生運動來間接反映矢量場的物理屬性、分布規(guī)律、大尺度結構(如氣旋)等信息。
在投影方案層面,選取了等面積投影Albers 投影,又稱正軸等面積割圓錐投影,這個投影的特點是兩條割緯線投影無任何變形,投影區(qū)域面積保持和實地相等,滿足本次實驗的要求。
在技術實現(xiàn)層面,鑒于其平臺無關性和有利于大眾傳播和公共服務,采用Web 端作為可視化和實驗環(huán)境。GPU 架構和CPU 架構下分別選取了Web 端的Web GL 圖形協(xié)議[15]和Canvas 圖形協(xié)議作為具體實現(xiàn)的圖形接口。
整體流程圖如圖2 所示,可以分為以下7 個步驟。
1)獲取矢量場數(shù)據(jù)。
2)投影?;贏lbers 投影對矢量場數(shù)據(jù)的原始地理坐標進行映射。
3)根據(jù)投影后的數(shù)據(jù)構建矢量場模型。
4)初始化粒子狀態(tài)。在矢量場范圍內(nèi)生成隨機地理位置的粒子,并進行存儲。
5)繪制粒子。將粒子繪制到屏幕上,這其中包含了粒子速度和粒子顏色的簡單線性映射。
6)粒子生命周期和回收機制。粒子繪制完成后,根據(jù)其生命周期和回收機制判斷是否需要回收:如需要則回收該粒子并跳至步驟4,不需則進入步驟7。
7)粒子狀態(tài)更新。如果回收機制判斷粒子不需要回收,則根據(jù)粒子現(xiàn)有位置及力場作用更新粒子的位置狀態(tài)。隨后進入步驟5。
下面針對技術方案中粒子狀態(tài)存儲(CPU 和GPU版本不同)、生命周期與回收機制、運動粒子狀態(tài)更新的技術細節(jié)展開論述。
圖2 矢量場動態(tài)粒子可視化的技術流程圖
CPU 架構下的矢量場可視化方案,粒子的狀態(tài)由CPU 內(nèi)存中的數(shù)組存儲。該數(shù)組中每個元素存儲一個粒子的狀態(tài)信息,比如位置和生命周期(距離粒子被回收的幀數(shù))??梢暬璧娜苛W佑靡粋€動態(tài)數(shù)組存儲,并在動態(tài)繪制的過程中維護和更新所有數(shù)組元素即粒子的狀態(tài)。CPU 方案的局限在于:①粒子的串行繪制效率低,粒子數(shù)量很快到達瓶頸;②粒子狀態(tài)數(shù)組的動態(tài)刪除與增加會降低數(shù)組訪問效率,嚴重時可能出現(xiàn)內(nèi)存溢出。
在該技術方案中,粒子的總體數(shù)量固定,在初始化階段指定,并存儲在GPU 架構下的紋理圖像中。比如1 000×1 000 的紋理圖像可存儲106 個粒子狀態(tài)。由于紋理直接存儲在GPU 顯存中,避免了數(shù)據(jù)在內(nèi)存與GPU 之間的傳輸過程,可以緩解內(nèi)存壓力并大大提高了數(shù)據(jù)傳輸?shù)男省?/p>
以位置狀態(tài)為例,一個粒子的位置狀態(tài)包括x 和y兩個坐標值,一個像素具有RGBA 四個顏色通道,一個RGBA 通道的存儲范圍僅為0~255。如圖3 所示,可以通過兩個顏色通道在0 ~65 535 的數(shù)據(jù)范圍內(nèi)表示一個坐標值,這樣能夠滿足民用非高精度下的可視化需求?;谏鲜龇椒▽⑹噶繄龅脑紨?shù)據(jù)處理成如圖4 所示的紋理格式的矢量力場模型,以便GPU 讀取和處理。
圖3 利用GPU 紋理結構存儲粒子的狀態(tài)(紋理中的四個通道RGBA 可以表達該粒子的狀態(tài)信息)
圖4 紋理化的矢量場數(shù)據(jù)
粒子在矢量場中運動會出現(xiàn)出界的情況, 當粒子的地理位置超出矢量場區(qū)域時,應停止該粒子的運動和渲染以避免無意義的計算資源消耗。針對這個問題,引入了粒子生命周期的概念和回收機制。
對于CPU 架構下的矢量場可視化方案,將粒子的生命周期設置為一個狀態(tài)屬性,在粒子初始化的時候賦予其一個隨機的生命周期并隨著幀數(shù)的變化不斷衰減,生命周期為零時回收粒子并重新生成隨機位置的粒子。
對于GPU 架構下的矢量場可視化方案,因為數(shù)據(jù)以紋理格式存儲,而單份紋理數(shù)據(jù)只能表示一種粒子狀態(tài),為減少存儲開銷,采取了和CPU 架構不同的思路,即不再對單個粒子采取生命周期的概念,而是在每一幀的渲染過程中,每個粒子都有概率被回收并重新生成隨機粒子。這樣既避免了啟用新的紋理數(shù)據(jù)來存儲粒子的生命周期狀態(tài),也讓粒子總數(shù)維持在固定數(shù)量。
粒子不僅需要被繪制在屏幕中,還需要一定的運動規(guī)律以呈現(xiàn)動態(tài)的可視化效果。本文根據(jù)粒子上一幀的地理位置及該地理位置對應的矢量場力度,代入一定的力學模型,計算出下一幀中粒子的新地理位置。相應的力學模型為:假設初始粒子位置為A(x0,y0),根據(jù)紋理采樣得知矢量場在位置A 的分布為矢量Vector(u,v),那么下一幀中粒子的地理位置B 為原始坐標A 和力度矢量Vector 的矢量和。
本研究主要從性能與適用性上對CPU 和GPU 兩種民用圖形技術進行對比,因此不在模型復雜度上做進一步探討。但從技術角度而言,GPU 架構和CPU 架構下,都可以對該力學模型做出靈活性更高的拓展,譬如根據(jù)力度矢量的大小引入加速度,摩擦力,地形阻力等力學特性。
實驗部分在Web 端選擇Canvas 和WebGL 兩種圖形學協(xié)議分別代表CPU 架構和GPU 架構的實現(xiàn),根據(jù)協(xié)議的特點設計了不同的方案和代碼架構。兩種可視化方案都進行了實現(xiàn)和線上部署以供查看和參考效果[1]。
采用了真實的風場數(shù)據(jù),數(shù)據(jù)來源于NDFD(美國國家數(shù)字預報數(shù)據(jù)庫),它是美國官方提供的免費的面對社會公眾的天氣氣象數(shù)據(jù)平臺。針對CPU 架構的方案,將從平臺上獲取的數(shù)據(jù)處理成JSON 格式。針對GPU 架構的方案,為了適應其語言特性,還需要將數(shù)據(jù)處理成圖片紋理格式,便于GPU 讀取。
實驗環(huán)境如表1 所示,基于 Mac OS 操作系統(tǒng),CPU 是1.1 GHz 的Intel Core M,8 GB 1 600 MHz,內(nèi)存是8 GB 的1 600 MHZ,顯卡是1 536 MB 的Intel HD Graphics 5300,均是消費級民用計算設備的配置。
表1 開發(fā)環(huán)境配置
如圖5 所示,圖5a 為CPU 架構的可視化效果,而圖5b 為GPU 架構的可視化效果,從可視化效果上評判,兩種架構下的矢量場可視化結果并無顯著差異,均能呈現(xiàn)出較為明顯的矢量場分布規(guī)律。
圖5 CPU 架構(a)和GPU 架構(b)下的動態(tài)風場可視化結果
交互式可視化領域以FPS(幀率)大于等于25 幀/s作為評判可視化流暢程度的標準。通過設置不同的視覺參數(shù)如粒子總數(shù)或粒子大小,分別進行實驗并對FPS 進行統(tǒng)計和分析,分析結果見圖6。
CPU 和GPU 兩種技術方案在相同硬件環(huán)境不同的粒子數(shù)下的渲染效率如圖6a 所示。以交互式可視化的要求來看,CPU 架構下只有在粒子數(shù)小于10 000 時其視覺效果才是較佳的,其FPS 值隨著粒子數(shù)的增加迅速下降到一個較低的水平,出現(xiàn)卡頓和丟幀現(xiàn)象。相反,GPU 架構下的FPS 值并沒有隨著粒子數(shù)的增加出現(xiàn)較大的波動,即使是場上的粒子總數(shù)達到了50 萬這個級別,其幀率也可以滿足交互式可視化的要求。同時,對比了現(xiàn)有開源軟件Leaflet-velocity.js 和Wind.js,其性能也顯著低于GPU 架構方案,進一步印證了CPU方案下的性能瓶頸。
如圖6b 所示,除了粒子總數(shù),粒子大小也會對渲染效率產(chǎn)生影響。一般情況下粒子越大,矢量場可視化的效率就會越低。
圖6 不同粒子大小下的FPS
綜上所述,在表現(xiàn)更多粒子或者是固定粒子數(shù)量下獲得更流暢的視覺效果上,GPU 架構要優(yōu)于CPU 架構,此外一些視覺因素如粒子大小等也會對可視化的性能產(chǎn)生影響。而在視覺效果的表達形式多樣性上,對于目前的簡單符號兩者并無顯著差異。而從民用市場的圖形設備可獲得性分析,目前移動設備對GPU 加速的支持仍然較弱。雖然兩種方案各有利弊,但都能實現(xiàn)類似的動態(tài)制圖與符號設計,能很好地呈現(xiàn)矢量場的時空分布和大尺度結構。
矢量場可視化的傳統(tǒng)方法有箭標圖和流線圖,但都基于靜態(tài)符號,在可視化動態(tài)的自然現(xiàn)象時表現(xiàn)力不夠。本文首先提出了一種基于動態(tài)符號的矢量場可視化技術,利用在矢量場中的運動粒子來表示矢量場特征和結構。其次,針對CPU 和GPU 兩種消費級圖形設備,設計了相應的技術方案和可視化算法。最后,以Web 平臺為媒介,實現(xiàn)了CPU 架構和GPU 架構下的兩種矢量場可視化原型系統(tǒng)。實驗表明兩個方案均能提供良好的制圖效果,動態(tài)符號比靜態(tài)符號更能體現(xiàn)矢量場的動態(tài)性和揭示其大尺度結構。效率對比上,GPU 架構的運行效率更高,在500 000 粒子數(shù)量下仍然可以達到交互式可視化標準(適合臺式機和筆記本等計算設備),而CPU 架構在超過10 000 粒子數(shù)量時就難以滿足交互式可視化需求,開始出現(xiàn)卡頓和丟幀現(xiàn)象,但其優(yōu)勢是技術方案的兼容性更強,技術依賴性更低,能夠很好的支持移動端動態(tài)制圖。當然,對于矢量場的動態(tài)可視化而言,并非粒子數(shù)量越多越好,需要針對特定的制圖需求,領域需求和設備進行針對性設計。此外,人作為認知主體的認知效率與視覺變量的關系也需要進一步研究,以達到可視化方案對需求、設備和用戶認知的適應,提高制圖技術在領域信息挖掘中的效率和效果。