Skip to main content
本主題說明可變速率著色 (VRS) 與稀疏光照。VRS 是新的 Direct3D 12 硬體與軟體功能,可在轉譯影像的不同區域以不同速率配置轉譯效能/功率。此功能可提升效能。在視覺上,降低著色速率對可察覺的輸出品質幾乎沒有影響。 適用於 XBOX Series X|S 的 2019 年 11 月 Microsoft Game Development Kit (GDK) 包含在 XBOX Series X|S 硬體上對 VRS Tier 2 的支援。
此資訊截至 2019 年 11 月為最新。部分功能可能自那時起已變更或更新。

簡介:VRS

1080p 及更高解析度的輸出,促成了可降低像素著色負載的轉譯技術的發展。這些技術包括下列各項:
  • 虛擬實境中的注視點轉譯
  • 棋盤格轉譯
  • 時間升頻
VRS 是此演進過程中合乎邏輯的下一步。適用於 PC 的 VRS 已於 2019 年 3 月推出。目前可在 DirectX 12 和 Windows 10 上透過 Intel Ice Lake (Tier 1) 和 NVIDIA Turing (Tier 2) 技術使用。AMD 將於 2020 年假期期間推出以新 RDNA2 微架構打造的改良版 PC 顯示卡。 如需 VRS 的詳細資訊,請參閱下列資源: Microsoft Game Dev Game Developers Conference (GDC) 2019 Siggraph 2019 出版品 範例

VRS 設計目標

  1. 可在局部選取著色速率,以微調遊戲品質與效能之間的平衡:
    • 在需要的地方使用完整品質。
    • 半速率,與棋盤格轉譯的速率相同。
    • 四分之一速率或甚至更低。
  2. 深度、樣板和涵蓋範圍一律為全速率,並具有完美的邊緣。
  3. VRS 可以輕鬆整合到現有引擎中,無論是否開啟 VRS 都使用相同的著色器。
  4. 不需要填補空洞、不需要額外的階段或緩衝區,也不需要猜測。
  5. 不會強制呈現電影般的柔和外觀。可以呈現極為銳利的視覺效果。
  6. 與時間升頻和多重取樣反鋸齒 (MSAA) 相容。

局部延展性

VRS 可以在低頻紋理細節的區域選擇性地降低著色速率。例如:
  • 有模糊效果的區域,例如景深、動態模糊和光暈
  • 低光源或光線飽和的情況
  • 部分遮蔽,例如透明物體、霧、水、雲、樹葉後方或抬頭顯示器 (HUD) 元素
  • 低頻紋理細節,例如粒子和半解析度透明物體
通常不會被注意到的區域。例如:
  • 螢幕邊緣
  • 虛擬實境眼球追蹤安全區域
  • 快速移動的物體
圖 1. 著色速率控制每個像素的像素著色器 (PS) 叫用次數。 著色速率控制每個像素的像素著色器叫用次數 圖 1 顯示四種 VRS 著色速率。
  • 1 × 1 速率:每個像素一次 PS 叫用。為每個像素著色。
  • 2 × 1 速率:每個像素二分之一次 PS 叫用。垂直方向有更多細節。
  • 1 × 2 速率:每個像素二分之一次 PS 叫用。水平方向有更多細節。
  • 2 × 2 速率:每個像素四分之一次 PS 叫用。四分之一速率。
使用下列其中一種方法指定著色器速率。

著色速率來源

有三種方式可以指定著色器速率。
  • 每個繪製呼叫:
    • Windows PC 上的 Tier 1。
    • RSSetShadingRate 會設定 VRS 的基本著色速率和合併器。
  • 每個引發頂點或基本型別:
    • Windows PC 和 XBOX Series X|S 上的 Tier 2。
    • 使用 SV_ShadingRate 匯出。
  • 螢幕空間對應:
    • Windows PC 和 XBOX Series X|S 上的 Tier 2。
    • RSSetShadingRateImage 會設定 VRS 的螢幕空間著色速率影像。
    • 每個圖格一個 R8_UINT,其中包含 D3D12_SHADING_RATE 列舉。
    • 應用程式會查詢圖格大小,為 8 × 8、16 × 16 或 32 × 32 其中之一。
