一個卡通的水
本文用 ShaderGraph 來模仿一下 The Illustrated Nature 插件中水的 泡沫效果,原效果如下:
下圖是我用 ShaderGraph 模擬的效果:
代碼我丟在了github上限次,地址:https://github.com/fatdogsp/URP-Simple-Water芒涡。
泡沫的實現(xiàn)細(xì)節(jié)
The Illustrated Nature 是風(fēng)格化渲染,水的shader其實還是比較簡單的卖漫,并沒有常見的 反射 或者 折射费尽,本文主要記錄一下 泡沫 部分的實現(xiàn)細(xì)節(jié)。
這里并不需要任何 泡沫貼圖羊始,只提供了一個 泡沫顏色旱幼,而泡沫的形狀主要由如下兩個部分組成:
- 規(guī)則的邊緣線條
- 不規(guī)則的噪聲線條
在計算泡沫線條之前,我們首先需要計算出水的深度突委,因為泡沫只會出現(xiàn)在淺水區(qū)柏卤。
深度計算比較常規(guī),代碼如下:
這里先計算出水和場景在攝像機空間下的 深度差匀油,用于后續(xù)的泡沫計算缘缚。
規(guī)則的邊緣線條
我們可以定一個泡沫出現(xiàn)的最大深度,比如0.3钧唐,超出這個深度忙灼,泡沫就消失。
此外,在出現(xiàn)泡沫的深度區(qū)間该园,我們還可以利用 正弦函數(shù) 來模擬海浪的效果酸舍,代碼如下:
動態(tài)效果圖如下:
這里區(qū)間轉(zhuǎn)換節(jié)點 Remap 非常好用,誰用誰知道里初。
不規(guī)則的噪聲線條
在規(guī)則的泡沫線條上再疊加一層不規(guī)則的噪聲線條啃勉,整個泡沫就比較完美了。
這里我參照 The Illustrated Nature 的做法双妨,用2層不同scale的 Simple Noise 相疊加淮阐,配合 UV動畫 模擬泡沫的運動,代碼如下:
深度比較
在計算線條的時候刁品,我用 step 去做深度比較泣特,這個計算結(jié)果非0即1,所以泡沫和非泡沫的邊界是很硬的挑随,這樣符合卡通渲染的特征状您。
當(dāng)然,如果需要做邊界過度兜挨,我們可以用 smoothstep 替代 step膏孟。
泡沫的顏色合成
泡沫的顏色合成就是把上面的兩層泡沫相加,代碼如下:
這個很簡單拌汇,就不羅嗦了柒桑。
水體的其他部分
其他部分都是常規(guī)代碼,水波紋很簡化噪舀,有興趣的自己改魁淳。
個人主頁
本文的個人主頁鏈接:https://baddogzz.github.io/2020/04/04/ShaderGraph-Foam/。
好了傅联,拜拜先改!