張 楨, 吳亞東,2
(1.西南科技大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,四川 綿陽 621000; 2.四川輕化工大學(xué),四川 宜賓 644005)
時變體數(shù)據(jù)是隨時間步長變化的單步態(tài)體數(shù)據(jù)的集合,也是科學(xué)數(shù)據(jù)的重要分支,分析時變體數(shù)據(jù)能夠獲取時變體數(shù)據(jù)的內(nèi)在關(guān)聯(lián),并獲悉數(shù)據(jù)隨時間變化的發(fā)展趨勢。而體繪制則是針對時變體數(shù)據(jù)的有力分析方法,體繪制是將三維數(shù)據(jù)集顯示為二維投影的技術(shù)[1],相比于面繪制[2],體繪制能夠直觀地呈現(xiàn)出體數(shù)據(jù)的三維模型,并能夠展示出數(shù)據(jù)的整體結(jié)構(gòu)特點[3]。然而,體繪制算法計算量龐大,目前的體繪制成像系統(tǒng)多集中在本地運行,采用C/S(客戶端/服務(wù)器)架構(gòu),用戶需要在計算機安裝特定的應(yīng)用軟件,并利用本地的圖形硬件實現(xiàn)體繪制算法,提升體繪制效率,因此,C/S架構(gòu)無法便捷的進行訪問,也難以實現(xiàn)跨平臺[4]。
近年來,基于B/S(瀏覽器/服務(wù)器)架構(gòu)的科學(xué)數(shù)據(jù)繪制成像系統(tǒng)逐漸興起。B/S架構(gòu)具有易訪問、跨平臺等特點[5],同時WebGL的出現(xiàn)更使得瀏覽器能夠利用本地GPU進行高性能圖形渲染[6]。因此,基于B/S架構(gòu)硬件依賴小,同時兼顧跨平臺訪問和高性能的特點,本文提出了一種基于B/S架構(gòu)的時變體數(shù)據(jù)的體繪制系統(tǒng),該系統(tǒng)通過WebGL標(biāo)準(zhǔn)實現(xiàn)了光線投射體繪制算法,在瀏覽器端實現(xiàn)對體數(shù)據(jù)的體繪制及顯示,并支持實時交互。同時,通過優(yōu)化體數(shù)據(jù)的預(yù)處理過程,縮短了單步態(tài)體數(shù)據(jù)的繪制時間,減少單步態(tài)體數(shù)據(jù)繪制所占用的內(nèi)存空間,使得瀏覽器端能夠?qū)r變體數(shù)據(jù)集合全部載入,并逐步繪制顯示,以動畫的形式呈現(xiàn)出時變體數(shù)據(jù)的變化效果。最后,本文引入Isabel颶風(fēng)數(shù)據(jù)集進行案例測試,驗證本文方法的可行性。
體繪制是對科學(xué)數(shù)據(jù)進行三維重建的方法之一,它直接由三維數(shù)據(jù)場生成在屏幕上顯示的二維圖像[7]。體繪制技術(shù)可以展示出科學(xué)數(shù)據(jù)的內(nèi)部結(jié)構(gòu),在描述定形物體上具有明顯的優(yōu)勢,因而成為了科學(xué)數(shù)據(jù)可視化最為廣泛采用的方法之一。
近年來,在Web端進行體數(shù)據(jù)的體繪制得到了長足的發(fā)展,無需借助第三方的瀏覽器插件,純面向Web的可視化系統(tǒng)逐漸成為未來的發(fā)展趨勢[8]。但在早期工作中,體繪制計算量龐大,且硬件性能較低,B/S架構(gòu)的可視化系統(tǒng)主要集中在利用服務(wù)器端對數(shù)據(jù)進行處理并生成繪制結(jié)果,而瀏覽器端僅用于繪制結(jié)果的呈現(xiàn)[9]。高鵬[10]等利用VTK(Visualization Toolkit)可視化工具包,將數(shù)據(jù)在服務(wù)器端進行處理渲染,并生成二維圖片,瀏覽器通過加載二維圖片從而實現(xiàn)“偽3D”的圖像顯示,用戶在瀏覽器端實時生成交互請求,這些請求包括視角變換,縮放等,服務(wù)器根據(jù)交互請求進行繪制并生成新的二維圖片。雷輝等[11]實現(xiàn)了基于HTML5的醫(yī)學(xué)可視化系統(tǒng),服務(wù)器端利用DCMTK模塊對醫(yī)學(xué)數(shù)據(jù)進行解析,并繪制出結(jié)果,瀏覽器端采用圖像載入模塊加載繪制結(jié)果并呈現(xiàn)。侯曉帥等[12]提出的B/S架構(gòu)解決方案采用在服務(wù)器端進行圖像分析,并利用服務(wù)器的GPU加速技術(shù)繪制圖像,并將結(jié)果發(fā)送至瀏覽器,瀏覽器端采用HTML5和JavaScript技術(shù)開發(fā)顯示模塊用于呈現(xiàn)繪制結(jié)果。而隨著科學(xué)體數(shù)據(jù)的數(shù)據(jù)量日益龐大,單個服務(wù)器已無法滿足渲染要求,Robin M.Weiss[13]等使用集群服務(wù)器進行數(shù)據(jù)渲染,集群服務(wù)器將多個渲染引擎連在一起,為體數(shù)據(jù)的繪制提供強大的渲染能力。
服務(wù)器端渲染出圖像結(jié)果并發(fā)送至瀏覽器的解決方案可以利用服務(wù)器的高性能,但服務(wù)器負載會隨著并發(fā)用戶的增長而提升,并發(fā)用戶過多會導(dǎo)致服務(wù)器延遲過高,運行緩慢,甚至崩潰。而WebGL的出現(xiàn)使得面向瀏覽器的體繪制方法發(fā)生了改變,它能夠直接調(diào)用本地計算機的GPU在瀏覽器展示3D模型,借助WebGL,可以直接在瀏覽器端對數(shù)據(jù)進行體繪制。Daniel Haehn等[14]開發(fā)了Slice:Drop可視化系統(tǒng),系統(tǒng)采用WebGL在HTML5的Canvas元素中進行3D圖像的繪制,并可以進行部分的交互,但該系統(tǒng)沒有實現(xiàn)直接體繪制的算法,比如光線投射算法[15]。
基于上述工作,目前基于B/S架構(gòu)的科學(xué)體數(shù)據(jù)的體繪制主要面臨著以下問題:
1)體繪制算法實現(xiàn)多在服務(wù)器端進行,服務(wù)器需承擔(dān)數(shù)據(jù)預(yù)處理和繪制,繪制結(jié)果以二維圖片的形式傳至瀏覽器端,服務(wù)器的負載會隨并發(fā)用戶數(shù)量的上升而增長;
2)瀏覽器以二維圖片顯示繪制結(jié)果,制約了交互性能,瀏覽器需將交互請求發(fā)送至服務(wù)器并重新繪制,得到新的結(jié)果,交互性能易受網(wǎng)絡(luò)帶寬和服務(wù)器負載影響,造成延時過高,等待時間過長甚至無響應(yīng)等問題;
3)在瀏覽器端利用WebGL進行體繪制時,需將數(shù)據(jù)載入GPU,時變體數(shù)據(jù)具有多個單步態(tài)數(shù)據(jù),全部載入GPU會導(dǎo)致內(nèi)存占用過高,WebGL程序會因此崩潰,無法有效的對時變體數(shù)據(jù)的所有步態(tài)進行實時的繪制和呈現(xiàn)。
針對上述問題,本文做了以下工作:
1)基于WebGL,實現(xiàn)了Web下的光線投射體繪制算法,瀏覽器利用本地GPU對數(shù)據(jù)進行體繪制并呈現(xiàn),并支持本地的實時交互;
2)基于維度壓縮對原始體數(shù)據(jù)的預(yù)處理過程進行優(yōu)化,縮小了原始體數(shù)據(jù)的體量,并減少了繪制時間以及GPU內(nèi)存占用,使得本地GPU能夠載入時變體數(shù)據(jù)的更多步態(tài)。
在Web端采用WebGL實現(xiàn)了光線投射體繪制算法,能夠利用本地GPU對體數(shù)據(jù)進行體繪制,并且支持實時交互;
基于維度壓縮優(yōu)化了數(shù)據(jù)預(yù)處理過程,使得Web頁面能夠更快速、更流暢地繪制科學(xué)數(shù)據(jù),并且能夠同時載入時變體數(shù)據(jù)的更多步態(tài),便于觀察時變體數(shù)據(jù)的整體變化趨勢。
光線投射算法是體繪制常用算法之一。通過投射一條光線穿過原始3D數(shù)據(jù)體,并在穿入點和傳出點之間進行等間隔均勻采樣,通過傳遞函數(shù)計算采樣點的顏色和不透明度,將采樣點向前合成,合成結(jié)果即是屏幕上一個可見像素點。該過程由圖1所示。通過投射多條光線,所得到的像素點最終在屏幕上呈現(xiàn)出繪制結(jié)果。
圖1 光線投射算法示意圖
在Web下實現(xiàn)光線投射算法,需要先對原始數(shù)據(jù)進行預(yù)處理操作。
科學(xué)體數(shù)據(jù)是3D形式,WebGL僅支持2D紋理,因此需對原始的體數(shù)據(jù)進行預(yù)處理。本文系統(tǒng)將原始的3D體數(shù)據(jù)轉(zhuǎn)換為2D紋理,轉(zhuǎn)換示意圖如圖2所示,該數(shù)據(jù)為人腳部位的CT掃描。本文方法將Z維度拆分,并將Z切片依次平鋪到二維圖上,最終形成圖2所示的二維圖集。
生成2D圖集的過程主要包括:原始數(shù)據(jù)歸一化、轉(zhuǎn)換原始數(shù)據(jù)類型、生成2D圖集。為提升繪制效率及縮小內(nèi)存占用,本文在預(yù)處理過程中引入維度壓縮方法,以下將介紹基于維度壓縮的原始體數(shù)據(jù)的預(yù)處理過程。
2.1.1 原始體數(shù)據(jù)的歸一化
科學(xué)數(shù)據(jù)以采集的真實數(shù)值存儲,在生成2D紋理過程中,需要將體數(shù)據(jù)的值賦給RGBA顏色分量(取值范圍:0~255),因此,首先需將體數(shù)據(jù)的值歸一化到(0~255)區(qū)間。獲取原始體數(shù)據(jù)中體素值的最大值Max和最小值Min,則對于原始體數(shù)據(jù)中每一個體素值V,歸一化過程可由公式(1)~(2)表示:
K=(255- 0)/(Max-Min)
(1)
V=0+K*(Array_A-Min)
(2)
2.1.2 轉(zhuǎn)換原始數(shù)據(jù)類型
科學(xué)體數(shù)據(jù)通常使用float類型存儲,而Unsigned Char類型相比于float,所占空間可節(jié)省四分之三,這將減輕服務(wù)器的數(shù)據(jù)存儲負擔(dān),提升數(shù)據(jù)的載入速度,針對于大規(guī)模的時變體數(shù)據(jù),通過轉(zhuǎn)換數(shù)據(jù)類型,將降低存儲用量,該過程偽代碼如下所示:
begin:
#將原始數(shù)據(jù)讀入數(shù)組Array_source
read source data into Array_source;
#創(chuàng)建新數(shù)組Array_new
create new char array Array_new;
for eachiin Array_source
{
#將Array_source的值通過格式轉(zhuǎn)換,存入Array_new
Array_new[i] =
(unsigned char)Array_source;
}
End
2.1.3 生成2D紋理
將原始體數(shù)據(jù)的Z維度拆分為切片,將切片依次排列在一張圖像上,即可生成2D切片圖像集,2D切片圖像集上每一個像素點的RGBA分量值都由原始體數(shù)據(jù)對應(yīng)體素值(已歸一化到(0~255)區(qū)間)賦予。瀏覽器將此2D切片圖像集作為紋理載入GPU,便可進行光線投射體繪制。生成2D紋理的過程如圖3所示。該過程偽代碼如下所示,生成2D紋理后,即可進行體繪制和呈現(xiàn)。
begin:
#原始體數(shù)據(jù)的三個維度
define width, height, depth;
#讀取原始體數(shù)據(jù)至數(shù)組
data = readSourceData(filename);
#定義PNG圖像行列各分布多少張切片
define slicePerAxis = int(sqrt(depth));
#指定PNG圖像的寬度及高度
define imageWidth = width * slicePerAxis;
defineimageHeight = height * slicePerAxis;
#創(chuàng)建一張指定大小的透明PNG圖片
Image=Image.new(imageWidth, imageHeight);
#將圖片存入像素映射表colormap
#根據(jù)數(shù)組修改其像素值
colormap = Image.load();
for(intz= 0;z< depth;z++)
for(inty= 0;y< height;y++)
for(intx= 0;x< width;x++)
{
index =x+y* width +z* width * height;
rgba = data[index];
#獲取PNG圖像上的X坐標(biāo)
realPosX=x+ (z% slicePerAxis) * width;
#獲取PNG圖像上的Y坐標(biāo)
realPosY=y+ ((int)(z/ slicePerAxis)) * height
#將體素值寫入對應(yīng)點的RGBA分量
colormap[realPosX, realPosY] =
(rgba, rgba, rgba, rgba);
}
End
圖3 生成2D紋理,紋理上每一個像素點的RGBA像素值為(V,V,V, V),其中V是原始體數(shù)據(jù)中對應(yīng)點的體素值
2.1.4 時變體數(shù)據(jù)維度壓縮
WebGL在繪制過程中將逐像素處理2D紋理,這是體繪制時間和內(nèi)存的主要開銷,而觀察時變體數(shù)據(jù)整體變化過程,瀏覽器需載入全部單步態(tài)數(shù)據(jù),要實現(xiàn)快速繪制和低內(nèi)存占用,需考慮如下因素:1) 縮短單步態(tài)數(shù)據(jù)的繪制時間;2) 減少單步態(tài)數(shù)據(jù)的內(nèi)存占用。因此,本文采用維度壓縮方法,壓縮原始體數(shù)據(jù)維度,減少2D紋理像素點數(shù)量。
本文采用跳躍取樣方法進行維度壓縮,設(shè)置步長step,在(x,y,z)處取樣后,跳躍至(x+step,y+step,z+step)處繼續(xù)取樣,并將取樣點集合存儲為新的體數(shù)據(jù)。通過跳躍取樣,數(shù)據(jù)維度將縮小至原維度的1/step,體素數(shù)量將減少至原數(shù)據(jù)的(1/step)3,極大提升了GPU處理紋理的速度,以及降低GPU內(nèi)存的開銷,維度壓縮偽代碼如下所示:
#原始體數(shù)據(jù)的三個維度
define width, height, depth;
#讀取原始體數(shù)據(jù)至數(shù)組
source_data = readSourceData(filename);
#創(chuàng)建新的體數(shù)據(jù)模板
create new_data;
#定義跳躍采樣值的跳躍系數(shù)step
for(intz= 0;z< depth;z=z+ step)
for(inty= 0;y< height;y=z+ step)
for(intx= 0;x< width;x=z+ step)
{
index =x+y* width +z* height * depth;
#將采樣值寫入新數(shù)組
write data[index] into new_data;
}
該方法會損失原始體數(shù)據(jù)的部分精度,但將顯著提高繪制效率,經(jīng)過案例測試表明,在維度壓縮前后,繪制結(jié)果相差無幾,因此進行維度壓縮具有較好的可行性。
通過以上方法對原始體數(shù)據(jù)進行預(yù)處理操作,最終將得到WebGL體繪制所需的2D紋理,以下本文將介紹如何基于WebGL,實現(xiàn)光線投射體繪制算法。
光線投射體繪制算法如圖2所示,其過程可表述為生成包圍盒、投射光線、取樣、光線終止,以及采樣點的合成。以下將分別介紹。
2.2.1 生成包圍盒
包圍盒是一個立方體,將3D體數(shù)據(jù)包圍其中,采用包圍盒取代體數(shù)據(jù),則無需考慮體數(shù)據(jù)復(fù)雜形式,簡化計算。設(shè)實際體數(shù)據(jù)維度為(width,height,depth),則據(jù)此創(chuàng)建一個維度同樣為(width,height,depth)的長方體作為包圍盒。
2.2.2 包圍盒空間坐標(biāo)與2D紋理的映射
實際體繪制中,WebGL載入的是2D紋理,因此需要將包圍盒空間坐標(biāo)與2D紋理上的像素點坐標(biāo)建立映射關(guān)系,以便投射光線即采樣。根據(jù)表2生成2D紋理的偽代碼,包圍盒內(nèi)部任意一點坐標(biāo)(x0,y0,z0)與2D紋理像素點實際坐標(biāo)(X,Y)的對應(yīng)關(guān)系為:
X=x0+(z0%slicePerAxis)×width
(3)
Y=y0+((int)(z0/slicePerAxis))×height
(4)
其中,slicePerAxis表示2D紋理上每一行所具有的切片數(shù)量。
2.2.3 投射光線并采樣
設(shè)置視點,模擬觀察者的眼睛,從視點出發(fā)投射一條光線,穿過包圍盒,計算與包圍盒穿入與穿出交點坐標(biāo),分別作為光線的起點和終點。自定義間隔值,并在光線上進行等間距的采樣,該過程由圖4所示。
圖4 采樣示意圖
(5)
(6)
其中:N表示該條光線上采樣點的總個數(shù),(xn,yn,zn)則表示第n個采樣點。得到采樣點坐標(biāo)后,即可根據(jù)公式(3)~(4)采集2D紋理上實際對應(yīng)的像素點。
2.2.4 光線停止及采樣點合成
通過傳遞函數(shù),將采樣點真實數(shù)值轉(zhuǎn)換為顏色和不透明度,并由遠及近(距離視點),開始合成同一光線上的采樣點,并最終得到屏幕上的像素點。該過程如圖5所示。這是一個迭代過程,當(dāng)光線到達終點時,迭代過程便會停止,為縮減體繪制的時間,當(dāng)其滿足采樣點合成過程中,累積不透明度到達1時,迭代過程可提前停止。由于當(dāng)累積不透明度到達1時,后續(xù)的采樣點將不會影響合成結(jié)果,因此迭代過程便可提前停止。由此,光線投射算法停止的條件為:
1)迭代過程到達光線終點;
2)迭代過程中,累積不透明度到達1。
圖5 采樣點的合成
當(dāng)所有光線上的采樣點向前合成為屏幕上的一個可見像素時,即可在屏幕上觀察到最終的繪制結(jié)果,圖3所示人腳部位的2D紋理圖集在瀏覽器上體繪制的效果如圖6所示。
圖6 體繪制結(jié)果
2.2.5 實時交互
本文通過調(diào)用JavaScript監(jiān)測鼠標(biāo)及滾輪的變化,更改視點的位置,并重新進行體繪制過程,得到新的繪制結(jié)果。由于是在本地利用GPU的高性能進行繪制,交互的延時不受網(wǎng)絡(luò)帶寬和服務(wù)器負載的影響,交互響應(yīng)時間快,實時交互性能優(yōu)于傳統(tǒng)的體繪制系統(tǒng)。
本文采用B/S架構(gòu),搭建了Web體繪制系統(tǒng),并引入Isabel颶風(fēng)數(shù)據(jù)集以驗證本文方法的有效性,服務(wù)器端對原始數(shù)據(jù)進行預(yù)處理,生成2D紋理,瀏覽器端請求2D紋理,并載入GPU,基于光線投射算法進行體繪制和呈現(xiàn)。系統(tǒng)整體架構(gòu)如圖7所示。系統(tǒng)設(shè)計了單文件查看模塊和時變體數(shù)據(jù)觀察模塊。
1)單文件查看模塊:單文件查看模塊用于繪制和呈現(xiàn)時變體數(shù)據(jù)的單個步態(tài)等,該模塊中,原始體數(shù)據(jù)未進行維度壓縮,以觀察體數(shù)據(jù)的全部細節(jié),并支持觀察者使用鼠標(biāo)及滾輪對視圖進行平移、旋轉(zhuǎn)、縮放等交互操作。同時,系統(tǒng)還設(shè)計了傳遞函數(shù)面板,觀察者可以使用不同的顏色編碼和不透明度等控制選項,對體數(shù)據(jù)的繪制結(jié)果進行調(diào)節(jié)。
2)時變體數(shù)據(jù)觀察模塊:該模塊需要將全部單步態(tài)數(shù)據(jù)載入GPU,因此,該模塊加載的原始體數(shù)據(jù)將進行維度壓縮,以縮短單個步態(tài)數(shù)據(jù)的繪制時間和內(nèi)存占用。通過設(shè)
置間隔時間,WebGL將依次動態(tài)的繪制并呈現(xiàn)每一個單步態(tài)數(shù)據(jù),觀察者由此能夠觀測到時變數(shù)據(jù)動態(tài)的變化過程,以分析時變體數(shù)據(jù)的整體變化趨勢。
Isabel颶風(fēng)數(shù)據(jù)集是由美國國家大氣研究中心所采集到的颶風(fēng)信息,數(shù)據(jù)集的真實維度為2 139 km*2 004 km*19.8 km,采集到的數(shù)據(jù)以float類型存入500*500*100的維度空間中,該數(shù)據(jù)集一共采集了13個變量,包括云水混合比、溫度、壓力等,每個變量共采集48個時間步長(每隔一小時采集一次,一共采集48個小時),單步態(tài)數(shù)據(jù)大小為95 MB。
系統(tǒng)采用第一個變量(QCLOUD,云水混合比)作為案例測試,用以驗證系統(tǒng)的有效性和可行性。
將QCLOUD的48個單步態(tài)體數(shù)據(jù)進行歸一化操作和存儲方式轉(zhuǎn)換后,生成未經(jīng)過維度壓縮的2D紋理。然后對數(shù)據(jù)進行跳躍采樣,本系統(tǒng)中設(shè)置跳躍步長step為2,維度壓縮后體數(shù)據(jù)體素數(shù)量從2 500萬減少到了3.125萬,再生成2D紋理。經(jīng)過維度壓縮和未經(jīng)維度壓縮生成的2D紋理對比如圖8所示,圖8(a)未經(jīng)維度壓縮,圖8(b)經(jīng)過維度壓縮。
瀏覽器端利用WebGL將數(shù)據(jù)載入GPU進行光線投射體繪制,本系統(tǒng)進行案例測試的硬件環(huán)境信息如表1所示。
圖7 基于B/S架構(gòu)的時變體數(shù)據(jù)體繪制系統(tǒng)框架圖
圖8 第一單步態(tài)體數(shù)據(jù)生成的二維圖集
表1 案例測試硬件環(huán)境信息
3.3.1 原始體數(shù)據(jù)維度壓縮前后繪制對比
經(jīng)過維度壓縮之后,原始體數(shù)據(jù)會損失部分精度,但是將極大地提高體繪制的速度,如圖9所示,圖(a)為當(dāng)跳躍步長step設(shè)置為2時進行維度壓縮所得到的繪制結(jié)果,圖(b)為不進行維度壓縮時得到的繪制結(jié)果,兩種方式的繪制時間和內(nèi)存占用如表2所示。
圖9 兩種處理方式的繪制結(jié)果對比
表2 維度壓縮前后繪制時間對比
體數(shù)據(jù)數(shù)據(jù)維度繪制時間/msGPU占用/MB經(jīng)過壓縮250*250*504355未經(jīng)壓縮500*500*100351226
該案例可證明,進行維度壓縮將顯著提升繪制速度,同時對于繪制結(jié)果影響較小。
3.3.2 單文件查看模塊
系統(tǒng)設(shè)計了單文件查看模塊用以驗證單個體數(shù)據(jù)的實時繪制和交互的性能,如圖10所示,可在列表中選擇需要查看的體數(shù)據(jù)。
圖10 單文件查看模式的繪制效果
通過鼠標(biāo),對數(shù)據(jù)進行旋轉(zhuǎn)、縮放、平移等交互操作,以及修改傳遞函數(shù)參數(shù)等操作,視圖能夠?qū)崟r地進行重繪,并顯示新的渲染結(jié)果,修改傳遞函數(shù)的示例如圖11所示。
圖11 改傳遞函數(shù)的繪制效果
測試結(jié)果表明無論是交互,還是修改傳遞函數(shù)值,數(shù)據(jù)均能夠?qū)崟r地進行重新渲染,得到新的結(jié)果,且?guī)俾誓軌蚓S持在58~60 FPS。
3.3.3 時變體數(shù)據(jù)觀察模塊測試
該測試采用QCLOUD變量的48個步態(tài)數(shù)據(jù),每個體數(shù)據(jù)都經(jīng)過歸一化,存儲格式轉(zhuǎn)換,以及采用步長為2的跳躍采樣進行維度壓縮,試驗測試將48個步態(tài)的數(shù)據(jù)全部載入GPU進行預(yù)渲染,并設(shè)置顯示間隔時間為150 ms,測試結(jié)果表明,在瀏覽器端能夠進行流暢的動畫展示。測試相關(guān)結(jié)果如表3所示。
表3 時變體數(shù)據(jù)觀察模塊測試參數(shù)
本文提出了一種基于B/S架構(gòu)的時變體數(shù)據(jù)的體繪制系統(tǒng),該系統(tǒng)通過WebGL標(biāo)準(zhǔn)實現(xiàn)了光線投射體繪制算法,并支持實時交互。同時,基于維度壓縮優(yōu)化了體數(shù)據(jù)的預(yù)處理過程,減少了單步態(tài)數(shù)據(jù)的繪制時間和內(nèi)存占用,使得瀏覽器端能夠?qū)r變體數(shù)據(jù)全部載入,并逐步繪制顯示,以動畫的形式呈現(xiàn)時變體數(shù)據(jù)的變化效果。最后系統(tǒng)引入Isabel時變颶風(fēng)數(shù)據(jù)集進行了案例測試,測試表明,該系統(tǒng)能夠支持體數(shù)據(jù)的實時繪制和交互,并能夠流暢地進行動畫演示,幀速率可達到50 FPS以上。
然而本系統(tǒng)依然存在著不足之處,主要包括:
1)當(dāng)系統(tǒng)并發(fā)訪問數(shù)量增加,系統(tǒng)的并發(fā)性難以維持,會出現(xiàn)系統(tǒng)卡頓,假死等問題;
2)維度壓縮會損失數(shù)據(jù)的精度,并且針對不同規(guī)模的時變體數(shù)據(jù),跳躍采樣的步長值無法自適應(yīng)取值,缺乏靈活性。
因此在未來的工作中,將主要圍繞一下內(nèi)容進行研究:
1)系統(tǒng)的并發(fā)性,針對大規(guī)模地訪問數(shù)量,系統(tǒng)能夠有效地保持穩(wěn)定性;
2)更加有效的體繪制方法,在體繪制方法上進行研究,改進繪制方法,提升繪制質(zhì)量;
3)針對時變體數(shù)據(jù),研究自適應(yīng)跳躍步長,根據(jù)不同的體數(shù)據(jù),自適應(yīng)進行維度壓縮。