當(dāng)GPU從CPU那里得到渲染命令后,就會(huì)進(jìn)行一系列流水線操作,最終把圖元渲染到屏幕上河胎。
GPU渲染流水線接收頂點(diǎn)數(shù)據(jù)作為輸入,這些數(shù)據(jù)是由應(yīng)用階段加載到顯存中旬牲,再由drawcall指定的仿粹,隨后傳遞給頂點(diǎn)著色器。
渲染流水線步驟:
- 頂點(diǎn)數(shù)據(jù)作為輸入原茅,
進(jìn)入幾何階段
- vertexshader頂點(diǎn)著色器吭历,通常用于實(shí)現(xiàn)頂點(diǎn)的的空間變換,頂點(diǎn)著色擂橘。
- tessellation shader曲面細(xì)分著色器晌区,可選,細(xì)分圖元
- geometry shader幾何著色器通贞,可選朗若,被用于執(zhí)行逐圖元著色
- clipping裁剪,這一階段將那些不在攝像機(jī)視野內(nèi)的頂點(diǎn)裁剪掉昌罩,
- screen mapping屏幕映射 哭懈,不可配著或編程,把每個(gè)圖元的坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo)系中去茎用。
光柵化階段
- 三角形設(shè)置固定函數(shù)階段
- 三角形遍歷固定函數(shù)階段
- fragment shader片元著色器遣总,實(shí)現(xiàn)逐片元操作
-
per—fragment逐片元操作睬罗,例如修改顏色,深度緩沖旭斥,混合容达。
最終輸出到屏幕圖像。
頂點(diǎn)著色器的輸入來(lái)自于CPU垂券,處理的單位是頂點(diǎn)花盐,輸入進(jìn)來(lái)的每個(gè)頂點(diǎn)都會(huì)調(diào)用一次頂點(diǎn)著色器,主要完成坐標(biāo)的變換把頂點(diǎn)坐標(biāo)從模型空間轉(zhuǎn)換到齊次裁剪空間和逐頂點(diǎn)光照菇爪。
裁剪:由于場(chǎng)景很大算芯,攝像機(jī)視野范圍不會(huì)覆蓋到所有場(chǎng)景物體,那些不在攝像機(jī)視野范圍內(nèi)的就需要被裁剪掉娄帖,
屏幕映射:每個(gè)圖元坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo)系下
三角形設(shè)置:光柵化第一個(gè)階段也祠,上一階段輸出都是三角網(wǎng)格頂點(diǎn),要得到整個(gè)三角網(wǎng)格覆蓋情況近速。計(jì)算每條邊上的像素坐標(biāo)诈嘿,為下一階段做準(zhǔn)備,
三角形遍歷:檢查每個(gè)像素是否被一個(gè)三角網(wǎng)格所覆蓋削葱,所過(guò)覆蓋的話產(chǎn)生一個(gè)片元奖亚。
片元著色器:前面光柵化階段實(shí)際上并不會(huì)影響屏幕上的像素顏色值,而是產(chǎn)生一系列數(shù)據(jù)析砸,真正對(duì)象素產(chǎn)生影響的是下一個(gè)階段昔字。
逐片元:決定片元的可見(jiàn)性,涉及深度測(cè)試首繁,模板測(cè)試等
如果一個(gè)片元通過(guò)所有測(cè)試就需要把該片元的顏色值和已經(jīng)存在緩沖區(qū)的顏色進(jìn)行合并混合作郭。
點(diǎn)擊關(guān)注我的微博,給大家?guī)?lái)歡樂(lè)