Shader "Oxysoft/Dither" { Properties { _Threshold("Threshold", Float) = 0.45 _Strength("Strength", Float) = 0.45 _Width("Width", Int) = 0.45 _Height("Height", Int) = 0.45 _Dither("Dither", 2D) = "white" {} _MainTex("", 2D) = "white" {} } SubShader { Lighting Off ZTest Always Cull Off ZWrite Off Fog { Mode Off } Pass { CGPROGRAM // Upgrade NOTE: excluded shader from DX11, Xbox360, OpenGL ES 2.0 because it uses unsized arrays #pragma exclude_renderers flash #pragma vertex vert_img #pragma fragment frag #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" uniform float _Threshold; uniform float _Strength; uniform int _Width; uniform int _Height; uniform sampler2D _Dither; uniform sampler2D _MainTex; float luma(fixed3 color) { return dot(color, fixed3(0.299, 0.587, 0.114)); } float luma(fixed4 color) { return dot(color.rgb, fixed3(0.299, 0.587, 0.114)); } fixed4 ditherBayer2(fixed2 position, float brightness) { int x = fmod(position.x, 4.0); int y = fmod(position.y, 4.0); int index = x + y * 4; float lim = 0.0; if (x < 8) { if (index == 0) lim = 0.0625; if (index == 1) lim = 0.5625; if (index == 2) lim = 0.1875; if (index == 3) lim = 0.6875; if (index == 4) lim = 0.8125; if (index == 5) lim = 0.3125; if (index == 6) lim = 0.9375; if (index == 7) lim = 0.4375; if (index == 8) lim = 0.25; if (index == 9) lim = 0.75; if (index == 10) lim = 0.125; if (index == 11) lim = 0.625; if (index == 12) lim = 1.0; if (index == 13) lim = 0.5; if (index == 14) lim = 0.875; if (index == 15) lim = 0.375; } if (brightness < lim * _Strength) return 0.0; return 1.0; } fixed3 ditherPattern2(fixed2 position, float brightness) { int x = fmod(position.x, _Width); int y = fmod(position.y, _Height); float lim = 0.0; lim = tex2D(_Dither, fixed2(x, y) / _Width).r; if (brightness < lim * _Threshold) return _Strength; return 1.0; } fixed3 ditherBayer(fixed2 position, fixed3 col) { return col * ditherBayer2(position, luma(col)); } fixed3 ditherPattern(fixed2 position, fixed3 col) { return col * ditherPattern2(position, luma(col)); } fixed4 frag(v2f_img i) : COLOR { fixed3 col = tex2D(_MainTex, i.uv).rgb; return fixed4(ditherPattern(i.pos.xy, col), 1.0); } ENDCG } } FallBack "Diffuse" }