圖 2. 著色速率來源與合併器。 著色速率來源與合併器 圖 2 顯示一個包含三個來源和一組兩個合併器的來源與合併器範例。
  1. 第一個合併器會取得繪製呼叫著色速率,以及來自每個參數頂點或每個引發頂點的匯出。
  2. 第二個合併器會取得第一個合併器的結果,並將其與螢幕空間對應合併。
  3. 最終的著色速率會傳送至點陣化器。
圖 3. 合併器 API。 合併器 API 圖 3 顯示圖 2 中的合併器 API 呼叫。設定合併器以取得所需的結果。 圖 4. VRS 結果。 VRS 結果 圖 4 顯示以可變速率在 4K、8 × 8 圖格大小且未使用時間反鋸齒 (TAA) 的情況下轉譯的場景。此場景在轉譯時大量降低了著色速率。 圖 5. 每個圖格的著色速率。 每個圖格的著色速率 圖 5 顯示使用 Sobel 濾波器和每個圖格投票的相同場景。 1 × 1 速率為紅色。2 × 1 速率為青色,具有更多垂直細節,可顯示左右兩側牆面上的紋理細節。1 × 2 速率為黃色,具有更多水平細節。2 × 2 速率為黑色。 圖 6. 放大區域。 放大區域 圖 6 以 160 × 168 像素的區域放大圖 5 後方牆面上的石塊。這大約是原始 4K 場景的 0.3%。
  • VRS 訊號位於圖 6 的左側。
  • 完全以 1 × 1 速率轉譯的「真實基準」影像位於圖 6 的中間。
  • 著色速率和絕對誤差影像位於圖 6 的右側。
圖 7. 放大區域:1 × 1 速率。 放大區域:1 x 1 速率 圖 7 顯示產生著色器速率的著色器使用完整 1 × 1 速率的位置。請注意,這是在高對比的區域中進行的。另請注意,著色器挑出了受影響石塊頂端的鏡面反射。 圖 8. 放大區域:2 × 2 速率。 放大區域:2 x 2 速率 圖 8 顯示著色器在石塊表面上使用 2 × 2 速率的位置。請注意 VRS 訊號的著色品質下降。 圖 9. 放大區域:多種著色速率。 放大區域:多種著色速率 圖 9 顯示在石塊表面受損部分使用多種著色速率的區域。 圖 10. 放大區域:半速率。 放大區域: 圖 10 顯示使用半速率著色的區域。這有助於保留特定區域中的細節。若沒有半速率著色,就必須使用全速率著色。 圖 11. 我們執行了多少著色? 我們執行了多少著色? 圖 11 顯示螢幕轉譯期間執行的著色量。放大的區段為 20 × 21 個圖格 (160 × 168 像素)。
  • 94 個全速率圖格 (紅色)
  • 143 個半速率圖格 (青色/黃色)
  • 183 個四分之一速率圖格 (黑色)
每個圖格 8 × 8 像素時的 PS 叫用次數:
  • 不使用 VRS = 26,880 個 PS 執行緒
  • 使用 VRS = 13,520 個 PS 執行緒
  • PS 叫用次數除以像素數 = 0.503

衍生螢幕空間對應

我們建議您使用上一個畫面來預測目前的畫面。例如,上一個畫面會告訴您:
  • 將在何處進行景深。
  • 動態模糊發生的位置。
  • 有低光源區域或光線飽和區域。
前述範例 (圖 4 到圖 11) 的摘要:
  • 從 Sobel 濾波器開始。
  • 結果是在不使用動態重新投影的情況下達成的。
  • 將 X 和 Y 摺積核心與梯度和亮度進行檢查,然後與某個速率進行比較。
  • 針對要使用的著色速率進行每個圖格投票。
  • 如果 X 或 Y 的比較結果不為零,則使用 2 × 1 或 1 × 2 速率。
  • 我們建議您使用跨通道內建函式。
結果是一個 API 介面小、不需變更著色器、也不需變更 MSAA 的流程。不需要重建階段。VRS 表面已完成,可以進行轉譯。
如需更新的濾波器,請參閱 Microsoft GDK 主機範例 中的 VRSandSparseLighting 範例。
圖 12. PS 叫用位置的變更。 PS 叫用位置的變更 圖 12 比較以 1 × 1 速率轉譯的真實基準影像與相同場景的 VRS 訊號。 VRS 會變更 PS 叫用位置,這可能會產生問題。例如:
  • VRS 可能會擷取到真實基準影像中沒有的細節。
  • 不同的著色速率可能會擷取或遺漏子像素細節。
