首先准备一张局部透明度的贴图
实现局部透明原理:
采样准备好的贴图,在片元着色中,将返回颜色的a值乘上采样后的a值
代码:
fixed4 frag (v2f i) : SV_Target{fixed4 col = i.color;col.a *= tex2D(_MainTex, i.texcoord).a;return col;}
实现效果:
完整代码:
Shader "CustomMask"
{Properties {_MainTex ("Texture", 2D) = "white" {}_Color ("Fog Color", Color) = (1,1,1,1)}SubShader {Tags {"Queue"="Transparent""IgnoreProjector"="True""RenderType"="Transparent""PreviewType"="Plane"}Blend SrcAlpha OneMinusSrcAlphaPass {CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata_t {float4 vertex : POSITION;fixed4 color : COLOR;float2 texcoord : TEXCOORD0;};struct v2f {float4 vertex : SV_POSITION;fixed4 color : COLOR;float2 texcoord : TEXCOORD0;};sampler2D _MainTex;uniform float4 _MainTex_ST;uniform fixed4 _Color;v2f vert (appdata_t v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.color = v.color * _Color;o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{fixed4 col = i.color;col.a *= tex2D(_MainTex, i.texcoord).a;return col;}ENDCG }}
}