使用Unity HDRP建立逼真的體積雲

近幾十年來,flat-painted skyboxes和HDRIs一直是天空和雲渲染的首選解決方案。而現在,透過HDRP全新的體積雲,你可以用動態雲填充你的世界。對於系統的第一次迭代,Unity關注的更多是效能和易用性,因此你只需點選幾下滑鼠,就能以較低的圖形處理器成本創建出漂亮的視覺效果。

雲渲染的簡史

直到上一代遊戲機淘汰之前,體積雲技術在遊戲中應用的情況一直是非常罕見的。立體的雲,即佔據世界中物理空間的雲,通常僅限於飛行模擬器和少數開放世界的遊戲。

造成這種情況的主要原因是渲染這種雲的成本非常高。具體來說,當依賴於光線跟蹤或光線行進時,計算穿過雲的光散射是一項費時費力的工作。而另一個原因則是,大多數3D遊戲只需在地面(例如,地形或海洋)上進行,因此它們不需要動態天空系統或是飛行在雲端上方的相機來推動遊戲的進度。

因此,許多3D應用程式就選擇使用靜態紋理來塑造雲朵,如立方體貼圖或簡單的透明材料作為替換。通常,這些場景都是在離相機無限遠的地方進行渲染,因此雲朵不會與地面世界完全相連線,這樣做的的優點是可以以非常低的成本為靜態場景提供足夠的質量。

使用Unity HDRP建立逼真的體積雲

隨著實時3D渲染的進步和硬體效能的提高,一個新的動態體積雲的時代開始了。這打開了全新視覺體驗的大門,這一切都可以透過Unity的高畫質渲染管道(HDRP)實現。

體積雲受Volume Framework’s global wind影響可投下真實的陰影。它們與Volumetric Fog和Physically Based Sky一起創造出令人印象深刻的體積太陽軸和令人瞠目結舌的日落效果。

使用Unity HDRP建立逼真的體積雲

而天空反射和環境探測,以及區域性反射探測和平面反射,可以渲染雲。這一過程組成了Unity全新的體積雲系統,該系統可以與大多數其他HDRP系統無縫互動。經測試該系統在PlayStation 4(非PS4 Pro)上的延遲約為2ms,在最近的出廠的高階GPU上的延遲遠低於0。5ms。

易於設定

在Unity中建立體積雲只需要簡單的幾步即可完成。第一,確保啟用HDRP資產和HDRP Global Settings,以啟用“體積雲”。

使用Unity HDRP建立逼真的體積雲

這只是一個使用材積平分法來控制體積雲的方式。如大多數HDRP效果一樣,只需選擇現有的(全域性)卷或建立一個新的卷,並將其分配到一個體積雲元件中然後再新增到其配置檔案中即可實現。其中有許多引數可以控制雲的型別、風、光、陰影以及雲的整體質量和成本。

使用Unity HDRP建立逼真的體積雲

藉助簡單模式下的四種內建預設,使用者可以立即建立多種型別的雲場景如:少雲,多雲,陰雨和暴風雨天氣。對於這四種天氣型別的調整,可以最大限度地提高雲層下、內部和略高於雲層部分的細節水平,最高可達10,000米(33,000英尺)。

使用Unity HDRP建立逼真的體積雲

本地雲模式會影響飛入和飛過雲的能力,同時也會間接影響效能水平。

當本地雲模式被禁用,被渲染的雲會離相機非常遠。這使使用者可以將相機遠平面保持在非常合理的距離。但很顯然這種模式會讓相機遠離雲層。

當本地雲模式被啟用,相機可以在雲層下方、內部和上方進行導航。但是,為了與地平線有足夠高的視距,可能需要將相機遠平面增加到100,000米以上,這具體取決於體積霧的密度。

出於這個原因,如果專案不需要攝像機飛入雲層並一直保持在雲層之上,請將本地雲模式禁用。這時你仍將獲得相同的照明和陰影質量,同時能夠保持較低的相機遠平面距離。

如果你需要相機飛上雲端,則可以啟用本地雲模式。至於基於物理的天空,體積雲系統模擬了地球的曲率,因此雲頂包裹著地球,並在地平線上提供了與陸地或海洋的真實連線。如果進一步彎曲雲穹,你可以迫使它與世界相交匯,這意味著你可以大幅降低相機的遠平面距離。

