Convert images to black-and-white format with alpha channel

Hello, my shader is not working properly with an alpha channel, what went wrong?

Shader "Custom/BWDiffuse" {
    Properties{
        _MainTex("Base (RGB)", 2D) = "white" {}
        _bwBlend("Blend", Range(0, 1)) = 0
    }
        SubShader{
        Pass{ Blend SrcAlpha OneMinusSrcAlpha
        CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag

#include "UnityCG.cginc"

        uniform sampler2D _MainTex;
    uniform float _bwBlend;

    float4 frag(v2f_img i) : COLOR{
        float4 c = tex2D(_MainTex, i.uv);

        float lum = c.r*.3 + c.g*.59 + c.b*.11;
        float3 bw = float3(lum, lum, lum);

        float4 result = c;
        result.rgb = lerp(c.rgb, bw, 1 - _bwBlend);
        return result;
    }
        ENDCG
    }
    }
}

why not just use float3 bw =Luminance(c.rgb);?

This don’t significantly, the result does not change.

adding test scene, showing the bug.

2340293–158243–test.unitypackage (1.4 MB)

You need to tell the shader not to write to the depth buffer by using ZWrite Off. You should also set some tags, like “Queue”=“Transparent”, “RenderType”=“Transparent”, and “IgnoreProjector”=“True”. Check it out here: Unity - Manual: ShaderLab: assigning tags to a SubShader

Here’s your shader back. This works in your test scene.

2341061–158309–test.shader (699 Bytes)

1 Like

Thank you