UnityShader—使用shader完成一個水面波動的效果

Shader "Custom/SinShader"  
{  
    Properties  
    {  
        _MainTex ("Texture", 2D) = "white" {}  
    }  
    SubShader  
    {  
        Tags { "RenderType"="Opaque" }  
        LOD 100  
  
        Pass  
        {  
            CGPROGRAM  
            #pragma vertex vert  
            #pragma fragment frag  
            #include "UnityCG.cginc"  
              
            // make fog work  
            #pragma multi_compile_fog  
            #include "UnityCG.cginc"  
  
           // 該結構體爲傳遞給頂點shader所需的信息
            struct appdata  
            {  
                // 綁定什麼語義,就會把什麼上一個頂點的什麼屬性傳過來   
                float4 vertex : POSITION;  
                float2 uv : TEXCOORD0;  
            };  
             // 該結構體爲傳遞給片元shader所需的信息
            struct v2f  
            {  
                float2 uv : TEXCOORD0;  
                float4 vertex : POSITION ;  
            };  
  
            sampler2D _MainTex;  
            float4 _MainTex_ST;  
              
  
            v2f vert (appdata v)  
            {  
                v2f o;  
                // 計算當前的點和原點的距離
                float dist = distance(v.vertex.xyz, float3(0,0,0));   
                // 根據當前的點,加時間延時,作爲一個符合sin變化的參數,將該值作爲起伏的高度
                float height = sin(dist * 2 + _Time.z); 
                 // 把當前的點變換到世界座標中 
                o.vertex = mul(unity_ObjectToWorld, v.vertex);  
               // 更改世界座標中的y值,也就是高度值
                o.vertex.y = height;  
               // 將頂點的座標返回到局部座標
                o.vertex = mul(unity_WorldToObject,o.vertex);  
                // 將局部座標設置乘以MVP矩陣
                o.vertex = UnityObjectToClipPos(o.vertex);  
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);  
  
                return o;  
            }  
  
            fixed4 frag (v2f i) : SV_Target  
            {  
                // sample the texture  
                fixed4 col = tex2D(_MainTex, i.uv);  
                return col;  
            }  
            ENDCG  
        }  
    }  
}  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章