第2章-圖形渲染管線-2.1-架構

2.1 架構

在現實世界中,管線的概念以許多不同的形式表現出來,從工廠裝配線到快餐廚房。它也適用於圖形渲染。管線由幾個階段組成 [715],每個階段執行一個更大任務的一部分。

每一個流水線階段都是並行執行,但是其都依賴於前一階段的結果。理想情況下,一個非流水線系統然後被分成n個流水線級,可以提供n倍的加速。這種性能的提高是使用流水線的主要原因。例如,可以由一系列人快速準備大量三明治——一個準備麪包,另一個添加肉,另一個添加澆頭。每個人都將結果傳遞給排隊的下一個人,然後立即開始製作下一個三明治。如果每個人需要20秒來完成他們的任務,那麼每20秒一個三明治的最大速度是可能的,每分鐘三個。流水線階段並行執行,但它們會暫停,直到最慢的階段完成其任務。例如,假設肉類添加階段變得更加複雜,需要30秒。現在可以達到的最佳速度是每分鐘兩個三明治。對於這個特定的管線,肉階段是瓶頸,因爲它決定了整個生產的速度。據說澆頭階段在等待肉類階段完成期間餓死了(顧客也是如此)。

這種管線結構也可以在實時計算機圖形的上下文中找到。實時渲染管線粗略劃分爲四個主要階段——應用程序、幾何處理、光柵化和像素處理——如圖2.2所示。渲染管線引擎用於實時計算機圖形應用程序,其核心正是這種結構;因此這種管線結構是後續章節討論的重要基礎。這些階段中的每一個通常本身就是一個管道,這意味着它由幾個子階段組成。我們區分此處顯示的功能階段及其實現結構。一個功能階段有一個特定的任務要執行,但沒有指定任務在管道中的執行方式。一個給定的實現可以將兩個功能階段合併爲一個單元或使用可編程內核執行,同時它將另一個更耗時的功能階段劃分爲幾個硬件單元。

Figure2.2

圖2.2. 渲染管線的基本結構,包括四個階段:應用程序、幾何處理、光柵化和像素處理。這些階段中的每一個本身都可以是一個流水線,如幾何處理階段下方所示,或者一個階段可以(部分)並行化,如像素處理階段下方所示。在這個例子中,應用程序階段是一個單一的進程,但這個階段也可以是流水線或並行的。請注意,光柵化階段會查找圖元內部的像素,例如三角形。

渲染速度可以用每秒幀數(FPS)來表示,即每秒渲染的圖像數量。也可以用赫茲(Hz)來表示,它只是1/秒的表示法,即更新頻率。僅說明渲染圖像所需的時間(以毫秒(ms)爲單位)也很常見。生成圖像的時間通常會有所不同,具體取決於每幀期間執行的計算的複雜性。每秒幀數用於表示特定幀的速率或一段時間內的平均性能。赫茲用於硬件,例如設置爲固定速率的顯示器。

顧名思義,應用程序階段由應用程序驅動,因此通常在通用CPU上運行的軟件中實現。這些CPU通常包括能夠並行處理多個執行線程的多個內核。這使CPU能夠有效地運行由應用程序階段負責的各種任務。一些傳統上在CPU上執行的任務包括碰撞檢測、全局加速算法、動畫、物理模擬等,具體取決於應用程序的類型。下一個主要階段是幾何處理,它處理變換、投影和所有其他類型的幾何處理。此階段計算要繪製的內容、應如何繪製以及應在何處繪製。幾何階段通常在包含許多可編程內核和固定操作硬件的圖形處理單元(GPU)上執行。光柵化階段通常將三個頂點作爲輸入,形成一個三角形,並找到該三角形內的所有像素,然後將這些像素轉發到下一個階段。最後,像素處理階段對每個像素執行一個程序以確定其顏色,並可能執行深度測試以查看它是否可見。它還可以執行逐像素操作,例如將新計算的顏色與先前的顏色混合。光柵化和像素處理階段也完全在GPU上處理。所有這些階段及其內部管道將在接下來的四節中討論。有關GPU如何處理這些階段的更多詳細信息,請參見第3章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章