New update:
- Added Paint filter. - Tweaked order of shaders. - Allow more grain parameters to be configured.
This commit is contained in:
parent
236911f269
commit
595159703c
11 changed files with 259 additions and 67 deletions
38
shaders/glsl/mfx_paint_pass3.fp
Normal file
38
shaders/glsl/mfx_paint_pass3.fp
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
Paint filter from MariENB (third pass FXAA)
|
||||
(C)2012-2021 Marisa Kirisame
|
||||
*/
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 coord = TexCoord;
|
||||
vec4 res = vec4(1.);
|
||||
vec2 bresl = textureSize(InputTexture,0);
|
||||
vec2 bof = 1./bresl;
|
||||
float fxaareducemul = 1./16.;
|
||||
float fxaareducemin = 1./128.;
|
||||
float fxaaspanmax = 4.;
|
||||
vec3 rgbNW = texture(InputTexture,coord+vec2(-1,-1)*bof).rgb;
|
||||
vec3 rgbNE = texture(InputTexture,coord+vec2(1,-1)*bof).rgb;
|
||||
vec3 rgbSW = texture(InputTexture,coord+vec2(-1,1)*bof).rgb;
|
||||
vec3 rgbSE = texture(InputTexture,coord+vec2(1,1)*bof).rgb;
|
||||
vec3 rgbM = texture(InputTexture,coord).rgb;
|
||||
vec3 luma = vec3(.299,.587,.114);
|
||||
float lumaNW = dot(rgbNW,luma);
|
||||
float lumaNE = dot(rgbNE,luma);
|
||||
float lumaSW = dot(rgbSW,luma);
|
||||
float lumaSE = dot(rgbSE,luma);
|
||||
float lumaM = dot(rgbM,luma);
|
||||
float lumaMin = min(lumaM,min(min(lumaNW,lumaNE),min(lumaSW,lumaSE)));
|
||||
float lumaMax = max(lumaM,max(max(lumaNW,lumaNE),max(lumaSW,lumaSE)));
|
||||
vec2 dir = vec2(-((lumaNW+lumaNE)-(lumaSW+lumaSE)),((lumaNW+lumaSW)-(lumaNE+lumaSE)));
|
||||
float dirReduce = max((lumaNW+lumaNE+lumaSW+lumaSE)*(.25*fxaareducemul),fxaareducemin);
|
||||
float rcpDirMin = 1./(min(abs(dir.x),abs(dir.y))+dirReduce);
|
||||
dir = min(vec2(fxaaspanmax,fxaaspanmax),max(vec2(-fxaaspanmax,-fxaaspanmax),dir*rcpDirMin))/bresl;
|
||||
vec3 rgbA = (1./2.)*(texture(InputTexture,coord+dir*(1./3.-.5)).rgb+texture(InputTexture,coord+dir*(2./3.-.5)).rgb);
|
||||
vec3 rgbB = rgbA*(1./2.)+(1./4.)*(texture(InputTexture,coord+dir*(0./3.-.5)).rgb+texture(InputTexture,coord+dir*(3./3.-.5)).rgb);
|
||||
float lumaB = dot(rgbB,luma);
|
||||
if ( (lumaB < lumaMin) || (lumaB > lumaMax) ) res.rgb = rgbA;
|
||||
else res.rgb = rgbB;
|
||||
FragColor = res;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue