使用Shader直接将贴图变为黑白色
Unity游戏开发中,有时候需要将贴图变为黑白色,以标记为两种状态,大部分时候都是美术做出两张图,一张彩色的一张黑白的,然后来回替换,最近为了省贴图资源,于是在网上找到了一个shader,可以直接将贴图变为黑白的,使用方法就是在贴图挂载一个Material,使用的时候把材质加载到贴图上,不使用时候直接将贴图的材质置空就好
- 下面是Shader代码,会写Shader的也可以修改里面数值,调整显示效果
Shader "Custom/ImageGreyShader001"{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
// 源rgba*源a + 背景rgba*(1-源A值)
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
half2 texcoord : TEXCOORD0;
};
sampler2D _MainTex;
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
#ifdef UNITY_HALF_TEXEL_OFFSET
OUT.vertex.xy -= (_ScreenParams.zw-1.0);
#endif
OUT.color = IN.color * _Color;
return OUT;
}
fixed4 frag(v2f IN) : SV_Target
{
half4 color = tex2D(_MainTex, IN.texcoord) * IN.color;
float grey = dot(color.rgb, fixed3(0.22, 0.707, 0.071));
return half4(grey,grey,grey,color.a);
}
ENDCG
}
}
}
- 【文章全为个人工作问题记录,不喜勿喷,有帮助到你们的尽情采纳】
- 【Shader原链接忘记在哪找的了,所以就不贴出了】