另外在場景中風受到了特別的關注,風再現了現實世界中常見的浮力現象。在Unity中對風有四種控制。例如,使用者可以建立靜態雲,但透過侵蝕風,或者可以透過造型風我們可以創造出迷人的遠景。

使用Unity HDRP建立逼真的體積雲

除了簡單的模式下提供的四種預設之外,使用者還可以使用自定義預置,該功能允許使用者使用曲線和滑塊控制大多數雲的屬性。這種模式非常強大,可以在幾秒鐘內用多層雲建立各種各樣的雲景。

使用Unity HDRP建立逼真的體積雲

要建立太陽軸,只需切換體積霧屬性並設定其最大高度和體積霧距離到幾千米。這樣,定向光就可以影響大氣層,並在雲層下產生美麗的陽光散射。

使用Unity HDRP建立逼真的體積雲

最後是手動模式,該模式支援專業使用者建立雲覆蓋紋理和查詢表(LUT),以便手動控制LUT定義的每個垂直雲切片的位置。

渲染技術

雲體積由2D覆蓋貼圖和LUT設定的不同高度剖面所驅動,該剖面指定了密度、侵蝕和環境遮擋等屬性。使用兩個3D噪聲紋理來吞噬雲體積,以生成不同的雲形狀:

形狀噪聲:生成大片雲形狀的低頻噪聲

侵蝕噪聲:提供雲層表面微觀細節的高頻噪聲

在渲染時,HDRP的體積雲系統使用光線行進,這是一種依賴於從相機向物體和光源分步投射光線的技術。在案例中,向雲體投射初級光線來對雲表面進行取樣。然後,次級光線被投射到太陽上,以遮擋雲層表面的畫素。

為了進一步降低成本,同時將視覺降格降至最低,該過程以四分之一解析度進行,並進行時間重投影和累積。這意味著雲系統使用來自先前幀的樣本來構建完整的結果。因此,當相機高速移動時,在必須渲染沒有任何歷史記錄的雲的部分時,可能會出現一些重影或重建鬼影。儘管如此,Unity仍然提供了一個非常有效的抗重影解決方案,該解決方案支援快速的相機移動和高風速場景。

使用Unity HDRP建立逼真的體積雲

需要特別注意的是薄的幾何形狀,如樹葉等,不會產生任何明顯的偽像,因為相鄰雲的畫素通常很難分辨。

一天中,諸如日出和日落的這些時間對於塑造雲來說是一個特殊的挑戰,因為景觀和天空之間的曝光差異很大,地球的曲率及其產生的陰影;太陽低垂場景中光散射的複雜性,以及光線傳播的長距離對雲的渲染都是挑戰。

使用Unity HDRP建立逼真的體積雲

當前的限制和未來的改進

像任何系統一樣,體積雲系統需要在一定範圍內表現最佳。目前,Unity針對攝像機位於雲卷下方、內部和略高於雲卷的情況進行了高度最佳化。因此,12公里(40,000英尺)以上的空間和位於極高海拔的場景並不特別適合當前的體積雲系統,因為侵蝕貼面可能會變得非常假,如下圖所示。

使用Unity HDRP建立逼真的體積雲

此外,Unity目前僅支援一個雲卷。這意味著存在於所述體積中的所有云形狀共享相同的噪聲、風向和照明屬性。未來,Unity將考慮支援多個雲卷,以便對使用者希望建立和製作動畫的每一層雲提供更精細的控制。

此外Unity還將增加對準點燈光和向雲投射陰影物件的支援。這對在太空中或飛行模擬器中模擬帶有閃光燈的飛船照射周圍的雲朵時非常有效。同時,區域性體積霧也可以在某些靜態場景中使用。

在視覺質量方面,Unity將考慮支援兩個以上級別的噪聲控制,為高階平臺、互動式幀率和離線應用程式提供更高的畫面質量。

想要了解更多關於Unity的最新訊息與應用案例,請繼續關注我們的賬號。我們會在第一時間快速整理有關Unity的最新動態。歡迎大家關注轉發~