Up to date

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

使用體素全域光照

VoxelGI 是一種完全即時全域照明的形式,旨在用於中小型 3D 場景。 VoxelGI 對 GPU 的要求相當高,因此在專用顯示卡時最好使用它。

重要

僅當使用 Forward Plus 渲染後端時才支援 VoxelGI,而不是 Forward Mobile 或相容性後端。

也參考

不確定 VoxelGI 是否適合您的需求?請參閱 doc_introduction_to_global_Illumination_comparison` 以了解 Godot 4 中可用的 GI 技術的比較。

視覺比較

VoxelGI 已停用。

VoxelGI 已停用。

啟用 VoxelGI。

啟用 VoxelGI。

設定

  1. 確保匯入靜態關卡幾何體時,在匯入塢中將「光烘焙」選項設定為「靜態」或「靜態光照貼圖」。對於手動新增的 MeshInstance3D 節點,請確保屬性面板中的 Global Illumination > Mode 屬性設定為 Static

  2. 該簡介是「建立新節點」對話框中唯一的描述。

  3. 透過在 3D 視窗中拖曳操作小控件,將 VoxelGI 節點移至您希望其覆蓋的區域的中心。然後透過拖曳 3D 視窗中的紅點(或在屬性面板中輸入值)來調整 VoxelGI 的範圍。確保 VoxelGI 的範圍不會過大,否則品質會受到影響。

  4. 選擇 VoxelGI 節點並點選 3D 編輯器視窗頂部的 Bake。這至少需要幾秒鐘才能完成(取決於 VoxelGI 細分的數量和場景複雜性)。

如果 VoxelGI 範圍內包含的至少一個網格體的全域照明模式設定為 靜態,您應該會看到場景中出現間接照明。

備註

為了避免包含大量二進位資料的基於文字的場景檔案膨脹,請確保 VoxelGIData 資源「始終」儲存到外部二進位檔案。該檔案必須使用“.res”(二進位資源)副檔名而不是“.tres”(基於文字的資源)來保存。使用 VoxelGIData 的外部二進位資源將使基於文字的場景保持較小,同時確保其快速載入和儲存。

節點屬性

烘焙前,可以在 VoxelGI 節點的屬性面板中調整以下屬性:

  • 細分: 較高的值會導致更精確的間接照明,但代價是性能較低、烘烤時間更長以及儲存需求增加。

  • 範圍: 表示應在其中烘焙間接照明的盒子的大小。範圍以 VoxelGI 節點的原點為中心。

烘焙後,可以在 VoxelGI 節點中包含的 VoxelGIData 資源 中調整下列屬性:

  • 動態範圍: 在間接照明中可以表示的最大亮度。較高的值可以表示更亮的間接光,但代價是精度較低(可能導致可見條帶)。如有疑問,請保持不變。

  • 能量: 間接照明的整體能量。這也會影響具有發射材料的網格發射的直接照明的能量。

  • 偏差: 在運作時新增到體素緩衝區搜尋的可選偏差。這有助於避免自遮擋偽影。

  • 法線偏差:偏差 類似,但透過表面法線偏移對體素緩衝區的搜尋。這也有助於避免自遮擋偽影。較高的值會減少非粗糙材料中可見的自反射,但代價是更多的可見光洩漏和看起來更平坦的間接照明。若要將隱藏自反射優先於照明質量,請將 Bias 設定為“0.0”,將 Normal Bias 設定為“1.0”和“2.0”之間的值。

  • 傳播: 用於反射間接照明的能量因子。較高的值將導致更亮、更漫射的照明(最終可能看起來太平坦)。啟用「使用兩次反射」時,您可能需要減少「傳播」以補償整體更亮的間接照明。

  • 使用兩次反彈: 如果啟用,燈光將反彈兩次而不是一次。這會產生更真實的間接照明,並使間接照明在反射中也可見。啟用此功能通常不會產生明顯的效能成本。

  • 室內: 如果啟用,VoxelGI 將不會考慮環境天空照明。應在室內場景中啟用此功能,以避免環境中漏光。

產生金鑰儲存區

為了確保使用 VoxelGI 時正確的視覺效果,您必須根據場景中的「用途」(靜態或動態)配置網格和燈光的全域照明屬性。

有四種可用於取得設定的巨集:

  • Enabled(啟用) :啟用探查捕獲,使得動態物件能夠 接受 間接光照。無論此選項是否啟用,動態物件都無法對場景 造成 間接光照,這是光照貼圖的局限性。

  • 靜態(預設): VoxelGI 烘焙時將考慮網格。網格將接收*並*為場景提供間接照明。如果烘焙後網格發生任何變化,則必須再次烘焙 VoxelGI 節點。否則,間接照明看起來會不正確。

  • 動態: VoxelGI 烘焙時不會考慮網格,但它仍會即時接收*並*為場景貢獻間接光照。與 靜態 相比,此選項要慢得多。僅在大型網格上使用**動態**全域照明模式,這些網格在遊戲過程中會發生顯著變化。

此外,還有 3 種可用於燈光的烘焙模式(DirectionalLight3D、OmniLight3D 和 SpotLight3D):

  • 禁用: VoxelGI 烘焙不會考慮光線。此燈光不會為場景提供間接照明。

  • 靜態: VoxelGI 烘焙時將考慮光線。燈光將為場景提供間接照明。如果烘焙後光照發生任何變化,則必須再次烘焙 VoxelGI 節點,否則間接光照將看起來不正確。如果有疑問,請使用此模式進行水平照明。

  • 動態(預設): VoxelGI 烘焙不會考慮燈光,但它仍會即時為場景提供間接照明。與 靜態 相比,此選項速度較慢。僅對遊戲過程中會發生顯著變化的燈光使用**動態**全域照明模式。

備註

光發出的間接能量的量取決於其顏色、能量*和*間接能量屬性。要使特定燈光發出或多或少的間接能量而不影響燈光發出的直接光量,請在 Light3D 屬性面板中調整 間接能量 屬性。

調整 VoxelGI 的性能與品質

由於 VoxelGI 的要求相對較高,因此它在配備最新專用 GPU 的系統上表現最佳。在較舊的專用 GPU 和整合式顯示卡上,需要調整設定才能獲得合理的效能。

在專案設定的**渲染 > 全域照明**部分中,VoxelGI 品質也可以透過兩種方式調整:

  • 體素Gi > 品質: 如果設定為**低** 而不是**高**,體素錐追蹤將只使用4 個抽頭而不是6 個。這會加快渲染速度,但代價是環境遮擋不太明顯。

  • Gi > 使用一半解析度: 如果啟用,VoxelGI 和 SDFGI 都將以減半解析度渲染 GI 緩衝區。例如,當以 3840×2160 渲染時,GI 緩衝區將以 1920×1080 解析度計算。啟用此選項可以節省大量 GPU 時間,但它可能會在薄細節周圍引入可見的鋸齒。

請注意,必須在專案設定對話方塊中啟用 進階 切換才能使上述設定可見。

此外,可以透過隱藏 VoxelGI 節點來完全停用 VoxelGI。這可用於比較目的或提高低端系統的性能。

減少 VoxelGI 漏光和偽影

烘焙 VoxelGI 後,您可能會注意到關卡幾何體中的某些點會洩漏間接光線。這可以透過多種方式來解決:

  • 對於漏光和偽影,請嘗試移動或旋轉 VoxelGI 節點,然後再次烘焙。

  • 為了防止漏光,請確保關卡幾何體完全密封。這最好在用於設計關卡的 3D 建模軟體中完成,但也可以使用全域照明模式設定為 靜態 的原始 MeshInstance3D 節點。

  • 為了防止薄幾何體的漏光,建議使相關幾何體更厚。如果這不可能,則新增一個原始 MeshInstance3D 節點,並將其全域照明模式設為 靜態。再次烘焙 VoxelGI,然後隱藏原始 MeshInstance3D 節點(VoxelGI 仍會考慮它)。為了獲得最佳結果,MeshInstance3D 應具有顏色與原始薄幾何體相符的材質。

  • 為了消除可能出現在反射表面上的偽影,請嘗試增加 VoxelGIData 資源中的 Bias 和/或 Normal Bias,如上所述。不要將這些值增加得太高,否則漏光會變得更加明顯。