現在的遊戲
,單單從圖象的生成來講大概須要下面四個步驟:
1、建齊次座標
2、 着色模型
3、Z緩存
4、紋理映射
在這些步驟中,顯示部分(GPU)只負責完成第3、四步,而前兩個步驟主要是依靠 CPU 來完成。並且,這還僅僅只是3D圖象的生成,尚未包括遊戲中複雜的AI運算。
場景切換運算等等……無疑,這些元素還須要CPU去完成,這就是爲何在運行大型3D的時候,當場景切換時再強勁的顯卡都會出現停頓的現象。
3D芯片的處理對象是
多邊形表示的物體。用多邊形表示物體有兩個優勢:首先是直接(儘管繁瑣),
多邊形表示的物體其表面的分段線性特徵除輪廓外能夠經過明暗處理(shading)技術消除;其次是僅存儲
多邊形頂點的幾何信息,
多邊形內部每一個象素的明暗顏色計算所需的信息由這些頂點信息插值而來,這正是易於用圖形硬件支持的快速明暗處理技術。
支持多邊形繪製的圖形硬件一樣也能夠繪製由雙三次曲面片表示的物體,經過對這種物體的表面進行三角剖分,
用逼近的三角形網格代替原物體的曲面表示就能夠作到這一點。
固然,用多邊形表示物體也有其缺點,如增長了紋理映射和陰影生成的難度,當須要詳細表示覆雜物體時所需的三角形數量將變得很是龐大。
將多邊形表示的物體顯示到計算機屏幕上,這一過程涉及物體在計算機內部的表示方式即物體的數據結構,
由物體組成的場景的組織結構,物體從場景到屏幕空間要通過的一系列變換,以及產生最終屏幕圖象要通過的一系列光柵化處理。
這些方面都涉及到特定的處理算法,相應的算法又有許多不一樣的變種。
下面僅就3D芯片涉及的圖形處理過程及相關算法作一簡單分析介紹,這些是理解3D圖形處理及圖形硬件的基礎。
1、3D物體的表示法
具備複雜外形的物體其表面能夠由多邊形面片來近似表示。以圖1的圓柱爲例,其柱面能夠由2N個三角形近似,其兩端能夠由兩個N邊形來近似。
多邊形模型在其輪廓上的分段線性特徵是這一表示法主要的視覺缺陷,改進的惟一途徑是增長多邊形的分辨率。
對於一個複雜形體來講,爲了充分表示其細節,經常要用到十萬個以上的多邊形。這將耗費許多數據庫訪問時間和繪製時間。
當將多邊形模型進行放大處理時,會產生鏈接問題。這就是所謂的「幾何走樣」。
物體的多邊形表示既能夠經過交互設計人工提取,也能夠經過激光掃描設備獲得。總之,多邊形表示的物體並不特別適合於交互操做或作自由的形狀改變。
當改變物體的形狀時很難保證多邊形表示的完整性獲得保持。
對多邊形明暗着色所須要的信息存儲在一個分層的數據結構中,每個物體表面由指向多邊形表的指針定義,
該多邊形表包含了近似該表面的一組多邊形,每個多邊形由指向頂點表的指針定義,頂點表包含了每一個多邊形的全部頂點。
具體來講須要爲每一個多邊形存儲如下信息:
1)多邊形的頂點表,每個頂點是一個三維座標,該座標定義在建立該物體時的局部座標系中。
2)頂點的法向量表,這是明暗處理算法所要求的信息。向量由同一局部座標系中的三份量表示。
3)多邊形的法向量,它是包含該多邊形的平面的真正的幾何法向量。這是背面刪除操做所須要的信息。
繪製多邊形物體的傳統方法是將多邊形做爲獨立的繪製實體,這樣多邊形之間的共享邊就要被處理兩次。
爲避免這種狀況,可採用基於邊的繪製方法,這時多邊形的表示是基於多邊形的邊而不是多邊形自己。
基於邊的方法意味着繪製過程的組織要採用基於掃描線的算法,基於掃描線的算法將同時處理與當前掃描線相交的全部多邊形。
這時存儲器中能存儲的可被同時處理的多邊形的最大數目將成爲可繪製的場景複雜度的上限。
使用全屏Z-buffer並將掃描線算法侷限在物體所包含的多邊形上就能夠解決這一問題。
3D芯片的處理對象是多邊形表示的物體。用多邊形表示物體有兩個優勢:
首先是直接(儘管繁瑣),多邊形表示的物體其表面的分段線性特徵除輪廓外能夠經過明暗處理(shading)技術消除;
其次是僅存儲多邊形頂點的幾何信息,多邊形內部每一個象素的明暗顏色計算所需的信息由這些頂點信息插值而來,這正是易於用圖形硬件支持的快速明暗處理技術。
支持多邊形繪製的圖形硬件一樣也能夠繪製由雙三次曲面片表示的物體,經過對這種物體的表面進行三角剖分,
用逼近的三角形網格代替原物體的曲面表示就能夠作到這一點。固然,用多邊形表示物體也有其缺點,
如增長了紋理映射和陰影生成的難度,當須要詳細表示覆雜物體時所需的三角形數量將變得很是龐大。
將多邊形表示的物體顯示到計算機屏幕上,這一過程涉及物體在計算機內部的表示方式即物體的數據結構,
由物體組成的場景的組織結構,物體從場景到屏幕空間要通過的一系列變換,以及產生最終屏幕圖象要通過的一系列光柵化處理。
這些方面都涉及到特定的處理算法,相應的算法又有許多不一樣的變種。
下面僅就3D芯片涉及的圖形處理過程及相關算法作一簡單分析介紹,這些是理解3D圖形處理及圖形硬件的基礎。
2、座標系統
繪製過程的幾何處理部分可被當作應用一系列的座標變換將物體數據庫變換到一系列的座標系下,這些座標系對全部繪製系統都是公用的,
是理解3D圖形學的基礎。用計算機生成圖象的一系列基本操做與繪製過程要經歷的一系列空間即座標系有關。
隨着繪製過程的進行處理將從一個空間進入下一個空間。已完整地創建起描述這些變換的方法。在對物體實施變換時但願對頂點和頂點的法向量使用相同的變換矩陣。事實上,當變換在全部方向並不相同時,頂點法向量必須採用不一樣的變換矩陣。因爲單位法向量通過變換以後其長度不必定仍保持不變,於是必須對其進行從新單位化處理(單位法向量是光照計算所要求的)。
1.局部座標系(局部空間)
爲了建模和進行局部變換的方即可選擇被建模物體以內或附近的某一點做爲局部座標系的原點。例如可選擇一個立方體的某一頂點做爲座標原點,三個座標軸便是與該頂點相連的立方體的三條邊。在局部座標系選定以後,物體各頂點的局部座標以及相對於該局部座標系的各頂點的法向量和物體上多邊形的法向量就能夠被提取並存儲起來。
2.世界座標系(世界空間)
當每個物體在其局部座標系中被創建起來以後,就須要將其放置到將要繪製的場景之中。組成場景的每一個物體都有本身獨立的局部座標系。整個場景的座標系就是所謂的世界座標系。場景中的全部物體都必須從本身的局部座標系中變換到世界座標系中以定義場景中物體之間的空間相對關係。若是一個物體在場景中被定義爲運動的,則必須爲該物體定義一個隨時間變化的變換序列以便在每一幀將該物體變換到世界座標系中的不一樣位置。場景中的光源也在世界座標系中定義。若是光照計算是在世界空間中進行,則對物體法向量的變換到此爲止。對物體表面屬性如紋理、顏色等的定義和調整也在世界空間中進行。
3.眼睛座標系、相機座標系或觀察座標系(眼睛空間)
眼睛座標系統是用來創建對世界空間進行觀察時的觀察參數和觀察範圍的。在圖形學中一般用假想的相機來輔助對觀察系統的理解。一個假想的相機能夠以任意方向放置在世界空間的任何位置,膠片平面在圖形學中就是觀察平面,也就是場景將投影到其上的平面。創建一個廣泛適用的觀察空間至關繁瑣,在多數狀況下是對眼睛座標空間作許多限制。一個最小的實用系統能夠這樣創建,首先要求眼睛座標系的原點和投影中心是世界座標系中的同一個座標點;其次要求觀察平面的法向量和觀察方向在眼睛空間中與Z座標軸重合;最後,觀察方向必須是這樣的,當相機朝着Z軸的正向時Z值的增長將遠離眼睛的位置,同時在左手座標系的前提下,X軸指向右,Y軸向上。知足這一要求的系統就可使假想的相機以任何觀察方向放置在世界座標空間中的任何位置。圖2 是有關座標系之間的關係。
眼睛座標系是最適宜作背面刪除的空間。背面刪除操做是將背對觀察者的多邊形所有剔除,在場景中這些多邊形對於觀察者來講是不可見的。若是對一個凸物體作背面刪除,則能夠徹底解決其隱藏面問題。對於具備凹面的物體而言這一操做並不能解決隱藏面問題。背面刪除操做是經過計算多邊形所在平面的法向量與視線向量之間的夾角來決定該平面是否可見。若是這兩個向量的點積大於0,意味着其夾角小於90o 即該多邊形是可見的,不然爲不可見。視線向量是從多邊形指向視點的向量。多邊形平面的法向量可經過其不共線的三個頂點計算而得。多邊形的法向量必須指向物體的外部,爲保證這一點,多邊形的頂點必須以反時針方向(從多邊形外部看時)順序存儲。如圖3所示。
4.屏幕座標系(屏幕空間)
屏幕空間是比較難於靠直覺理解的一種空間概念。它是描述如何觀察場景的方法的過程,與透視幾何有關,也能夠理解爲怎樣定義場景中可以到達眼睛(或相機)的光線的過程。將場景中的一個點投影到距離視點爲D的觀察平面或屏幕要用到的基本變換是透視變換,屏幕或觀察平面的法向與觀察方向一致。從圖4能夠看到,運用類似三角形原理,點P在屏幕上的投影P’(Xs= Dxe/Ze, ys=Dye/Ze)。屏幕與觀察平面略有不一樣,屏幕是觀察平面上的一塊矩形區域,在通過一個與設備有關的變換以後,能夠從觀察平面座標求得屏幕座標。屏幕空間的定義使得其只對一個封閉空間中所包圍的場景進行繪製處理,這個封閉的空間稱做視錐臺。它能夠這樣來描述:設想在距離視點D處的觀察平面上有一尺寸爲2h的正方形窗口,且該窗口關於觀察方向是對稱的,則平面
xe=±hze/D ye=±hze/D
ze=D ze=F算法
將構成一個封閉的錐臺。其中xe、ye 、ze是指眼睛座標系中的座標,而平面ze=D和平面ze=F分別稱做近處和遠處的裁剪平面,它們垂直於觀察方向,在此咱們假設觀察平面與近處的裁剪平面重合。如圖4所示。對於透視投影而言,經過鏈接窗口角與投影中心就造成所謂的視錐體。
有了這個視錐體,就能夠用它對已變換到眼睛座標系下的場景進行選擇。這不外有三種狀況,對於那些徹底落在視椎臺以內的物體,直接經過透視變換將其變換到屏幕座標系下;對於那些徹底落在視椎臺以外的物體不做進一步的處理而直接拋棄;對於那些與視椎臺的面相交的物體則應做裁剪處理,裁取其位於錐臺內的部分並用透視變換將它們變換到屏幕座標系下。在屏幕座標系下,Z座標將做爲判斷物體面之間相互遮擋的惟一判據。
注意,場景中的每一個物體的每一個三角形都要通過以上處理過程。
3、象素處理 通過以上一系列的變換以後,一個多邊形已變換到屏幕座標系下。將一個屏幕多邊形在屏幕上繪製出來就是多邊形的象素處理過程,它包括光柵化、隱藏面消除、明暗處理。光柵化、隱藏面消除、明暗處理是整個3D圖形生成過程當中最內層的處理。他們是三個二維插值過程。光柵化是用屏幕空間三角形的頂點座標插值,以求得三角形的邊所截取的三角形內掃描線段的端點座標,並進而求得所截掃描線段上的象素座標。隱藏面消除則是經過對屏幕空間三角形頂點的深度值(Z座標)進行插值,從而得到三角形內掃描線段上每一個象素的深度值。明暗處理是用一樣的方法由頂點光強求得三角形內掃描段上每一個象素的光強。這三種處理的算法具備相同的數學表示形式,只需將座標、深度或光強代入該方程就能夠獲得相應的結果。總之,場景的繪製過程可歸納爲: 對場景中的每一個物體的每一個多邊形作幾何變換將其變換到屏幕空間; 對多邊形內的每個掃描段求出其端點及其上每一個象素的座標; 對掃描段上的每一個象素作隱藏面消除處理及明暗處理。 1.光柵化 光柵化處理經過插值求得三角形內掃描段的x座標的起點和終點。問題是何處是終點和起點?當使用實數座標時在象素以內的何處進行採樣,屏幕座標是取整數仍是保留小數精度?這些問題若是處理得很差,就會在多邊形之間產生孔洞,產生重疊的多邊形,這會在透明效果處理時產生嚴重問題。若是反走樣處理不精確,則會在帶有紋理的表面上產生紋理不連續現象。例如,若是對屏幕座標取整,則屏幕多邊形的頂點將延伸或縮回到離它最近的象素,這樣多邊形的大小將發生微小的變化,並且不能用密集採樣進行反走樣處理,動畫中的「顫抖」現象即是由此而引發的。在象素內何處採樣並不重要,重要的是對象素採樣的處理必須一致。 2.隱藏面消除 全屏幕Z-Buffer(深度緩存器)算法已成爲圖形學事實上的標準隱藏面消除算法,他雖然簡單但存儲要求很高。Z-Buffer算法可看做是工做在三維屏幕空間。每個象素有一個二維屏幕空間座標( xs , ys )和由眼睛空間頂點的深度值插值而獲得的z深度值。深度緩存器開始時被初始化爲遠處裁剪平面的深度,對每個象素比較其插值獲得的深度值與已存儲在深度緩存中( xs , ys )處的值,若是該值小於存儲值,則新計算的象素更靠近觀察者。這時新計算的象素的明暗處理值將覆蓋幀緩存中的舊值,深度存儲器中的值也換成新計算的值。深度緩存器算法對場景數據庫組織及場景複雜性沒有限制。在處理複雜場景或物體時,應保證足夠的深度精度。 3.明暗處理 首先計算多邊形頂點的明暗參數,而後在多邊形平面上進行插值。 這樣繪製出的物體不但具備很強的三維立體感,並且消除了用於近似曲面的多邊形之間的公用邊所造成的不連續特徵。 實現這一處理方式的算法有兩種,一種稱做Gouraud明暗處理,一種稱做Phong明暗處理(均以發明者的名字命名)。 這也是基於多邊形的繪製日益受歡迎的一個重要緣由。Gouraud明暗處理的速度快,但不能產生精確的高光效果,一般用在對速度要求高的場合, 如飛行模擬、交互式CAD應用等。Phong明暗處理能夠生成高質量的圖像,但將耗費龐大的硬件資源。 Gouraud明暗處理僅在多邊形的頂點使用局部反射光照模型計算光強,而後使用頂點處的光強經過插值求出多邊形內各象素的光強值。 而Phong明暗處理則對頂點的法向量進行插值,並對多邊形內的每個象素用局部反射光照模型計算其光強。 通常說來,多邊形頂點的光強是頂點的法向量相對於光源和視點的方向的函數,這就是所謂的局部反射光照模型。 頂點的法向量用來近似原物體表面在該點處的法向量,經過平均公用該頂點的全部多邊形的法向量求得。 Gouraud明暗處理僅與局部光照模型中的漫反射份量一塊兒使用,這是由於當高光點徹底落在多邊形以內時,其對多邊形頂點處沒有任何影響。 該方法是目前3D圖形硬件都支持的惟一的明暗處理方法。 4.特殊效果 紋理映射、透明以及霧化(大氣效應)等真實感效果都是在象素處理階段實現的。 物體表面紋理的定義是在世界座標系中進行的,經過預處理,每一個帶有紋理的多邊形在其頂點數據中創建了與相應紋理圖的映射關係。 在繪製帶有紋理的多邊形時,其相應的紋理圖也同時被加載到紋理存儲器中,在求出物體上象素座標的同時其相應的紋理座標也被計算出來。 用該紋理座標從紋理存儲器中讀出相應紋理象素的值,將其與明暗處理的結果進行混合就獲得要顯示的象素值。 霧化(大氣效應)則是在計算出的象素值上乘上一個與深度有關的衰減因子。 對落在同一屏幕位置的象素點的象素值按其所屬物體的透明係數進行加權融合就能夠產生透明效果。[/hide]