Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

變數型別轉換

什麼是視覺腳本?

在現代 3D 渲染引擎中,著色器比以前複雜得多。基於物理的渲染、即時全域照明和螢幕空間效果的出現增加了渲染每影格時必須執行的「每像素」著色的數量。此外,螢幕解析度也大幅提升,1440p 和 4K 已成為常見的目標解析度。因此,場景渲染中的總著色成本通常代表渲染每個畫面所花費的大量時間。

可變速率著色 (VRS) 是一種透過降低*每像素*著色(也稱為*片段*著色)的解析度來降低著色成本的方法,同時保持渲染幾何體的原始解析度。這意味著幾何邊緣仍然像沒有 VRS 時一樣鋒利。 VRS 可以與任何 doc_3d_antialiasing 技術(MSAA、FXAA、TAA、SSAA)結合使用。

VRS 允許以本地方式指定著色質量,這使得視口的某些部分可以比其他部分接收更詳細的著色。這在虛擬實境 (VR) 中特別有用,可實作“注視點渲染”,其中視口的中心比邊緣更詳細。

這是使用本頁底部連結的密度圖,先停用然後啟用速率著色渲染的場景:

在紋理場景中停用可變速率著色

在紋理場景中停用可變速率著色

在紋理場景中啟用可變速率著色(品質較低但效能較高)

在紋理場景中啟用可變速率著色(品質較低但效能較高)

當在具有低頻細節的場景(例如具有風格化/低多邊形美感的場景)中使用時,可以實作類似的性能增益,但視覺品質的降低較小:

在無紋理場景中停用可變速率著色

在無紋理場景中停用可變速率著色

在無紋理場景中啟用可變速率著色(品質較低但效能較高)

在無紋理場景中啟用可變速率著色(品質較低但效能較高)

提供 Mod 支援

可變速率著色僅在特定 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 中使用 NuGet 套件

備註

Forward Plus 和 Forward Mobile 渲染方法都支援可變速率著色。 VRS 可用於薄餅(非 XR)和 XR 顯示模式。

相容性渲染方法**不**支援可變速率著色。

在進階專案設定中,渲染 > VRS 部分提供了控制根視口上可變速率著色的設定:

  • 模式: 控制可變速率著色模式。 禁用 停用可變速率著色。 紋理 使用手動建立的紋理來設定著色密度(請參閱下面的屬性)。 XR 自動產生適合虛擬/擴增實境中的注視點渲染的紋理。

  • 紋理: 用於控制根視口上的著色密度的紋理。僅當 ModeTexture 時使用。

對於自訂視口,必須手動將 VRS 模式和紋理設定為 class_Viewport 節點。

備註

在不支援的硬體上,啟用可變速率著色時不會出現視覺差異。您可以透過使用「--verbose」:ref:命令列參數 <doc_command_line_tutorial> 執行編輯器或專案來檢查硬體是否支援可變速率著色。

建立內容

如果使用**紋理** VRS 模式,您*必須*設定要用作密度貼圖的紋理。否則,將看不到任何效果。

您可以使用影像編輯器手動建立自己的 VRS 密度圖,或使用其他方法產生它(例如,在 CPU 上使用 Image 類,或在 GPU 上使用著色器)。但是,動態產生 VRS 影像時請注意效能影響。如果選擇動態生成,請確保 VRS 影像生成過程足夠快,以避免超出 VRS 的效能提升。

文字內容如下:

  • 紋理*必須*使用無損壓縮格式,以便顏色可以精確配對。

  • 以下 VRS 密度對應到各種顏色,較亮的顏色表示較低的著色精度:

密度

顏色

Comment 註解

1×1(細節最高)

rgb(0, 0, 0) - #000000

1×2

rgb(0, 85, 0) - #005500

2×1

rgb(85, 0, 0) - #550000

2×2

rgb(85, 85, 0) - #555500

2×4

rgb(85, 170, 0) - #55aa00

4×2

rgb(170, 85, 0) - #aa5500

4×4

rgb(170, 170, 0) - #aaaa00

4×8

rgb(170, 255, 0) - #aaff00

大多數硬體不支援。

8×4

rgb(255, 170, 0) - #ffaa00

大多數硬體不支援。

8×8(細節最低)

rgb(255, 255, 0) - #ffff00

大多數硬體不支援。

例如,此 VRS 密度紋理在視窗中心提供最高的著色密度,在角落提供最低的著色密度:

VRS 密度貼圖紋理範例,模擬注視點渲染

VRS 密度貼圖紋理範例,模擬注視點渲染

VRS 密度紋理沒有尺寸或縱橫比要求。但是,使用大於視窗解析度除以 GPU 的「圖塊大小」的 VRS 密度圖並沒有任何好處。切片大小決定了可以與其他切片分開更改著色密度的最小像素區域。在大多數 GPU 上,此圖塊大小為 8×8 像素。您可以透過使用「--verbose」命令列參數來執行 Godot 來查看圖塊大小,如 VRS 偵錯資訊中列印的那樣。

因此,建議堅持使用相對較低的分辨率,例如 256×256(方形)或 480×270(16:9)。根據您的使用案例,與專案中最常見的視口縱橫比(例如 16:9)相符的紋理相比,方形紋理可能更適合。

小訣竅

使用可變速率著色時,您可以使用負紋理 mipmap LOD 偏差 <doc_resolution_scaling_mipmap_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 紋理。結果,有效的性能增益將會降低。