可編程渲染管線(Scriptable Render Pipeline, SRP)

可編程渲染管線處理數據的流程可分為以下3大階段
1. 應用階段
這個階段大概會由CPU處理4件事情。首先會對模型數據進行可見性判斷。模型數據由頂點位置、法線方向、頂點顏色、紋理坐標等構成。然後會將模型數據載入到顯示記憶體以提高讀取速度。再為每個圖元設置常數暫存器和渲染狀態。最後為一個渲染圖元列表調用DrawCall指令。
圖元可以是點、線、三角形。
2. 幾何階段
這個階段由GPU進行處理,會對每一個需要渲染的圖元進行逐頂點、逐多邊形處理,最根本的任務是將頂點的模型坐標轉換到螢幕空間。
2.1 頂點著色器
頂點著色器的基本任務是將頂點轉換到齊次裁剪空間,還可以進行的其他任務有:
- 逐頂點著色操作,如逐頂點光照
- 紋理計算
- 逐頂點蒙皮
- 逐頂點程式式動畫(procedural animation)
2.1.1 投影變換

透視投影
在攝像機使用透視投影的時候,為了呈現出近大遠小的透視收縮(perspective foreshortening)效果,需要對頂點進行透視投影變換。使用透視投影矩陣進行變換後,並沒有進行裁剪,只是使得w值有了意義,為後面的裁剪做準備。


Unity透視投影矩陣(右乘)

會改變空間手系,從右手系變成了左手系,因為Unity的觀察空間是右手系,NDC空間是左手系
觀察空間中的頂點(x,y,z)透視投影到齊次裁剪空間後變為

透視投影齊次裁剪空間中坐標的w值為 

正交投影
$正交投影遠(近)裁剪平面高度=2 \cdot Size$
Unity正交投影矩陣(右乘)

會改變空間手系,從右手系變成了左手系,因為Unity的觀察空間是右手系,NDC空間是左手系
觀察空間種的頂點(x,y,z)正交投影到齊次裁剪空間後變為 
正交投影齊次裁剪空間中坐標的w值為1

2.2 曲面細分著色器
用於細分圖元
2.3 幾何著色器
- 幾何著色器的功能是修改、剔除、創建圖元,可以實現以下效果:
- 陰影體積拉伸(shadow volume extrusion)
- 渲染立方體貼圖(cube map)的6個面
- 在網格的輪廓邊拉伸毛髮的鰭(fur in)
- 從點數據生成例子四邊形
- 動態鑲嵌
- 把線段分形細分(fractal subdivision)以模擬閃電、布料
- 將數據傳到管線開頭重新進入管線
- 用例:在頂點著色器內對頭髮樣條的控制點進行物理模擬,在幾何著色器內把樣條鑲嵌成線段,通過流輸出將線段傳到管線開頭重新進入管線進行渲染
2.4 裁剪
裁剪的作用是將每個三角形在平截頭體以外的部分切掉,把在平截頭體以外的三角形剔除。
滿足以下條件的頂點才會被保留下來:

2.5 齊次除法
所謂的齊次除法就是讓x、y、z都除以w,這時就可以得到NDC空間中的坐標


上圖右邊都是OpenGL的NDC,DirectX的NDC也和上圖右邊類似,但z範圍在[0,1]
2.6螢幕映射
視口空間:程式運行窗口構成的空間


矩陣中的X、Y是視口空間原點的螢幕坐標
3. 光柵化階段
這個階段由GPU來決定繪製哪些片元以及這些片元的顏色
片元=片段:三角形被柵格化後,其中的每一個小方塊都是一個片元,可以看成是還不確定最終是否可以呈現到螢幕上的像素

3.1 三角形設置
這個階段的任務是找出三角形邊界所覆蓋的像素
3.2 三角形遍歷
這個階段會對每個三角形進行柵格化,即找出每個三角形覆蓋的像素區域。區域中的片元中資訊(螢幕坐標、深度值、法線坐標、紋理坐標)由3個頂點數據進行插值(必要時會採用透視校正插值)得到
3.3 提前深度測試
如果用戶沒有在片元著色器中改變深度或自我丟棄(discard),顯示卡會自動開啟該功能
3.4 片元著色器
用於執行逐像素著色操作,如紋理取樣、多重紋理取樣、逐像素光照
3.5 逐片元操作
3.5.1 模板測試
if 開啟了模板測試 then
比較參考值(使用讀取掩碼)和模板緩衝區中的模板值(使用讀取掩碼)
if not 通過模板測試 then
捨棄該片元
end
根據已設置的渲染狀態更新模板緩衝區中的值(使用寫入掩碼)
end
3.5.2 深度測試
if 開啟了深度測試 then
比較該片元的深度值和深度緩衝區中的深度值
if 通過了深度測試 then
if 開啟了深度寫入 then
將深度值寫入深度緩衝區
end
else
捨棄該片元
end
else
if 開啟了深度寫入 then
將深度值寫入深度緩衝區
end
end
3.5.3 混合
if 開啟了混合 then
用alpha混合函數(alpha blending function)將該片元的顏色值和顏色緩衝區中的顏色值進行混合
else
直接使用該片元的顏色值
end
更新顏色緩衝區中的顏色值
由於還要搬磚,沒有辦法一一回復私信把學習資料發給大家。我直接整理出來放在下面,覺得有幫助的話可以下載下來用於學習
鏈接://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ 提取碼:cqmd
感謝各位人才的點贊、收藏、關注
微信搜「三年遊戲人」收穫一枚有情懷的遊戲人,第一時間閱讀最新內容,獲取優質工作內推


