Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果

Onyx發表於2020-08-06
靈感

在玩 HDRP 的內建 Lit 著色器的時候,對它的 Mask Map 貼圖很感興趣,感覺似乎能夠為材質新增很多細節

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
不使用 Mask Map

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
使用 Mask Map

查了下文件,發現 Mask Map 是分 RGBA 通道作為灰度蒙版,為材質新增金屬度、環境光遮蔽、細節貼圖蒙版與粗糙度效果的:

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果

讓我最感興趣的是 A 通道的粗糙度蒙版,就像上圖那樣,能營造出非常類似物體表面的水霧的感覺。

恩..如果我用 Shader 讓這個 A 通道做一個平移,再加點噪聲,說不定就能做出來類似下雨時物體表面潺潺流水的效果?

實現思路

使用 ShaderGraph 的 Time 與 Tilling and Offset 節點將 UV 做一個平移,加上線性噪聲節點做一些扭曲,新增一點隨機性。最後直接複用原材質的 Mask Map 的 A 通道並應用擾動。用一個布林來控制是否應用效果。新增各種屬性值就不說了。應該還不錯。

在實現過程中,由於 HDRP 的內建 Lit 著色器沒有 ShaderGraph 版本,就從論壇上找了一個官方的 Lit 著色器的 ShaderGraph 版本,基於它進行修改。

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
整體(糊也沒事..大部分是官方給的,用於實現 Lit 的特性,核心就那上面的一小點)

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
核心效果實現(就這幾個節點..真的挺簡陋的..)

效果

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
磚牆材質

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
石碑(?) 材質

Unity 高清渲染管線 ShaderGraph 實現簡單的表面水流效果
模型效果

一些個人感受:

這是個很粗糙的效果,用到的節點也很少,之後要實際應用的話肯定要補充很多細節,比如單獨做水流的 Mask 應該會好很多

個人認為的效果優缺點:

優點:

  • 和網上其他的雨水效果比起來,對效能影響應該蠻低的。加上天氣效果以及一些點綴應該也能實現不錯的效果
  • 簡單啊(連我都能做出來..),直接複用材質自己的 Mask Map 也懶省事了
  • 因為不同材質的 Mask Map 不同,所以這個效果也會帶有各自材質的特點,不會說效果千篇一律看著疲勞

缺點:

  • 對於較為光滑的平面類物體感覺效果比較一般
  • 因為複用了原材質的 Mask Map,應用效果時材質自身的粗糙度會丟失,不太好
  • 可遠觀而不可褻玩(bushi),在遠處看起來還不錯,如果離得太近的話就能比較明顯的看出來違和的平移與噪聲

總之還是個很粗糙的效果,不過這種思路應該還是有點意思的,必能活用於下一次..

參考連結

https://forum.unity.com/threads/trying-to-replicate-the-hdrp-lit-shader-i-need-help-with-the-detail-input-part.660538/
Unity Forum-ShaderGraph 版 Lit 原貼
https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@7.1/manual/Mask-Map-and-Detail-Map.html
Mask Map 文件
https://github.com/OnyxAmber/UnityHDRP_ShaderGraphTest

把著色器圖與材質傳到 Github 上了,專案太大就不傳了,直接拖入 Unity 視窗即可。使用貼圖也是 HDRP 自帶的示例。


來源:indienova
原文:https://indienova.com/indie-game-development/unity-hdrp-shader-graph-surface-water/

相關文章