地平线:黎明时分中的云渲染技术
最簡單的辦法是采用raymarching,噪聲可以簡單的采用fbm,但是程序感嚴(yán)重
兩種噪聲疊加,Perlin-Worley noise,連續(xù)感減弱不少
一張基礎(chǔ)的3d紋理,控制大體形狀,一個通道存Perlin - Worley noise,其他三個存不同頻率的Worley noise
一張細(xì)節(jié)3d紋理,不同頻率的Worley noise
一張2d紋理,curl noise,一般用于流體模擬,可以對云進行distort,增加湍流感
在高度上使用紋理控制密度,可以表現(xiàn)層云,積云,積雨云
此外,在高度上整體設(shè)置一個0-1的漸變,因為低空沒云
在云的邊界處減去第二個3d紋理,能夠得到侵蝕效果
小貼士,如果你把基礎(chǔ)云層的Worley noise倒置,會得到一些不錯的形狀。
使用2d紋理去distort第二個3d紋理,可以模擬大氣湍流造成的旋渦扭曲
用一張圖去整體上控制云層,能夠模擬不同天氣下的表現(xiàn),r通道表示密度,g通道表示降雨量,b為云形。天氣系統(tǒng)通過在游戲過程中進行的模擬來調(diào)節(jié)這些通道。積雨云直接在頭頂(白色),遠(yuǎn)處是規(guī)則的積云。我們可以讓藝術(shù)家去控制這些模擬。
默認(rèn)天氣是積云和層云的組合。大部分是層云。
降水量達(dá)到0.7將會產(chǎn)生積云。
使用天氣系統(tǒng)來確保地平線上的云層總是有趣的,并在山上分開。
從15000米的距離開始…在玩家周圍35000米半徑范圍內(nèi)繪制云景
渲染采用Beer’s law
前向散射幾率更大,使用henyey greenstein function來矯正
此外,云層厚的地方in-scattered light更多,導(dǎo)致邊緣會暗一些
加入powder函數(shù),兩個公式疊加去模擬這個效果
注意這個效果和方向光方向及視角方向有關(guān)
在有雨的地方增加光吸收率,來使其變暗
游戲賣號平臺最終公式
地球是圓的,所以遠(yuǎn)處地平線會和云接在一起
1500米到4000米之間是體積云
海拔4000米以上是alto和卷云。上層云不是很厚,可以通過動畫紋理模擬
由于存在基礎(chǔ)噪聲和細(xì)節(jié)噪聲,只有在基礎(chǔ)噪聲返回非0時才需要檢測細(xì)節(jié)噪聲
為了不"錯過",切換到高細(xì)節(jié)樣本之前要向后退一步
當(dāng)?shù)竭_(dá)alpha為1時,也就是到最高點了,停止Raymarching
如果連續(xù)返回非0,切換到基礎(chǔ)噪聲,直到再次返回0
采樣點數(shù)量和視角相關(guān)
注意密度會隨高度衰減,也就是上面提到的0-1漸變
但是這樣還不夠
在朝向光的圓錐上采樣6個點模擬陰影,最后一點距離要遠(yuǎn)一點
為了提高采樣的性能,當(dāng)alpha達(dá)到0.3時,切換到簡單版本的著色器版本進行采樣。這使著色器速度提高了2倍
6點采樣在低空的貢獻大于比爾定律,而隨著高度上升,又會回到標(biāo)準(zhǔn)的體渲染方式
最后一步,采樣最高層的二維紋理
以上是高空云層的幾種形態(tài)
現(xiàn)實中,不同頻率的光線在云中混合,會產(chǎn)生非常美麗的色彩效果。所以我們要根據(jù)以下模型為云上色:
- 環(huán)境光貢獻隨高度增加而增加
- 直接照明將以陽光顏色為主
- 大氣散射會隨高度增加去替代云層顏色
優(yōu)化:每幀渲染1/4
前一幀要reproject,如果是邊緣,無法reproject,則從一個低分辨率buffer上采樣
在half res下渲染,最后upscal
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的地平线:黎明时分中的云渲染技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cocos Creator 3D 材质系
- 下一篇: 游戏中子弹的工作原理