Files
fatal-exception/Assets/Shaders/Dither.shader
2020-01-30 20:59:23 -05:00

108 lines
2.9 KiB
GLSL

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"
}