乱调了一个 colorKey 的 shader,网上找了半天看的都好复杂,随便调了个能用的,能用就好。。。
//双面 精度是 0.1 的,可以自定义每个通道的容差范围
Shader "Custom/TextureColorKey" {
Properties
{
_MainTex("Base (RGB)", 2D) = "white" {}
_Alpha("Alpha", float) = 1.0
_ColorKey("ColorKey", Color) = (1,1,1,1)
}
SubShader{
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
LOD 100
Cull Off
Blend SrcAlpha OneMinusSrcAlpha
LOD 100
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile_fog
#include "UnityCG.cginc"
struct appdata_t {
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
UNITY_FOG_COORDS(1)
};
sampler2D _MainTex;
float4 _MainTex_ST;
float _Alpha;
fixed4 _ColorKey;
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.texcoord);
UNITY_APPLY_FOG(i.fogCoord, col);
if (abs(col.r - _ColorKey.r) <= 0.1 && abs(col.g - _ColorKey.g) <= 0.1 && abs(col.b - _ColorKey.b) <= 0.1)
col.a = 0;
else
col.a = _Alpha;
col.rgb *= _Color.rgb;
return col;
}
ENDCG
}
}
}
自己测试是可以过滤颜色的,只要物品颜色和颜色键颜色不要太近似就好,否则连物品颜色也会透明
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于