直接上shader代码:
Shader "My/clip"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
// 美术给的灰度图
_ClipTex("Texture", 2D) = "white" {}
_Cut("Cut", Range(0,0.4)) = 0.1
}
SubShader
{
Tags { "RenderType"="Transparent" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct o2f
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float2 uv_clip : TEXCOORD1;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
float2 uv_clip : TEXCOORD1;
};
sampler2D _MainTex;
sampler2D _ClipTex;
float4 _MainTex_ST;
float4 _ClipTex_ST;
float _Cut;
v2f vert (o2f v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
o.uv_clip = TRANSFORM_TEX(v.uv, _ClipTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
// 原纹理采样
fixed4 col = tex2D(_MainTex, i.uv);
// 裁剪纹理采样
fixed4 col1 = tex2D(_ClipTex, i.uv_clip);
// 确定颜色
col = fixed4(col.r, col.g, col.b, col1.a);
// 将透明度在要求意外的颜色去掉
clip(col.a - _Cut);
return col;
}
ENDCG
}
}
}