圖像渲染流程粗粒度地大概分為下面這些步驟:
渲染流程圖如下:
Application 應用處理階段:得到圖元
CPU 負責處理應用中的圖像药有,在這個階段應用可能會對圖像進行一系列的操作或者改變,最終將新的圖像信息傳給下一階段。這部分信息被叫做圖元(primitives)霉晕,通常是三角形推姻、線段训枢、頂點等。
Geometry 幾何處理階段:處理圖元
GPU 拿到上一個階段傳遞下來的圖元信息挺勿,GPU 會對這部分圖元進行處理,之后輸出新的圖元喂柒。
這一系列階段包括:頂點著色器(Vertex Shader):這個階段中會將圖元中的頂點信息進行視角轉換不瓶、添加光照信息、增加紋理等操作灾杰。
形狀裝配(Shape Assembly):圖元中的三角形蚊丐、線段、點分別對應三個 Vertex吭露、兩個 Vertex吠撮、一個 Vertex。這個階段會將 Vertex 連接成相對應的形狀讲竿。
幾何著色器(Geometry Shader):額外添加額外的Vertex泥兰,將原始圖元轉換成新圖元,以構建一個不一樣的模型题禀。簡單來說就是基于通過三角形鞋诗、線段和點構建更復雜的幾何圖形。
Rasterization 光柵化階段:圖元轉換為像素
光柵化的主要目的是將幾何渲染之后的圖元信息迈嘹,轉換為一系列的像素削彬,以便后續(xù)顯示在屏幕上全庸。這個階段中會根據(jù)圖元信息,計算出每個圖元所覆蓋的像素信息等融痛,從而將像素劃分成不同的部分壶笼。
一種簡單的劃分就是根據(jù)中心點,如果像素的中心點在圖元內部雁刷,那么這個像素就屬于這個圖元覆劈。如上圖所示,深藍色的線就是圖元信息所構建出的三角形沛励;而通過是否覆蓋中心點责语,可以遍歷出所有屬于該圖元的所有像素,即淺藍色部分目派。
Pixel 像素處理階段:處理像素坤候,得到位圖
經(jīng)過上述光柵化階段,我們得到了圖元所對應的像素企蹭,此時白筹,我們需要給這些像素填充顏色和效果。所以最后這個階段就是給像素填充正確的內容练对,最終顯示在屏幕上遍蟋。這些經(jīng)過處理、蘊含大量信息的像素點集合螟凭,被稱作位圖(bitmap)虚青。也就是說,Pixel 階段最終輸出的結果就是位圖螺男,過程具體包含:
這些點可以進行不同的排列和染色以構成圖樣棒厘。當放大位圖時,可以看見賴以構成整個圖像的無數(shù)單個方塊下隧。只要有足夠多的不同色彩的像素奢人,就可以制作出色彩豐富的圖象,逼真地表現(xiàn)自然界的景象淆院『魏酰縮放和旋轉容易失真酱虎,同時文件容量較大阿弃。
片段著色器(Fragment Shader):也叫做 Pixel Shader,這個階段的目的是給每一個像素 Pixel 賦予正確的顏色贤斜。顏色的來源就是之前得到的頂點拷淘、紋理各墨、光照等信息。由于需要處理紋理启涯、光照等復雜信息贬堵,所以這通常是整個系統(tǒng)的性能瓶頸恃轩。
測試與混合(Tests and Blending):也叫做 Merging 階段,這個階段主要處理片段的前后位置以及透明度黎做。這個階段會檢測各個著色片段的深度值 z 坐標叉跛,從而判斷片段的前后位置,以及是否應該被舍棄蒸殿。同時也會計算相應的透明度 alpha 值昧互,從而進行片段的混合,得到最終的顏色伟桅。
參考:
http://www.reibang.com/p/e2cead5c3e13