一、應用階段:起點是CPU,把場景數據、攝像機位置、視椎體、模型、光源,設置材質(漫反射、高光反射顏色)、紋理、shader輸出成渲染所需幾何信息——渲染圖元(點、線、三角面等)
1.把數據加載到顯存中;硬盤->內存->顯存
2.設置渲染狀態;定義場景中的網格將被怎麼渲染,使用了哪些頂點着色、片元着色、光源屬性、材質等。
3.調用Draw Call;由CPU發起命令,通知GPU根據渲染狀態在屏幕上繪製出圖像的過程就叫一次Draw Call;
二、幾何階段:在GPU上進行,負責和每個渲染圖元打交道,進行逐頂點、逐多邊形的操作,決定需要繪製的圖元是什麼,怎麼繪製它們,在哪繪製它們。
1.頂點着色器(Vertex Shader):完全可編程的,用於實現頂點的空間變換,逐頂點光照,計算頂點顏色等功能;
2.曲面細分着色器(Tessellation Shader):是一個可選的着色器,用於細分圖元;
3.幾何着色器(Geometry Shader):可選着色器,用於執行逐圖元的着色操作或用於產生更多的圖元;
4.裁剪(Clipping):不可編程,將不在攝像機視野內的頂點裁剪掉,並剔除某些三角圖元的面片,這個階段可配置;
5.屏幕映射(Screen Mapping):可配置可編程,此過程負責把每個圖元的x,y座標轉換到屏幕座標系(二維座標系)下。
三、光柵化階段:在GPU上執行,使用幾何階段傳遞來的數據產生屏幕上的像素,並渲染出最終的圖像。主要決定每個渲染圖元中的哪些像素應該被繪製在屏幕上,然後進行逐像素處理。兩個目標,計算每個圖元覆蓋了哪些像素,計算這些像素的顏色。
1.三角形設置(Triangle Setup):計算光柵化一個三角網格所需的信息
2.三角形遍歷(Triangle Traversal):檢查每個像素是否被一個三角網格所覆蓋,如果被覆蓋就會產生一個片元(Fragment)
3.片元着色器(Fragment Shader):可編程,用於實現逐片元的着色操作,也叫像素着色器
4.逐片元操作(Per-Fragment Operations):可配置但不可編程,負責執行如修改顏色、深度緩存、進行混合等操作。對每一個片元進行一些操作,如:
(1)決定每個片元的可見性,這涉及了很多測試工作,如模板測試(Stencil Test)、深度測試(Depth Test)等;
(2)如果一個片元通過了所有測試,就需要把這個片元的顏色值和已經存儲在顏色緩衝區的顏色進行混合(Blend);