渲染流水線

渲染流程的3個階段:應(yīng)用階段粱挡,幾何階段询筏,光柵化階段

渲染流水線的3個概念階段

應(yīng)用階段:由開發(fā)者主導(dǎo)嫌套,CPU負(fù)責(zé)實(shí)現(xiàn)踱讨。

3個任務(wù):a.準(zhǔn)備場景數(shù)據(jù)(模型痹筛,光源帚稠,攝像機(jī)等) b.剔除(提高渲染性能) c.設(shè)置渲染狀態(tài)(材質(zhì)滋早,紋理杆麸,shader)昔头。這一階段最重要是輸出渲染所需的幾何信息减细,就是渲染圖元(包括點(diǎn)線面等)

幾何階段:在GPU上處理幾何相關(guān)事情未蝌,進(jìn)行逐個頂點(diǎn),多邊形操作(如繪制的圖元是什么左冬,怎么繪制拇砰,在哪繪制)

重要任務(wù):把頂點(diǎn)坐標(biāo)變化到屏幕空間里除破,輸出屏幕空間二維頂點(diǎn)坐標(biāo)瑰枫,每個頂點(diǎn)對應(yīng)的深度值光坝,著色相關(guān)信息盯另。

光柵化階段:GPU運(yùn)行鸳惯。使用幾何階段數(shù)據(jù)悲敷,產(chǎn)生屏幕像素后德,渲染最終圖像瓢湃。

2個主要任務(wù):a.計算每個圖元覆蓋了哪些像素 b.為這些像素計算它們的顏色。

CPU和GPU通信3個階段:數(shù)據(jù)加載到顯存雾叭,設(shè)置渲染狀態(tài)织狐,調(diào)用DrawCall

數(shù)據(jù)加載至顯存中:渲染數(shù)據(jù)從硬盤加載到內(nèi)存移迫,再加載至顯存厨埋。顯卡對RAW沒有直接訪問權(quán)限捐顷,顯卡對顯存訪問更快迅涮。

設(shè)置渲染狀態(tài):定義場景中網(wǎng)格怎么被渲染(如使用哪個shader蛹头,light,material)


同一種渲染狀態(tài)旷祸,3個不同網(wǎng)格模型

調(diào)用Draw Call :CPU調(diào)用圖像編程接口托享,命令GPU進(jìn)行渲染操作闰围。

GPU流水線(幾何階段+光柵化階段)


幾何階段和光柵化階段小流水線若干

頂點(diǎn)著色器 Vertex Shader? :頂點(diǎn)著色器是完全可編程的,通常用于實(shí)現(xiàn)頂點(diǎn)的空間變換校仑、頂點(diǎn)著色等功能迄沫。

GPU第一階段羊瘩,輸入來源于CPU尘吗。處理單位是頂點(diǎn)摇予。本身不可創(chuàng)建和銷毀頂點(diǎn)侧戴。獨(dú)立性酗宋,處理速度快蜕猫。

主要任務(wù):1回右,坐標(biāo)變化 2翔烁,計算頂點(diǎn)顏色蹬屹。


曲面細(xì)分著色器 Tessellation Shader :曲面細(xì)分著色器是一個可選的著色器慨默,用于細(xì)分圖元厦取。

幾何著色器 Geometry Shader :幾何著色器是一個可選的著色器蒜胖,用于執(zhí)行逐圖元著色操作,或產(chǎn)生更多圖元岁经。

裁剪 Clipping : 圖元和攝像機(jī)的視野3種關(guān)系。是將那些不在攝像機(jī)視野內(nèi)的頂點(diǎn)剪裁掉塘慕,并剔除某些三角圖元的面片图呢。


屏幕映射 Screen Mapping :屏幕映射是不可配置和編程的蛤织,負(fù)責(zé)把每個圖元的坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo)系。實(shí)際就是一個縮放過程涨椒。


注意:OpenGL和DX是反的


三角形設(shè)置 :計算光柵化一個三角網(wǎng)格所需的信息免猾,它的輸出是為下一步驟做準(zhǔn)備掸刊。

三角形遍歷:找到哪些像素被三角網(wǎng)格覆蓋的過程。對應(yīng)像素會生成一個片元,而片元中的狀態(tài)是對三個頂點(diǎn)的信息進(jìn)行插值得到的躺屁。


掃描變換

片元著色器 Fragment Shader(DX:Pixel Shader)?:輸入是上一步對頂點(diǎn)信息插值得到的結(jié)果犀暑,輸出是顏色值(著色)


輸出顏色

