Unity树叶shader
树叶贴图的RGB的G小于设定的颜色阈值的话将会被视为透明
Shader "ACP/tree" {
Properties{
_FrontTex("贴图", 2D) = "white" {}
_Color1("颜色",Color)=(1,1,1,1)
_YZ("阈值",Range(0.1 , 1)) = 0.49
_Alpha1("透明度",Range(0 , 1)) = 1
[Toggle(_KEYWORD3_ON)] _Keyword3("启用扰动", Float) = 1
_Float2("扰动幅度", Range(0 , 0.7)) = 0.2
[Toggle(_KEYWORD2_ON)] _Keyword2("启用透明度", Float) = 0
}
SubShader{
Tags{ "Queue" = "Transparent" }
LOD 200
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off
CGPROGRAM
#pragma shader_feature_local _KEYWORD3_ON
#pragma shader_feature_local _KEYWORD2_ON
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"
#pragma target 3.0
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _FrontTex;
float4 _FrontTex_ST;
float4 _Color1;
float _YZ;
float _Alpha1;
float _Float2;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _FrontTex);
UNITY_TRANSFER_FOG(o, o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
// sample the texture
#ifdef _KEYWORD3_ON
float dotResult4_g1 = dot(float2(2,2) , float2(12.9898,78.233));
float lerpResult10_g1 = lerp(-3.0 , 3.0 , frac((sin(dotResult4_g1) * 43758.55)));
float temp_output_20_0 = (sin(_Time.y) * _Float2 * lerpResult10_g1);
float2 appendResult23 = (float2(temp_output_20_0 , (temp_output_20_0 * -1.0)));
float2 uv015 = i.uv.xy* float2(1,1) + appendResult23;
fixed4 col1 = tex2D(_FrontTex, uv015);
#else
fixed4 col1 = tex2D(_FrontTex, i.uv);
#endif
#ifdef _KEYWORD2_ON
fixed4 col = fixed4(col1.rgb*_Color1.rgb*
clamp(_WorldSpaceLightPos0.y, 0.3, 0.7),
(col1.a < _YZ) ? 0 : _Alpha1);
#else
fixed4 col = fixed4(col1.rgb*_Color1.rgb*
clamp(_WorldSpaceLightPos0.y, 0.3, 0.7),
(col1.g < _YZ) ? 0 : _Alpha1);
#endif
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}