Shader "Geri/Level Dotted Background" { Properties { [PerRendererData] _Color1 ("Color 1", Color) = (1,1,1,1) [PerRendererData] _Color2 ("Color 2", Color) = (0,0,0,1) [PerRendererData] _Opacity ("Opacity", Float) = 1 _Separation ("Separation", Range(.1, 10)) = 1 _Radius ("Radius", Range(0, .5)) = .25 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } Cull Off Lighting Off ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Pass { Name "Default" CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" #pragma multi_compile_local _ UNITY_UI_CLIP_RECT #pragma multi_compile_local _ UNITY_UI_ALPHACLIP struct appdata_t { float4 vertex : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float4 vertex : SV_POSITION; float2 texcoord : TEXCOORD0; UNITY_VERTEX_OUTPUT_STEREO }; fixed4 _Color1; fixed4 _Color2; float _Opacity; float _Separation; float _Radius; v2f vert(appdata_t v) { v2f OUT; UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); OUT.vertex = v.vertex; OUT.texcoord = v.texcoord; return OUT; } fixed4 frag(v2f IN) : SV_Target { float2 uv = abs(IN.texcoord) * (1 / _Separation) % 1; float dist1 = distance(uv, float2(.5, .5)); float dist2 = distance(uv, float2(0.0, 0.0)); float dist3 = distance(uv, float2(0.0, 1.0)); float dist4 = distance(uv, float2(1.0, 0.0)); float dist5 = distance(uv, float2(1.0, 1.0)); bool is_color_1 = (dist1 <= _Radius) + (dist2 <= _Radius) + (dist3 <= _Radius) + (dist4 <= _Radius) + (dist5 <= _Radius) != 0; half4 color = _Color1 * is_color_1 + _Color2 * (1 - is_color_1); color.a = _Opacity; #ifdef UNITY_UI_ALPHACLIP clip (color.a - 0.001); #endif return color; } ENDCG } } }