共用方式為


輸出合併 (OM) 階段

輸出合併 (OM) 階段會結合多種類型的輸出資料 (像素著色器值、深度和樣板資訊) 和轉譯目標及深度/樣板緩衝區內容,以產生最終的管線結果。

用途和使用方式

輸出合併 (OM) 階段為判斷哪個像素可供檢視 (透過深度樣板測試) 並混合最終像素色彩的最終步驟。

OM 階段會使用下列組合來產生最終轉譯像素色彩:

  • 管線狀態
  • 像素著色器產生的像素資料
  • 轉譯目標的內容
  • 深度/樣板緩衝區的內容

混合概觀

混合會結合一個或多個像素值,以建立最終像素色彩。 下表顯示了混合像素資料所涉及的程序。

混合數據運作方式的圖表

就概念上而言,您可以在輸出合併階段中實作兩次這個流程圖:第一次用來混合 RGB 資料,並於平行進行第二次來混合 Alpha 資料。 若要參閱如何使用 API 建立和設定混合狀態,請參閱設定混合功能

固定函式混合可針對每個轉譯目標來獨立啟用。 不過,由於只會存在一組混合控制器,相同的混合會套用至所有啟用混合的混合目標。 混合之前,混合值 (包括 BlendFactor) 一律會限縮在轉譯目標格式的範圍內。 限縮會根據每個轉譯目標完成,並參考轉譯目標類型。 唯一的例外狀況為 float16、float11 或 float10 等格式,這些格式不會進行限縮,因此當中的混合作業可使用最小等於精確度/範圍做為輸出格式。 所有案例 (包括 0.0 加權) 都會傳播 NaN 和帶正負號的零。

使用 sRGB 轉譯目標時,執行階段會先將轉譯目標色彩轉換為線性空間,然後再執行混合。 執行階段會先將最終混合值轉換回 sRGB 空間,再將其存回轉譯目標。

雙重來源色彩混合

這項功能可讓輸出合併階段同時使用像素著色器輸出 (o0 和 o1) 做為混合作業的輸入,以搭配位於插槽 0 的單一轉譯目標。 有效的混合作業包括:加法、減法,以及對調減法。 混合方程式和輸出寫入遮罩會指定像素著色器會輸出哪些元件。 額外的元件將遭到忽略。

其他像素著色器輸出 (o2、o3 等) 的輸入為未定義;如果轉譯目標並未繫結至插槽 0,就不能寫入當中。 在雙重來源混合期間,撰寫 oDepth 為有效。

深度樣板測試概觀

建立為紋理來源的深度樣板緩衝區可同時包含深度資料和樣板資料。 深度資料會用來判斷哪個像素最靠近相機,而樣板資料則會用來遮罩可更新的像素。 無論深度和樣板值資料,最終都會用於輸出合併階段,以判斷是否應繪製像素。 下表顯示了進行深度樣板測試的概念。

深度樣板測試運作方式的圖表

若要設定深度樣板測試,請參閱設定深度樣板功能。 深度樣板物件會封裝深度樣板狀態。 應用程式可指定深度樣板狀態,否則,OM 階段將使用預設值。 如果停用多重取樣,混合作業就會依照像素執行。 如果已啟用多重取樣,則混合會依照每個多重取樣執行。

使用深度緩衝區來判斷應該繪製哪個像素的程序,就是所謂的「深度緩衝」,有時也稱為「Z 緩衝」。

一旦深度值到達輸出合併階段 (無論來自插補貨來自像素著色器),都一律會根據深度緩衝區的格式/精確度,使用福點規則來限縮為 z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z))。 限縮後,深度值會與現有深度緩衝區值進行比較 (使用 DepthFunc)。 如果沒有繫結任何深度緩衝區,則一律會通過深度測試。

如果深度緩衝區格式中沒有樣板元件,或沒有繫結任何深度緩衝區,則一律會通過樣板測試。

每次只會有一個深度/樣板緩衝區有效;任何繫結資源檢視都必須與深度/樣板檢視相符 (相同的大小和維度)。 這並不表示資源大小必須相符,而是檢視大小必須相符。

取樣遮罩概觀

取樣遮罩為 32 位元的多重取樣涵蓋範圍遮罩,負責判斷作用中轉譯目標內的哪個取樣會進行更新。 只允許使用一個取樣遮罩。 使用者會負責定義取樣遮罩中對於樣本的位元對應。 N 取樣轉譯會使用取樣遮罩的第一個 N 位元 (來自 LSB) (位元數上限為 32 位元)。

輸入

輸出合併 (OM) 階段會使用下列組合來產生最終轉譯像素色彩:

  • 管線狀態
  • 像素著色器產生的像素資料
  • 轉譯目標的內容
  • 深度/樣板緩衝區的內容

輸出

輸出寫入遮罩概觀

使用輸出寫入遮罩,即可控制 (根據每個元件) 哪些資料可寫入轉譯目標。

多個轉譯目標概觀

像素著色器可用來轉譯至少 8 個不同的轉譯目標,而所有轉譯目標都必須隸屬相同類型 (buffer、Texture1D 和 Texture1DArray 等)。 此外,所有轉譯目標在所有維度中的大小都必須相同 (寬度、高度、深度、陣列大小和樣本計數)。 每個轉譯目標可能會有不同的資料格式。

您可以使用轉譯目標插槽的任何組合 (最多 8 個)。 不過,資源檢視無法同時繫結至多個轉譯目標插槽。 只要資源不會同時使用,就能重複使用檢視。

本節內容

主題 說明

設定深度樣板功能

本節旨在說明深度樣板緩衝區的設定步驟,以及輸出合併階段的的深度樣板狀態。

 

圖形管線