如果它的深度資訊更淺,那麼意味著它更加靠近眼睛,那麼GPU將其送入片元著色器,計算其顏色,然後用該顏色覆蓋這個畫素的輸出顏色並更新深度緩衝
如Unity給出的渲染流水線中深度測試就在片元著色器之前:但是測試提前可能會與片元著色器中的一些操作衝突:比如在開啟了透明測試情況下,已經通過了深度測試,但片元進行透明測試時失敗,我們會手動使用clip函式將片元捨棄掉
展示在螢幕上當模型的圖元經過了層次計算和測試後,就會傳送到顏色緩衝區,最終顯示到我們的螢幕上,最終我們看到的一個個畫素就是經過頂點處理(得到螢幕座標)-光柵化(得到片元)-片元處理(片元測試混合)三個階段的混合產物
z不變用來記錄深度光柵化階段(Rasterization Stage)三角形設定(GPU固定實現)把幾何階段傳來的頂點組成基本的圖形(點,線,三角面)三角形遍歷(GPU固定實現)檢查每個畫素是否被三角形網格覆蓋,如果被覆蓋,就生成一個片元(
⑥ 螢幕對映(Screen Mapping):不可程式設計且不可配置,GPU固定實現,裁剪階段會將攝像機空間歸一化,所有頂點被壓縮在[-1, 1]的範圍內,物理顯示螢幕的畫素數量顯然是整數個的,所以需要將裁剪階段中得到的X和Y軸座標投影到螢
上面的光柵化階段並不會影響每個畫素的顏色值,而是會計算一個三角形網路是怎樣覆蓋畫素的,然後將頂點資訊插值到每個畫素中生成片元資訊,最後使用這些資訊在片元著色器中計算顏色
而在遊戲引擎的Shader中,可以方便的改變這些屬性,提供了直接訪問頂點位置、紋理座標、法線等模型自帶資料的方法,不需要開發者自行編碼來傳給著色器
設定渲染狀態:即指定我們需要用到什麼樣的紋理,什麼樣的頂點著色器,什麼樣的片元著色器等呼叫DrawCall:如果我們把渲染流水線當成是程式設計,那麼DrawCall很像當你寫完程式碼之後,按的那個F5(即執行鍵)2.2 幾何階段與光柵化階段
2三角形遍歷(無控制權)透過上一階段的光柵化的三條邊,很容易得到三角形覆蓋的畫素是那些,覆蓋的畫素,每個畫素都會生成一個片元(fragment),一個片元 = 確定是哪個畫素 + 深度資訊、法線、紋理,而片元的狀態是透過三個頂點的資訊差值而
Foward+(Tiled Forward Rendering 分塊正向渲染)用分塊索引的方式,利用到深度和法線資訊拿到需要進行光照計算的片元,進行光照計算