子像素細節 (或取樣不足) 可能會是個問題。
  • 攝影機移動時的時間鋸齒:
    • 在此範例中,即使不使用 VRS 也會出現時間鋸齒問題。
  • VRS 粗略速率可能會讓取樣不足的情況更嚴重。
    • 每個粗略軸的紋理梯度都較長。
    • 較低 mip 的選取是自動的,並已改善鋸齒。
    • 使用網格細節層級 (LOD) 可提升效能。
    • 使用著色器鋸齒時請小心。
    • 使用 TAA 解決取樣不足的轉譯問題。

著色速率

1 × 1、2 × 1、1 × 2 和 2 × 2 速率是 VRS 的最低功能集。PC 可透過 AdditionalShadingRatesSupported 取得額外功能,支援 2 × 4、4 × 2 或 4 × 4 著色速率。2x 速率似乎是最有效的。使用 2x 速率時,很難發現品質下降。2 × 1 和 1 × 2 速率尤其如此。4x 速率則更容易看出轉譯上的差異,但也更難使用。使用 4x 速率時,效能優勢會降低。 以下是使用螢幕空間對應時的 NVIDIA Tier 2 效能結果。 Wolfenstein II: The New Colossus
  • 平衡模式的每秒畫面數 (FPS) 提升 6%。
  • 效能模式的 FPS 提升 9-10%。
  • 來源:Digital Foundry
Civilization VI
  • 整體畫面時間減少 8-17%。
如需 DOOM Eternal 和 Gears 5 的效能提升成果及更新資訊,請參閱下列影片:
Variable Rate Shading Update XBOX Series Consoles。

XBOX Series X|S VRS Tier 2.x

XBOX Series X|S 主機支援

XBOX Series X|S 主機在 2019 年 11 月的 Microsoft Game Development Kit (GDK) 中實作了 PC Tier 2 規格,並具有下列功能和例外狀況。 功能:
  • 1 × 1、1 × 2、2 × 1 和 2 × 2 著色速率
  • 螢幕空間對應
例外狀況:
  • 沒有 4x 模式功能。
  • 如果使用 MSAA,涵蓋範圍遮罩輸出目前不正確。已規劃修正此輸出問題。
  • 硬體未實作符合規格的質心。
  • 著色速率影像對應上允許使用轉譯目標檢視 (RTV)。

XBOX Series X|S XBOX 擴充功能

已規劃支援:
  • 搭配 MSAA 的超級取樣。
  • 取樣位置位移。
  • 額外的合併器。
  • 搭配多個檢視區的每個基本型別著色速率。
  • 從網域著色器匯出著色速率。
  • 著色速率意見反應表面。
請透過 Microsoft Game Development Kit (GDK) 論壇告訴我們您的功能優先順序。

搭配 MSAA 的超級取樣

XBOX Series X|S 支援 2x 和 4x 超級取樣著色速率。例如,它們會用於 8x MSAA。每個像素可能的 PS 叫用次數如下。
  • 0.25
  • 0.5
  • 1
  • 2
  • 4
  • 8
每個 2 × 2 速率一次 PS 叫用是最粗略的可能速率。使用 8× MSAA 時,實際上是 1/32 速率,也就是一次 PS 叫用廣播到 4 個像素 × 8 個樣本。 圖 13. XBOX Series X|S 著色速率的完整矩陣。 XBOX Series X|S 著色速率的完整矩陣 圖 13 顯示考量超級取樣網域的 XBOX Series X|S 著色速率矩陣。此矩陣顯示每個像素的 PS 叫用次數。請注意,超級取樣網域中沒有矩形模式。

HTile 和螢幕空間對應

在 XBOX Series X|S 中,著色速率會寫入螢幕空間對應,然後轉碼為 HTile,再由點陣化器從中讀取著色速率。
  • 圖格大小一律為 8 × 8。不需要查詢。
  • 圖格會在點陣化期間讀取。不需要額外的頻寬。
  • XBOX 擴充功能可以在單一階段中執行深度清除並設定著色速率對應。這可提升效能。

兩種新的 HTile 編碼

現在提供兩種具有 Stencil 的新 HTile 編碼。
  • 不支援超級取樣著色速率時:
    • HTile Stencil 中的備用位元 10-11 用於儲存著色速率。
  • 支援超級取樣著色速率時:
    • 著色速率需要四個位元。HTile 會失去其第二個 Hi-Stencil 預先測試 (位元 6-7)。第一個預先測試仍會保留。
在 2019 年 11 月的 Microsoft Game Development Kit (GDK) 中,所有 HTile 都是第二種編碼。未來預期會提供「永不使用 VRS」資源旗標,傳回「無樣板」HTile 格式以獲得額外精確度。Microsoft Game Development Kit (GDK) 將會新增對第一種 HTile 格式的支援。

XBOX Series X|S 實作詳細資料

呼叫 RSSetShadingRateImage 時,會將內容轉碼為 HTile。如果沒有繫結的 HTile,就會從命令清單的命令配置器配置暫時的 HTile。這可在沒有深度的情況下啟用 VRS。VRS 可用於後製處理等用途。如果因記憶體不足而配置失敗,VRS 就會關閉。 如果您變更深度樣板檢視 (DSV),建議您先呼叫 RSSetShadingRateImage(nullptr)。否則,如果 DSV 具有相同的維度,您可能會再次付出轉碼成本。 大於 4K 的 RTV 會失敗。此問題的修正已規劃於 2020 年 4 月的 Microsoft Game Development Kit (GDK) 中推出。

XBOX Series X|S 有額外的合併器

圖 14. XBOX Series X|S 有額外的合併器。 XBOX Series X|S 有額外的合併器 圖 14 顯示 XBOX Series X|S 中的其他合併器。如果有需求,我們可以公開這些合併器。

PS 叫用位置

XBOX Series X|S 硬體支援中心、質心和可程式化的取樣位移,可以變更像素著色器的叫用位置。
  • 每個著色速率 4 位元的位移
  • PS 叫用的位置可以在每個畫面週期中變更

VRS 不相容性

有一些項目與 VRS 不相容,並會在 XBOX Series X|S 中將其關閉。當 PS 位置未與深度樣本或樣板樣本對齊時,就會發生這種情況。
  • 深度後涵蓋範圍遮罩
  • 點陣順序檢視 (ROV)
  • SV_Depth 匯入
    • 改為透過插值器傳遞。請參閱會為您執行此動作的 __XBOX_SV_POS_ZW_VIA_ATTRIBUTE 著色器編譯器定義。
  • 寫入 SV_Depth 或 SV_StencilRef

著色速率意見反應表面擴充功能

著色速率意見反應表面擴充功能會執行下列動作:
  • 從 cmask 取用 2 個位元
  • 記錄三角形在每個軸上是以精細速率還是粗略速率轉譯
  • 從 cmask 移除快速清除功能
  • 與用於快速合成的 cmask 流程不相容

平台支援總覽

圖 15. 平台支援。 平台支援 圖 15 顯示每個平台的功能支援。
此資訊截至 2019 年 11 月為最新。部分功能可能自那時起已變更或更新。
請注意下列事項:
  • XBOX Series X|S 支援最多的功能集。
  • 對於小型特徵,最好使用 8 × 8 圖格而非 16 × 16 圖格,因為這樣會針對較少的像素提升著色速率。

XBOX Series X|S 硬體效能最佳化

XBOX Series X|S 的效能改進需要搭配降低像素著色器負載來進行。

色彩區塊作業

在邏輯圖形管線中,色彩區塊是轉譯輸出前的最後兩個邏輯作業之一。 慢速路徑 當 RTV 大於每像素 32 位元 (bpp) 或已啟用混色時:
  • 不使用 VRS 時,每個轉譯後端 (RB) 每個時脈週期處理 4 個像素。
  • 使用 VRS 時,每個 RB 每個時脈週期處理 4 個像素。不過,從粗略到精細的廣播需要額外 n 個週期,其中 n 等於涵蓋的像素數。
快速路徑 當 RTV 小於或等於 32 bpp 且未啟用混色時:
  • 不使用 VRS 時,您可以使用最佳化的轉譯後端 (RB+),以 2x 速率達到每個 RB 每個時脈週期 8 個像素。
  • 使用 VRS 時,1 × 1 速率為每個 RB 每個時脈週期 4 個像素。
  • 不過,色彩區塊可以側載額外的廣播複本。
    • 2 × 1 速率為每個時脈週期 4 個像素。
    • 1 × 2 速率為每個時脈週期 8 個像素。
    • 2 × 2 速率為每個時脈週期 8 個像素。
