
原文鏈接
可編程渲染管線處理資料的流程可分為以下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
更新顏色緩沖區中的顏色值
由于還要搬磚,沒有辦法一一回復私信把學習資料發給大家,我直接整理出來放在下面,覺得有幫助的話可以下載下來用于學習
鏈接:https://pan.baidu.com/s/1C-9TE9ES9xrySqW7PfpjyQ 提取碼:cqmd
感謝各位人才的點贊、收藏、關注
微信搜「三年游戲人」識訓一枚有情懷的游戲人,第一時間閱讀最新內容,獲取優質作業內推
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528021.html
標籤:其他
上一篇:全球名校AI課程庫(38)| 馬薩諸塞大學 · 自然語言處理進階課程『Advanced Natural Language Processing』
下一篇:唱唱反調:風口上的技術不要盲目追
