Add shinemap debug sphere actor (to see them in action). Move pp shaders to separate folder, akin to GZDoom's own layout.
59 lines
1.6 KiB
GLSL
59 lines
1.6 KiB
GLSL
/*
|
|
Complex grain shader ported over from MariENB
|
|
(C)2012-2018 Marisa Kirisame
|
|
*/
|
|
const float nf = .000005;
|
|
const vec3 nm1 = vec3(2.05,3.11,2.22);
|
|
const float nk = .04;
|
|
const vec3 nm2 = vec3(4.25,9.42,6.29);
|
|
const float ns = -.08;
|
|
const float np = 3.95;
|
|
const float bnp = 1.7;
|
|
|
|
#define darkmask(a,b) (a>.5)?(2.*a*(.5+b)):(1.-2.*(1.-a)*(1.-((.5+b))))
|
|
|
|
vec3 grain( in vec3 res, in vec2 coord )
|
|
{
|
|
float ts = Timer*nf;
|
|
vec2 s1 = coord+vec2(0.,ts);
|
|
vec2 s2 = coord+vec2(ts,0.);
|
|
vec2 s3 = coord+vec2(ts,ts);
|
|
float n1, n2, n3;
|
|
vec2 nr = textureSize(NoiseTexture,0);
|
|
s1 = mod(s1*nm1.x*nr,1.);
|
|
s2 = mod(s2*nm1.y*nr,1.);
|
|
s3 = mod(s3*nm1.z*nr,1.);
|
|
n1 = texture(NoiseTexture,s1).r;
|
|
n2 = texture(NoiseTexture,s2).g;
|
|
n3 = texture(NoiseTexture,s3).b;
|
|
s1 = coord+vec2(ts+n1*nk,n2*nk);
|
|
s2 = coord+vec2(n2,ts+n3*nk);
|
|
s3 = coord+vec2(ts+n3*nk,ts+n1*nk);
|
|
s1 = mod(s1*nm2.x*nr,1.);
|
|
s2 = mod(s2*nm2.y*nr,1.);
|
|
s3 = mod(s3*nm2.z*nr,1.);
|
|
n1 = texture(NoiseTexture,s1).r;
|
|
n2 = texture(NoiseTexture,s2).g;
|
|
n3 = texture(NoiseTexture,s3).b;
|
|
float n4 = (n1+n2+n3)/3.0;
|
|
vec3 ng = vec3(n4);
|
|
vec3 nc = vec3(n1,n2,n3);
|
|
vec3 nt = pow(clamp(mix(ng,nc,ns),0.,1.),vec3(np));
|
|
float bn = 1.-clamp((res.r+res.g+res.b)/3.,0.,1.);
|
|
bn = pow(bn,bnp);
|
|
vec3 nn = clamp(nt*bn,vec3(0.),vec3(1.));
|
|
res.r = darkmask(res.r,(nn.r*ni));
|
|
res.g = darkmask(res.g,(nn.g*ni));
|
|
res.b = darkmask(res.b,(nn.b*ni));
|
|
return res;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
vec2 coord = TexCoord;
|
|
vec4 res = texture(InputTexture,coord);
|
|
vec2 sfact = max(vec2(640.,400.),textureSize(InputTexture,0)*.5);
|
|
coord = floor(coord*sfact)/sfact;
|
|
res.rgb = grain(res.rgb,coord);
|
|
FragColor = res;
|
|
}
|