乱调了一个 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 } }
}
自己测试是可以过滤颜色的,只要物品颜色和颜色键颜色不要太近似就好,否则连物品颜色也会透明
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于