OpenGL渲染管線概覽

來源:互聯網
上載者:User

標籤:opengl

翻譯自OpenGL Wiki:http://www.opengl.org/wiki/Rendering_Pipeline_Overview,如有錯誤還請賜教

管線

OpenGL渲染管線按以下方式工作:

1. 準備頂點數組資料並渲染

2. 頂點處理:

        1. 每個頂點都要經過頂點著色器處理。每個頂點按所在資料流中的             順序依次處理為輸出頂點;

        2. 可選的圖元曲面細分階段;

        3. 可選的圖元幾何著色器處理,輸出為一系列基本圖元;

3. 頂點後處理,上一階段的輸出被調整或移位到不同的位置

        1. 變換反饋在此處進行;

        2. 圖元裁切,齊次正規化以及視口到視窗的變換;

4. 圖元裝載

5. 掃描轉換與圖元參數差值(譯註:即光柵化),產生一系列片段

6. 片段著色器處理每一個片段,每個片段產生一系列輸出

7. 逐採樣點處理

        1. 剪刀測試

        2. 模板測試

        3. 深度測試

        4. 混合

        5. 邏輯運算

        6. 寫蒙版

頂點規格化

在頂點規格化的過程中,應用建立一個有序的頂點表並送入管線中。這些頂點定義了圖元的邊界。

圖元是基本的繪圖形狀,比如三角形、直線和點。具體頂點表如何被解釋為圖元交於下一階段處理。

管線的此部分處理一些對象,例如頂點數組對象和頂點緩衝區對象。頂點數組對象定義了每個頂點的資料,而頂點緩衝區Object Storage Service實際的頂點資料。

一個頂點的資料是一系列屬性,每個屬性是一小集資料,將在下一階段進行運算。儘管一系列屬性確實能夠確定一個頂點,但沒有規定說明頂點的屬性集必須包括位置或者法線。屬性資料是完全任意的,在頂點處理階段才會賦予其唯一的意義。

頂點渲染

一旦頂點資料規格化結束,就通過渲染指令被渲染成為圖元。

頂點處理

每一個從未經處理資料採集來的頂點都必須被處理,這是頂點著色器的職責。它接收來自前一階段的屬性輸入,根據一個任意的、由使用者定義的程式,將每一個輸入頂點轉化為單個輸出頂點。

不像輸入頂點的資訊,輸出頂點資料要求較少,頂點著色器只必須填寫一個位置值,以便送出一個有效頂點。

頂點處理的一個限制是每個輸入頂點必須對應一個特定的輸出頂點。又因為頂點著色器的調用不能共用狀態,輸入屬性與輸出頂點資料是一一對應的。也就是說,如果在同樣的圖元中,你用同樣的屬性輸入同樣的頂點著色器,就會得到同樣的輸出頂點資料。這給了著色器最佳化頂點處理的權利,如果它們能探測出即將處理一個之前處理過的頂點,則可以使用變換後資料緩衝區中已經處理好的資料,從而避免對該頂點重複進行頂點處理。

圖元裝配

圖元裝配是收集一系列來自頂點著色器的頂點資料輸出,並且將其合成為一個可行的基本圖元的過程。使用者用來渲染的圖元類型決定了處理的方式。

這一處理的輸出是一個有序的簡單圖元(點、線或三角形)序列。例如,如果輸入是一個包含12個頂點的三角形條帶圖元,則輸出的是10個三角形。

曲面細分

通過兩個著色器階段和之間的一個固定函數細分器,圖元可以被曲面細分化。

幾何著色器

除普通的圖元裝配步驟之外,你還可以使用一個幾何著色器。這是一個使用者定義的程式用於處理每個輸入圖元,並返回零或多個輸出圖元。

幾何著色器的輸入圖元是圖元裝配的輸出圖元,故如果你輸入一個三角形條帶作為一個圖元,則幾何著色器會將其視為一系列三角形。

然而,還有一些輸入圖元種類是為幾何著色器專門定製的,這些鄰接圖元給幾何著色器一個關於這些圖元的更廣闊的視角:它們提供了鄰接頂點的資訊。

幾何著色器的輸出是零個或多個簡單圖元,和圖元裝配的輸出類似。幾何著色器可以移除圖元,或者將單個輸入細分成多個輸出圖元。幾何著色器同樣可以用來處理頂點值,包括替頂點著色器做一定工作,或者在細分的同時進行插值。幾何著色器甚至還能將圖元轉換為不同的種類:輸入焦點圖元可轉化為三角形,或者直線轉化為點。

變換反饋

幾何著色器或圖元裝配的輸出結果被寫入一系列專門為此設定的緩衝區對象中,這就稱為變換反饋模式:它允許使用者通過頂點和幾何著色器進行資料變換,並可將結果儲存供之後使用。

輸出到變換反饋緩衝區的資料是由此步每個圖元發出的。

通過放棄光柵化結果,渲染管線至此可以高效地結束。這使變換反饋可能成為了渲染過程的唯一輸出。

裁剪和剔除

圖元接著被裁剪和適當地剔除。

裁剪意味著處於可見地區內外邊界的圖元被分割成幾個圖元。同時,頂點著色器可以在保護空間中定義一些裁剪框並作用於圖元,這些裁剪框將對穿過其上的圖元進行額外裁剪。

三角形的表面剔除同樣發生在此階段,具體實現可以自由地立即剔除任意不在視區或者完全落於裁剪框邊界內部的圖元。

通過齊次正規化和視口變換,頂點的位置從裁剪空間轉換到了視窗空間,

光柵化

到達此階段的圖元按輸入順序被光柵化,輸出是一系列片段。

片段是一個狀態集合,用於計算在輸出框架緩衝區中的最終資料像素(或者採樣點,如果允許多重採樣的話)。片段的狀態包括它在螢幕中的位置、在允許多重採樣情況下採樣的覆蓋情況,以及一列來自先前頂點或幾何著色器輸出的任意資料。

最終的資料集通過片段頂點間的資料插值得到,插值的方式通過輸出這些值的著色器定義。

片段處理

由光柵化階段得到的每個片段的資料都被片段著色器處理,其輸出是一列要寫向顏色緩衝區的顏色值、深度值和模板值。片段著色器不能設定片段的模板資料,但是可以控制顏色及深度值。

逐採樣點處理

接著,由片段處理輸出的片段資料又曆經了一系列步驟。

第一步是不同的剔除檢測。如果有模板檢測或深度檢測則進行,如果失敗了,此片段被剔除並不加入到幀緩衝。如果這些檢測任意一個失敗了,此片段被剔除並不加入到緩衝區。

        注意:如果你的片段著色器不填寫深度值,也就是使用一般計算得到的深度值,具體實現中可以使用一種稱為提早深度測試的最佳化策略。它在片段處理         前就執行深度(以及模板)檢測,因此如果一個片段被剔除了,則無需運行片段著色器。

再次之後,進行混合。對每一個片段顏色值,有一個特定的混合操作,用於其與幀緩衝中對應位置的已經存在的顏色值。

最後,片段資料被寫入幀緩衝。蒙版操作允許使用者避免寫入特定值。顏色、深度、模板寫入均可選擇開啟或關閉蒙版,獨立的色彩通道同樣可以使用蒙版。

OpenGL渲染管線概覽

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.