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

indienova 發佈 2020-08-07T07:44:49+00:00

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

靈感

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

不使用 Mask Map

使用 Mask Map

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

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

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

實現思路

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

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

整體(糊也沒事..大部分是官方給的,用於實現 Lit 的特性,核心就那上面的一小點)

核心效果實現(就這幾個節點..真的挺簡陋的..)

效果

磚牆材質

石碑(?) 材質

模型效果

一些個人感受:

  • 這是個很粗糙的效果,用到的節點也很少,之後要實際應用的話肯定要補充很多細節,比如單獨做水流的 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.htmlMask Map 文檔

  • https://github.com/OnyxAmber/UnityHDRP_ShaderGraphTest把著色器圖與材質傳到 Github 上了,項目太大就不傳了,直接拖入 Unity 窗口即可。使用貼圖也是 HDRP 自帶的示例。

關鍵字: