How do I make a simple unlit cutout shader?

Hey there,

@SiliconDroid had helped me out by posting code of an unlit tinted shader. It works great, but the problem is that I need to add transparent cutout to it. I’m not entirely sure how to go about doing this.

I’m basically looking to just add color tint to Unity’s built in Unlit/TransparentCutout shader.

When I download the built in shaders from Unitys archive page and am comparing the two…

Built-in transparent cutout shader:

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

// Unlit alpha-cutout shader.
// - no lighting
// - no lightmap support
// - no per-material color

Shader "Unlit/TransCutout_wTint" {
Properties {
    _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

    Lighting Off

    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;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct v2f {
                float4 vertex : SV_POSITION;
                float2 texcoord : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                UNITY_VERTEX_OUTPUT_STEREO
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed _Cutoff;

            v2f vert (appdata_t v)
            {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(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);
                clip(col.a - _Cutoff);
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
        ENDCG
    }
}

}

And then SiliconDroids shader that adds color tint:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//   ____ ___ _     ___ ____ ___  _   _   ____  ____   ___ ___ ____
//  / ___|_ _| |   |_ _/ ___/ _ \| \ | | |  _ \|  _ \ / _ \_ _|  _ \
//  \___ \| || |    | | |  | | | |  \| | | | | | |_) | | | | || | | |
//   ___) | || |___ | | |__| |_| | |\  | | |_| |  _ <| |_| | || |_| |
//  |____/___|_____|___\____\___/|_| \_| |____/|_| \_\\___/___|____/
//
//    MOBILE: FAST TEXTURE SHADER WITH COLOR TINT
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Shader "Unlit/TintedTex"
{
    Properties
    {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGBA)", 2D) = "white" {}
    }
    SubShader
    {
        Lighting Off
        Color[_Color]
        Pass
        {
            SetTexture[_MainTex] {Combine texture * primary}
        }
    }
    Fallback "Mobile/Unlit"
}

I’m not really sure how I would add the transparent cutout into SiliconDroids shader…

I think you’d be better off asking in the Shaders sub-forum: Unity Engine - Unity Discussions

1 Like

Oh, very sorry about that. I did find a solution, just using the legacy transparent cutout shaders. Thanks!

I’ve not logged on for some weeks… Just spotted you mentioning my username here. Glad you found a solution.

P.S.
I don’t use cutout for mobile, alpha is faster due to cell based optimization schemes in mobile GPUs not handling cutout well, end result… large areas of cutout have too low FPS for me. Intuitively I thought cutout would be faster (less overdraw) but unfortunately it’s a lot slower. I tried using it for tree billboards that the player could get real close to and it dropped my FPS severely.

2 Likes

Yep, that’s the problem I’m having. My FPS runs fine, but I’m making heavy use of cutout shaders everywhere. It’s too late at this point to go back as well, all the trees and bushes are already done in this way, no way to replace them without many hours of work. It does run fine, but I would have probably been able to get many more fps if I had known how to properly create the trees and bushes in an optimized way in blender.