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