Shader2.0-頂點著色器應用:波浪的實現
阿新 • • 發佈:2018-11-15
Shader中波浪的實現主要在於根據時間改變頂點著色器的頂點資訊,根據三角函式t=asin(bx+c)即可實現,具體見程式碼:
Shader "Hidden/TestStruct" { Properties { _MainTex ("Texture", 2D) = "white" {} _Range("WaveNumber",float)=1 _Frency("Frency",float)=0.5 _Speed("Speed",float)=1 } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; float _Range;//引用property中的變數,Shader2.0中,凡是要用到Propertiy中的變數,都要新增引用 float _Frency; float _Speed; v2f vert (appdata v) { v2f o; float timer = _Speed*_Time.y;//定義計時器 float wave = _Range * sin(timer + v.vertex.x*_Frency);//根據三角函式算出頂點的y軸位置 v.vertex.y = v.vertex.y+wave;//把計算的值賦值給頂點著色器的y o.vertex = UnityObjectToClipPos(v.vertex);//轉換到世界座標系,所有在Shader2.0中的操作最後都要轉換到世界座標系 o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // just invert the colors //col.rgb = 1 - col.rgb; return col; } ENDCG } } }