// Unlit alpha-cutout billboard shader. // - no lighting // - no lightmap support Shader "MTE/Grass/UnlitBillboard" { Properties { _MainTex("Grass Texture", 2D) = "white" {} _Cutoff("Alpha cutoff", Range(0,1)) = 0.5 } SubShader { Tags { "Queue" = "AlphaTest" "IgnoreProjector" = "True" "DisableBatching" = "True" "RenderType" = "TransparentCutout" } Lighting Off Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag uniform sampler2D _MainTex; uniform float _Cutoff; struct vertexInput { float4 vertex : POSITION; float4 tex : TEXCOORD0; }; struct vertexOutput { float4 pos : SV_POSITION; float4 tex : TEXCOORD0; }; #if !defined(UnityObjectToViewPos) // Tranforms position from object to camera space inline float3 UnityObjectToViewPos( in float3 pos ) { return mul(UNITY_MATRIX_V, mul(unity_ObjectToWorld, float4(pos, 1.0))).xyz; } inline float3 UnityObjectToViewPos(float4 pos) // overload for float4; avoids "implicit truncation" warning for existing shaders { return UnityObjectToViewPos(pos.xyz); } #endif vertexOutput vert(vertexInput input) { vertexOutput output; output.pos = mul(UNITY_MATRIX_P, float4(UnityObjectToViewPos(float3(0.0, 0.0, 0.0)), 1.0) + float4(input.vertex.x, input.vertex.y, 0.0, 0.0)); output.tex = input.tex; return output; } float4 frag(vertexOutput input) : COLOR { float4 c = tex2D(_MainTex, float2(input.tex.xy)); clip(c.a - _Cutoff); return c; } ENDCG } } }