用ShaderGraph實現(xiàn)卡通的沙灘泡沫效果

一個卡通的水

本文用 ShaderGraph 來模仿一下 The Illustrated Nature 插件中水的 泡沫效果,原效果如下:

image

下圖是我用 ShaderGraph 模擬的效果:

image

代碼我丟在了github上,地址:https://github.com/fatdogsp/URP-Simple-Water。

泡沫的實現(xiàn)細節(jié)

The Illustrated Nature 是風格化渲染,水的shader其實還是比較簡單的,并沒有常見的 反射 或者 折射,本文主要記錄一下 泡沫 部分的實現(xiàn)細節(jié)。

這里并不需要任何 泡沫貼圖,只提供了一個 泡沫顏色,而泡沫的形狀主要由如下兩個部分組成:

  • 規(guī)則的邊緣線條
  • 不規(guī)則的噪聲線條

在計算泡沫線條之前,我們首先需要計算出水的深度,因為泡沫只會出現(xiàn)在淺水區(qū)。

深度計算比較常規(guī),代碼如下:

image

這里先計算出水和場景在攝像機空間下的 深度差,用于后續(xù)的泡沫計算。

規(guī)則的邊緣線條

我們可以定一個泡沫出現(xiàn)的最大深度,比如0.3,超出這個深度,泡沫就消失。

此外,在出現(xiàn)泡沫的深度區(qū)間,我們還可以利用 正弦函數 來模擬海浪的效果,代碼如下:

image

動態(tài)效果圖如下:

image

這里區(qū)間轉換節(jié)點 Remap 非常好用,誰用誰知道。

不規(guī)則的噪聲線條

在規(guī)則的泡沫線條上再疊加一層不規(guī)則的噪聲線條,整個泡沫就比較完美了。

這里我參照 The Illustrated Nature 的做法,用2層不同scale的 Simple Noise 相疊加,配合 UV動畫 模擬泡沫的運動,代碼如下:

image

深度比較

在計算線條的時候,我用 step 去做深度比較,這個計算結果非0即1,所以泡沫和非泡沫的邊界是很硬的,這樣符合卡通渲染的特征。

當然,如果需要做邊界過度,我們可以用 smoothstep 替代 step。

泡沫的顏色合成

泡沫的顏色合成就是把上面的兩層泡沫相加,代碼如下:

image

這個很簡單,就不羅嗦了。

水體的其他部分

其他部分都是常規(guī)代碼,水波紋很簡化,有興趣的自己改。

個人主頁

本文的個人主頁鏈接:https://baddogzz.github.io/2020/04/04/ShaderGraph-Foam/。

好了,拜拜!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容