unity shader 剔除指定的颜色

Shader "MyShader/PaintingBGTransparency" {
	Properties{
		_MainTex("Base (RGB)", 2D) = "white" {}
		_FilterfColor("Ridof (RGB)",Color) = (1,1,1,1)
	}
		SubShader{
			Tags { "RenderType" = "Opaque" }
			Blend SrcAlpha OneMinusSrcAlpha
			pass
			{
				CGPROGRAM

				#pragma vertex vertext_convert
				#pragma fragment fragment_convert
				#include "UnityCG.cginc" 

				sampler2D  _MainTex;
				sampler2D  _MainTex1;
				float4  _FilterfColor;
				struct Inputvrite
				{
					float4 vertex : POSITION;
					float4 texcoord : TEXCOORD0;
				};
				struct Inputfragment
				{
					float4 pos : SV_POSITION;
					float4 uv : TEXCOORD0;
				};

				float ColorLerp(float3 tmp_nowcolor,float3 tmp_FilterfColor)
				{
					float3 dis = float3(abs(tmp_nowcolor.x - tmp_FilterfColor.x),abs(tmp_nowcolor.y - tmp_FilterfColor.y),abs(tmp_nowcolor.z - tmp_FilterfColor.z));
					float dis0 = sqrt(pow(dis.x,2) + pow(dis.y,2) + pow(dis.z,2));
					float maxdis = sqrt(3);
					float dis1 = lerp(0,maxdis,dis0);
					return dis1;
				}

				Inputfragment vertext_convert(Inputvrite i)
				{
					Inputfragment o;
					o.pos = UnityObjectToClipPos(i.vertex);
					o.uv = float4(i.texcoord.xy,1,1);
					return o;
				}

				float4 fragment_convert(Inputfragment o) : COLOR
				{
					float4 c = tex2D(_MainTex,o.uv);
					c.a *= ColorLerp(c.rgb,_FilterfColor.rgb);
					return c;
				}


			ENDCG
			}
		}
			FallBack "Diffuse"
}

  

原文地址:https://www.cnblogs.com/Jason-c/p/11383901.html