共用方式為


像素著色器 (PS) 階段

像素著色器 (PS) 階段會收到原始物件的插補資料,並產生每一像素資料 (例如色彩)。

這是可進行程式設計的著色器階段;它會透過圖形管線圖表中的圓角區塊加以表示。 這個著色器階段會公開自身專屬的獨特功能,該功能是以著色器模型 4.0 的通用著色器核心為基礎所建置而成。

像素著色器 (PS) 階段可提供多項豐富的著色技術,例如每一像素光線和後續處理。 像素著色器是一款程式,可結合常數變數、紋理資料、每一頂點插補值和其他資料,藉此產生以像素為基礎的輸出。 轉譯器 (RS) 階段會針對原始物件所涵蓋的每個像素來叫用像素著色器一次,不過,您也可以指定 NULL 著色器,以避免執行著色器。

為紋理進行多重取樣時,每個涵蓋的像素都會叫用一次像素著色器,而每個涵蓋的多重取樣都會執行深度/樣板測試。 凡是通過深度/樣板測試的樣本,都會使用像素著色器輸出色彩來更新。

像素著色器的內建函式會產生或使用與螢幕空間 x 和 y 相關的數量導數。 導數最常見的用途,就是計算紋理取樣的詳細資料層級,以及在非等向性篩選中選取沿著非等向性軸的樣本。 通常,硬體實作會同時在多個像素 (例如 2x2 的網格) 上執行像素著色器,好讓像素著色器計算得出的數量導數,能在相同執行點的鄰近像素中與值的差異近似。

輸入

如果管線在未使用幾何著色器的情況下進行設定,則像素著色器僅限使用 16 個含有 4 個元件的 32 位元輸入。 否則,像素著色器最多可使用 32 個含有 4 個元件的 32 位元輸入。

像素著色器的輸入資料包含頂點屬性 (可在搭配或不搭配檢視方塊修正的情況下插補),或者可視為每一原始物件常數。 像素著色器輸入會根據宣告的插補模式,使用來自點陣化原始物件的頂點屬性進行插補。 如果原始物件在點陣化之前遭到裁剪,則裁剪程序期間也會採用插補模式。

頂點屬性會於像素著色器中心位置進行插補 (或評估)。 像素著色器屬性插補模式會在輸入暫存器宣告中宣告,並使用引數輸入結構進行以項目為基礎的宣告。 屬性可線性插補,或使用距心取樣。 詳情請參閱點陣化規則中的「多重取樣反鋸齒時的屬性距心取樣」小節。 距心評估只會在多重取樣期間具有相關性,藉此因應原始物件涵蓋像素卻不涵蓋像素中心的案例;距心評估會發生在盡可能接近 (非涵蓋) 像素中心處。

輸入也有可能使用系統值語意加以宣告,系統值語意會標示其他管線階段所使用的參數。 舉例來說,像素位置應使用 SV_Position 語意標示。 輸入組合語言 (IA) 階段可為像素著色器產生一個純量 (使用 SV_PrimitiveID);轉譯器 (RS) 階段 也可為像素著色器產生一個純量 (使用 SV_IsFrontFace)。

輸出

像素著色器可輸出多達 8 個含有 4 個元件的 32 位元色彩,或在像素遭到捨棄時不輸出色彩。 像素著色器輸出暫存器元件必須在使用前宣告;每個暫存器都允許使用不同的輸出寫入遮罩。

使用深度寫入啟用狀態 (在輸出合併 (OM) 階段中),即可控制深度資料是否會寫入深度緩衝區 (或使用捨棄原則捨棄該像素的資料)。 像素著色器也能選擇性地輸出含有 1 個元件的 32 位元浮點深度值,以利進行深度測試 (使用 SV_Depth 語意)。 深度值會在 oDepth 暫存器中輸出,且會取代插補的深度測試深度值 (假設深度測試已啟用)。 您無法在使用固定函式深度或著色器 oDepth 之間動態切換。

像素著色器無法輸出樣板值。

圖形管線