How do I compare two colors inside the shader fragment function?
I want to make a simple shader to swap a pixel color so I’m using this line:
if (all(c.rgb == _InColor.rgb)) c = _OutColor;
Both c and _InColor are typed as half4. The colors are not swapping at all.
I known this type of comparation is bad for performance but idk how to make it better.
Suggestions?
Full shader:
Shader "Sprites/Palette 01"
{
Properties
{
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Color("Tint", Color) = (1,1,1,1)
_InColor("In Color", Color) = (0,0,0,0)
_OutColor("Out Color", Color) = (0,0,0,0)
[MaterialToggle] PixelSnap("Pixel snap", Float) = 0
[HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
[HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
[PerRendererData] _AlphaTex("External Alpha", 2D) = "white" {}
[PerRendererData] _EnableExternalAlpha("Enable External Alpha", Float) = 0
}
SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
"PreviewType" = "Plane"
"CanUseSpriteAtlas" = "True"
}
Cull Off
Lighting Off
ZWrite Off
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex SpriteVert
#pragma fragment PaletteSwapFrag
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile_local _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#include "UnitySprites.cginc"
half4 _InColor;
half4 _OutColor;
half4 PaletteSwapFrag(v2f IN) : SV_Target
{
half4 c = tex2D(_MainTex, IN.texcoord);
if (all(c.rgb == _InColor.rgb)) c = _OutColor;
c.rgb *= c.a * IN.color;
return c;
}
ENDCG
}
}
}