3D芯片的處理對象是多邊形表示的物體。用多邊形表示物體有兩個優(yōu)點:首先是直接(盡管繁瑣),多邊形表示的物體其表面的分段線性特征除輪廓外可以通過明暗處理(shading)技�(shù)消除;其次是僅存儲多邊形頂點的幾何信�,多邊形�(nèi)部每個象素的明暗顏色計算所需的信息由這些頂點信息插值而來,這正是易于用圖形硬件支持的快速明暗處理技�(shù)�
一個典型的3D 芯片具有如下功能特征:
1�3D芯片的處理對象為屏幕空間的三角形或上邊平行于掃描線的四邊��
2)象素采樣算法可選擇精確的點采樣�24位尋址空間)或象素區(qū)域隨�(jī)/平均采樣。如每個象素區(qū)域可�16個隨�(jī)/平均分布的采樣點和多�(dá)4個的面片�
3)支持的象素操作包括等亮度明暗處理(flat shading�;Gouraud明暗處理;Z-Buffer算法;用于透明效果等的alpha混合;紋理映射及其透視矯正;每象素可選�1��4個(雙線性插值混合)�8個(三線性插值混合)采樣點的密集紋理采樣;支持MIP-mapping紋理映射方法;支持多種混合模式的紋理光照效果;支持A-Buffer反走樣算��
4)可以實�(xiàn)芯片一級的并行操作。例如在一種隔行掃描的體系�(jié)�(gòu)中可有多�(dá)32�3D芯片對同一組處理對象�(jìn)行并行操�。要做到這一點芯片就必須�(shè)計成可伸縮的體系�(jié)�(gòu)�
5)應(yīng)提供與工作環(huán)境交互的豐富而強(qiáng)大的接口。它們包括用于傳輸處理對象數(shù)�(jù)的接口,芯片�(nèi)部微處理器與外部的接�,象素緩存接口,紋理接口�。由于存儲器技�(shù),特別是面向圖形�(yīng)用的存儲器技�(shù)在不斷取得�(jìn)�,因�3D芯片的接口設(shè)計必須有利于不斷采用新出�(xiàn)的存儲器技�(shù)。特別是顏色、深�、紋理存儲器的接�,應(yīng)在它們的訪問�(xié)議相互獨立的前提�,為每一個系�(tǒng)的特殊需求建立專用和�(yōu)化的存儲器系�(tǒng)。例如SGRAM(同步圖形RAM)先�(jìn)的塊寫特征適合深度存儲器的清�0”操�,而新的WRAM(窗口RAM)的先�(jìn)的Bit-BLT功能和塊寫功能非常有利于顏色存儲器的�(shè)計。因而這些接口必須面向一類情況設(shè)計成可編程的。這樣無須對芯片的�(shè)計作更改就可及時采用新的存儲器技�(shù)�
6)具備調(diào)試和測試診斷功能。這些功能�3D芯片的應(yīng)用開�(fā)提供手段�
上述功能具體到某個芯片時會有一些出入和不同的表述方式。而且新功能和新算法還在不斷研究發(fā)展并及時反映到產(chǎn)品上�
1.一個簡單的3D芯片
與其它多邊形相比,三角形是最簡單的平面多邊形。沿著掃描線方向一個屏幕空間三角形�(nèi)部各點顏色(r,g,b)和深度(z)的變化是線性的,即相臨象素點的這些值僅相差一個固定的常數(shù)。這樣就使得三角形的明暗計算非常適合于硬件實現(xiàn)。而其他多邊形都可以通過�(yù)處理分解成三角形,因而三角形是一種最合適的圖形處理基元。我們首先以一個僅完成Gouraud明暗計算功能的芯片為�,解�3D芯片的基本體系結(jié)�(gòu)。一個三角形的明暗計算可分為三個步驟:初始�;沿著三角形邊的插值計算;沿著三角形內(nèi)掃描線段(span)的插值計��
?�?)初始�
�(jīng)過幾何處理階段之后三角形被變換到了屏幕坐�(biāo)空間,這時三角形由其三個頂點的(x,y,z)坐標(biāo)及頂點的顏色(r,g,b)來定義,其中坐�(biāo)z就是所謂的深度值。假�(shè)屏幕空間的原點在屏幕的左上角,則y坐標(biāo)最小的頂點稱為三角形的頂點,y坐標(biāo)的頂點為三角形的底點,另一頂點為中�。連接頂點和底點的邊為三角形的長邊,連接頂點和中點的邊為短邊,連接中點和底點的邊為其它�。三角形的這些�(shù)�(jù)必須�(zhuǎn)換成適于做Gouraud明暗計算的數(shù)�(jù)格式。為了以后在芯片上增加對紋理映射和透明效果的支持,就必須實�(xiàn)精確的點采樣。另外在邊的插值中�(yīng)保證沒有象素被遺漏或重畫。要滿足這些要求,三角形的數(shù)�(jù)就必須轉(zhuǎn)換成包含以下成分的數(shù)�(jù)�(jié)�(gòu)�
頂點的坐�(biāo)�(shù)�(jù)x,y;顏色�(shù)�(jù)r,g,b; 深度�(shù)�(jù)z 。沿長邊y坐標(biāo)增加方向的坐�(biāo)變化量de.x, de.y;顏色變化量de.r, de.g ,de.b ;深度變化量de.z 。在三角形內(nèi)沿掃描線從長邊到短邊(包括其它邊)的坐標(biāo)變化量ds.x,ds.y ;顏色變化量ds.r, ds.g,ds.b;深度變化量ds.z。中點y坐標(biāo),底點y坐標(biāo)。沿短邊和其它邊的y坐標(biāo)增加方向的x坐標(biāo)變化量dx1,dx2�
其坐�(biāo)空間的數(shù)�(jù)定義如圖1 所示。顏色空間和深度空間的數(shù)�(jù)也可比照該圖理解。以上數(shù)�(jù)可以很容易地從三角形的初始定義數(shù)�(jù)得到。這一初始化過程既可以放在幾何處理階段,也可以放在3D芯片的前端作為一個獨立的�(shù)�(jù)�(zhǔn)備階段,又可以放�3D芯片之上�
具體實現(xiàn)時插值計算總是從三角形的長邊開始,這時沿三角形�(nèi)部掃描段的插值計算既可能沿x軸(掃描線)的正向�(jìn)�,也可能沿x軸的�(fù)向�(jìn)行。在這一實現(xiàn)方案中僅考慮象素中心處的插值計�,為保證速度和精度,所有數(shù)�(jù)分為整數(shù)部分和小�(shù)部分存儲�
�2)沿著三角形邊的插�
通過以上�(shù)�(jù)就可以分別求出三角形的長邊和短邊(或其它邊)與掃描線的交點坐�(biāo),交點處的顏色值和深度值。如三角形長邊與與它相交的條掃描線的交點坐標(biāo)為(x+de.x,y+(de.y=1)�,短邊與條相交的掃描線的交點坐標(biāo)�(x+dx1,y+1),這兩點定義了三角形內(nèi)的一條掃描線�。長邊與條掃描線交點處的顏色�(r+ de.r ,g+de.g,b+de.b),深度為(z+ de.z )。類似地可以得到所有三角形�(nèi)掃描線段兩端點處的相�(guān)信息�
�3)沿三角形內(nèi)掃描線段的插值計�
得到三角形內(nèi)掃描線段兩端點處的坐�(biāo)之后,就可以用其控制三角形內(nèi)顏色和深度的插值計�。這一計算過程總是從三角形的長邊向短邊方向�(jìn)�,因而插值增量可正可�(fù)。三角形�(nèi)掃描線段上各象素的顏色和深度值,在得到長邊上端點處的初始值之后通過簡單的累加沿掃描線段的變化量就可以得�。這時恒有ds.y=0,ds.x=1�-1�
(4)體系�(jié)�(gòu)
至此,一個不包括初始化階段的最簡單�3D芯片的體系結(jié)�(gòu)可設(shè)計如� 2 所��
該芯片與幾何處理部分的接口是一個先�(jìn)先出緩沖存儲�,它以一個三角形為單位用上文所述的適于明暗計算的數(shù)�(jù)�(jié)�(gòu)存儲三角形數(shù)�(jù)。緩沖存儲器的大小應(yīng)使幾何處理和光柵化處理的性能盡量�(dá)到匹�。三角形處理控制器控制整個三角形的明暗著色計算過�。它控制三角形寄存器每次從三角形緩沖器中取出一個三角形的數(shù)�(jù),然后鎖�,再啟動輪廓部件和插值部件開始沿著三角形的長邊和三角形內(nèi)的掃描線段�(jìn)行插值。所有插值部件之間都是并行處理的。輪廓部件輔助三角形控制器完成三角形輪廓上各種數(shù)�(jù)的計算,決定三角形內(nèi)掃描段插值何時到�(dá)端點,是否需要開始下一個掃描段的計�,何時將輪廓從短邊調(diào)整為其它�,何時三角形的處理結(jié)束需要更換為下一個三角形�。輪廓部件還�(chǎn)生顏色和深度存儲器的訪問地址,其地址空間取決于屏幕的分辨�。插值得到的顏色值是否要寫入幀緩存(顏色緩存)取決于插值得到的同一屏幕地址的當(dāng)前深度值與已存儲在該位置的深度值的比較�(jié)果,如果新得到的深度值離視點更近,則容許新的顏色值覆蓋舊值,否則插值計算結(jié)果被丟棄。以上處理過程將對每個需處理的三角形重復(fù)一�。幀緩存的訪問控制邏輯以及Z-Buffer的實�(xiàn)邏輯既可以做�3D芯片�,也可以用獨立的模塊加以實現(xiàn)。無論采用哪種方�,都�(yīng)以有利于及時�(yīng)用更新的存儲器技�(shù)為目�(biāo)�
2.典型3D芯片的體系結(jié)�(gòu)
有了上一節(jié)的基�(chǔ),就可以理解實現(xiàn)了本文第二部分所羅列的功能特征的更加�(fù)雜的3D芯片�
層次控制部件由一組相互作用的時序�(jī)實現(xiàn)。所有數(shù)�(jù)處理部件�(shè)計成并行的具有不同長度的流水�,使用移位寄存器實現(xiàn)流水線之間的同步,從而使不同長度流水線的�(shù)�(jù)能夠在同一時鐘周期到達(dá)所要求的匯合點。當(dāng)不能在一個時鐘周期內(nèi)以流水線方式完成對外部接口的訪問�,部分流水線或整個流水線將暫停。為減少象素緩存較長的操作周期對系統(tǒng)性能的影�,在象素緩存接口中對象素緩存字的不同邏輯部分�(shè)置有FIFO先�(jìn)先出存儲器。下面就芯片各部分的詳細(xì)功能分別�(jìn)行剖��
(1)控制�(jié)�(gòu)
�3D芯片的控制和初始化是通過微處理控制器接口�(jìn)行的。在正常操作開始之前,應(yīng)先通過該接口加載用于控制操作方式的�(nèi)部狀�(tài)寄存器和用于查表計算的幾個RAM存儲�。可通過該接口提供的�(shù)�(jù)線和地址線直接訪問芯片上一些重要的控制和狀�(tài)寄存器以及存儲統(tǒng)計信息的寄存�。這些�(tǒng)計數(shù)�(jù)對于判別實時模擬系統(tǒng)中視景子系統(tǒng)的過載情況很有用。芯片中的時序機(jī)以地址/�(shù)�(jù)寄存器邏輯方式控制芯片中所有其它存儲位置及存儲器接口的訪問,時序機(jī)自動完成地址的增量操作和�(shù)�(jù)的格式轉(zhuǎn)��3D芯片還可以以�(diào)試模式運(yùn)�,在外部控制器的控制下芯片可以以每次一個象�、一個掃描段、一個三角形等運(yùn)行方式工��
幾何接口的控制部分控制FIFO存儲器向3D芯片加載�(shù)�(jù)。在單芯片模式下,芯片的工作狀�(tài)取決于FIFO中是否有可用�(shù)�(jù)及其下一級流水線的工作狀�(tài)。在多�3D芯片�(xié)同工作的模式下,主控芯片的幾何控制部分監(jiān)測所有從屬芯片是否已可接受新的幾何數(shù)�(jù)�
三角形控制部分完成處理一個三角形所要求的所有控�。它最主要的任�(wù)是從幾何接口的初始數(shù)�(jù)建立寄存器中向內(nèi)部工作寄存器讀取三角形處理所需的數(shù)�(jù)。在上一個三角形的一個掃描段仍在處理的時�,下一個三角形的有�(guān)�(shù)�(jù)就可以開始獨立加載,使流水線開始�(zhǔn)備新三角形的處理。三角形控制還啟動分割過程,以決定當(dāng)前掃描段是在三角形的哪一部分。掃描段初始化過程為掃描段控制產(chǎn)生開始數(shù)�(jù)。掃描段控制的主要任�(wù)是產(chǎn)生實際象素的x地址,標(biāo)識那些在某些條件下已無需作�(jìn)一步處理的象素�(shù)�(jù),防止不必要的性能損失。幾何部件必須保證三角形的處理不重疊,從而避免數(shù)�(jù)的不一��
在所有流水線部件中沒有被立即使用的中間結(jié)果和參數(shù)都存儲在掃描段數(shù)�(jù)移位寄存器中。如果使用DRAM作象素緩存FIFO,其刷新周期將導(dǎo)致流水線暫停;在�(jìn)行象素區(qū)域采樣時如果訪問�(kuò)展緩存也會導(dǎo)致流水線暫停;如果需要多次訪問紋理緩存(如三線性濾波時),或由于紋理緩存刷新而未�(zhǔn)備好,則與紋理映射無�(guān)的其它流水線部分一個時鐘周期一個時鐘周期地�(jìn)行等��
(2)幾何接口
幾何接口存儲從外部FIFO存儲器讀入的�(shù)�(jù),這些�(shù)�(jù)是具有不同類型的�(shù)�(jù)�。在幾何接口和處理部件中對參�(shù)�(jìn)行了緩沖,因而初始化和處理可以并行�(jìn)�。如果要�(jìn)行A-Buffer反走樣操�,頂點的x , y地址還需加上從查表得到的偽統(tǒng)計子象素偏量�
(3)光柵化處理部�
光柵化處理部件確定三角形�(nèi)象素的地址,它可以工作在點采樣模式和區(qū)域采樣模式下。三角形光柵化沿著掃描線坐標(biāo)上升的順序從上到下�(jìn)�,總是從具有最小y值的頂點開始,y坐標(biāo)差值的邊為主動邊并決定掃描段插值的方向。掃描段初始化部件通過遞增邊的斜率來確定掃描段的起點和終點坐標(biāo)。在點采樣模式下,僅考慮其中心位于三角形幾何邊界之內(nèi)的象�。對位于三角形邊界或共享邊上的象素僅處理一�。這既可以防止在alpha混合期間�(fā)生錯�,還可以減少對幀緩存的訪問次�(shù)。在區(qū)域采樣模式下情況將復(fù)雜的�。為避免圖形走樣,所有僅被三角形部分覆蓋的象素都必須做更�(xì)致的處理。必須確定它們被三角形所覆蓋的區(qū)�。采用精確的算法其計算代價太�。通常采用近似的方�,如在一個象素內(nèi)定義16個隨�(jī)分布的采樣點,并測試那些采樣點被三角形所覆蓋�
在區(qū)域采樣時,柔性查表部件(FUP部件)分析將要處理的掃描段類�,根�(jù)掃描段包含頂點的多少(一�、兩個或沒有)可以將其分為七個不同的類型。這些信息連同掃描段的插值方向以及邊的斜率的符號決定象素�(nèi)實際的采樣點。采樣點的坐�(biāo)傳送給r、g、b、alpha、z�(chǎn)生器以計算該點相�(yīng)的顏�、alpha及深度�。FUP部件可以處理多達(dá)150多種不同的情�,它的絕大部分功能以查表實現(xiàn),共�8張表。這種實現(xiàn)方式使算法保持了某種程度的靈活性(柔性)。求交部件決定象素邊界與正被處理的三角形邊之間的交點,其公式和參�(shù)由FUP部件確定并傳送給求交部件。交點的x , y坐標(biāo)的小�(shù)部分分別被截斷為3個二�(jìn)制位,將其連接�6位去查一個包�64�16位掩模字的表,掩模字中每一位的位置決定相應(yīng)的采樣點是否被覆�。根�(jù)掃描段的處理方向和邊的斜率的符號,掩模字中的位有時必須求反以獲得所覆蓋的采樣點。當(dāng)一個象素中有幾條邊�(jīng)過時,將為每條邊�(chǎn)生的掩模通過邏輯“與”運(yùn)算得到最終的該象素的掩模。由于三角形邊上象素的存�,相鄰象素之間的距離在區(qū)域采樣時并不總是等于1,這時簡單的給r、g、b、alpha、z累加固定的變化量就會�(chǎn)生錯�。當(dāng)掃描段的起點和終點不在象素中心時就需要用乘法操作求得較精確的位置。為使這些值的計算能采用一致的公式從而簡化設(shè)�,可選擇平面方程這一通用形式。這樣r、g、b、alpha�(chǎn)生器將具有相同的流水線結(jié)�(gòu)。z�(chǎn)生器則稍有不同,它的�(shù)�(jù)寬度更大,需處理的情況更�(fù)雜�
在光柵化過程�,顏色或紋理地址的線性插值會引起透視失真。一種解決方法是將三角形�(xì)分成更小的三角形,但這會加重幾何處理的負(fù)�(dān)。紋理映射是以適中的幾何處理代價得到非常自然的物體外觀,小的三角形會使紋理映射的這一�(yōu)點大打折�。為避免上述情況,就�(yīng)實現(xiàn)真正的透視紋理映射(或稱紋理的透視矯正),這需要為每個象素做一次除�。除法操作是用乘以z倒數(shù)部件所�(chǎn)生的倒數(shù)值來實現(xiàn)的。z值在�(jìn)入求倒部件時要求�(guī)格化的浮點表�,這一浮點表示也同時傳送給LOD部件,LOD部件用該值決定對�(yīng)的MIP-map紋理�(xì)節(jié)層次�
(4)紋理部件
紋理部件�3D芯片中最�(fù)雜的部分,它由UV�(chǎn)生器、LOD部件、紋理地址部件、紋理緩存接口及紋理混合部件組成。紋理部件要處理的紋理是一個經(jīng)過預(yù)濾波處理的MIP-map紋理�。該圖中除了原始分辨率的圖像之外還包括較低分辨率的稱作細(xì)節(jié)層次(LOD:Level Of Detail)的濾波圖像。在較高分辨率的圖像中將相鄰四個象素的顏色值相加并做平均計算就可以得到較低分辨率的一個細(xì)節(jié)層次的濾波圖�。一�1024×1024的原始圖象經(jīng)過如此處理最多可�11個LOD的濾波圖像,LOD0 便是原始圖像。并不是任何紋理的任何LOD都是有意義的,帶有紋理的三角形將在其�(shù)�(jù)中包含有兩個值以指明可用的紋理層次的范圍。選擇哪一個細(xì)節(jié)層次的紋理取決于采樣點的深度坐標(biāo)�。使用MIP-map可以避免采樣不足而導(dǎo)致的走樣�(xiàn)�。觀察者和物體在紋理映射環(huán)境中的水平或垂直移動會產(chǎn)生失真現(xiàn)�。采用雙線性插值混合來代替對紋理的點采樣就可以消除這一�(xiàn)�。在雙線性插值模式下,與采樣點的u,v坐標(biāo)最近的四個紋理象素按照它們到采樣點的距離�(jìn)行加�(quán)求和,其�(jié)果調(diào)整到顏色的表示范圍后賦給該象素,這四個最近的紋理象素選自與采樣點最近的�(xì)節(jié)層次。當(dāng)逐漸接近場景�,細(xì)節(jié)層次間的切換會明顯的感覺�??捎萌€性插值混合來消除這一�(xiàn)象,具體來說就是在距采樣點最近的兩個細(xì)節(jié)層次中分別�(jìn)行雙線性混�,其�(jié)果再根據(jù)采樣點的深度坐標(biāo)加權(quán)混合。上面計算中用到的權(quán)值是�(yù)先計算好之后存放在一張表�,計算時通過查表直接獲得�(quán)�。UV部件使用實際采樣點的x,y坐標(biāo)、z的倒數(shù)值及�(yù)計算的一組參�(shù)�(chǎn)生用于紋理映射的u ,v值。LOD部件在點采樣和雙線性插值混合時確定離采樣點最近的�(xì)節(jié)層次濾波圖象;在三線性插值時確定包圍采樣點的兩個細(xì)節(jié)層次濾波紋理。紋理地址部件根據(jù)u,v �、當(dāng)前LOD、紋理顏色深度、紋理尋址空間等確定訪問紋理存儲器的物理地址�
紋理緩存接口有兩組獨立的�(shù)�(jù)總線和地址總線,其外接存儲器的組織�(yīng)滿足一次訪問可以讀出任意四個相鄰的32位紋理象�。選擇不同的外接存儲�,如DRAM、SRAM等會有不同的訪問速度。DRAM由于有刷新周期而存在等待狀�(tài),SRAM則無等待狀�(tài),可減少由于存儲器訪問而導(dǎo)致的流水線暫�。隨�(yīng)用紋理的目的不同,可選擇顏色(r,g,b�、光�(qiáng)(I�、或alpha值作為紋�。根�(jù)選擇的紋理格�,紋理混合部件中的多路選擇器將紋理字的各組成部分連接到相�(yīng)的計算部件,各成分的計算并行�(jìn)行并按雙線性或三線性插值要求�(jìn)行混合計��
(5)融合部件
融合部件將r、g、b、alpha�(chǎn)生器流水線的�(jié)果同紋理流水線的�(jié)果結(jié)合在一起從而產(chǎn)生紋理映射表面的光照效果。也可以用三角形�(shù)�(jù)中的第二組顏色數(shù)�(jù)�(jìn)行融合處理以�(chǎn)生淡入淡出效��
(6)象素緩存接口
象素緩存是線性編址�,其字的寬度�80�,并由兩個邏輯部分組成,一個真正的象素緩存和一個擴(kuò)展緩�。在點采樣模式下,象素緩存的每個地址存儲了與象素有關(guān)的所有數(shù)�(jù),它們包括顏�、alpha、深度及一些狀�(tài)信息。在區(qū)域采樣模式下,r、g、b、alpha分別被擴(kuò)�4位以存儲累加的中間�,另外還要存�16位象素區(qū)域掩模,還要為每個象素在動態(tài)尋址的擴(kuò)展緩存中存儲最多達(dá)四個的小數(shù)部分,這些小數(shù)部分是相�(guān)地址值的小數(shù)部分,用于與掩模和混合有�(guān)的計�。象素緩存接口從三個FIFO中讀取數(shù)�(jù):個FIFO僅包含完整的象素信息和個小�(shù)部分信息;第二個FIFO包含其余的小�(shù)信息及相�(guān)指針;第三個FIFO由獨立的�、偶地址存儲塊組�,包含擴(kuò)展緩存的�(shù)�(jù)�
圖形硬件的研究歷史可以劃分為兩個階�。八十年代以前主要在軍事�(lǐng)域研究發(fā)�,其�(yīng)用目�(biāo)是各類軍用運(yùn)輸工具仿真模擬器的視景生成系�(tǒng)。八十年代早�,斯坦福大學(xué)教授Jim Clark�(chǎn)生了用專用集成電路技�(shù)實現(xiàn)3D圖形繪制處理器的�(shè)�,然后與其學(xué)生創(chuàng)立了SGI公司,并�1984年開�(fā)出了世界上個通用圖形工作站IRIS 1400(可稱為代高端通用圖形系統(tǒng)�。第二代高端通用圖形工作站的功能特征包括三角形的Gouraud明暗處理、Phong光照模型和硬件Z-Buffer算法。圖象的真實感顯著改�,幾何變換及掃描�(zhuǎn)換性能大幅提高。代表性產(chǎn)品有HP公司的SRX和SGI 公司的GT系統(tǒng),GT系統(tǒng)是個突破每�10萬個三角形的系�(tǒng)。第三代出現(xiàn)�1992年下半年,代表產(chǎn)品是SGI的Reality Engine。它增加了紋理映射及全屏幕反走樣,為通用圖形工作站用于戶外視景模擬打開了大門。雖然SGI新的Infinite Reality在性能上比之于Reality Engine 有了很大的改�(jìn),但其基�(chǔ)依然是繪制紋理反走樣的多邊形。美國北卡大�(xué)研究的PixelFlow系統(tǒng)于去年發(fā)表了樣機(jī),它得到了HP公司的支持,是個對明暗處理語言提供實時支持的系�(tǒng),但其硬件功能尚未超出第三代的范��
即使是最快的可生成高�(zhì)量圖象的工作站如Infinite Reality圖形加速系�(tǒng)仍是基于Gouraud明暗處理�(jié)合普通的紋理技�(shù)。作為通向更高真實感圖形的重要一步,實時Phong明暗處理(Phong Shading )以及凸凹紋理(Bump-mapping)是硬件目前研究的一個重�。已提出了許多Phong 明暗處理及凸凹紋理的硬件實現(xiàn)方案,但尚未取得突破。改�(jìn)的環(huán)境映�、反射映照及更復(fù)雜的反射模型也是目前的一個研究重點,�(yù)計不久將出現(xiàn)在新推出的硬件當(dāng)��
�(dāng)前PC圖形正將上述第二代功能以低價推向市場,某些加速芯片和加速卡還提供一些第三代的功能特�。PC圖形仍將繼續(xù)繼承由高端工作站所開創(chuàng)的新功能。由于絕大多�(shù)PC圖形的解決方案是圍繞一個ASIC芯片來設(shè)�,因而它與半�(dǎo)體技�(shù)的發(fā)展緊密相�(guān)�
一�3D物體的表示法
具有�(fù)雜外形的物體其表面可以由多邊形面片來近似表示。以�1的圓柱為�,其柱面可以�2N個三角形近似,其兩端可以由兩個N邊形來近似。多邊形模型在其輪廓上的分段線性特征是這一表示法主要的視覺缺陷,改�(jìn)的途徑是增加多邊形的分辨率。對于一個復(fù)雜形體來說,為了充分表示其細(xì)節(jié),常常要用到十萬個以上的多邊彀這將耗費(fèi)許多�(shù)�(jù)庫訪問時間和繪制時間。當(dāng)將多邊形模型�(jìn)行放大處理時,會�(chǎn)生連接問題。這就是所謂的“幾何走樣�。物體的多邊形表示既可以通過交互�(shè)計人工提取,也可以通過激光掃描設(shè)備得�。總�,多邊形表示的物體并不特別適合于交互操作或做自由的形狀改變。當(dāng)改變物體的形狀時很難保證多邊形表示的完整性得到保��
對多邊形明暗著色所需要的信息存儲在一個分層的�(shù)�(jù)�(jié)�(gòu)中,每一個物體表面由指向多邊形表的指針定�,該多邊形表包含了近似該表面的一組多邊形,每一個多邊形由指向頂點表的指針定�,頂點表包含了每個多邊形的所有頂�。具體來說需要為每個多邊形存儲以下信息:
1)多邊形的頂點�,每一個頂點是一個三維坐�(biāo),該坐標(biāo)定義在創(chuàng)建該物體時的局部坐�(biāo)系中�
2)頂點的法向量�,這是明暗處理算法所要求的信�。向量由同一局部坐�(biāo)系中的三分量表示�
3)多邊形的法向�,它是包含該多邊形的平面的真正的幾何法向�。這是背面刪除操作所需要的信息�
繪制多邊形物體的傳統(tǒng)方法是將多邊形作為獨立的繪制實體,這樣多邊形之間的共享邊就要被處理兩次。為避免這種情況,可采用基于邊的繪制方法,這時多邊形的表示是基于多邊形的邊而不是多邊形本身?;谶叺姆椒ㄒ馕吨L制過程的組織要采用基于掃描線的算�,基于掃描線的算法將同時處理與當(dāng)前掃描線相交的所有多邊形。這時存儲器中能存儲的可被同時處理的多邊形的數(shù)目將成為可繪制的場景�(fù)雜度的上限。使用全屏Z-buffer并將掃描線算法局限在物體所包含的多邊形上就可以解決這一問題�
�、坐�(biāo)系統(tǒng)
繪制過程的幾何處理部分可被看成應(yīng)用一系列的坐�(biāo)變換將物體數(shù)�(jù)庫變換到一系列的坐�(biāo)系下,這些坐標(biāo)系對所有繪制系�(tǒng)都是公用的,是理�3D圖形�(xué)的基�(chǔ)。用計算�(jī)生成圖象的一系列基本操作與繪制過程要�(jīng)歷的一系列空間即坐�(biāo)系有�(guān)。隨著繪制過程的�(jìn)行處理將從一個空間�(jìn)入下一個空�。已完整地建立起描述這些變換的方法。在對物體實施變換時希望對頂點和頂點的法向量使用相同的變換矩�。事實上,當(dāng)變換在所有方向并不相同時,頂點法向量必須采用不同的變換矩陣。由于單位法向量�(jīng)過變換之后其長度不一定仍保持不變,因而必須對其�(jìn)行重新單位化處理(單位法向量是光照計算所要求�)�
1.局部坐�(biāo)系(局部空間)
為了建模和�(jìn)行局部變換的方便可選擇被建模物體之內(nèi)或附近的某一點作為局部坐�(biāo)系的原點。例如可選擇一個立方體的某一頂點作為坐標(biāo)原點,三個坐�(biāo)軸即是與該頂點相連的立方體的三條�。在局部坐�(biāo)系選定之�,物體各頂點的局部坐�(biāo)以及相對于該局部坐�(biāo)系的各頂點的法向量和物體上多邊形的法向量就可以被提取并存儲起��
2.世界坐標(biāo)系(世界空間�
�(dāng)每一個物體在其局部坐�(biāo)系中被建立起來之后,就需要將其放置到將要繪制的場景之�。組成場景的每個物體都有自己獨立的局部坐�(biāo)系。整個場景的坐標(biāo)系就是所謂的世界坐標(biāo)�。場景中的所有物體都必須從自己的局部坐�(biāo)系中變換到世界坐�(biāo)系中以定義場景中物體之間的空間相對關(guān)系。如果一個物體在場景中被定義為運(yùn)動的,則必須為該物體定義一個隨時間變化的變換序列以便在每一幀將該物體變換到世界坐�(biāo)系中的不同位置。場景中的光源也在世界坐�(biāo)系中定義。如果光照計算是在世界空間中�(jìn)�,則對物體法向量的變換到此為歀對物體表面屬性如紋理、顏色等的定義和�(diào)整也在世界空間中�(jìn)行�
3.眼睛坐標(biāo)�、相�(jī)坐標(biāo)系或觀察坐�(biāo)系(眼睛空間�
眼睛坐標(biāo)系統(tǒng)是用來建立對世界空間�(jìn)行觀察時的觀察參�(shù)和觀察范圍的。在圖形�(xué)中通常用假想的相機(jī)來輔助對觀察系�(tǒng)的理�。一個假想的相機(jī)可以以任意方向放置在世界空間的任何位置,膠片平面在圖形學(xué)中就是觀察平面,也就是場景將投影到其上的平面。建立一個普遍適用的觀察空間相�(dāng)繁瑣,在多數(shù)情況下是對眼睛坐�(biāo)空間做許多限�。一個最小的實用系統(tǒng)可以這樣建立,首先要求眼睛坐�(biāo)系的原點和投影中心是世界坐標(biāo)系中的同一個坐�(biāo)�;其次要求觀察平面的法向量和觀察方向在眼睛空間中與Z坐標(biāo)軸重合;,觀察方向必須是這樣�,當(dāng)相機(jī)朝著Z軸的正向時Z值的增加將遠(yuǎn)離眼睛的位置,同時在左手坐標(biāo)系的前提下,X軸指向右,Y軸向�。滿足這一要求的系�(tǒng)就可以使假想的相�(jī)以任何觀察方向放置在世界坐標(biāo)空間中的任何位置。圖2 是有�(guān)坐標(biāo)系之間的�(guān)��
眼睛坐標(biāo)系是最適宜做背面刪除的空間。背面刪除操作是將背對觀察者的多邊形全部剔除,在場景中這些多邊形對于觀察者來說是不可見的。如果對一個凸物體做背面刪�,則可以完全解決其隱藏面問題。對于具有凹面的物體而言這一操作并不能解決隱藏面問題。背面刪除操作是通過計算多邊形所在平面的法向量與視線向量之間的夾角來決定該平面是否可�。如果這兩個向量的點積大于0,意味著其夾角小�90o 即該多邊形是可見的,否則為不可見。視線向量是從多邊形指向視點的向�。多邊形平面的法向量可通過其不共線的三個頂點計算而得。多邊形的法向量必須指向物體的外�,為保證這一�,多邊形的頂點必須以反時針方向(從多邊形外部看時)順序存儲。如�3所��
4.屏幕坐標(biāo)系(屏幕空間�
屏幕空間是比較難于靠直覺理解的一種空間概�。它是描述如何觀察場景的方法的過程,與透視幾何有關(guān),也可以理解為怎樣定義場景中能夠到�(dá)眼睛(或相機(jī))的光線的過程。將場景中的一個點投影到距離視點為D的觀察平面或屏幕要用到的基本變換是透視變換,屏幕或觀察平面的法向與觀察方向一�。從�4可以看到,運(yùn)用相似三角形原理,點P在屏幕上的投影P�(Xs= Dxe/Ze, ys=Dye/Ze)。屏幕與觀察平面略有不�,屏幕是觀察平面上的一塊矩形區(qū)域,在經(jīng)過一個與�(shè)備有�(guān)的變換之�,可以從觀察平面坐�(biāo)求得屏幕坐標(biāo)。屏幕空間的定義使得其只對一個封閉空間中所包圍的場景�(jìn)行繪制處�,這個封閉的空間稱作視錐臺。它可以這樣來描述:�(shè)想在距離視點D處的觀察平面上有一尺寸�2h的正方形窗口,且該窗口關(guān)于觀察方向是對稱的,則平�
xe=±hze/D ye=±hze/D
ze=D ze=F
將構(gòu)成一個封閉的錐臺。其中xe、ye 、ze是指眼睛坐標(biāo)系中的坐�(biāo),而平面ze=D和平面ze=F分別稱作近處和遠(yuǎn)處的裁剪平面,它們垂直于觀察方�,在此我們假�(shè)觀察平面與近處的裁剪平面重�。如�4所�。對于透視投影而言,通過連接窗口角與投影中心就形成所謂的視錐��
有了這個視錐體,就可以用它對已變換到眼睛坐�(biāo)系下的場景�(jìn)行選�。這不外有三種情況,對于那些完全落在視椎臺之內(nèi)的物�,直接通過透視變換將其變換到屏幕坐�(biāo)系下;對于那些完全落在視椎臺之外的物體不作�(jìn)一步的處理而直接拋�;對于那些與視椎臺的面相交的物體則應(yīng)作裁剪處�,裁取其位于錐臺�(nèi)的部分并用透視變換將它們變換到屏幕坐標(biāo)系下。在屏幕坐標(biāo)系下,Z坐標(biāo)將作為判斷物體面之間相互遮擋的判�(jù)�
注意,場景中的每個物體的每個三角形都要�(jīng)過以上處理過程�
�、象素處�
�(jīng)過以上一系列的變換之�,一個多邊形已變換到屏幕坐標(biāo)系下。將一個屏幕多邊形在屏幕上繪制出來就是多邊形的象素處理過程,它包括光柵�、隱藏面消除、明暗處�。光柵化、隱藏面消除、明暗處理是整�3D圖形生成過程中最�(nèi)層的處理。他們是三個二維插值過�。光柵化是用屏幕空間三角形的頂點坐標(biāo)插值,以求得三角形的邊所截取的三角形�(nèi)掃描線段的端點坐�(biāo),并�(jìn)而求得所截掃描線段上的象素坐�(biāo)。隱藏面消除則是通過對屏幕空間三角形頂點的深度值(Z坐標(biāo))�(jìn)行插�,從而獲得三角形�(nèi)掃描線段上每個象素的深度值。明暗處理是用同樣的方法由頂點光�(qiáng)求得三角形內(nèi)掃描段上每個象素的光強(qiáng)。這三種處理的算法具有相同的數(shù)�(xué)表示形式,只需將坐�(biāo)、深度或光強(qiáng)代入該方程就可以得到相應(yīng)的結(jié)�??傊?,場景的繪制過程可概括為�
對場景中的每個物體的每個多邊形做幾何變換將其變換到屏幕空間�
對多邊形�(nèi)的每一個掃描段求出其端點及其上每個象素的坐標(biāo)�
對掃描段上的每個象素做隱藏面消除處理及明暗處理�
1.光柵�
光柵化處理通過插值求得三角形�(nèi)掃描段的x坐標(biāo)的起點和終點。問題是何處是終點和起點?當(dāng)使用實數(shù)坐標(biāo)時在象素之內(nèi)的何處�(jìn)行采�,屏幕坐�(biāo)是取整數(shù)還是保留小數(shù)精度?這些問題如果處理得不�,就會在多邊形之間產(chǎn)生孔洞,�(chǎn)生重疊的多邊�,這會在透明效果處理時產(chǎn)生嚴(yán)重問題。如果反走樣處理不精�,則會在帶有紋理的表面上�(chǎn)生紋理不連續(xù)�(xiàn)象。例�,如果對屏幕坐標(biāo)取整,則屏幕多邊形的頂點將延伸或縮回到離它最近的象素,這樣多邊形的大小將發(fā)生微小的變化,而且不能用密集采樣�(jìn)行反走樣處理,動畫中的“顫抖”現(xiàn)象便是由此而引起的。在象素�(nèi)何處采樣并不重要,重要的是對象素采樣的處理必須一致�
2.隱藏面消�
全屏幕Z-Buffer(深度緩存器)算法已成為圖形�(xué)事實上的�(biāo)�(zhǔn)隱藏面消除算�,他雖然簡單但存儲要求很�。Z-Buffer算法可看作是工作在三維屏幕空�。每一個象素有一個二維屏幕空間坐�(biāo)( xs , ys )和由眼睛空間頂點的深度值插值而得到的z深度�。深度緩存器開始時被初始化為�(yuǎn)處裁剪平面的深度,對每一個象素比較其插值得到的深度值與已存儲在深度緩存�( xs , ys )處的�,如果該值小于存儲�,則新計算的象素更靠近觀察�。這時新計算的象素的明暗處理值將覆蓋幀緩存中的舊�,深度存儲器中的值也換成新計算的值。深度緩存器算法對場景數(shù)�(jù)庫組織及場景�(fù)雜性沒有限�。在處理�(fù)雜場景或物體�,應(yīng)保證足夠的深度精��
3.明暗處理
首先計算多邊形頂點的明暗參數(shù),然后在多邊形平面上�(jìn)行插�。這樣繪制出的物體不但具有很強(qiáng)的三維立體感,而且消除了用于近似曲面的多邊形之間的公用邊所形成的不連續(xù)特征。實�(xiàn)這一處理方式的算法有兩種,一種稱作Gouraud明暗處理,一種稱作Phong明暗處理(均以發(fā)明者的名字命名�。這也是基于多邊形的繪制日益受歡迎的一個重要原�。Gouraud明暗處理的速度快,但不能產(chǎn)生精確的高光效果,通常用在對速度要求高的場合,如飛行模擬、交互式CAD�(yīng)用等。Phong明暗處理可以生成高質(zhì)量的圖像,但將耗費(fèi)龐大的硬件資�。Gouraud明暗處理僅在多邊形的頂點使用局部反射光照模型計算光�(qiáng),然后使用頂點處的光�(qiáng)通過插值求出多邊形�(nèi)各象素的光強(qiáng)值。而Phong明暗處理則對頂點的法向量�(jìn)行插�,并對多邊形�(nèi)的每一個象素用局部反射光照模型計算其光強(qiáng)。一般說�,多邊形頂點的光�(qiáng)是頂點的法向量相對于光源和視點的方向的函�(shù),這就是所謂的局部反射光照模�。頂點的法向量用來近似原物體表面在該點處的法向量,通過平均公用該頂點的所有多邊形的法向量求得�
Gouraud明暗處理僅與局部光照模型中的漫反射分量一起使�,這是因為�(dāng)高光點完全落在多邊形之內(nèi)�,其對多邊形頂點處沒有任何影�。該方法是目�3D圖形硬件都支持的的明暗處理方��
4.特殊效果
紋理映射、透明以及霧化(大氣效�(yīng))等真實感效果都是在象素處理階段實現(xiàn)�。物體表面紋理的定義是在世界坐標(biāo)系中�(jìn)行的,通過�(yù)處理,每個帶有紋理的多邊形在其頂點數(shù)�(jù)中建立了與相�(yīng)紋理圖的映射�(guān)�。在繪制帶有紋理的多邊形�,其相應(yīng)的紋理圖也同時被加載到紋理存儲器�,在求出物體上象素坐�(biāo)的同時其相應(yīng)的紋理坐�(biāo)也被計算出來。用該紋理坐�(biāo)從紋理存儲器中讀出相�(yīng)紋理象素的�,將其與明暗處理的結(jié)果�(jìn)行混合就得到要顯示的象素�。霧化(大氣效應(yīng))則是在計算出的象素值上乘上一個與深度有關(guān)的衰減因�。對落在同一屏幕位置的象素點的象素值按其所屬物體的透明系數(shù)�(jìn)行加�(quán)融合就可以產(chǎn)生透明效果�
1.隱面消除技�(shù)
�3D場景�,又相當(dāng)多的部分是被遮擋住不可見的,尤其是在飛行模擬和賽車類游戲�,在�(fù)雜場景下可達(dá)30%之�。假如圖形芯片能夠判斷哪些部分是不需要渲染的,避免渲染這些不可見的部分,在理論上說,我們的顯卡可以提升10%到30之多,而且隨著場景�(fù)雜度的增�,這個數(shù)字還會�(jìn)一步提��
2.反鋸齒技�(shù)
相信大家都非常清楚,目前的圖形芯片是否開反鋸齒得分的差距,完全是倍數(shù)級別的。雖然眾多廠商提出過許多不同的反鋸齒算法,但無論效果還是速度都還是無法讓我們滿�。希望占用極少的資源,提供極好的反鋸齒效果的算法能盡早和我們見��
3.嵌入式顯�
奔騰和賽�(yáng)的差距在�?不是在主頻,而是在二級緩存,幾百KB的二級緩存對性能的影響可以說是非常大�。在90年代,曾�(jīng)有兩個廠商投入過圖形芯片嵌入式顯存的研究,雖然之后都渺無音信,但無疑指明了一個不同的研究方向。或許在將來,圖形芯片也將同樣嵌入一�、二級顯�,而高低端的圖形芯片就會以二級嵌入式顯存的大小來區(qū)��
4.多核心技�(shù)
無論�3dfx的VSA架構(gòu)、ATI的MAXX技�(shù)還是XGI的BitFluent技�(shù),都算是相當(dāng)成熟的多核心技�(shù)。在目前來說,多核心技�(shù)雖然可以將性能非常簡單的提高,但相�(yīng)的成本和功率的升高實在是讓人無法承受。但隨著生產(chǎn)工藝提升的難度不斷加大,研發(fā)新圖形芯片的成本不斷提升,或許在今后多核心技�(shù)相反會成為一個以有限成本大幅提升性能的方�。要知道的圖形工作站采用的可都是Savage2000,TNT之類的圖形芯�,只是數(shù)量比較恐怖�
5.整合
究竟能用得上�(dāng)前圖形芯片全部性能的人有多�?相信只是少�(shù),對大部分大部分商務(wù)用戶和家庭用戶而言,目前的圖形芯片的發(fā)展速度已經(jīng)�(yuǎn)�(yuǎn)超過了他們的需�。對于他們來說,整合方案就是的選擇:更小的體�,更低的成本,沒有噪�,不容易出現(xiàn)故障,Intel圖形芯片市場占有率高居不下就是整合的功勞�
維庫電子�,電子知�,一查百��
已收錄詞�168462