基于硬件加速的三維紋理、多紋理和片元澆染器_第1頁
基于硬件加速的三維紋理、多紋理和片元澆染器_第2頁
基于硬件加速的三維紋理、多紋理和片元澆染器_第3頁
基于硬件加速的三維紋理、多紋理和片元澆染器_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于硬件加速的三維紋理、多紋理和片元澆染器

1程序的兩種支持下一代圖形數據處理的標志是一種集成了圖形硬件的編程能力,它集成了點源處理器(vertexshoat)和用于繪制圖表的片源渲染器(framtsea或薄膜映射)??删幊啼秩酒鞑]有完全替代傳統(tǒng)處理器中的頂點管道和像素管道的固定處理單元,它們構成了圖形處理器中不同的頂點和像素管道(如圖1)??删幊啼秩酒饔捎邢薜募拇嫫骱瓦\算器組成,能夠對數據流中的數據元素重復執(zhí)行有限量的一段指令程序,意即一段指令多次數據(SingleInstructionMultiData,SIMD)。這一小段程序釋放了固定渲染管道的約束,使得用戶能夠根據自己的要求為硬件制定較為復雜的渲染程序,產生各種特殊的圖像效果。PC上兩種主要編程接口Direct3D和OpenGL均支持可編程渲染器。Direct3D對VertexShader和PixelShader有統(tǒng)一的編程接口和渲染器語言(匯編或者高級代碼)。而OpenGL現在要通過OpenGL的寄存器的Combiner擴展函數實現渲染器的編程,但圖形硬件廠商ATI和NVIDIA各有自己的一套Shader擴展函數。NVIDIA已經發(fā)布了CG(CGraphics)工具,渲染器程序可以用與C十分相似的高級語言編寫,而且能夠針對不同的顯示芯片核心和DirectX或者OpenGL接口產生相應的代碼。我們在數字人腦圖譜系統(tǒng)上采了用Direct3D編程接口,Shader采用Direct3D的匯編語言。但我們不久將加入對OpenGL的支持使得能夠運行在Linux平臺上。測試用的顯卡是Geforce4Ti4200-8X-128MB1(見圖1)。1.1維體數據的特征直接體繪制是體數據顯示中的重要方法,與基于面繪制方法的根本區(qū)別是:直接體繪制最終合成的圖像是所有體元經過轉換函數混合合成,而面繪制是選擇一部分體元重建成幾何面后的繪制。因此,直接體繪制可以更加靈活的利用轉換函數來選擇體元,顯示復雜的物體結構并暴露其內部信息。大部分體數據如CT,MRI和三維超聲數據都是對物體在三維空間離散規(guī)則點上進行的測量或者采樣的標量值,但在各個方向上的采樣頻率并不一致,即所謂各向異分辨率。物體在連續(xù)空間中場的定義可以通過體數據重建得到,根據Nyquist定理,重建后的連續(xù)空間場其最大頻率不高于空間采樣頻率的二分之一。原始的體數據往往反映的是物體的某些屬性而不是真實的發(fā)光顏色和阻光度等光學特性。將體數據進行分類和映射到顏色與阻光度的轉換函數對直接體繪制來說非常重要,它直接影響最后圖像顯示的結構和層次。設一維轉換函數在物體連續(xù)空間中的定義為發(fā)光顏色?cc?(s)和光吸收率?ττ?,s是在物體在空間位置x的標量值s=s(x)。三維體數據投影到二維像平面的過程使用的一個常用簡單模型是密度發(fā)光模型,即假設物體在每一點發(fā)射光線和吸收光線,并忽略散射和頻譜效應。成像顏色用公式表示即C=∫D0?c(s(x(t)))e-∫t0?τ(s(x(t′)))dt′dtC=∫D0c?(s(x(t)))e?∫t0τ?(s(x(t′)))dt′dt即顏色光線從0到D累積發(fā)光和吸收因子(如圖2)。我們把這個積分公式離散化,即設沿光線0到D分為n等分,間隔為d。則有阻光度Ai=1-e-τ(s(x(t′(id)))d和顏色Ci=c(s(x)id)))d,于是得到Capprox=n∑i=0Cii-1∏j=0(1-Ai)∑i=0nCi∏j=0i?1(1?Ai)這個方程可以利用從前至后或從后至前的alpha混合來得到即C′i=Ci+(1-Ai)C′i+1。體數據的存儲量非常大,直接體繪制又涉及大量的插值運算和顏色混合運算,在微機上的顯示速度很慢,只有通過硬件加速才能達到實時交互顯示。在目前通用顯示硬件上,顯示芯片上的顯存空間已經達到128MB或256MB,并且支持AGP8X標準,使得訪問系統(tǒng)內存的帶寬超過1GB/S。體數據可以三維紋理或二維紋理的多紋理方式表示存儲在顯卡內存或AGP內存,通過中間幾何面取得紋理中的體數據。如圖3有幾種中間幾何面的表示:圖中A情形是按照與視線垂直方向等分三維紋理空間的平面切片,B是維紋理空間的某個正交方向等分的切片,C是視點方向的球錐切片(圖C左和圖C中是在另一個視點(不是球錐的頂點)的觀察圖,圖C右中視點和球錐頂點位于同一點的實際圖)。而從顏色混合公式來看,在視線方向上與切片相交的切片間距應當一致,即對紋理數據的空間采樣距離應當一致。否則,合成的圖像會有一定的色彩空間和結構的走樣。A情形在平行投影時和C情形在透視投影時的空間采樣率一致。A和C情形均是在三維紋理空間中定義紋理坐標,利用硬件進行三線性插值的紋理采樣。B情形在沒有硬件三維紋理支持的時候采用的二維多紋理切片,但通過設定多紋理間的運算,也可以避免在不同方向上平行投影時的空間采樣率不同的問題。對于各向異性分辨率的體數據,A和C情形中只要對各向的紋理坐標做相應的縮放處理即可。A和C情形在每次變換視線方向后都要重新計算切片的中間幾何。A中間幾何的三角面數一般在1000以下,而C情形由于是三角面片對球面的近似,如果在較高精度下,通常會達到三角面數100000(對于體數據256×256×256而言)。這樣C情形的繪制就比較耗時不能達到實時的交互。我們在透視投影交互時,采用A情形,并且把視點放置在較遠處即可。而靜止的圖像采用C情形繪制。1.2定dirc3的混合因子根據C′i=Ci+(1-Ai)C′i+1,中間幾何面可以從后至前的順序依次繪制,通過設定Direct3D的混合因子SourceBlend為SourceAlpha和DestBlend為InverseSourceAlpha進行顏色混合。Direct3D提供了多種顏色混合因子和操作,如設定Direct3D的混合操作為取最大值即能得到最大值投影,如圖4。2轉換函數作用時的圖像轉換函數一直以來都是直接體視繪制的重要問題。它主要是映射了紋理標量值s到RGBA的顏色形式,是決定某些重要結構和細節(jié)顯示的關鍵。人們已經提出了許多種自動和半自動的轉換函數的設計方法,Kniss等還提出了多維轉換函數。本文中使用的轉換函數計算和人工調整的方法得到轉換函數。轉換函數相當于顯示硬件的顏色查找表。對于一個256×256×256×8的體數據,如果以D3DFMT_P8格式只存儲標量值,存儲量為16MB,而要以D3DFMT_A8R8G8B8,先要經過轉換函數得到ARGB值再存儲,而這時需要的存儲量就為64MB(見圖5)。在光線積分離散化的公式中,我們可以看到Ci=?c(s(x(id)))dCi=c?(s(x(id)))d。其中id應是第i中間幾何切片,s應是這個中間幾何切片紋理坐標上的紋理插值,即s=sample(x(id),?s[?x,?y,?z]?Ci=?c(s)d。但是無論紋理格式是顏色索引值還是RGBA格式,紋理的插值都是對顏色的插值而不是原始紋理標量值的插值。即其公式變?yōu)镃i=sample(x(id),?c(?s[?x,?y,?z]))d,因此這種插值是在轉換函數作用以后發(fā)生的。現在片元處理器具有依賴紋理提取(dependenttexturefetch)的指令,即可以將第一個紋理提取的紋理值作為下一個紋理的坐標值來提取紋理。因此將可以把轉換函數以第二個一維紋理或二維紋理的方式表示,而將顏色索引表的值定義為以原始紋理的標量為灰度級的索引表。這樣,第一個紋理即三維紋理提取的紋理值雖然是轉換函數作用以后的插值,但其中的ARGB每個分量值均等于對原始三維紋理標量值的插值,而利用這個值可以做下個紋理的地址取得顏色值,這樣的插值可看作是在轉換函數作用以前發(fā)生的。用Direct3D的PixselShader表示,其代碼是:其中紋理0即顏色表格式的三維紋理,紋理1即轉換函數。當轉換函數非線性且有高頻分量的時候,插值所發(fā)生的位置對合成的圖像有明顯的不同。發(fā)生在轉換函數作用之前的插值合成的圖像較多保留了轉換函數的高頻變化部分,即圖像色彩有高頻分布。可以對比以下圖像(如圖6)。利用硬件的依賴紋理提取,我們還可以實現二維轉換函數,即使得顏色值與強度和其梯度相關。3基于ps的體元光照描述使用簡單的體數據發(fā)光和吸收成像模型沒有考慮外部光源的因素。Phong光照模型是比較通用和簡單的局部光照模型,即不考慮模型遮擋住光源。渲染得到的光強是環(huán)境光,漫反射光和鏡面反射光三種性質的光強累加的結果。Iphone=IAmbient+IDiffuse+ISpecular,其中IAmbient=kα為反射環(huán)境光常量,ΙDiffuse=Ιpkdcosφ=Ιpkd(→l?→n是漫反射光強,Ip為光源強度,kd為材質,→l,→n分別是指向光源方向和表面法向量,ΙSpecular=Ιpkscosnα=Ιpks(→h?→n)n是鏡面反射光,→h是指向視點的向量和指向光源向量的中間向量。傳統(tǒng)的圖形管道的光照渲染是基于點元的,因為點元具有法向量。而可編程渲染器使得我們能夠進行基于片元的光照渲染,這也發(fā)生在Direct3D的PixelShader中。為了對體元進行光照,每個體元都要有法向量,由于體元所在位置的表面未知,法向量使用體元的梯度方向是最簡單合理的。由于目前PixelShader沒有直接計算紋理梯度的指令,因此我們必須預先計算體數據的梯度,存儲紋理格式為ARGB,其中A通道為體數據,RGB通道為體數據梯度的三個分量。這樣,在中間幾何面上的體數據梯度單位向量是通過鄰點插值得到的,由于PS1.3沒有向量歸一化指令,其插值結果不能歸一化使得與實際的梯度單位向量不一致,這會導致光照計算的一定失真。同樣由于PS1.3可執(zhí)行的指令數目有限,我們規(guī)定光源為平行光,則光照方向在繪制每一幀時對所有體元都一樣。因而可以在程序中預設為一常數,它的代碼是:3.1ha的體數據合成在片元渲染器計算得到像素之后并且到達與幀緩存進行顏色混合之前,像素要經過一些測試通道,如Alpha測試和Z測試。假使我們放棄體數據發(fā)光和吸收的模型,而是用外部光源渲染,此時Alpha仍為體數據,這時我們可以利用Alpha測試通道決定是否接受該像素。設定Alpha測試參考值為Siso并且相等時才接受該像素。這樣最后合成的圖像上所有像素點都是體數據中標量值為Siso的空間分布點的投影。但會發(fā)現這樣通常得到的圖像顯示的等值面并不連續(xù),這是因為由于有限的中間幾何切面數導致許多具有Siso的空間位置上沒有中間幾何面采樣。只有大大增加中間幾何的切面數才能得到連續(xù)感的等值面。這樣完成等值面繪制速度較慢,但如果改變Alpha測試方法為大于等于Siso或小于等于Siso則無需增加切面數,這時顯示的是等值面的一邊,如圖8。4預制件用預壓機技術在PC機上具有可編程能力的顯示芯片使得我們能夠由硬件加速完成過去只能由軟件計算完成的直接體繪制方法,而且能與軟件計算方法得到同樣的結果,使得PC繪制速度和性能得到極大的提高,甚至達到和超過了一般檔次的圖形工作站

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論