AmplifyShader 2D Water Reflection Shader

UV Distortion, UV 扭曲,跟先前寫的 DissolveUV Flow  類似,都是對 UV 操作的應用,這邊是利用 UV 扭曲來模擬假的2D水面,下面算簡單的效果。

* 首先看一下最終的成像:

 

* 分析成像的組成:

        1. 渲染一張圖,將圖垂直翻轉 ( 單純貼圖或是 RenderTexture )
        2. 支援染色與半透明
        3. 最重要的 UV 扭曲 ( Distortion UV )

* 1. 渲染一張圖,透過 Tiling/Offset 將圖垂直翻轉

         為了可以操控 Inspector 面板上 Material 的 Tiling/Offset,使用 Texture Transform 參照到 Texture Sample 1,然後
         設定到 Texture Coordinates,再將其設定到 Texture Sample1 的 UV 上,如下圖
        

* 2. 支援染色與半透明

         染色其實很簡單,就是將貼圖與一個顏色相乘,不過要注意,若是要 Unlit 支援半透明,記得在 SubShader 那邊要將  
         Blend Mode 的 Blend RBG 設定為 Alpha Blend

* 3. 最重要的UV扭曲( Distortion UV )

          -- 補充: UV 移動,其實就是當 Texture 設定為 Repeat 時,對 UV 做加減,下圖是對 U 做一個 Time 的相加,Time 是一個一直增大的數值

          -- 補充:  UV 扭曲,其實是利用 Noise 貼圖上 R/G/B 任一通道的數值去對 UV 做疊加,需注意的是要將取得的數值經過 Remap 映射到一個較小的範圍

          -- UV隨時間扭曲 = UV 移動 + UV 扭曲
         當 Time + Noise 數值會是一個持續增大的數值,看下圖 Add 處是白色 (大於1),這數值無法直接拿來與 UV 相加,也無法使用,所以它其實是拿來當另一張 Noise 圖的 UV 數值,這時候就會得到一個灰階的擾動圖,將這個數值重新 Remap一次後,就可以拿來跟原 UV 做疊加
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
         這個效果單看串的結果不難,但要去理解 UV 數值的應用,需要更多經驗累積就會有更深的體會....有種跟 UV 當朋友,但是很慢熟的那種 FU....XD

留言

這個網誌中的熱門文章

UE4: Spine2D 導入與基本使用