Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
可變速率著色
什麼是可變速率著色?
在現代 3D 算繪引擎中,著色器比以前複雜得多。基於物理的算繪、即時全域照明和螢幕空間效果的出現增加了算繪每影格時必須執行的「每像素」著色的數量。此外,螢幕解析度也大幅提升,1440p 和 4K 已成為常見的目標解析度。因此,場景算繪中的總著色成本通常代表算繪每個畫面所花費的大量時間。
可變速率著色 (VRS) 是一種透過降低 每像素 著色(也稱為 片段 著色)的解析度來降低著色成本的方法,同時保持算繪幾何體的原始解析度。這意味著幾何邊緣仍然像沒有 VRS 時一樣鋒利。 VRS 可以與任何 3D 抗鋸齒 技術(MSAA、FXAA、TAA、SSAA)結合使用。
VRS 允許以本地方式指定著色質量,這使得視口的某些部分可以比其他部分接收更詳細的著色。這在虛擬實境 (VR) 中特別有用,可實作“注視點算繪”,其中視口的中心比邊緣更詳細。
這是使用本頁底部連結的密度圖,先停用然後啟用速率著色算繪的場景:
在紋理場景中停用可變速率著色
在有紋理的場景中啟用可變速率著色(品質較低,但效能較高)
在低細節(如風格化/低多邊形)場景中使用時,能獲得類似的效能提升,但視覺品質損失更少:
在無紋理場景中停用可變速率著色
在無紋理場景中啟用可變速率著色(品質較低,但效能較高)
硬體支援
可變速率著色僅在特定 GPU 上支援:
桌機:
NVIDIA Turing 及更新版本(含 GTX 1600 系列)
AMD RDNA2 及更新版本(整合與專用 GPU – 包括 Steam Deck)
Intel Arc Alchemist 及更新版本 (僅限專用 GPU)
英特爾整合式顯示卡不支援可變速率著色。
Mobile SoCs:
Snapdragon 888 及更新版本
MediaTek 天璣 9000 及更新版本
ARM Mali-G615 及更新版本
截至 2023 年 1 月,Apple 和 Raspberry Pi GPU 不支援可變速率著色。
在 Godot 中使用可變速率著色
在進階專案設定中,算繪 > VRS 部分提供了控制根視口上可變速率著色的設定:
模式: 控制可變速率著色模式。 禁用 停用可變速率著色。 紋理 使用手動建立的紋理來設定著色密度(請參閱下面的屬性)。 XR 自動產生適合虛擬/擴增實境中的注視點算繪的紋理。
紋理: 用於控制根視口上的著色密度的紋理。僅當 Mode 為 Texture 時使用。
對於自訂視埠,必須手動將 VRS 模式和貼圖設定給 Viewport 節點。
備註
在不支援的硬體上,啟用可變速率著色時不會出現視覺差異。您可以透過使用「--verbose」:ref:命令列參數 <doc_command_line_tutorial> 執行編輯器或專案來檢查硬體是否支援可變速率著色。
建立 VRS 密度圖
如果使用**紋理** VRS 模式,您*必須*設定要用作密度貼圖的紋理。否則,將看不到任何效果。
您可以使用影像編輯器手動建立自己的 VRS 密度圖,或使用其他方法產生它(例如,在 CPU 上使用 Image 類,或在 GPU 上使用著色器)。但是,動態產生 VRS 影像時請注意效能影響。如果選擇動態生成,請確保 VRS 影像生成過程足夠快,以避免超出 VRS 的效能提升。
文字內容如下:
紋理*必須*使用無損壓縮格式,以便顏色可以精確配對。
以下 VRS 密度對應到各種顏色,較亮的顏色表示較低的著色精度:
密度 |
顏色 |
註解 |
|---|---|---|
1×1(細節最高) |
|
|
1×2 |
|
|
2×1 |
|
|
2×2 |
|
|
2×4 |
|
|
4×2 |
|
|
4×4 |
|
|
4×8 |
|
大多數硬體不支援。 |
8×4 |
|
大多數硬體不支援。 |
8×8(細節最低) |
|
大多數硬體不支援。 |
例如,此 VRS 密度紋理在視窗中心提供最高的著色密度,在角落提供最低的著色密度:
VRS 密度貼圖紋理範例,模擬注視點算繪
VRS 密度紋理沒有尺寸或縱橫比要求。但是,使用大於視窗解析度除以 GPU 的「圖塊大小」的 VRS 密度圖並沒有任何好處。切片大小決定了可以與其他切片分開更改著色密度的最小像素區域。在大多數 GPU 上,此圖塊大小為 8×8 像素。您可以透過使用「--verbose」命令列參數來執行 Godot 來查看圖塊大小,如 VRS 偵錯資訊中列印的那樣。
因此,建議堅持使用相對較低的分辨率,例如 256×256(方形)或 480×270(16:9)。根據您的使用案例,與專案中最常見的視口縱橫比(例如 16:9)相符的紋理相比,方形紋理可能更適合。
小訣竅
使用可變速率著色時,您可以使用負紋理 texture mipmap LOD bias 來減少著色率降低的區域的模糊度。
請注意,紋理 LOD 偏差是全域設定的,因此這也會影響具有完整著色率的視窗區域。不要使用太低的值,否則紋理會顯得有顆粒感。
效能
為了了解 VRS 在理論上可以提高多少效能,以下是與本頁頂部顯示的紋理範例場景的效能比較。使用本頁上提供的 VRS 密度圖範例。
結果是在配備 NVIDIA 525.60.11 驅動程式的 GeForce RTX 4090 上捕獲的。
解析度 |
禁用 3D |
已啟用 |
效能 |
|---|---|---|---|
1920×1080(全高清) |
2832 FPS |
3136 FPS |
+10.7% |
2560×1440(QHD) |
2008 FPS |
2256 FPS |
+12.3% |
3840×2160(4K) |
1236 FPS |
1436 FPS |
+16.2% |
7680×4320(8K) |
384 FPS |
473 FPS |
+23.1% |
在效能改進方面,可變速率著色在更高的目標解析度下更有利。在高解析度下,視覺品質的下降也不太明顯。
備註
對於非 VR 遊戲,您可能需要使用比本範例中使用的侵略性較小的 VRS 紋理。結果,有效的性能增益將會降低。