Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //!HOOK POSTKERNEL
- //!BIND PREKERNEL
- //!BIND HOOKED
- #define sqr(x) pow(x,2.0)
- #define GetH(x,y) POSTKERNEL_texOff(vec2(x,y))
- #define GetL(x,y) PREKERNEL_tex(base + PREKERNEL_pt*vec2(x,y))
- #define Luma(rgb) ( dot(vec3(0.2126, 0.7152, 0.0722), rgb) )
- vec4 hook() {
- vec2 fcoord = fract(PREKERNEL_pos * PREKERNEL_size - vec2(0.5));
- vec2 base = PREKERNEL_pos - fcoord * PREKERNEL_pt;
- float meanH = (Luma(GetH(0, 0).rgb) + (Luma(GetH(-1, 0).rgb) + Luma(GetH(0, 1).rgb) + Luma(GetH(1, 0).rgb) + Luma(GetH(0, -1).rgb)) / 4.0) / 2.0;
- float meanL = (Luma(GetL(0, 0).rgb) + (Luma(GetL(-1, 0).rgb) + Luma(GetL(0, 1).rgb) + Luma(GetL(1, 0).rgb) + Luma(GetL(0, -1).rgb)) / 4.0) / 2.0;
- float varH = (sqr(Luma(GetH(0, 0).rgb) - meanH) + (sqr(Luma(GetH(-1, 0).rgb) - meanH) + sqr(Luma(GetH(0, 1).rgb) - meanH) + sqr(Luma(GetH(1, 0).rgb) - meanH) + sqr(Luma(GetH(0, -1).rgb) - meanH)) / 4.0) / 2.0 + sqr(0.5/255.0);
- float varL = (sqr(Luma(GetL(0, 0).rgb) - meanL) + (sqr(Luma(GetL(-1, 0).rgb) - meanL) + sqr(Luma(GetL(0, 1).rgb) - meanL) + sqr(Luma(GetL(1, 0).rgb) - meanL) + sqr(Luma(GetL(0, -1).rgb) - meanL)) / 4.0) / 2.0 + sqr(0.5/255.0);
- // Get center four pixels
- vec4 c1 = PREKERNEL_tex(base + vec2(0,0) * PREKERNEL_pt);
- vec4 c2 = PREKERNEL_tex(base + vec2(0,1) * PREKERNEL_pt);
- vec4 c3 = PREKERNEL_tex(base + vec2(1,0) * PREKERNEL_pt);
- vec4 c4 = PREKERNEL_tex(base + vec2(1,1) * PREKERNEL_pt);
- vec4 lo = min(min(c1, c2), min(c3, c4));
- vec4 hi = max(max(c1, c2), max(c3, c4));
- vec4 color = HOOKED_texOff(0);
- float E = sqrt(varL/varH);
- return mix(color, clamp(color, lo, hi), clamp(1.5*mix(max(2.0-E, 0.0), E, step(E, 1.0)),0.0,1.0));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement