當(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è)