欧美bestiality变态人禽交,日韩综合夜夜香内射,暗交小拗女一区二区三区,国产永久精品大片WWWAPP

淺做一個MetaBall

 

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

 

 

圖片來源于以上鏈接視頻

 

 

開始在unreal里面進行簡單的實現(xiàn)

 

 

首先上才藝

 

 

 

圖片僅供參考,具體以實物為準

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

 

 

先上代碼

 

 

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

 

 

減去50表示小球的半徑

 

 

 

 

 

 

 

 

 

 

2. 去掉被遮擋的部分

 

 

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

 

 

判斷場景深度是否小于攝像機到物體像素的距離,小球處于地面以下后,深度值就會取平面的深度值,所以如果深度值小于攝像機到像素距離的話,不進行檢測。

 

 

 

 

3. 添加法線

 

 

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

 

 

 

 

 

 

 

 

注意材質(zhì)球的normal要取消勾選targent space normal,因為算出來的是一個世界法線

 

 

 

 

 

 

 

 

 

 

4. 跟地面的融合效果

 

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

 

 

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

 

 

而d2,這里用深度代替距離場,就等于射線方向上那個物體對應的場景深度減去攝像機到小球像素的距離

 

 

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

 

 

這里混合d1和d2用lerp。

 

 

 

 

 

 

 

 

最終效果

 

 

 

 

 

 

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

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


標簽為:
?