123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // 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
- }
- }
- }
|