[RELEASE] u22-v04
This version is submitted for U22 final presentation. (squashed 158 commits)
This commit is contained in:
@@ -1,21 +1,22 @@
|
||||
layout (location = 0) uniform sampler2D u_src;
|
||||
|
||||
layout(std140) uniform param {
|
||||
float whole_blur;
|
||||
float raster;
|
||||
float distortion_amnesia;
|
||||
float distortion_radial;
|
||||
float distortion_urgent;
|
||||
float raster_whole;
|
||||
|
||||
float radial_displacement;
|
||||
float amnesia_displacement;
|
||||
|
||||
float radial_fade;
|
||||
|
||||
float brightness;
|
||||
float aberration_radial;
|
||||
float blur_whole;
|
||||
float brightness_whole;
|
||||
float fade_radial;
|
||||
} p;
|
||||
|
||||
in vec2 v_uv;
|
||||
|
||||
out vec4 o_color;
|
||||
|
||||
/* ---- utilities ---- */
|
||||
float atan2(in vec2 p){
|
||||
return p.x == 0. ? sign(p.y)*PI/2. : atan(p.y, p.x);
|
||||
}
|
||||
@@ -29,7 +30,7 @@ float rand(in vec2 p) {
|
||||
/* https://thebookofshaders.com/13/?lan=jp */
|
||||
return fract(sin(dot(p.xy, vec2(12.9898, 78.233)))*43758.5453123);
|
||||
}
|
||||
float noise (in vec2 _st) {
|
||||
float noise(in vec2 _st) {
|
||||
/* https://thebookofshaders.com/13/?lan=jp*/
|
||||
vec2 i = floor(_st);
|
||||
vec2 f = fract(_st);
|
||||
@@ -46,7 +47,7 @@ float noise (in vec2 _st) {
|
||||
(c - a)* u.y * (1.0 - u.x) +
|
||||
(d - b) * u.x * u.y;
|
||||
}
|
||||
float fbm (in vec2 _st) {
|
||||
float fbm(in vec2 _st) {
|
||||
/* https://thebookofshaders.com/13/?lan=jp*/
|
||||
const float octaves = 5;
|
||||
|
||||
@@ -63,42 +64,46 @@ float fbm (in vec2 _st) {
|
||||
return v;
|
||||
}
|
||||
|
||||
vec2 radial_displacement(in vec2 polar) {
|
||||
float intensity = p.radial_displacement + 1.;
|
||||
float r = polar.x;
|
||||
/* ---- distortion effects ---- */
|
||||
void distortion_amnesia(inout vec2 uv) {
|
||||
vec2 a = abs(uv);
|
||||
|
||||
float i = p.distortion_amnesia*(1.-pow(max(a.x, a.y), 2.));
|
||||
uv += (fbm(uv)-.5)*i;
|
||||
}
|
||||
void distortion_radial(inout vec2 polar) {
|
||||
float i = p.distortion_radial + 1.;
|
||||
|
||||
const float sqrt2 = sqrt(2.);
|
||||
r = (1. - pow(abs(1. - r/sqrt2), intensity))*sqrt2 / intensity;
|
||||
|
||||
return vec2(r, polar.y);
|
||||
polar.x = (1. - pow(abs(1. - polar.x/sqrt2), i))*sqrt2 / i;
|
||||
}
|
||||
vec2 amnesia_displacement(in vec2 uv) {
|
||||
vec2 auv = abs(uv);
|
||||
float intensity = p.amnesia_displacement*(1.-pow(max(auv.x, auv.y), 2.));
|
||||
return uv + fbm(uv)*intensity - intensity/2.;
|
||||
void distortion_urgent(inout vec2 polar) {
|
||||
float i = p.distortion_urgent;
|
||||
polar.x += pow(polar.x, 2.)*sin(polar.y*20.)*.2*i;
|
||||
polar.x /= i+1.;
|
||||
}
|
||||
void raster_whole(inout vec2 uv) {
|
||||
uv.x += sin(v_uv.y*PI*2./uni.aa*5.)*.05*p.raster_whole;
|
||||
}
|
||||
|
||||
float radial_fade(in float len) {
|
||||
float intensity = p.radial_fade;
|
||||
return clamp(1. - intensity * max(len - (1.-intensity), 0.), 0., 1.);
|
||||
}
|
||||
|
||||
vec4 chromatic_aberration(in vec2 uv) {
|
||||
/* ---- color effects ---- */
|
||||
void aberration_radial(inout vec4 color, in vec2 uv) {
|
||||
float a = length(v_uv)/sqrt(2.);
|
||||
vec2 e = 1./uni.resolution*a;
|
||||
vec2 e = 4./uni.resolution*pow(a, 4.)*p.aberration_radial;
|
||||
|
||||
return vec4(
|
||||
color = vec4(
|
||||
texture(u_src, uv+e).r,
|
||||
texture(u_src, uv).g,
|
||||
color.g,
|
||||
texture(u_src, uv-e).b,
|
||||
1.);
|
||||
}
|
||||
void blur_whole(inout vec4 color, in vec2 uv) {
|
||||
if (p.blur_whole <= 0.) return;
|
||||
|
||||
vec4 blur(in vec2 uv) {
|
||||
vec2 e1 = vec2(1./uni.resolution.x, 0.);
|
||||
vec2 e2 = vec2(0., 1./uni.resolution.y);
|
||||
|
||||
vec4 color =
|
||||
vec4 neighbors =
|
||||
texture(u_src, uv+e1+.0) +
|
||||
texture(u_src, uv+e1+e2) +
|
||||
texture(u_src, uv+.0+e2) +
|
||||
@@ -107,33 +112,44 @@ vec4 blur(in vec2 uv) {
|
||||
texture(u_src, uv-e1-e2) +
|
||||
texture(u_src, uv+.0-e2) +
|
||||
texture(u_src, uv+e1-e2);
|
||||
return color/8.;
|
||||
color = mix(color, neighbors/8., p.blur_whole);
|
||||
}
|
||||
void contrast_whole(inout vec4 color) {
|
||||
color = pow(color, vec4(1.4));
|
||||
}
|
||||
void monochromize_whole(inout vec4 color) {
|
||||
color = min(color, vec4(max(color.r, max(color.g, color.b)))*.95);
|
||||
}
|
||||
void brightness_whole(inout vec4 color) {
|
||||
color *= p.brightness_whole;
|
||||
}
|
||||
void fade_radial(inout vec4 color, in vec2 polar) {
|
||||
float i = p.fade_radial;
|
||||
color.rgb *= clamp(1.-i*max(polar.x-(1.-i), 0.), 0., 1.);
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
vec2 uv = v_uv;
|
||||
|
||||
/* transformation */
|
||||
/* distortion effect */
|
||||
distortion_amnesia(uv);
|
||||
|
||||
vec2 polar = to_polar(uv);
|
||||
polar = radial_displacement(polar);
|
||||
|
||||
distortion_radial(polar);
|
||||
distortion_urgent(polar);
|
||||
uv = to_rectangular(polar);
|
||||
uv = amnesia_displacement(uv);
|
||||
|
||||
uv.x += sin(v_uv.y*PI*2./uni.aa*5.)*.05*p.raster;
|
||||
raster_whole(uv);
|
||||
|
||||
/* pixel manipulation */
|
||||
/* color effect */
|
||||
uv = (uv+1.)/2.;
|
||||
vec4 color = chromatic_aberration(uv);
|
||||
o_color = texture(u_src, uv);
|
||||
|
||||
if (p.whole_blur > 0.) color = mix(color, blur(uv), p.whole_blur);
|
||||
aberration_radial(o_color, uv);
|
||||
blur_whole(o_color, uv);
|
||||
|
||||
/* blending */
|
||||
float a = radial_fade(polar.x);
|
||||
o_color = mix(vec4(0., 0., 0., 1), color, a);
|
||||
|
||||
/* color manip */
|
||||
o_color = pow(o_color, vec4(1.4));
|
||||
o_color = min(o_color, vec4(max(o_color.r, max(o_color.g, o_color.b)))*.95);
|
||||
o_color *= p.brightness;
|
||||
contrast_whole(o_color);
|
||||
monochromize_whole(o_color);
|
||||
brightness_whole(o_color);
|
||||
fade_radial(o_color, polar);
|
||||
}
|
||||
|
Reference in New Issue
Block a user