//Anime4K v3.1 GLSL // MIT License // Copyright (c) 2019-2020 bloc97 // All rights reserved. // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. //!DESC Anime4K-v3.1-ThinLines(VeryFast)-Kernel(X) //!HOOK NATIVE //!BIND HOOKED //!SAVE LUMAD //!WIDTH NATIVE.w 4 / //!HEIGHT NATIVE.h 4 / //!COMPONENTS 2 #define L_tex NATIVE_tex vec4 hook() { vec2 d = HOOKED_pt; //[tl t tr] //[ l c r] //[bl b br] float l = L_tex(HOOKED_pos + vec2(-d.x, 0)).x; float c = L_tex(HOOKED_pos).x; float r = L_tex(HOOKED_pos + vec2(d.x, 0)).x; //Horizontal Gradient //[-1 0 1] //[-2 0 2] //[-1 0 1] float xgrad = (-l + r); //Vertical Gradient //[-1 -2 -1] //[ 0 0 0] //[ 1 2 1] float ygrad = (l + c + c + r); //Computes the luminance's gradient return vec4(xgrad, ygrad, 0, 0); } //!DESC Anime4K-v3.1-ThinLines(VeryFast)-Kernel(Y) //!HOOK NATIVE //!BIND HOOKED //!BIND LUMAD //!SAVE LUMAD //!WIDTH NATIVE.w 4 / //!HEIGHT NATIVE.h 4 / //!COMPONENTS 1 vec4 hook() { vec2 d = HOOKED_pt; //[tl t tr] //[ l cc r] //[bl b br] float tx = LUMAD_tex(HOOKED_pos + vec2(0, -d.y)).x; float cx = LUMAD_tex(HOOKED_pos).x; float bx = LUMAD_tex(HOOKED_pos + vec2(0, d.y)).x; float ty = LUMAD_tex(HOOKED_pos + vec2(0, -d.y)).y; //float cy = LUMAD_tex(HOOKED_pos).y; float by = LUMAD_tex(HOOKED_pos + vec2(0, d.y)).y; //Horizontal Gradient //[-1 0 1] //[-2 0 2] //[-1 0 1] float xgrad = (tx + cx + cx + bx) / 8; //Vertical Gradient //[-1 -2 -1] //[ 0 0 0] //[ 1 2 1] float ygrad = (-ty + by) / 8; //Computes the luminance's gradient float norm = sqrt(xgrad * xgrad + ygrad * ygrad); return vec4(pow(norm, 0.7)); } //!DESC Anime4K-v3.1-ThinLines(VeryFast)-Kernel(X) //!HOOK NATIVE //!BIND HOOKED //!BIND LUMAD //!SAVE LUMADG //!WIDTH NATIVE.w 4 / //!HEIGHT NATIVE.h 4 / //!COMPONENTS 1 #define L_tex LUMAD_tex #define SIGMA (HOOKED_size.y / 1080) * 2 #define KERNELSIZE (SIGMA * 2 + 1) float gaussian(float x, float s, float m) { return (1 / (s * sqrt(2 * 3.14159))) * exp(-0.5 * pow(abs(x - m) / s, 2.0)); } float lumGaussian(vec2 pos, vec2 d) { float g = (L_tex(pos).x) * gaussian(0, SIGMA, 0); g = g + (L_tex(pos - d).x + L_tex(pos + d).x) * gaussian(1, SIGMA, 0); for (int i=2; i