渲染管線淺析

這篇文章是描述GPU渲染管線的大致工作流程。

渲染管線 ,也稱渲染流水線,是顯示芯片內部處理圖形信號相互獨立的并行處理單元。渲染管線就是要把一系列的頂點數據,紋理等信息,最終轉換成一張人眼可以看到的圖像。這個過程由CPU和GPU共同完成。

渲染管線流程圖(Rendering Pipeline)



上面是渲染管線模型的示意。為了區分,我們把它分成三個階段:

? ?● Application Stage : 應用階段,最主要的就是把我們準備好的場景數據,輸出渲染需要的幾何信息,即渲染圖元(rendering primitives)。

? ?● Geometry Stage :幾何階段,用于處理所有和我們要繪制的幾何相關的事情。

? ?● Rasterizer Stage:光柵化階段,利用幾何階段傳過來的數據產生像素,并渲染出最終的圖像。


圖片講解

顏色表示了不同階段的可配置性和可編程性。

? ? ●白色:表示該階段是由GPU固定實現,開發者沒有任何控制權。

? ? ●灰色:表示該階段可以配置但是不可以編程。

? ? ●橙色:實線表示可用shader編程實線,虛線表示該shader是可選的。


下面再具體多說幾點:

? ? ●Vertex Shader:對頂點數據編程的一段程序。主要工作是:坐標變換和逐頂點光照,并且為后續階段輸出所需的數據。

? ? ●Clipping:減少GPU處理數據量,把看不見的面剔除。不處理那些不在攝像機視野范圍內的頂點數據。

? ? ●Screen Mapping:屏幕映射,把每個圖元的x和y坐標轉換到Screen Coordinates下。

? ? ●Triangele Setup:計算一個三角形網格表示數據的過程。

? ? ●Triangle Traversal:這里主要的工作就是找到哪些像素被三角形網格覆蓋,如果覆蓋了,將會得到一個片元(fragment)。

? ? ●Fragment Shader:對像素數據編程的一段程序。這里會產生一些列數據信息,用來描述一個三角網格是怎樣覆蓋每個像素的。

? ? ●Per-Fragment Operations:這里主要是淘汰一些不合格的片元以及如何合并問題。這里涉及了很多測試工作,如:模板測試(Stencil Test),深度測試(Depth Test)。而如果一個片元成功通過所有測試,就需要把這個片元的顏色值和已經存儲在顏色緩沖區中的顏色進行合并,最終輸出我們看到的圖像。


總結

渲染管道是從得模型數據到圖像生成過程的一種描述。Vertex Shader 能對頂點數據寫處理算法,而 Fragment Shader 能對像素數據寫處理算法。我們可以使用Shader編程出自己理想中的效果!


參考:

? ? ● Cg Programming in Unity

? ? ●《Real-time readering》

? ? ●《Unity Shader 入門精要》



本人才疏學淺,如果有錯誤的地方歡迎指正!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容