渲染管線的概念:
3D渲染管線也稱為渲染流水線,可以將其理解為一個流程,就是我們準(zhǔn)備一些數(shù)據(jù),讓GPU對這些數(shù)據(jù)做一些處理沽瞭,最后得出一張二維圖像,渲染流程主要分為幾個大的階段:數(shù)據(jù)準(zhǔn)備階段剩瓶,頂點處理階段秕脓,光柵操作階段,像素著色階段儒搭。
一、數(shù)據(jù)準(zhǔn)備階段
該階段主要是根據(jù)用戶提供的頂點及索引信息芙贫,構(gòu)建多邊形搂鲫,主要有點,線段磺平,三角形魂仍。數(shù)據(jù)填充允許我們提交我們想要的數(shù)據(jù)拐辽,這些數(shù)據(jù)包括頂點數(shù)據(jù)(位置,法線擦酌,顏色俱诸,紋理坐標(biāo))和常量(世界矩陣,觀察矩陣赊舶,投影矩陣睁搭,紋理因子等);
二笼平、頂點處理階段(頂點著色階段)
這是一個可編程階段园骆,可以完全由程序員自己來實現(xiàn),這個階段的核心是為模型的各種空間變化:
《One》3D中有以下幾種空間:
1寓调,模型空間
模型空間也叫本地空間或者建男客伲空間,這是我們定義物體三角形的坐標(biāo)系夺英,當(dāng)一個美工人員創(chuàng)建一個物體的三維模型的時候晌涕,他選擇了一個方便的方向、比例和位置來保存模型的組成頂點痛悯,物體的模型余黎、空間和其他模型沒用任何關(guān)系;
2,世界空間
世界空間的目的就是給你的場景中的物體提供一個絕對的參考奉瘤。
3蛙卤,視覺空間
以攝像機為基準(zhǔn),以攝像機的位置為原點可缚,攝像機朝向Z軸正方向,右邊X軸為正方向斋枢,上邊為Y軸正方向帘靡,之所以設(shè)置這個坐標(biāo)系,主要是為了方便投影及裁剪操作瓤帚。
4描姚,攝影,裁剪空間
該空間即世界空間的物體被投影到相應(yīng)的投影上面之后戈次,繼而進行的裁剪操作所在的空間轩勘。
《Second》幾種空間之間的變換
1,模型空間--------> 世界空間
建模變換: 在物體空間中指定的物體被放置到世界空間的方法要依靠建模變換怯邪。如:你將一張桌子放置的一個房間里面绊寻,你需要旋轉(zhuǎn),平移,縮放等操作澄步,才能使桌子按照你的要求放置的房間的準(zhǔn)確位置冰蘑,在同一間房間里面我們可以放置同樣的桌子模型,使用不同的建模變換村缸,可以使桌子在房間的不同位置祠肥,不同的方向放置。
2梯皿,世界空間------>視角空間
視變換:從世界空間到視角空間通過相應(yīng)的視角矩陣來實現(xiàn)仇箱,所謂視角空間,我們可以這里理解索烹,就是以攝像機為原點工碾,由視線方向,視角和遠近平面共同組成的一個梯形體百姓。也被稱之為視錐體渊额,其由近平面和遠平面組成。近平面垒拢,是梯形體較小的矩形面旬迹,同時 也是靠近攝像機的平面。遠平面求类,就是梯形體較大的矩形奔垦,作為投影平面,在這個梯形體的內(nèi)部的數(shù)據(jù)是可見的尸疆,超出部分會被剔除椿猎,也叫視錐裁剪。在游戲中寿弱,屏幕的內(nèi)容隨攝像機的移動而變化犯眠,是因為GPU將物體的頂點坐標(biāo)從世界空間轉(zhuǎn)換為視角空間。
3症革,視角空間------>投影筐咧,裁剪空間
投影變換:從視角空間到投影,裁剪空間依靠投影矩陣來實現(xiàn)噪矛,投影有兩種:正交投影和透視投影量蕊,在大多數(shù)游戲中用到的都是透視投影,因為這種投影方式與人觀察物體的方式是一致的這個過程其實就是一個投影艇挨,裁剪残炮,映射 的過程,因為在一個不規(guī)則的視 錐體內(nèi)裁剪是一件非常困難的事情缩滨,所以將裁剪安排在一個單位立方體中進行吉殃,這個立方體被成為規(guī)范立方體辞居。關(guān)于投影變換,要注意的 一點是蛋勺,很多人誤以為投影即是把三維頂點投影到二維平面上,投影變換后頂點的Z坐標(biāo)被拋棄鸠删,只剩下X抱完,Y坐標(biāo)用于后面屏幕 變換,實際上刃泡,投影變換后Z坐標(biāo)并沒有消失巧娱,位于[0,1]之間,屏幕坐標(biāo)的變換不再使用Z坐標(biāo)烘贴,但Z坐標(biāo)在后面的輸出管理階段用于深度比較時會發(fā)揮重要作用禁添。這個過程是由三個步驟組成:
3.1,用透視變換矩陣把頂點從視錐體變換到規(guī)范化立方體中
3.2桨踪,在規(guī)范化立方體內(nèi)進行裁剪
3.3老翘,將經(jīng)過前面兩步得到的坐標(biāo)映射到屏幕坐標(biāo)系上(屏幕映射)
4,投影,裁剪空間------>屏幕空間
視圖變換:最后一步是取每個頂點的標(biāo)準(zhǔn)化的設(shè)備坐標(biāo)锻离,然后把它們轉(zhuǎn)換為使用像素度量X和Y的最后的坐標(biāo)系統(tǒng)铺峭,它為圖形處理器的光柵器提供數(shù)據(jù)。然后光柵器從頂點組成點汽纠,線段或多邊形卫键,并生成最后圖像的片段。另一個被稱為深度范圍變換的變換虱朵,縮放頂點的Z值到在深度緩沖中使用的深度緩存的范圍內(nèi)莉炉。<頂點著色階段到此結(jié)束>
備注:幾何著色階段,這個是D3D11中加入的新特性碴犬,為可選階段絮宁。在這個階段中,輸入為一個完整的多邊形翅敌,點羞福、線段或三角形。這個階段直接對輸入的多邊形進行操作蚯涮,可以把其消滅治专,不再往下一個階段傳輸;也可以衍生出新的多邊形出來遭顶≌欧澹總之,該階段操作的對象是完整的多邊形棒旗,相比于頂點著色階段喘批,其操作的對象是單個的頂點撩荣。幾何著色階段由兩部分組成:圖元裝配,三角形處理饶深。到目前為止我們得到了一堆的頂點數(shù)據(jù)餐曹,這一步就是是根據(jù)這些頂點數(shù)據(jù)連接關(guān)系還原出網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)由頂點和索引組成敌厘,這個階段就是根據(jù)索引將頂點連接到一起台猴,組成線,面單元俱两,然后進行裁剪饱狂,如果一個三角形超出屏幕以外,例如兩個頂點在屏幕內(nèi)宪彩,一個頂點在屏幕外休讳,這時我們在屏幕上看到的就是一個四邊形,然后把這個四邊形切成兩個小的三角形尿孔。
三:光柵操作階段
這個階段屬于不可編程階段俊柔,即完全由硬件實現(xiàn),主要包括以下幾個方面:
1纳猫,視口變換 即把投影變換后的頂點X,Y坐標(biāo)婆咸,根據(jù)用戶設(shè)定的視口參數(shù),變換到屏幕上對應(yīng)的坐標(biāo)芜辕。
2尚骄,隱藏面消除 即使經(jīng)過了裁剪操作,對于每個物體侵续,攝像機只能看到正對著攝像機的一面倔丈,對背對著攝像機的一面是看不到的。這一步的任務(wù)就是把看不到的這一面消除掉状蜗,以免繼續(xù)處理需五,影響計算機的性能和效率。為了確定一個多邊形
是正對著還是背對著攝像機轧坎,就要用到我們在輸入集合階段指定多邊形時的頂點順序了宏邮,默認(rèn)情況下,D3D規(guī)定按順時針指定的三角形屬于正面缸血,逆時針為背面蜜氨。確定順時針還是逆時針,可以用如下方法:
給出兩個向量:E0=V1-V0 E1=V2-V0 對E0和E1進行叉乘操作N=E0XE1 如果N指向攝像機捎泻,則為正面 飒炎,否則為背面。
3,頂點屬性的插值計算 在輸入集合階段笆豁,用戶指定的僅僅是一系列的多邊形郎汪,以三角形為例赤赊,每個三角形由三個頂點組成,每個頂點包含一系列的屬性煞赢,如坐標(biāo)抛计,法線,紋理坐標(biāo)等等耕驰,在經(jīng)過頂點著色階段爷辱,視口變換后,這個頂點在屏幕上
都有對應(yīng)的坐標(biāo)朦肘。但為了顯示該三角形,僅僅三個頂點顯然是不夠的双饥,為了計算該三角形所覆蓋的屏幕上每個像素的屬性媒抠,要進行正確的插值計算。
四:像素著色階段
像素處理階段是一個最耗時咏花,但也是最能夠使你的渲染效果品質(zhì)更高的地方趴生,像素最終的樣子會在此決定,你可以進行紋理映射昏翰,紋理混合苍匆,模糊,擴散等效果棚菊。這個階段也是完全可編程的一個階段浸踩,也是跟頂點著色階段一樣十分重要的階段。
因為在D3D11中统求,頂點著色階段和像素著色階段是程序員實現(xiàn)的兩個最基本的階段检碗,像素著色器,叢名字也可以看出码邻,是在像素級別上進行的計算折剃。對于三維空間中投影到屏幕上的每一個多邊形,針對其在屏幕上所覆蓋每一個像素像屋,逐個進行
像素著色計算怕犁。這一階段接受的數(shù)據(jù)是經(jīng)過插值計算后的頂點屬性。輸出的是顏色值己莺,以提供給下一階段處理奏甫。像素著色器給程序員提供了相當(dāng)多的靈活性和自由度,通過各種不同的算法來計算片段顏色以實現(xiàn)各種特效篇恒。
備注:像素的一些額外處理與輸出 當(dāng)像素經(jīng)過像素著色階段處理后扶檐,并不能都有機會輸出到屏幕上,因為它們還要經(jīng)過深度測試和模板測試胁艰,Alpha測試款筑,經(jīng)過這些測試后智蝠,還要經(jīng)過Alpha混合,這是于目標(biāo)緩沖區(qū)的混合奈梳,就能夠?qū)崿F(xiàn)變透明效果杈湾。
虛擬世界中的五光十色就是因為這個變透明效果而更加生動。
(本篇文章轉(zhuǎn)自CSDN-taotaoahui)