国产成人无码A在线观看不卡,亚洲婷婷五月综合狠狠爱,免费中文熟妇在线影片,456亚洲影院

淺做一個(gè)MetaBall

 

Raymaching其實(shí)就是實(shí)時(shí)場(chǎng)景的一種渲染方法。主要原理網(wǎng)上有很多詳細(xì)介紹。簡(jiǎn)單來說就是,以攝像機(jī)為原點(diǎn),發(fā)射很多條射線,而每一條射線以步長(zhǎng)為單位向前采樣,同時(shí)以采樣點(diǎn)和最近的物體像素的距離為半徑進(jìn)行一個(gè)球形檢測(cè)。檢測(cè)到攝像機(jī)和場(chǎng)景像素在當(dāng)前射線方向的距離差小于某個(gè)值,就表示射線到達(dá)物體表面,然后畫這個(gè)像素。

 

 

圖片來源于以上鏈接視頻

 

 

開始在unreal里面進(jìn)行簡(jiǎn)單的實(shí)現(xiàn)

 

 

首先上才藝

 

 

 

圖片僅供參考,具體以實(shí)物為準(zhǔn)

1. custom節(jié)點(diǎn)算出球體

 

 

先上代碼

 

 

float distance = length(pos-ObjectPosition)-50;

 

 

減去50表示小球的半徑

 

 

 

 

 

 

 

 

 

 

2. 去掉被遮擋的部分

 

 

為了對(duì)算法進(jìn)行優(yōu)化,我們可以去掉球體被遮擋的部分,比如說地面以下的部分。

 

 

判斷場(chǎng)景深度是否小于攝像機(jī)到物體像素的距離,小球處于地面以下后,深度值就會(huì)取平面的深度值,所以如果深度值小于攝像機(jī)到像素距離的話,不進(jìn)行檢測(cè)。

 

 

 

 

3. 添加法線

 

 

求法線就簡(jiǎn)單粗暴的對(duì)檢測(cè)結(jié)果求一個(gè)梯度變化,設(shè)定一個(gè)值,求在這個(gè)值前后的檢測(cè)結(jié)果的插值。最后把normal的信息也輸出出來。具體結(jié)果如下

 

 

 

 

 

 

 

 

注意材質(zhì)球的normal要取消勾選targent space normal,因?yàn)樗愠鰜淼氖且粋€(gè)世界法線

 

 

 

 

 

 

 

 

 

 

4. 跟地面的融合效果

 

主要就是一個(gè)分段函數(shù),d1是檢測(cè)出來的小球,d2是與其相交的一個(gè)物體的距離場(chǎng),k表示兩個(gè)相交的物體在相交那部分的一個(gè)過渡值,即達(dá)到這個(gè)值開始相交。

 

 

所以d1 = RM.RMSphere(pos-ObjectPosition);

 

 

而d2,這里用深度代替距離場(chǎng),就等于射線方向上那個(gè)物體對(duì)應(yīng)的場(chǎng)景深度減去攝像機(jī)到小球像素的距離

 

 

float d2 = SceneDepth - length(pos - CameraPosition);

 

 

這里混合d1和d2用lerp。

 

 

 

 

 

 

 

 

最終效果

 

 

 

 

 

 

調(diào)整采樣步數(shù)等可以解決邊緣鋸齒,但是性能計(jì)算會(huì)更大,目前還沒有找到一個(gè)更好的解決辦法。

以上就是影晨文化對(duì)淺做一個(gè)MetaBall的簡(jiǎn)單介紹,記得持續(xù)關(guān)注我們哦,如有不足之處,希望大家可以一起交流學(xué)習(xí),一起變得更強(qiáng)!如果有廣州三維動(dòng)畫制作的需求,可以隨時(shí)找到影晨文化哦!


標(biāo)簽為:
?