地平線:黎明時分中的雲渲染技術

遊資網發表於2019-12-30
地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

最簡單的辦法是採用raymarching,噪聲可以簡單的採用fbm,但是程式感嚴重

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

兩種噪聲疊加,Perlin-Worley noise,連續感減弱不少

地平線:黎明時分中的雲渲染技術

一張基礎的3d紋理,控制大體形狀,一個通道存Perlin - Worley noise,其他三個存不同頻率的Worley noise

地平線:黎明時分中的雲渲染技術

一張細節3d紋理,不同頻率的Worley noise

地平線:黎明時分中的雲渲染技術

一張2d紋理,curl noise,一般用於流體模擬,可以對雲進行distort,增加湍流感

地平線:黎明時分中的雲渲染技術

在高度上使用紋理控制密度,可以表現層雲,積雲,積雨雲

此外,在高度上整體設定一個0-1的漸變,因為低空沒雲

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

在雲的邊界處減去第二個3d紋理,能夠得到侵蝕效果

小貼士,如果你把基礎雲層的Worley noise倒置,會得到一些不錯的形狀。

使用2d紋理去distort第二個3d紋理,可以模擬大氣湍流造成的旋渦扭曲

地平線:黎明時分中的雲渲染技術

用一張圖去整體上控制雲層,能夠模擬不同天氣下的表現,r通道表示密度,g通道表示降雨量,b為雲形。天氣系統通過在遊戲過程中進行的模擬來調節這些通道。積雨雲直接在頭頂(白色),遠處是規則的積雲。我們可以讓藝術家去控制這些模擬。

地平線:黎明時分中的雲渲染技術

預設天氣是積雲和層雲的組合。大部分是層雲。

降水量達到0.7將會產生積雲。

地平線:黎明時分中的雲渲染技術

使用天氣系統來確保地平線上的雲層總是有趣的,並在山上分開。

從15000米的距離開始…在玩家周圍35000米半徑範圍內繪製雲景

地平線:黎明時分中的雲渲染技術

渲染採用Beer’s law

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

前向散射機率更大,使用henyey greenstein function來矯正

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

此外,雲層厚的地方in-scattered light更多,導致邊緣會暗一些

地平線:黎明時分中的雲渲染技術

加入powder函式,兩個公式疊加去模擬這個效果

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

注意這個效果和方向光方向及視角方向有關

地平線:黎明時分中的雲渲染技術

在有雨的地方增加光吸收率,來使其變暗

地平線:黎明時分中的雲渲染技術

最終公式

地平線:黎明時分中的雲渲染技術

地平線:黎明時分中的雲渲染技術

地球是圓的,所以遠處地平線會和雲接在一起

地平線:黎明時分中的雲渲染技術

1500米到4000米之間是體積雲

海拔4000米以上是alto和捲雲。上層雲不是很厚,可以通過動畫紋理模擬
地平線:黎明時分中的雲渲染技術

由於存在基礎噪聲和細節噪聲,只有在基礎噪聲返回非0時才需要檢測細節噪聲

地平線:黎明時分中的雲渲染技術

為了不"錯過",切換到高細節樣本之前要向後退一步

地平線:黎明時分中的雲渲染技術

當到達alpha為1時,也就是到最高點了,停止Raymarching

地平線:黎明時分中的雲渲染技術

如果連續返回非0,切換到基礎噪聲,直到再次返回0

地平線:黎明時分中的雲渲染技術

取樣點數量和視角相關

注意密度會隨高度衰減,也就是上面提到的0-1漸變

但是這樣還不夠
地平線:黎明時分中的雲渲染技術

在朝向光的圓錐上取樣6個點模擬陰影,最後一點距離要遠一點

為了提高取樣的效能,當alpha達到0.3時,切換到簡單版本的著色器版本進行取樣。這使著色器速度提高了2倍

6點取樣在低空的貢獻大於比爾定律,而隨著高度上升,又會回到標準的體渲染方式

地平線:黎明時分中的雲渲染技術

最後一步,取樣最高層的二維紋理

地平線:黎明時分中的雲渲染技術

以上是高空雲層的幾種形態

地平線:黎明時分中的雲渲染技術

現實中,不同頻率的光線在雲中混合,會產生非常美麗的色彩效果。所以我們要根據以下模型為雲上色:

  • 環境光貢獻隨高度增加而增加
  • 直接照明將以陽光顏色為主
  • 大氣散射會隨高度增加去替代雲層顏色

地平線:黎明時分中的雲渲染技術

優化:每幀渲染1/4

前一幀要reproject,如果是邊緣,無法reproject,則從一個低解析度buffer上取樣

地平線:黎明時分中的雲渲染技術

在half res下渲染,最後upscal

相關閱讀:

作者:風和雨林

相關文章