摘 要:近年來計算機圖形硬件性能不斷提高,利用硬件來實現體繪制過程中的某些環節以獲取交互的繪制速率成為可能,是目前體繪制的研究熱點。描述了基于GPU的光線投射法、2D紋理映射法和3D紋理映射法等典型算法,給出了各類算法的分析與性能評價,最后實現相關算法并得出實驗結果。
關鍵詞:圖形處理器;體繪制;紋理映射;光線投射
中圖分類號:TP391.41文獻標志碼:A
文章編號:1001-3695(2009)06-2020-03
doi:10.3969/j.issn.1001-3695.2009.06.006
ReviewonGPU-based volume rendering
FEI Yao-ping,HU Hui-jun,CHEN Song-qiao,LI Min
(College of Information Science Engineering, Central South University, Changsha 410001, China)
Abstract:With the ever-increasing development of graphics hardware in recent years, exploiting the fast rendering ability of modern graphics hardware to make the rendering process genuinely interactive has become available, and this method is the research hot spot.This paper described the typical algorithms about GPU-based volume rendering including were 3D texture-mapping hardware, 2D texture-mapping hardware, GPU-based ray casting, and then gave the kinds of algorithm analysis and performance evaluation. Finally, came to the realization of related algorithms and presented some experimental results.
Key words:graphics processing unit(GPU); volume rendering; texture mapping; ray casting
0 引言
體繪制是三維數據場可視化[1]中的一種重要方法,研究最多的直接體繪制技術既可以顯示大范圍復雜的整個場結構,又可以清晰地顯示內部結構。最有代表性的是光線投射算法[2],它是通過把單個體數據模擬成一個粒子,賦予其光的吸收和散射屬性,再通過計算光穿過整個體數據時輻射能量的累積值來進行繪制。
近年來隨著硬件技術的發展,新一代的圖形處理器提供了可編程能力?;趫D形硬件的體繪制算法成為主流。人們利用現有的硬件環境,根據各種應用的具體需求,在生成的圖像質量與繪制速度之間尋求可能的最佳方案,使繪制速度盡量滿足用戶的要求,同時保證一定的圖像質量,形成了許多不同的體繪制算法及相應的加速算法。世界上惟一的圖形學硬件會議(SIGGRAPH/EURPGRAPHICS)連續幾年關注的重點都是GPU的應用。也有人提出,GPU將變成通用處理器(general processing unit)[3]。
1 GPU技術介紹
GPU最激動人心的進步就是引入了可編程能力。當今的圖形處理器真正的可編程能力是用戶所寫的微程序被載入顯卡內存中,并能直接在幾何與光柵化階段被執行。應用廣泛的為面向vertex program和fragment program的高級語言,稱為HLSL(high level shading language,高級著色語言)。它們提供了額外的抽象層,能夠以一種統一的方式快速地獲取不同顯卡所提供的功能,大大簡化了編程。目前較流行的高級著色語言有NVIDIA 公司的Cg語言、微軟DirectX中的HLSL和OpenGL中的GLSL。
2 體繪制技術及分析
體繪制技術已經問世逾十載了,現在仍然是圖形和可視化研究的一個活躍領域。直接體繪制在體數據處理及特征信息表現方面具有明顯的優勢,因而一直得到研究者的重視和廣泛研究,提出了很多相關的算法,如光線投射法、濺射法[4]、錯切—變形法[5]、頻域法[6]等。這些傳統純軟件算法一般需要大量的計算,因此繪制速度較慢,難以滿足實時性的要求。
經過多年的努力,人們在硬件上不斷尋求算法的改進,取得了一定的進步。首先圖形硬件支持了硬件加速的三維紋理,從而出現了三維紋理映射的體繪制技術[7],已成為目前普遍使用的體繪制技術。之后,圖形硬件加速了OpenGL管線,為OpenGL提供了許多擴展功能,可以實現著色[8]、光照[9]等特殊效果,使基于GPU的直接體繪制技術具有可與純軟件算法相媲美的繪制效果。
2.1 基于紋理硬件體繪制
根據繪制所采用的代理幾何體的不同,基于紋理的體繪制分為基于硬件的3D紋理映射和基于硬件的2D紋理映射。圖1(a)為基于硬件的3D紋理映射的體繪制,最早是由Cullip等人[10]在1993年提出來的。在這種方式下,體數據存儲為單個的3D紋理。繪制時,在紋理空間內定義一系列彼此平行且與視線方向垂直的采樣多邊形。由于多邊形的間隔及其采樣密度與原始數據不同,必須通過硬件的三線性插值重采樣才能獲得一系列平行多邊形平面上各采樣點的數值?,F在的顯卡一般都支持紋理的三線性插值,故這種繪制方式能對體數據進行三線性插值。體繪制時,使用alpha blending可以實現體繪制的半透明效果。
圖1(b)為基于2D紋理映射的體繪制。該模式下,體數據的采樣主軸為其自身網格數據的三個軸方向之一。按采樣主軸方向進行采樣,得到一系列大小相同、相互平行的矩形,然后將這些面片按視線方向由后往前繪制。隨著視線方向的改變,采樣的主軸方向也應相應調整,使得視線和采樣主軸方向盡可能小。這種繪制方法一般需要按三個主軸方向各存儲一套數據,因而使用內存較多。2D紋理硬件體繪制一般只能采用雙線性插值,這些對繪制效果都有一定影響。
所有的代理幾何體使用的都是平面切片,這使得透視投影方式下,相鄰像素間的采樣距離不同而引起失真。不透明度的矯正能減少一些失真,但進行大范圍的觀察時,這種失真還是可見的。為得到高質量的圖像,人們提出用一系列的同心球組成球殼集代替平面切片集[11]。這樣在透視投影下,所有像素采樣距離均為常數。球殼作為代理幾何體只在透視投影時用到且設置的時候比平面切片復雜,因此,大部分情況下還是采用平面代理幾何體。
2.2 基于GPU的光線投射法(GPU-based ray casting)
傳統的光線投射法是一種純軟件的算法,運算速度較慢。盡管人們提出了多種加速方法,如射線提前終止法、空間跳躍法、模板法、使用各種數據結構(BSP算法、Octree算法、Kd-tree算法)進行優化[12],還是難以滿足實時性的要求。隨著GPU的出現,Kruger等人[13]基于Pixel Shader 2.0模型提出了基于GPU的多通道光線投射算法。此后Stegmaier等人[14]又利用硬件支持條件循環語句的特性首先實現了GPU編程的單通道光線投射算法。
GPU上的光線投射算法實現的關鍵是能夠利用GPU完成對體數據的遍歷、采樣和計算,將得到的采樣值進行混合,以產生最終的重建結果。光線相關的數據以紋素與像素的一對一映射方式組織到2D紋理或者通過片段程序實時計算得到。這些數據需要隨著光線的步進而不斷更新,可以采取 ping-pong技術實現。光線的建立與終止有兩種方法:a)程序性的光線/包圍盒的交[15]。通過相機與體進入點位置給定光線方向,這種方法簡單易實現,但大部分操作要在片段程序中執行,容易造成瓶頸。b)光柵化體包圍盒[13]。光柵化包圍盒的前面與后面,光線的起始點為前側面,方向為后面與前面的差值,這種方法與投影方式無關。為了達到更好更快的交互性,文獻[13,14]進一步提出并實現了利用GPU 加速光線投射的算法。
1)自適應采樣[15,16]
典型的體數據集具有相同屬性的數據較集中分布的特點。對于大部分是屬于同一組織或完全是空體素的區域,不需要高的采樣率甚至不需要采樣;而對于兩個組織邊界處的細節區域,則需要高密度的采樣。
自適應采樣依靠一個可控制空間變量采樣率的數據結構。它描述了最大的等方性的采樣距離,通過用戶定義的誤差范圍與標量數據集的局部變量計算得到。自適應采樣在GPU中的實現方式為:光線跳躍階段,在當前位置增加對存儲這種數據結構的體進行3D紋理查找,將產生的空間變量的步長代替原始的固定的采樣距離計算下一個采樣點。
由于自適應采樣法對結果圖像的質量有影響,為保證圖像質量可采用預積分(pre-integration)法。這種方法是為了解決先分類和后分類方法所繪制的圖像中產生環狀失真(ring artifact)的問題。Engel等人[17]在2001年提出并實現了預積分體繪制算法。它是對相鄰兩個采樣平面構成的塊(slab)進行繪制。然而,預積分操作需要大量的運算,并且當傳遞函數發生改變時,要重新計算預積分表,這嚴重影響了實時顯示速度。Roettger等人[18]于2002年利用Radeon8500顯示芯片和ping pong過濾方法實現數值積分運算,這不僅大大減少了分類更新所需耗費的時間,而且因使用高精度的片元渲染器,獲得了較高的精確度。同年,Guthe等人[19]也提出了基于硬件加速的預積分方法,利用圖形硬件對單個3D紋理切片上所有透明度值和顏色值進行并行計算,以交互的速率實現光線段數值積分計算。但是,幀緩存有限的位分辨率通常會造成量化失真現象(quantization artifacts)。為此,2003年,Rottger等人[15]應用最新的GeForceFX顯卡所提供的浮點運算能力,消除量化失真現象,進一步提高了基于硬件加速的預積分算法精度。
2)空區域的跳躍法
空區域指由傳輸函數映射得到的不透明度為0的樣本點。對于圖像空間的跳躍可采用檢查每個樣本點的不透明度來判別,這樣做代價太大。更好的辦法是將數據組織成層次結構來標志空區域,如八叉樹層次結構中的節點用來存儲標量域中最大與最小值[20]。而對于物體空間的跳躍,可光柵化體的最小包圍盒,減少不必要的光線;然后存儲體塊的最大/最小值,根據等值面的值與轉換函數剔除無關的塊。此方法對于包含大量不透明區域的體數據集非常有用。Kruger等人[13]將八叉樹減少為單層的分辨率——標量數據集大小的(1/8)3,這個改進的八叉樹由3D紋理描述。其實現方式為,將從八叉樹中得到的最小/最大值作為空區域表依賴紋理查找的參數,通過設置深度緩沖的Z為最大值來跳過空區域。只要找到了一個非空節點,Z值就設為0,然后進行光線段的積分。步長將根據八叉樹結構的大小而增加。由于步長的增大,跳躍的迭代次數減少,達到了加速的目的。
2.3 基于GPU的頻域體繪制
Viola等人[21]于2004年實現了硬件的頻域體繪制。繪制過程中,轉換到頻率域的三維變換在預處理階段完成,渲染操作則完全在GPU中進行。首先提取出投影切片;然后采用四種不同的插值方法來重采樣由三維紋理所描述的體數據;最后提取出切片并把該切片運用反傅里葉變換重新變換到空域中而得到重建圖像。通過Shader編程在GPU中實現渲染階段,達到高的幀率,從而滿足實時性要求。
3 相關工作的結果
本文利用GPU光線投射算法與三維紋理映射算法來對256×256×224 CT頭部數據與256×256×128引擎數據進行三維可視化。實驗所用顯卡為NVIDIA 8500GT,內存1 GB。編程環境為Windows XP下的Visual Studio C++ 2005。得到的結果圖片如圖2和3所示。
從圖2、3可以看出,利用基于GPU的光線體繪制方法重建出來的圖像與三維紋理繪制相比,能比較完好地保留物體的真實細節,并且可以實現更多的不同的繪制效果。表1給出了得到不同效果的體繪制時間,以幀率來衡量。從表中可以看出,兩種算法實現繪制速度都達到了交互性要求。進行簡單的灰度繪制時,三維紋理體繪制算法速度較快,當有光照計算時,基于GPU的光線體繪制方法則略勝一籌。
4 體繪制算法的性能評價
對于基于紋理硬件體繪制,采用2D紋理映射體繪制的優點是2D紋理與相應的雙線性插值符合3D圖形硬件架構的標準特性,并且對于每個重采樣操作,雙線性插值僅需要查找與四個紋素的加權,因此速度很快;其缺點是因為需要沿著每個主視方向復制數據切片,需要增加三倍的內存,對內存要求高。僅采用雙線性插值進行紋素重建與基于物體空間的堆存儲將導致采樣與堆切換時的失真。不同的視線將產生不一致的采樣率。
為了克服物體空間的2D紋理映射體繪制的缺點,Rezk-salama等人[22]提出了2D多紋理映射方法。它不僅繼承了2D紋理映射的優點,而且引入了三線性插值,這在一定程度上提高了圖像質量,但還是需要存儲不同方向的三個堆,切片堆間轉換仍會產生失真以及透視投影下不一致的采樣率。
基于硬件的3D紋理映射由于該算法的重采樣和圖像合成過程都是由硬件完成,大大節省了繪制時間。其采用硬件加速的三線性插值可以在任何位置重采樣體,從任意方向繪制切片,對于所有的像素與視線采用常數采樣率,并且只需存儲一個三維紋理,節省了內存。但其最大缺點是三線性插值速度比雙線性插值慢許多。
GPU光線投射法是個吸引人的選擇,因為它非常靈活,很容易實現,并且得到的圖像質量高。由于現在硬件的飛速發展,GPU中可進行條件語句的編程,片段著色器的條件語句非常強大,這使得算法的性能缺點得以克服[14]。
從以上的分析與比較中,可以總結出關于GPU直接體繪制算法的繪制速度、圖像品質以及算法特點等主要的性能指標,如表2所示。
表2 GPU體繪制算法的主要性能指標
基于GPU體繪制算法繪制速度圖像品質算法特點
2D紋理映射體繪制最快較高 算法簡單,雙線性插值,速度快,采樣率不一致,會產生一定圖像失真,內存開銷大
2D多紋理映射體繪制 快高三線性插值,速度快,克服正交投影時采樣率不一致問題,內存開銷大
3D紋理映射體繪制快高三線性插值,內存開銷小
GPU光線投射法較快最高靈活,圖像質量高,內存開銷較大
GPU的頻域體繪制快中等 X光片效果,算法簡單
5 結束語
本文對體繪制概念作了簡要的介紹,并對幾種常用的GPU體繪制算法及其改進算法進行了分析和比較,最后實現了典型的繪制算法。利用可編程渲染器還可以編寫更復雜的渲染程序實現新的加速硬件直接體繪制算法[16,23,24],實現如體深度陰影計算[25]、多光源渲染、多層非多邊形等值面顯示。GPU的發展速度已提高到6個月,因此可以預計,未來的GPU將提供更加強勁的功能,這將為開發高效的體繪制算法提供廣闊的空間。
參考文獻:
[1]唐澤圣.三維數據場可視化[M].北京:清華大學出版社,1999.
[2]lEVOY M.Display of surfaces from volume data[J].IEEE Computer Graphics and Applications,1988,8(3):29-37.
[3]吳恩華.圖形處理器用于通用計算的技術、現狀及挑戰[J].軟件學報,2004,15(10):1494-1503.
[4]WESTOVER L.Footprint evaluation for volume rendering[J].Computer Graphics,1990,24(4):367-376.
[5]LACROUTE P,LEVOY M.Fast volume rendering using a shear-warp factorization of the viewing transform[C]//Proc of the 21st Annual Conference on Computer Graphics and Interactive Techniques.New York:ACM Press,1994:451-458.
[6]TOTSUKA T. Frequency domain volume rendering[C]//Proc of the 20th Annual Conference on Computer Graphics and Interactive Techniques.1993:271-278.
[7]WILSON O,GELDER A van,WILHELMS J.Direct volume rendering via 3D textures,UC-SC-CRL-94-19 [R].California:University of Califarnia,1994.
[8]WESTERMANN R,ERTL T.Efficiently using graphics hardware in volume rendering applications[C]//Proc of the 25th Annual Confe-rence on Computer Graphics and Interactive Techniques.New York:ACM Press,1998:169-177.
[9]MEISSNER M,HOFFMANN U,STRASSER W.Enabling classification and shading for 3D texture mapping based volume rendering using OpenGL and extensions[C]//Proc of IEEE Visualization.1999:110-119.
[10]CULLIP T,NEUMANN U.Accelerating volume reconstruction with 3D texture mapping hardware,UNC-1993-027 [R].[S.l.]: University of North Carilian,1993.
[11]LAMAR E,HAMANN B,JOY K I.Multi-resolution techniques for interactive texture-based volume visualization[C]//Proc of IEEE Visualization’99.1999:355-361.
[12]王文成,孫漢秋,吳恩華.加速體繪制技術[J].計算機輔助設計與圖形學學報,2002,14(9):880-886.
[13]KRUGER J,WESTERMANN R.Acceleration techniques for GPU-based volume rendering[C]//Proc of the 14th IEEE Visualization.Washington DC:IEEE Computer Society,2003:38-45.
[14]STEGMAIER S,STRENGERT M,KLEIN T.A simple and flexible volume rendering framework for graphics hardware-based raycasting[C]//Proc of Volume Graphics.2005:187-195.
[15]ROETTGER S,GUTHE S,WEISKOPF D,et al.Smart hardware acce-lerated volume rendering[C]//Proc ofEUROGRAPHICS-IEEE TCVG Symposium on Visualization ’03.2003:231-238.
[16]KRAUS M,STRENGERT M,KLEIN T,et al.Adaptive sampling in three dimensions for volume rendering on GPU[C]//Proc of Asia Pacific Symposium on Visualization.2007:113-120.
[17]ENGEL K,KRAUS M,ERT T.High-quality preintegrated volume rendering using hardware-accelerated pixel shading[C]//Proc of Eurographics Workshop on Graphics Hardware’01.2001:9-16.
[18]ROETTGER S,ERTL T.A two-step approach for interactive pre-integrated volume rendering of unstructured grids[C]//Proc of IEEE Sy-mposium on Volume Visualization and Graphics.Piscataway,NJ:IEEEPress,2002:23-28.
[19]GUTHE S,ROETGER S,SCHIEBER A,et al.High-quality unstructured volume rendering on the PC platform[C]//Proc of EG/SIGGRAPH Graphics Hardware Workshop ’02.2002:119-125.
[20]DONG Feng,KROKO M,CLAPWORTHY G.Fast volume rendering and data classification using multi-resolution in min-max octrees [J].Computer Graphics Forum,2000,19(3):359-368.
[21]VIOLA I,KANITSAR A,GROLLER M E.GPU-based frequency domain volume rendering[C]//Proc of the 20th Spring Conference on Computer Graphics.2004:55-64.
[22]REZKSALAMA C,ENGEL K,BAUER M,et al.Interactive volume rendering on standard PC graphicshardware using multi-textures and multi-stage rasterization[C]//Proc of ACM SIGGRAPH/EUROGRAPHICS Workshop on Graphics Hardware.New York:ACM Press,2000:109-118.
[23]RβLER F,BOTCHEN P,ERTL T.Dynamic shader generation for flexible multi-volume visualization[C]//Proc of Pacific VIS’08.[S.l.]:IEEE Press,2008:17-24.
[24]SCHAFHITZEL T,WEISKOPF D,ERTL T.Texture-based visualization of 3D unsteady flow by real-time advection and volumetric illumination[J].IEEE Trans on Visualization and Computer Graphics,2007,13(3):569-582.
[25]HADWIGER M,KRATZ A,SIGG C,et al.GPU-accelerated deep shadow maps for direct volume rendering[C]//Proc of EUROGRAPHICS/SIGGRAPH Graphics Hardware.2006:49-52.