Godot 4.0中的基於有向距離場SDF(Signed Distance Field)的實時全局光照技術

原文地址 Godot官網 《Godot 4.0 gets SDF based real-time global illumination》 作者 Juan Linietsky 6月28日

在這裏插入圖片描述

Godot 4.0的開發正在穩步進行中,一種新的全場景全局光照技術(full-scene global illumination)已經加入到開發主分支。

SDFGI

SDFGI即有向距離場全局光照(Signed Distance Field Global Illumination)。這種技術將大量依賴有向距離場(一種基於歐幾里德距離的網格有向距離函數表示法)去創建光照。

在這裏插入圖片描述

雖然該功能還沒有開發完成,並且未來還會有很多質量和性能的提升,不過現在看起來已經足夠滿足一般需求了。

非常感謝Matias Goldberg提供的巨大幫助,感謝我們的贊助者持續提供的贊助,感謝Tim Sweeney(Epic Games的創始人)和Epic Games對我們的信任,並通過Epic Megagrant給予我們經濟支持。這項新技術的開發完全基於MIT許可證,所以每個人可以將其使用在自己的引擎或遊戲中。

它能做什麼

SDFGI近似於動態實時光照貼圖(dynamic real-time lightmap),但它不需要展UV也不需要使用其貼圖。當開啓SDFGI它會自動工作並對靜態物體生成全局光照。它不需要光線追蹤 。它可以運行在絕大多數最新的(以及幾年前的)GPU上,甚至幾年前的中檔廉價CPU(SDFGI的開發和測試使用Geforce 1060,一直保持着60fps的幀率)。

光的更新是實時的,這意味着任何光照條件的變化都會導致結果的瞬間變化。動態對象只支持接受環境光,但他們不會貢獻光照。一定程度的支持已在計劃中,但是不會馬上進行。

SDFGI也支持反射,無論是漫反射還是鏡面反射,所以全PBR場景將不成問題。在下圖中,你可以在棋盤格糙度圖中看到二者:

在這裏插入圖片描述
SDFGI也支持自發光,所以帶有自發光通道的材質也將會全面支持並提供場景光照。

在這裏插入圖片描述
SDFGI通常是不漏光的(leak free),這點和主流 VCT技術不同。對於每個串聯(Cascade),只要其的厚度大於一個體素,光就不會穿透。

如何使用

先確認你的模型已經標記爲Static Bake,然後在Environment(譯者注:添加一個WorldEnvironment節點)中開啓SDFGI,揍這麼滴簡單!

下面是一些可選項用於設置SDFGI:

  • 單元格大小(Cell Size):顯示最鄰近的串聯的單元格大小。每個相鄰串聯會複製這個大小,它允許非常大的支持GI的視野距離。
  • 多次反彈(Multiple Bounces):開啓反饋循環,可以模式光的多次反彈。
  • 環境光遮蔽(Occlusion):生成探頭間的遮蔽信息,以避免牆之間的漏光。遮蔽一般來說工作良好,但你必須保證牆的厚度厚於一個體素。
  • 讀取天空光(Read Skylight):允許天空貢獻光照。
  • Y Scale:用水平細節補償水平範圍。在室內場景中非常有用。

還有一些新的調試模式可將SDFGI的工作過程可視化:

  • SDFGI 串聯(SDFGI Cascades):將世界以SDF形式顯示,它可以幫助理解什麼是體素大小,這樣你可以調整幾何體以達到最適狀態。
  • SDFGI 探頭(SDFGI Probes):顯示探頭的位置(目前僅在串聯附近),它可以幫助理解,幾何體從何處讀取光照。如果一個區域探頭數量過少,可能會得到錯誤的環境光遮蔽結果。

它是如何工作的

即將寫一篇專題介紹,敬請期待。

未來

Godot 4.0 不斷進步,我們一定會開發出一個牛逼的遊戲引擎,並且你依然會自由使用它,如同你自家的技術。如果你還不是我們的贊助人,請考慮贊助我們以幫助提高開發速度!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章