圖像渲染流程粗粒度地大概分為下面這些步驟:

渲染流程圖如下:

Application 應(yīng)用處理階段:得到圖元
CPU 負(fù)責(zé)處理應(yīng)用中的圖像,在這個階段應(yīng)用可能會對圖像進(jìn)行一系列的操作或者改變,最終將新的圖像信息傳給下一階段。這部分信息被叫做圖元(primitives),通常是三角形、線段、頂點等。
Geometry 幾何處理階段:處理圖元
GPU 拿到上一個階段傳遞下來的圖元信息,GPU 會對這部分圖元進(jìn)行處理,之后輸出新的圖元。
這一系列階段包括:頂點著色器(Vertex Shader):這個階段中會將圖元中的頂點信息進(jìn)行視角轉(zhuǎn)換、添加光照信息、增加紋理等操作。
形狀裝配(Shape Assembly):圖元中的三角形、線段、點分別對應(yīng)三個 Vertex、兩個 Vertex、一個 Vertex。這個階段會將 Vertex 連接成相對應(yīng)的形狀。
幾何著色器(Geometry Shader):額外添加額外的Vertex,將原始圖元轉(zhuǎn)換成新圖元,以構(gòu)建一個不一樣的模型。簡單來說就是基于通過三角形、線段和點構(gòu)建更復(fù)雜的幾何圖形。
Rasterization 光柵化階段:圖元轉(zhuǎn)換為像素
光柵化的主要目的是將幾何渲染之后的圖元信息,轉(zhuǎn)換為一系列的像素,以便后續(xù)顯示在屏幕上。這個階段中會根據(jù)圖元信息,計算出每個圖元所覆蓋的像素信息等,從而將像素劃分成不同的部分。

一種簡單的劃分就是根據(jù)中心點,如果像素的中心點在圖元內(nèi)部,那么這個像素就屬于這個圖元。如上圖所示,深藍(lán)色的線就是圖元信息所構(gòu)建出的三角形;而通過是否覆蓋中心點,可以遍歷出所有屬于該圖元的所有像素,即淺藍(lán)色部分。
Pixel 像素處理階段:處理像素,得到位圖
經(jīng)過上述光柵化階段,我們得到了圖元所對應(yīng)的像素,此時,我們需要給這些像素填充顏色和效果。所以最后這個階段就是給像素填充正確的內(nèi)容,最終顯示在屏幕上。這些經(jīng)過處理、蘊(yùn)含大量信息的像素點集合,被稱作位圖(bitmap)。也就是說,Pixel 階段最終輸出的結(jié)果就是位圖,過程具體包含:
這些點可以進(jìn)行不同的排列和染色以構(gòu)成圖樣。當(dāng)放大位圖時,可以看見賴以構(gòu)成整個圖像的無數(shù)單個方塊。只要有足夠多的不同色彩的像素,就可以制作出色彩豐富的圖象,逼真地表現(xiàn)自然界的景象??s放和旋轉(zhuǎn)容易失真,同時文件容量較大。
片段著色器(Fragment Shader):也叫做 Pixel Shader,這個階段的目的是給每一個像素 Pixel 賦予正確的顏色。顏色的來源就是之前得到的頂點、紋理、光照等信息。由于需要處理紋理、光照等復(fù)雜信息,所以這通常是整個系統(tǒng)的性能瓶頸。
測試與混合(Tests and Blending):也叫做 Merging 階段,這個階段主要處理片段的前后位置以及透明度。這個階段會檢測各個著色片段的深度值 z 坐標(biāo),從而判斷片段的前后位置,以及是否應(yīng)該被舍棄。同時也會計算相應(yīng)的透明度 alpha 值,從而進(jìn)行片段的混合,得到最終的顏色。
參考:
http://www.itdecent.cn/p/e2cead5c3e13