Shader "Shader Forge/FlagFlying" {
Properties {
_MainTex ("MainTex", 2D) = "white" {}
_Amplitude ("Amplitude", Float ) = 0.1
_Frequency("Frequency",Float)=1
_WaveLength("WaveLength",Float)=1
_Power("Power",Float)=1
}
SubShader {
Tags {
"IgnoreProjector"="True"
"Queue"="Transparent"
"RenderType"="Transparent"
}
Pass {
Name "FORWARD"
Tags {
"LightMode"="ForwardBase"
}
Blend SrcAlpha OneMinusSrcAlpha
ZWrite On
Cull Off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#pragma target 3.0
uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
float _Amplitude;
float _Frequency;
float _WaveLength;
float _Power;
struct VertexInput {
float4 vertex : POSITION;
float2 texcoord0 : TEXCOORD0;
};
struct VertexOutput {
float4 pos : SV_POSITION;
float2 uv0 : TEXCOORD0;
float4 posWorld : TEXCOORD1;
};
VertexOutput vert (VertexInput v) {
VertexOutput o = (VertexOutput)0;
o.uv0 = v.texcoord0;
float4 Time = _Time;
float VertexMove_Var01 = (sin((mul(unity_ObjectToWorld*_WaveLength,v.vertex).b+mul(unity_ObjectToWorld*_WaveLength,v.vertex).r
+Time.g*_Frequency))*_Amplitude);
v.vertex.xyz += float3(0,VertexMove_Var01,0)*pow(o.uv0.g,exp(_Power));
o.posWorld = mul(unity_ObjectToWorld, v.vertex);
o.pos = UnityObjectToClipPos( v.vertex );
return o;
}
float4 frag(VertexOutput i) : COLOR {
// Lighting:
// Emissive:
float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
float3 emissive = _MainTex_var.rgb;
float3 finalColor = emissive;
fixed4 finalRGBA = fixed4(finalColor,1);
UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
return finalRGBA;
}
ENDCG
}
}
CustomEditor "ShaderForgeMaterialInspector"
}
效果如下: