Shader "Hidden/TerrainEngine/Details/UniversalPipeline/WavingDoublePass" {
	Properties {
		_WavingTint ("Fade Color", Color) = (0.7,0.6,0.5,0)
		_MainTex ("Base (RGB) Alpha (A)", 2D) = "white" {}
		_WaveAndDistance ("Wave and distance", Vector) = (12,3.6,1,1)
		_Cutoff ("Cutoff", Float) = 0.5
	}
	SubShader {
		LOD 200
		Tags { "IGNOREPROJECTOR" = "true" "QUEUE" = "Geometry+200" "RenderPipeline" = "UniversalPipeline" "RenderType" = "Grass" }
		Pass {
			LOD 200
			Tags { "IGNOREPROJECTOR" = "true" "QUEUE" = "Geometry+200" "RenderPipeline" = "UniversalPipeline" "RenderType" = "Grass" }
			ColorMask RGB
			Cull Off
			GpuProgramID 23508
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"
			struct v2f
			{
				float2 texcoord : TEXCOORD0;
				float3 texcoord1 : TEXCOORD1;
				float4 texcoord2 : TEXCOORD2;
				float3 texcoord3 : TEXCOORD3;
				float3 texcoord4 : TEXCOORD4;
				float4 texcoord5 : TEXCOORD5;
				float4 texcoord7 : TEXCOORD7;
				float4 position : SV_POSITION0;
			};
			struct fout
			{
				float4 sv_target : SV_Target0;
			};
			// $Globals ConstantBuffers for Vertex Shader
			// $Globals ConstantBuffers for Fragment Shader
			float4 _MainLightPosition;
			float4 _MainLightColor;
			// Custom ConstantBuffers for Vertex Shader
			CBUFFER_START(TerrainGrass)
				float4 _WavingTint;
				float4 _WaveAndDistance;
				float4 _CameraPosition;
			CBUFFER_END
			// Custom ConstantBuffers for Fragment Shader
			CBUFFER_START(UnityPerMaterial)
				float _Cutoff;
			CBUFFER_END
			// Texture params for Vertex Shader
			// Texture params for Fragment Shader
			sampler2D _MainTex;
			
			// Keywords: 
			v2f vert(appdata_full v)
			{
                v2f o;
                float4 tmp0;
                float4 tmp1;
                float4 tmp2;
                float4 tmp3;
                o.texcoord.xy = v.texcoord.xy;
                tmp0.x = dot(v.normal.xyz, unity_WorldToObject._m00_m10_m20);
                tmp0.y = dot(v.normal.xyz, unity_WorldToObject._m01_m11_m21);
                tmp0.z = dot(v.normal.xyz, unity_WorldToObject._m02_m12_m22);
                tmp0.w = dot(tmp0.xyz, tmp0.xyz);
                tmp0.w = max(tmp0.w, 0.0);
                tmp0.w = rsqrt(tmp0.w);
                tmp0.xyz = tmp0.www * tmp0.xyz;
                tmp1.x = tmp0.y * tmp0.y;
                tmp1.x = tmp0.x * tmp0.x + -tmp1.x;
                tmp2 = tmp0.yzzx * tmp0.xyzz;
                tmp3.x = dot(unity_SHBr, tmp2);
                tmp3.y = dot(unity_SHBg, tmp2);
                tmp3.z = dot(unity_SHBb, tmp2);
                tmp1.xyz = unity_SHC.xyz * tmp1.xxx + tmp3.xyz;
                tmp0.w = 1.0;
                tmp2.x = dot(unity_SHAr, tmp0);
                tmp2.y = dot(unity_SHAg, tmp0);
                tmp2.z = dot(unity_SHAb, tmp0);
                o.texcoord3.xyz = tmp0.xyz;
                tmp0.xyz = tmp1.xyz + tmp2.xyz;
                o.texcoord1.xyz = max(tmp0.xyz, float3(0.0, 0.0, 0.0));
                tmp0 = _WaveAndDistance * float4(0.006, 0.02, 0.02, 0.05);
                tmp0 = tmp0 * v.vertex.zzzz;
                tmp1 = _WaveAndDistance * float4(0.012, 0.02, 0.06, 0.024);
                tmp0 = v.vertex.xxxx * tmp1 + tmp0;
                tmp0 = _WaveAndDistance * float4(1.2, 2.0, 1.6, 4.8) + tmp0;
                tmp0 = frac(tmp0);
                tmp0 = tmp0 * float4(6.408849, 6.408849, 6.408849, 6.408849) + float4(-3.141593, -3.141593, -3.141593, -3.141593);
                tmp1 = tmp0 * tmp0;
                tmp2 = tmp0 * tmp1;
                tmp0 = tmp2 * float4(-0.1616162, -0.1616162, -0.1616162, -0.1616162) + tmp0;
                tmp2 = tmp1 * tmp2;
                tmp1 = tmp1 * tmp2;
                tmp0 = tmp2 * float4(0.0083333, 0.0083333, 0.0083333, 0.0083333) + tmp0;
                tmp0 = tmp1 * float4(-0.0001984, -0.0001984, -0.0001984, -0.0001984) + tmp0;
                tmp0 = tmp0 * tmp0;
                tmp0 = tmp0 * tmp0;
                tmp1.x = v.color.w * _WaveAndDistance.z;
                tmp1 = tmp0 * tmp1.xxxx;
                tmp0.x = dot(tmp0, float4(0.6741999, 0.6741999, 0.2696799, 0.13484));
                tmp0.x = tmp0.x * 0.7;
                tmp2.x = dot(tmp1, float4(0.024, 0.04, -0.12, 0.096));
                tmp2.z = dot(tmp1, float4(0.006, 0.02, -0.02, 0.1));
                tmp1.xz = -tmp2.xz * _WaveAndDistance.zz + v.vertex.xz;
                tmp0.yzw = v.vertex.yyy * unity_ObjectToWorld._m01_m11_m21;
                tmp0.yzw = unity_ObjectToWorld._m00_m10_m20 * tmp1.xxx + tmp0.yzw;
                tmp0.yzw = unity_ObjectToWorld._m02_m12_m22 * tmp1.zzz + tmp0.yzw;
                tmp0.yzw = tmp0.yzw + unity_ObjectToWorld._m03_m13_m23;
                o.texcoord2.xyz = tmp0.yzw;
                o.texcoord2.w = 32.0;
                tmp2.xyz = _WorldSpaceCameraPos - tmp0.yzw;
                tmp1.w = dot(tmp2.xyz, tmp2.xyz);
                tmp1.w = max(tmp1.w, 0.0);
                tmp1.w = rsqrt(tmp1.w);
                o.texcoord4.xyz = tmp1.www * tmp2.xyz;
                o.texcoord5 = float4(0.0, 0.0, 0.0, 0.0);
                tmp1.y = v.vertex.y;
                tmp1.xyz = tmp1.xyz - _CameraPosition.xyz;
                tmp1.x = dot(tmp1.xyz, tmp1.xyz);
                tmp1.x = _WaveAndDistance.w - tmp1.x;
                tmp1.x = tmp1.x + tmp1.x;
                o.texcoord7.w = saturate(tmp1.x * _CameraPosition.w);
                tmp1.xyz = _WavingTint.xyz - float3(0.5, 0.5, 0.5);
                tmp1.xyz = tmp0.xxx * tmp1.xyz + float3(0.5, 0.5, 0.5);
                tmp1.xyz = tmp1.xyz * v.color.xyz;
                o.texcoord7.xyz = tmp1.xyz + tmp1.xyz;
                tmp1 = tmp0.zzzz * unity_MatrixVP._m01_m11_m21_m31;
                tmp1 = unity_MatrixVP._m00_m10_m20_m30 * tmp0.yyyy + tmp1;
                tmp0 = unity_MatrixVP._m02_m12_m22_m32 * tmp0.wwww + tmp1;
                o.position = tmp0 + unity_MatrixVP._m03_m13_m23_m33;
                return o;
			}
			// Keywords: 
			fout frag(v2f inp)
			{
                fout o;
                float4 tmp0;
                float4 tmp1;
                tmp0 = tex2D(_MainTex, inp.texcoord.xy);
                tmp1.x = tmp0.w - _Cutoff;
                tmp1.x = tmp1.x < 0.0;
                if (tmp1.x) {
                    discard;
                }
                tmp1.x = dot(inp.texcoord3.xyz, inp.texcoord3.xyz);
                tmp1.x = rsqrt(tmp1.x);
                tmp1.xyz = tmp1.xxx * inp.texcoord3.xyz;
                tmp1.x = saturate(dot(tmp1.xyz, _MainLightPosition.xyz));
                tmp1.yzw = _MainLightColor.xyz * unity_LightData.zzz;
                tmp1.xyz = tmp1.yzw * tmp1.xxx + inp.texcoord1.xyz;
                tmp0.xyz = tmp0.xyz * inp.texcoord7.xyz;
                o.sv_target.w = tmp0.w * inp.texcoord7.w;
                o.sv_target.xyz = tmp0.xyz * tmp1.xyz;
                return o;
			}
			ENDCG
		}
		Pass {
			LOD 200
			Tags { "IGNOREPROJECTOR" = "true" "LIGHTMODE" = "DepthOnly" "QUEUE" = "Geometry+200" "RenderPipeline" = "UniversalPipeline" "RenderType" = "Grass" }
			ColorMask 0
			Cull Off
			GpuProgramID 66403
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"
			struct v2f
			{
				float2 texcoord : TEXCOORD0;
				float4 texcoord1 : TEXCOORD1;
				float4 position : SV_POSITION0;
			};
			struct fout
			{
				float4 sv_target : SV_TARGET0;
			};
			// $Globals ConstantBuffers for Vertex Shader
			// $Globals ConstantBuffers for Fragment Shader
			// Custom ConstantBuffers for Vertex Shader
			CBUFFER_START(UnityPerMaterial)
				float4 _MainTex_ST;
			CBUFFER_END
			CBUFFER_START(TerrainGrass)
				float4 _WavingTint;
				float4 _WaveAndDistance;
				float4 _CameraPosition;
			CBUFFER_END
			// Custom ConstantBuffers for Fragment Shader
			CBUFFER_START(UnityPerMaterial)
				float _Cutoff;
			CBUFFER_END
			// Texture params for Vertex Shader
			// Texture params for Fragment Shader
			sampler2D _MainTex;
			
			// Keywords: 
			v2f vert(appdata_full v)
			{
                v2f o;
                float4 tmp0;
                float4 tmp1;
                float4 tmp2;
                o.texcoord.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw;
                tmp0 = _WaveAndDistance * float4(0.006, 0.02, 0.02, 0.05);
                tmp0 = tmp0 * v.vertex.zzzz;
                tmp1 = _WaveAndDistance * float4(0.012, 0.02, 0.06, 0.024);
                tmp0 = v.vertex.xxxx * tmp1 + tmp0;
                tmp0 = _WaveAndDistance * float4(1.2, 2.0, 1.6, 4.8) + tmp0;
                tmp0 = frac(tmp0);
                tmp0 = tmp0 * float4(6.408849, 6.408849, 6.408849, 6.408849) + float4(-3.141593, -3.141593, -3.141593, -3.141593);
                tmp1 = tmp0 * tmp0;
                tmp2 = tmp0 * tmp1;
                tmp0 = tmp2 * float4(-0.1616162, -0.1616162, -0.1616162, -0.1616162) + tmp0;
                tmp2 = tmp1 * tmp2;
                tmp1 = tmp1 * tmp2;
                tmp0 = tmp2 * float4(0.0083333, 0.0083333, 0.0083333, 0.0083333) + tmp0;
                tmp0 = tmp1 * float4(-0.0001984, -0.0001984, -0.0001984, -0.0001984) + tmp0;
                tmp0 = tmp0 * tmp0;
                tmp0 = tmp0 * tmp0;
                tmp1.x = dot(tmp0, float4(0.6741999, 0.6741999, 0.2696799, 0.13484));
                tmp1.x = tmp1.x * 0.7;
                tmp1.yzw = _WavingTint.xyz - float3(0.5, 0.5, 0.5);
                tmp1.xyz = tmp1.xxx * tmp1.yzw + float3(0.5, 0.5, 0.5);
                tmp1.xyz = tmp1.xyz * v.color.xyz;
                o.texcoord1.xyz = tmp1.xyz + tmp1.xyz;
                tmp1.x = v.color.w * _WaveAndDistance.z;
                tmp0 = tmp0 * tmp1.xxxx;
                tmp1.x = dot(tmp0, float4(0.024, 0.04, -0.12, 0.096));
                tmp1.z = dot(tmp0, float4(0.006, 0.02, -0.02, 0.1));
                tmp0.xz = -tmp1.xz * _WaveAndDistance.zz + v.vertex.xz;
                tmp0.y = v.vertex.y;
                tmp1.xyz = tmp0.xyz - _CameraPosition.xyz;
                tmp0.y = dot(tmp1.xyz, tmp1.xyz);
                tmp0.y = _WaveAndDistance.w - tmp0.y;
                tmp0.y = tmp0.y + tmp0.y;
                o.texcoord1.w = saturate(tmp0.y * _CameraPosition.w);
                tmp1 = v.vertex.yyyy * unity_ObjectToWorld._m01_m11_m21_m31;
                tmp1 = unity_ObjectToWorld._m00_m10_m20_m30 * tmp0.xxxx + tmp1;
                tmp0 = unity_ObjectToWorld._m02_m12_m22_m32 * tmp0.zzzz + tmp1;
                tmp0 = tmp0 + unity_ObjectToWorld._m03_m13_m23_m33;
                tmp1 = tmp0.yyyy * unity_MatrixVP._m01_m11_m21_m31;
                tmp1 = unity_MatrixVP._m00_m10_m20_m30 * tmp0.xxxx + tmp1;
                tmp1 = unity_MatrixVP._m02_m12_m22_m32 * tmp0.zzzz + tmp1;
                o.position = unity_MatrixVP._m03_m13_m23_m33 * tmp0.wwww + tmp1;
                return o;
			}
			// Keywords: 
			fout frag(v2f inp)
			{
                fout o;
                float4 tmp0;
                tmp0 = tex2D(_MainTex, inp.texcoord.xy);
                tmp0.x = tmp0.w * inp.texcoord1.w + -_Cutoff;
                tmp0.x = tmp0.x < 0.0;
                if (tmp0.x) {
                    discard;
                }
                o.sv_target = float4(0.0, 0.0, 0.0, 0.0);
                return o;
			}
			ENDCG
		}
	}
}