UI No Z Test (Renders infront of everything else)

Post Reply
User avatar
themars2011
Site Admin
Posts: 65
Joined: Mon Dec 02, 2019 8:59 pm
Location: Germany
Contact:
themars2011’s avatar
Loading…

UI No Z Test (Renders infront of everything else)

Post by themars2011 » Wed Dec 04, 2019 8:23 pm

Hey Guys! This is a very useful shader that I thought I'd share since it's publicly available (it's not made by me, source below).

Code: Select all

Shader "UI/Default_OverlayNoZTest"
 {
     Properties
     {
         [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
         _Color ("Tint", Color) = (1,1,1,1)
          
         _StencilComp ("Stencil Comparison", Float) = 8
         _Stencil ("Stencil ID", Float) = 0
         _StencilOp ("Stencil Operation", Float) = 0
         _StencilWriteMask ("Stencil Write Mask", Float) = 255
         _StencilReadMask ("Stencil Read Mask", Float) = 255
  
         _ColorMask ("Color Mask", Float) = 15
     }
  
     SubShader
     {
         Tags
         { 
             "Queue"="Overlay" 
             "IgnoreProjector"="True" 
             "RenderType"="Transparent" 
             "PreviewType"="Plane"
             "CanUseSpriteAtlas"="True"
         }
          
         Stencil
         {
             Ref [_Stencil]
             Comp [_StencilComp]
             Pass [_StencilOp] 
             ReadMask [_StencilReadMask]
             WriteMask [_StencilWriteMask]
         }
  
         Cull Off
         Lighting Off
         ZWrite Off
         ZTest Off
         Blend SrcAlpha OneMinusSrcAlpha
         ColorMask [_ColorMask]
  
         Pass
         {
         CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             #include "UnityCG.cginc"
              
             struct appdata_t
             {
                 float4 vertex   : POSITION;
                 float4 color    : COLOR;
                 float2 texcoord : TEXCOORD0;
             };
  
             struct v2f
             {
                 float4 vertex   : SV_POSITION;
                 fixed4 color    : COLOR;
                 half2 texcoord  : TEXCOORD0;
             };
              
             fixed4 _Color;
             fixed4 _TextureSampleAdd; //Added for font color support
  
             v2f vert(appdata_t IN)
             {
                 v2f OUT;
                 OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
                 OUT.texcoord = IN.texcoord;
 #ifdef UNITY_HALF_TEXEL_OFFSET
                 OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
 #endif
                 OUT.color = IN.color * _Color;
                 return OUT;
             }
  
             sampler2D _MainTex;
  
             fixed4 frag(v2f IN) : SV_Target
             {
             half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;  //Added for font color support
             clip (color.a - 0.01);
             return color;
             }
         ENDCG
         }
     }
 }
Source here
Asset links posted by me may be affiliate links using the Unity Affiliate Program and yield a small amount of share at no additional cost for the buyer should a purchase be made.

User avatar
Oats
Posts: 6
Joined: Thu Dec 05, 2019 5:17 am
Location: Australia

Re: UI No Z Test (Renders infront of everything else)

Post by Oats » Thu Dec 05, 2019 5:23 am

what is it's purpose?

User avatar
themars2011
Site Admin
Posts: 65
Joined: Mon Dec 02, 2019 8:59 pm
Location: Germany
Contact:
themars2011’s avatar
Loading…

Re: UI No Z Test (Renders infront of everything else)

Post by themars2011 » Thu Dec 05, 2019 6:39 am

Oats wrote:
Thu Dec 05, 2019 5:23 am
what is it's purpose?
I've created a rotateable attachment for the kit once and I used this shader to have ui be rendered infront of the rotated gun, not behind it (the guns are part of the UI)
Asset links posted by me may be affiliate links using the Unity Affiliate Program and yield a small amount of share at no additional cost for the buyer should a purchase be made.

User avatar
Oats
Posts: 6
Joined: Thu Dec 05, 2019 5:17 am
Location: Australia

Re: UI No Z Test (Renders infront of everything else)

Post by Oats » Thu Dec 05, 2019 7:17 am

im not sure i understand what you mean

User avatar
themars2011
Site Admin
Posts: 65
Joined: Mon Dec 02, 2019 8:59 pm
Location: Germany
Contact:
themars2011’s avatar
Loading…

Re: UI No Z Test (Renders infront of everything else)

Post by themars2011 » Thu Dec 05, 2019 12:53 pm

Oats wrote:
Thu Dec 05, 2019 7:17 am
im not sure i understand what you mean
In the Unity UI (Canvas) objects that are infront will be rendered infront. If ui objects that are behind it use this shader they will be rendered infront instead (no z test -> z = depth)
Asset links posted by me may be affiliate links using the Unity Affiliate Program and yield a small amount of share at no additional cost for the buyer should a purchase be made.

Post Reply