Transparent Cutout shader with any alpha value

I need to use the legacy Transparent Cutout Vertex Lit shader, but I need to make it so that it can have any alpha value. Currently it only ever draws with 0, 0.5, or 1. I got the source from the Unity download place.

I know close to nothing about shaders. So I was hoping someone could enlighten me how I could do this.

Shader "Custom/Transparent/Cutout/VertexLit" {
Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _SpecColor ("Spec Color", Color) = (1,1,1,0)
    _Emission ("Emissive Color", Color) = (0,0,0,0)
    _Shininess ("Shininess", Range (0.1, 1)) = 0.7
    _MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}

SubShader {
    Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
    LOD 100
   
    // Non-lightmapped
    Pass {
        Tags { "LightMode" = "Vertex" }
        Alphatest Greater [_Cutoff]
        AlphaToMask True
        ColorMask RGB
        Material {
            Diffuse [_Color]
            Ambient [_Color]
            Shininess [_Shininess]
            Specular [_SpecColor]
            Emission [_Emission]   
        }
        Lighting On
        SeparateSpecular On
        SetTexture [_MainTex] {
            Combine texture * primary DOUBLE, texture * primary
        }
    }
   
    // Lightmapped, encoded as dLDR
    Pass {
        Tags { "LightMode" = "VertexLM" }
        Alphatest Greater [_Cutoff]
        AlphaToMask True
        ColorMask RGB
       
        BindChannels {
            Bind "Vertex", vertex
            Bind "normal", normal
            Bind "texcoord1", texcoord0 // lightmap uses 2nd uv
            Bind "texcoord", texcoord1 // main uses 1st uv
        }
        SetTexture [unity_Lightmap] {
            matrix [unity_LightmapMatrix]
            constantColor [_Color]
            combine texture * constant
        }
        SetTexture [_MainTex] {
            combine texture * previous DOUBLE, texture * primary
        }
    }
   
    // Lightmapped, encoded as RGBM
    Pass {
        Tags { "LightMode" = "VertexLMRGBM" }
        Alphatest Greater [_Cutoff]
        AlphaToMask True
        ColorMask RGB
       
        BindChannels {
            Bind "Vertex", vertex
            Bind "normal", normal
            Bind "texcoord1", texcoord0 // lightmap uses 2nd uv
            Bind "texcoord1", texcoord1 // unused
            Bind "texcoord", texcoord2 // main uses 1st uv
        }
       
        SetTexture [unity_Lightmap] {
            matrix [unity_LightmapMatrix]
            combine texture * texture alpha DOUBLE
        }
        SetTexture [unity_Lightmap] {
            constantColor [_Color]
            combine previous * constant
        }
        SetTexture [_MainTex] {
            combine texture * previous QUAD, texture * primary
        }
    }
   
    // Pass to render object as a shadow caster
    Pass {
        Name "Caster"
        Tags { "LightMode" = "ShadowCaster" }
       
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_shadowcaster
#include "UnityCG.cginc"

struct v2f {
    V2F_SHADOW_CASTER;
    float2  uv : TEXCOORD1;
};

uniform float4 _MainTex_ST;

v2f vert( appdata_base v )
{
    v2f o;
    TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)
    o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
    return o;
}

uniform sampler2D _MainTex;
uniform fixed _Cutoff;
uniform fixed4 _Color;

float4 frag( v2f i ) : SV_Target
{
    fixed4 texcol = tex2D( _MainTex, i.uv );
    clip( texcol.a*_Color.a - _Cutoff );
   
    SHADOW_CASTER_FRAGMENT(i)
}
ENDCG

    }
   
}

}

Hi,

So how cutout work is that it uses the alpha value of the combined color and texture and it tests that against a user provided cutoff.

I’m unsure how you want to render it “with all alphas”, but you could try to change the cutoff value on your materials to something close to 0 which will cut away less of the alpha range.

I have it set to 0.
I need it to fade in and out properly, with other transparent shaders that aren’t in the cutout folder it can do it properly. But this one is the only shader that lets things draw on top of it.
I have something that needs to show through walls, and it doesn’t show through any of the transparent shaders. However this one it shows through and it at least will render at 0f, 0.5f and 1f alpha values. I just want to make that so it will render at the in between ones.

My fade in and out script is done by taking the material color and changing the alpha value over time, but when I do it, it stays completely solid for half a second, then renders with alpha being 0.5f and then goes completely invisible. I know my script is changing it correctly because it does it properly with other shaders, but I need it to work with this one because the others don’t allow the object to render over top of it.