每個 RB 每個時脈週期的上限為 16 個像素。 由於色彩區塊可以處理額外的複本,像素著色器的工作現在已獲得改善。

RSSetShadingRate

若要使用 RB+,請呼叫 RSSetShadingRate(D3D12_SHADING_RATE_1x1, nullptr); 來關閉 VRS。請注意,RSSetShadingRate 不會滾動內容。

VRS 與差異色彩壓縮

差異色彩壓縮 (DCC) 現在具有可感知 VRS 的模式,可降低頻寬。
  • VRS 產生的訊號在一般 DCC 下壓縮效果不佳。
    • 訊號範例:錨點、差異、零差異、差異、零差異。重複。
  • DCC 已新增可感知 VRS 的模式。
  • 針對 2 × 2 速率最佳化,可達到接近 4:1 的壓縮。
  • 大幅改善 2 × 1 和 1 × 2 速率的壓縮比。

稀疏光照

VRS 會寫入重複的 g-buffer 值並為其打光。處理重複的 g-buffer 資料是一種浪費。

稀疏光照:利用 VRS 訊號

為了避免浪費效能,請檢查 g-buffer 中的重複值,然後只識別並為一部分像素打光。例如,在 2 × 2 像素四邊形中:
  • 2 × 2 速率為 1 個像素
  • 1 × 2 或 2 × 1 速率為 2 個像素 (棋盤格圖樣)
  • 1 × 1 速率為 4 個像素

稀疏光照範例實作

使用 16 × 16 圖格大小和 8 × 8 群組大小的範例如下。
  1. 計算著色器執行緒會比較每 2 × 2 像素的 g-buffer 值。
  2. 接著每個執行緒會寫出 1-4 個座標。每個座標各有 32 位元。
    • 4 位元用於相對於圖格的 x 座標。
    • 4 位元用於相對於圖格的 y 座標。
    • 3 位元用於指出是否要在 x、y 或對角線上複製值 (用於填補空洞)。
    • 21 位元足以儲存深度值。
  3. 其中一個輸出是每個螢幕圖格所需的光照作業數量計數。
如需更新的資訊,請參閱下列資源:
Variable Rate Compute Shaders - Halving Deferred Lighting Time。 VRSandSparseLighting 範例。

延遲光照著色器

延遲光照著色器現在會為每個圖格執行緒分派一個 wave,而不是為每個像素分派一個執行緒。
  1. wave 會在 tileCount 中迴圈執行 n 次。當您移除等於或大於一個 wave 工作量的光照作業時,效能就會提升。比較 Wave32 與 Wave64 的效能時:
    • 當要打光的像素為 224 個或更少時,Wave32 可產生加速效果。
    • 當要打光的像素為 194 個或更少時,Wave64 可產生加速效果。
  2. 執行緒會讀取 32 位元,解壓縮 coordinate.xy 和深度。
  3. 照常進行光照。光源清單仍為 wave 不變。
  4. 最後最多進行三次打光結果的廣播複製。
    • 水平、垂直和對角線複製各使用一個位元。
    • 使用 XOR1 計算三個複本各自的 destination.xy。
    • 空洞填補完美、已預先計算且成本低廉。
圖 16. 稀疏光照結果與光照作業計數。 稀疏光照結果與光照作業計數 圖 16 左側顯示稀疏光照的石獅頭部 4K 影像。右側為計數緩衝區。它顯示光照作業大幅減少。石塊的 g-buffer 經過測試,以小幅允許的深度範圍 (LinearZ 允許差異為 0.001) 檢查完全重複的值。 圖 17. 未填補空洞的光照結果。 未填補空洞的光照結果 圖 17 顯示未填補空洞的獅子眼球放大影像。
  • 空洞為黑色像素。
  • 1 × 1 時每個樣本都會打光。
  • 2 × 1 和 1 × 2 看起來都像棋盤格。
  • 2 × 2 為每四個樣本中為一個打光。