補(bǔ)充:片元著色器這一步驟可以完成很多重要的渲染技術(shù)徊都,比如 紋理采樣:在頂點(diǎn)著色器階段輸出每個頂點(diǎn)對應(yīng)的UV坐標(biāo)(也叫紋理坐標(biāo))暇矫,然后經(jīng)過光柵化階段對三角網(wǎng)格的3個頂點(diǎn)對應(yīng)的UV坐標(biāo)進(jìn)行插值后,就可以得到覆蓋的片元的UV坐標(biāo)了房轿。

可以這樣理解貼圖:不妨把紋理圖片想象成一片彈性很好的橡皮薄膜所森,貼圖就相當(dāng)于用釘子把橡皮薄膜固定在與其紋理坐標(biāo)相對應(yīng)的頂點(diǎn)上。

逐片元操作:OpenGL中的說法,在DX中凭需,叫輸出合并階段粒蜈。

該階段的任務(wù):

決定每個片元的可見性枯怖。涉及了很多測試工作度硝,例如模板(Stencil)測試(小于或者大于等于模板緩沖區(qū)中該片元的模板值就舍棄該片元蕊程,通常用于限制渲染區(qū)域。)驼唱、深度(Depth)測試(大于等于深度緩沖區(qū)中該片元的深度值就舍棄該片元)等藻茂;

如果一個片元通過了所有測試,就需要把這個片元的顏色值和已經(jīng)存儲在顏色緩沖區(qū)中的顏色進(jìn)行混合,最后再寫入顏色緩沖區(qū)中辨赐。也就是將片元的顏色值一個個地堆疊起來优俘。

總結(jié):只需要在一個Unity Shader中設(shè)置一些輸入、編寫頂點(diǎn)著色器和片元著色器掀序、設(shè)置一些狀態(tài)就可以達(dá)到大部分常見的屏幕效果。

CPU森枪、OpenGL/DirectX视搏、顯卡驅(qū)動和GPU之間的關(guān)系圖:


OpenGL/DirectX是圖像應(yīng)用編程接口,架起了應(yīng)用程序和GPU溝通的橋梁县袱。應(yīng)用程序向這些接口發(fā)送渲染指令浑娜,而這些接口會依次向顯卡驅(qū)動發(fā)送渲染命令。顯卡驅(qū)動就是顯卡的操作系統(tǒng)式散,它知道如何和顯卡中的GPU打交道筋遭,并將渲染命令翻譯成GPU能理解的機(jī)器語言。

優(yōu)化:批處理可以有效減少Draw Call暴拄。Draw Call造成性能問題的元兇是CPU 漓滔。很簡單的一個道理:10000個1kb的小文件和1個10M的大文件同時傳輸,肯定是1個10M的文件傳得快許多乖篷。

為避免我們看到正在光柵化的圖元响驴,GPU采取雙重緩沖的機(jī)制,渲染發(fā)生在后置緩沖中撕蔼,渲染結(jié)束后豁鲤,GPU就會交換后置緩沖區(qū)和前置緩沖區(qū)中的內(nèi)容。

最后附上萬大的神圖:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鲸沮,一起剝皮案震驚了整個濱河市琳骡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讼溺,老刑警劉巖楣号,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怒坯,居然都是意外死亡炫狱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門剔猿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毕荐,“玉大人,你說我怎么就攤上這事艳馒。” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵弄慰,是天一觀的道長第美。 經(jīng)常有香客問我,道長陆爽,這世上最難降的妖魔是什么什往? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮慌闭,結(jié)果婚禮上别威,老公的妹妹穿的比我還像新娘。我一直安慰自己驴剔,他們只是感情好省古,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丧失,像睡著了一般豺妓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上布讹,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天琳拭,我揣著相機(jī)與錄音,去河邊找鬼描验。 笑死白嘁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膘流。 我是一名探鬼主播絮缅,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼睡扬!你這毒婦竟也來了盟蚣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤卖怜,失蹤者是張志新(化名)和其女友劉穎屎开,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體马靠,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奄抽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了甩鳄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逞度。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妙啃,靈堂內(nèi)的尸體忽然破棺而出档泽,到底是詐尸還是另有隱情俊戳,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布馆匿,位于F島的核電站抑胎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏渐北。R本人自食惡果不足惜阿逃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赃蛛。 院中可真熱鬧恃锉,春花似錦、人聲如沸呕臂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诵闭。三九已至炼团,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疏尿,已是汗流浹背瘟芝。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褥琐,地道東北人锌俱。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像敌呈,于是被迫代替她去往敵國和親贸宏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容