請注意,線框是可見的。此處的問題在於要求的著色速率不一定是實際發生的著色速率。 例如,請考慮以 2 × 2 速率著色的 2 × 2 像素四邊形。這在零重繪的情況下可能產生一到四次 PS 叫用。
  • 如果像素四邊形由單一三角形涵蓋,則為一次叫用。
  • 如果四邊形由四個三角形涵蓋,則為四次叫用。
不佳的網格 LOD 會產生不佳的 VRS 結果。 圖 18. 加入 0.025 差異的 G-buffer 比較。 加入 0.025 差異的 G-buffer 比較 圖 18 顯示在 g-buffer 比較期間於值中加入小幅允許差異的結果。左側為法線值。右側為反照率值。加入小幅差異可減少光照作業的數量並消除線框。這些影像的亮度在某種程度上與光照計算的數量相對應。這接近要打光的最佳像素集合,也就是每個 2 × 2 速率 1、2、3 或 4 個像素。 圖 19. G-buffer 完全相符。 G-buffer 完全相符 圖 19 顯示已填補空洞的獅子頭部影像。即使放大,也很難分辨兩者之間的差異。

使用 XBOX Series X|S 專屬最佳化的 G-buffer 檢查

有一種不需檢查 g-buffer 內容的改良實作。如需詳細資訊,請參閱下列影片和範例。
Variable Rate Compute Shaders - Halving Deferred Lighting Time VRSandSparseLighting 範例 G-buffer 檢查的成本很高。XBOX Series X|S 專屬最佳化包括下列各項:
  1. 讀取著色速率對應。針對全速率圖格使用快速路徑,並處理每個像素。
  2. 利用著色速率意見反應 cmask 表面。針對由單一三角形涵蓋的降低速率圖格使用快速路徑。
  3. 針對其餘圖格:
    1. 讀取 DCC 金鑰,然後利用零差異。
    2. 進行 g-buffer 檢查。
      • 使用 g-buffer 雜湊進行最佳化。這會付出儲存空間和頻寬的成本。
      • 將 g-buffer 讀取與執行其他工作 (例如讀取深度) 的階段結合。
圖 20. 在 4K 下稀疏光照與一般延遲光照的節省比較。 在 4K 下稀疏光照與一般延遲光照的節省比較 圖 20 顯示在 4K 下比較稀疏光照節省與延遲光照的場景轉譯。
  • 這些場景中未使用 cmask 和 DCC。
  • 圖中不包含 VRS 或點陣化時間所節省的部分。
  • 柱子周圍的深度不連續會造成大型深度分割,以及較高的光源計數。
  • 在底部場景中,光源計數相對較低。
  • 頂部場景的總經過時間最長。底部場景的總經過時間最短。改進幅度會隨著場景複雜度而有利地擴展。

與其他技術整合

VRS、動態解析度縮放和時間升頻

VRS 不能取代動態解析度縮放 (DRS)。
  • 當畫面時間超過目標畫面時間時,可以降低著色速率。
  • VRS 的改進無法預測。它們取決於場景內容。其他因素包括光照。
  • DRS 對畫面時間的影響更大,也更可預測。
VRS 的改進是額外的好處。
  • 不要取代 DRS。而是協助 DRS 達到更高的解析度。
  • 使用時間升頻來輸出解析度。
圖 21. XBOX Series X|S 上的 VRS 與棋盤格轉譯比較。 XBOX Series X|S 上的 VRS 與棋盤格轉譯比較 圖 21 比較 XBOX Series X|S 上的 VRS 與棋盤格轉譯技術。

VRS 效能因素

VRS 效能取決於數個因素。其中包括:
  • 點陣化效率。建議使用視差、浮雕和錐形步進對應。
  • 場景內容。
  • 計算著色速率的額外負荷。
  • PS 的成本和下游硬體瓶頸。
  • 您個人對效能與品質的偏好。

每個三角形/每個繪製呼叫的著色速率

每個三角形/每個繪製呼叫的著色速率可大幅提升效能。與螢幕空間對應相比,它們可降低 GPU 成本。 每個繪製呼叫:
  • 粒子和快速移動的物體會轉譯至反射對應。
  • 判斷物體是否位於半透明物體後方。
每個三角形:
  • 判斷三角形相對於攝影機是否位於水面的另一側。
  • 判斷三角形是否被樹葉或其他物體遮蔽。

未來計畫

僅限 XBOX

  • 移除螢幕空間對應。
    • 將著色速率直接寫入 HTile。
    • 在相同的作業中執行深度清除。
  • 每個畫面輪換取樣位移。
    • 這會產生類似棋盤格的收斂,但能提供完美的涵蓋範圍。

PC 和 XBOX

  • 將著色速率判斷與後製處理著色器結合。
  • 對於低於 1 × 1 但尚未達到 2 × 2 的速率,請執行下列動作:
    • 考慮每個畫面交替使用 2 × 1 和 1 × 2 速率,特別是 60 赫茲的遊戲。
    • 這會產生棋盤格圖樣,其中黑色方格在第一個畫面取得 2 × 1,在下一個畫面取得 1 × 2。白色方格在第一個畫面取得 1 × 2,在下一個畫面取得 2 × 1。
    • 使用粗略 TAA 抖動,而非子像素 TAA 抖動。
    • 新增每個三角形的著色速率。
      • 除非指定了更粗略的速率,否則請使用螢幕空間對應。這是很好的預設合併器設定。
  • 光線追蹤。
    • 使用相同的著色頻率量測 (對應) 來控制光線數量。
    • 將光線結果廣播至相鄰像素 (稀疏光線追蹤)。

結論

VRS 是適用於 PC 和 XBOX Series X|S 裝置的強大最佳化。
  • VRS 提供完美的涵蓋範圍和局部著色速率控制。這些是相較於現有功能的重大改進。
  • 將 VRS 加入引擎非常容易。VRS 能與 DRS 和時間升頻等現有技術良好整合。
  • 在處理傳統上成本高昂的效果 (例如模糊、陰影和體積效果) 時,VRS 的效益最大。
  • VRS 的額外負荷非常低。
使用稀疏光照來利用 VRS 訊號。
  • 為重複的 g-buffer 資料打光會浪費資源。
  • 也可以進行其他稀疏階段。
  • 重複使用每個螢幕圖格所需的光照作業計數及其座標。
ATG 範例提供用於計算著色速率的獨立著色器​。​如需 VRS 的詳細資訊,請參閱 Microsoft GDK 主機範例 中的 VRSandSparseLighting 範例。

後續步驟

如果您想要檢閱與此概觀相關之簡報資料中的資訊,請從 XBOX Developer Download Secure Data Storage (SDS) 下載下列檔案。
  • 投影片:Xfest 2019 Graphics Track PowerPoints ([2019.11]-Xfest2019GraphicsTrackPowerPoints.ZIP) 中的 XF2019_Graphics_08_Day2_Variable_Rate_Shading_and_Sparse_Lighting.pptx
  • 視訊簡報:Xfest 2019 Graphics Track Videos ([2019.11]-Xfest2019GraphicsTrackVideos.ZIP) 中的 XF2019_Graphics_08_Day2_Variable_Rate_Shading_and_Sparse_Lighting.mp4

下載 Microsoft PowerPoint 簡報和影片

  1. 前往 Game Development Kit (GDK) 下載。
  2. 在 Select file type 下,選取 Conference Materials,然後選取 Confirm。
  3. 在 Select build/version number 下,選擇下列其中一個圖形簡報。
    • Xfest 2019 Graphics Track PowerPoints
    • Xfest 2019 Graphics Track Videos
  4. 選取 Download Now,然後等候 .zip 檔案下載完成。
  5. 前往本機的 [下載] 資料夾,然後從壓縮資料夾中解壓縮 (擷取) 檔案。

下載本主題中提及的 GDK 主機範例

  1. 前往 Game Development Kit (GDK) 下載。
  2. 在 Select file type 下,選取 GDK,然後選取 Confirm。
  3. 在 Select build/version number 下,選擇最新的 Microsoft GDKX (Sample only) 選項。
  4. 選取 Download Now,然後等候 .zip 檔案下載完成。
  5. 前往本機的 [下載] 資料夾,然後從壓縮資料夾中解壓縮 (擷取) 檔案。
  6. 選取 GDKSamples > Graphics。搜尋範例。

另請參閱

DirectX 12 Specs - Variable Rate Shading Variable Rate Shading 可變速率著色概觀 為何使用可變速率著色? 可變速率著色功能設計 AMD FidelityFX Variable Shading Variable Rate Shading Update XBOX Series Consoles Variable Rate Compute Shaders - Halving Deferred Lighting Time
Last modified on October 6, 2026