This commit is contained in:
2024-03-09 13:30:29 +08:00
parent 9b88453b4e
commit 7f124132ed
29 changed files with 1831 additions and 1720 deletions

View File

@@ -20,7 +20,7 @@ extern MY_HIGHP_OR_MEDIUMP number scanlines;
vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
{
//Keep the original texture coords
vec2 orig_tc = tc;
MY_HIGHP_OR_MEDIUMP vec2 orig_tc = tc;
//recenter
tc = tc*2.0 - vec2(1.0);
@@ -31,17 +31,17 @@ vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
//smoothly transition the edge to black
//buffer for the outer edge, this gets wonky if there is no buffer
number mask = (1.0 - smoothstep(1.0-feather_fac,1.0,abs(tc.x) - BUFF))
MY_HIGHP_OR_MEDIUMP number mask = (1.0 - smoothstep(1.0-feather_fac,1.0,abs(tc.x) - BUFF))
* (1.0 - smoothstep(1.0-feather_fac,1.0,abs(tc.y) - BUFF));
//undo the recenter
tc = (tc + vec2(1.0))/2.0;
//Create the horizontal glitch offset effects
number offset_l = 0.;
number offset_r = 0.;
MY_HIGHP_OR_MEDIUMP number offset_l = 0.;
MY_HIGHP_OR_MEDIUMP number offset_r = 0.;
if(glitch_intensity > 0.01){
number timefac = 3.0*time;
MY_HIGHP_OR_MEDIUMP number timefac = 3.0*time;
offset_l = 50.0*(-3.5+sin(timefac*0.512 + tc.y*40.0)
+ sin(-timefac*0.8233 + tc.y*81.532)
+ sin(timefac*0.333 + tc.y*30.3)
@@ -65,18 +65,18 @@ vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
}
//Apply mask and bulging effect
vec4 crt_tex = Texel( tex, tc);
MY_HIGHP_OR_MEDIUMP vec4 crt_tex = Texel( tex, tc);
//intensity multiplier for any visual artifacts
float artifact_amplifier = (abs(clamp(offset_l, clamp(offset_r, -1.0, 0.0), 1.0))*glitch_intensity > 0.9 ? 3. : 1.);
MY_HIGHP_OR_MEDIUMP float artifact_amplifier = (abs(clamp(offset_l, clamp(offset_r, -1.0, 0.0), 1.0))*glitch_intensity > 0.9 ? 3. : 1.);
//Horizontal Chromatic Aberration
float crt_amout_adjusted = (max(0., (crt_intensity)/(0.16*0.3)))*artifact_amplifier;
MY_HIGHP_OR_MEDIUMP float crt_amout_adjusted = (max(0., (crt_intensity)/(0.16*0.3)))*artifact_amplifier;
if(crt_amout_adjusted > 0.0000001) {
crt_tex.r = crt_tex.r*(1.-crt_amout_adjusted) + crt_amout_adjusted*Texel( tex, tc + vec2(0.0005*(1. +10.*(artifact_amplifier - 1.))*1600./love_ScreenSize.x, 0.)).r;
crt_tex.g = crt_tex.g*(1.-crt_amout_adjusted) + crt_amout_adjusted*Texel( tex, tc + vec2(-0.0005*(1. +10.*(artifact_amplifier - 1.))*1600./love_ScreenSize.x, 0.)).g;
}
vec3 rgb_result = crt_tex.rgb*(1.0 - (1.0*crt_intensity*artifact_amplifier));
MY_HIGHP_OR_MEDIUMP vec3 rgb_result = crt_tex.rgb*(1.0 - (1.0*crt_intensity*artifact_amplifier));
//post processing on the glitch effect to amplify green or red for a few lines of pixels
if (sin(time + tc.y*200.0) > 0.85) {
@@ -85,7 +85,7 @@ vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
}
//Add the pixel scanline overlay, a repeated 'pixel' mask that doesn't actually render the real image. If these pixels were used to render the image it would be too harsh
vec3 rgb_scanline = 1.0*vec3(
MY_HIGHP_OR_MEDIUMP vec3 rgb_scanline = 1.0*vec3(
clamp(-0.3+2.0*sin( tc.y * scanlines-3.14/4.0) - 0.8*clamp(sin( tc.x*scanlines*4.0), 0.4, 1.0), -1.0, 2.0),
clamp(-0.3+2.0*cos( tc.y * scanlines) - 0.8*clamp(cos( tc.x*scanlines*4.0), 0.0, 1.0), -1.0, 2.0),
clamp(-0.3+2.0*cos( tc.y * scanlines -3.14/3.0) - 0.8*clamp(cos( tc.x*scanlines*4.0-3.14/4.0), 0.0, 1.0), -1.0, 2.0));
@@ -93,9 +93,9 @@ vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
rgb_result += crt_tex.rgb * rgb_scanline * crt_intensity * artifact_amplifier;
//Add in some noise
number x = (tc.x - mod(tc.x, 0.002)) * (tc.y - mod(tc.y, 0.0013)) * time * 1000.0;
MY_HIGHP_OR_MEDIUMP number x = (tc.x - mod(tc.x, 0.002)) * (tc.y - mod(tc.y, 0.0013)) * time * 1000.0;
x = mod( x, 13.0 ) * mod( x, 123.0 );
number dx = mod( x, 0.11 )/0.11;
MY_HIGHP_OR_MEDIUMP number dx = mod( x, 0.11 )/0.11;
rgb_result = (1.0-clamp( noise_fac*artifact_amplifier, 0.0,1.0 ))*rgb_result + dx * clamp( noise_fac*artifact_amplifier, 0.0,1.0 ) * vec3(1.0,1.0,1.0);
//contrast and brightness correction for the CRT effect, also adjusting brightness for bloom
@@ -104,17 +104,17 @@ vec4 effect(vec4 color, Image tex, vec2 tc, vec2 pc)
rgb_result += vec3(0.5);
//Prepare the final colour to return
vec4 final_col = vec4( rgb_result*1.0, 1.0 );
MY_HIGHP_OR_MEDIUMP vec4 final_col = vec4( rgb_result*1.0, 1.0 );
//Finally apply bloom
vec4 col = vec4(0.0);
float bloom = 0.0;
MY_HIGHP_OR_MEDIUMP vec4 col = vec4(0.0);
MY_HIGHP_OR_MEDIUMP float bloom = 0.0;
if (bloom_fac > 0.00001 && crt_intensity > 0.000001){
bloom = 0.03*(max(0., (crt_intensity)/(0.16*0.3)));
float bloom_dist = 0.0015*float(BLOOM_AMT);
vec4 samp;
float cutoff = 0.6;
MY_HIGHP_OR_MEDIUMP float bloom_dist = 0.0015*float(BLOOM_AMT);
MY_HIGHP_OR_MEDIUMP vec4 samp;
MY_HIGHP_OR_MEDIUMP float cutoff = 0.6;
for (int i = -BLOOM_AMT; i <= BLOOM_AMT; ++i)
for (int j = -BLOOM_AMT; j <= BLOOM_AMT; ++j){
@@ -144,9 +144,9 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
if (hovering <= 0.){
return transform_projection * vertex_position;
}
float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale;
float scale = 0.002*(-0.03 - 0.3*max(0., 0.3-mid_dist))
MY_HIGHP_OR_MEDIUMP float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
MY_HIGHP_OR_MEDIUMP vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale;
MY_HIGHP_OR_MEDIUMP float scale = 0.002*(-0.03 - 0.3*max(0., 0.3-mid_dist))
*hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist);
return transform_projection * vertex_position + vec4(0,0,0,scale);

View File

@@ -1,10 +1,16 @@
extern number time;
extern number spin_time;
extern vec4 colour_1;
extern vec4 colour_2;
extern vec4 colour_3;
extern number contrast;
extern number spin_amount;
#if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH)
#define MY_HIGHP_OR_MEDIUMP highp
#else
#define MY_HIGHP_OR_MEDIUMP mediump
#endif
extern MY_HIGHP_OR_MEDIUMP number time;
extern MY_HIGHP_OR_MEDIUMP number spin_time;
extern MY_HIGHP_OR_MEDIUMP vec4 colour_1;
extern MY_HIGHP_OR_MEDIUMP vec4 colour_2;
extern MY_HIGHP_OR_MEDIUMP vec4 colour_3;
extern MY_HIGHP_OR_MEDIUMP number contrast;
extern MY_HIGHP_OR_MEDIUMP number spin_amount;
#define PIXEL_SIZE_FAC 700.
#define SPIN_EASE 0.5
@@ -12,20 +18,20 @@ extern number spin_amount;
vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords )
{
//Convert to UV coords (0-1) and floor for pixel effect
number pixel_size = length(love_ScreenSize.xy)/PIXEL_SIZE_FAC;
vec2 uv = (floor(screen_coords.xy*(1./pixel_size))*pixel_size - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy) - vec2(0.12, 0.);
number uv_len = length(uv);
MY_HIGHP_OR_MEDIUMP number pixel_size = length(love_ScreenSize.xy)/PIXEL_SIZE_FAC;
MY_HIGHP_OR_MEDIUMP vec2 uv = (floor(screen_coords.xy*(1./pixel_size))*pixel_size - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy) - vec2(0.12, 0.);
MY_HIGHP_OR_MEDIUMP number uv_len = length(uv);
//Adding in a center swirl, changes with time. Only applies meaningfully if the 'spin amount' is a non-zero number
number speed = (spin_time*SPIN_EASE*0.2) + 302.2;
number new_pixel_angle = (atan(uv.y, uv.x)) + speed - SPIN_EASE*20.*(1.*spin_amount*uv_len + (1. - 1.*spin_amount));
vec2 mid = (love_ScreenSize.xy/length(love_ScreenSize.xy))/2.;
MY_HIGHP_OR_MEDIUMP number speed = (spin_time*SPIN_EASE*0.2) + 302.2;
MY_HIGHP_OR_MEDIUMP number new_pixel_angle = (atan(uv.y, uv.x)) + speed - SPIN_EASE*20.*(1.*spin_amount*uv_len + (1. - 1.*spin_amount));
MY_HIGHP_OR_MEDIUMP vec2 mid = (love_ScreenSize.xy/length(love_ScreenSize.xy))/2.;
uv = (vec2((uv_len * cos(new_pixel_angle) + mid.x), (uv_len * sin(new_pixel_angle) + mid.y)) - mid);
//Now add the paint effect to the swirled UV
uv *= 30.;
speed = time*(2.);
vec2 uv2 = vec2(uv.x+uv.y);
MY_HIGHP_OR_MEDIUMP vec2 uv2 = vec2(uv.x+uv.y);
for(int i=0; i < 5; i++) {
uv2 += sin(max(uv.x, uv.y)) + uv;
@@ -34,13 +40,13 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords
}
//Make the paint amount range from 0 - 2
number contrast_mod = (0.25*contrast + 0.5*spin_amount + 1.2);
number paint_res =min(2., max(0.,length(uv)*(0.035)*contrast_mod));
number c1p = max(0.,1. - contrast_mod*abs(1.-paint_res));
number c2p = max(0.,1. - contrast_mod*abs(paint_res));
number c3p = 1. - min(1., c1p + c2p);
MY_HIGHP_OR_MEDIUMP number contrast_mod = (0.25*contrast + 0.5*spin_amount + 1.2);
MY_HIGHP_OR_MEDIUMP number paint_res =min(2., max(0.,length(uv)*(0.035)*contrast_mod));
MY_HIGHP_OR_MEDIUMP number c1p = max(0.,1. - contrast_mod*abs(1.-paint_res));
MY_HIGHP_OR_MEDIUMP number c2p = max(0.,1. - contrast_mod*abs(paint_res));
MY_HIGHP_OR_MEDIUMP number c3p = 1. - min(1., c1p + c2p);
vec4 ret_col = (0.3/contrast)*colour_1 + (1. - 0.3/contrast)*(colour_1*c1p + colour_2*c2p + vec4(c3p*colour_3.rgb, c3p*colour_1.a));
MY_HIGHP_OR_MEDIUMP vec4 ret_col = (0.3/contrast)*colour_1 + (1. - 0.3/contrast)*(colour_1*c1p + colour_2*c2p + vec4(c3p*colour_3.rgb, c3p*colour_1.a));
return ret_col;
}

View File

@@ -18,22 +18,22 @@ vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv)
return vec4(shadow ? vec3(0.,0.,0.) : tex.xyz, shadow ? tex.a*0.3: tex.a);
}
float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values
MY_HIGHP_OR_MEDIUMP float adjusted_dissolve = (dissolve*dissolve*(3.-2.*dissolve))*1.02 - 0.01; //Adjusting 0.0-1.0 to fall to -0.1 - 1.1 scale so the mask does not pause at extreme values
float t = time * 10.0 + 2003.;
vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a);
vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a);
MY_HIGHP_OR_MEDIUMP float t = time * 10.0 + 2003.;
MY_HIGHP_OR_MEDIUMP vec2 floored_uv = (floor((uv*texture_details.ba)))/max(texture_details.b, texture_details.a);
MY_HIGHP_OR_MEDIUMP vec2 uv_scaled_centered = (floored_uv - 0.5) * 2.3 * max(texture_details.b, texture_details.a);
vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324));
vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532));
vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000));
MY_HIGHP_OR_MEDIUMP vec2 field_part1 = uv_scaled_centered + 50.*vec2(sin(-t / 143.6340), cos(-t / 99.4324));
MY_HIGHP_OR_MEDIUMP vec2 field_part2 = uv_scaled_centered + 50.*vec2(cos( t / 53.1532), cos( t / 61.4532));
MY_HIGHP_OR_MEDIUMP vec2 field_part3 = uv_scaled_centered + 50.*vec2(sin(-t / 87.53218), sin(-t / 49.0000));
float field = (1.+ (
MY_HIGHP_OR_MEDIUMP float field = (1.+ (
cos(length(field_part1) / 19.483) + sin(length(field_part2) / 33.155) * cos(field_part2.y / 15.73) +
cos(length(field_part3) / 27.193) * sin(field_part3.x / 21.92) ))/2.;
vec2 borders = vec2(0.2, 0.8);
MY_HIGHP_OR_MEDIUMP vec2 borders = vec2(0.2, 0.8);
float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14))
MY_HIGHP_OR_MEDIUMP float res = (.5 + .5* cos( (adjusted_dissolve) / 82.612 + ( field + -.5 ) *3.14))
- (floored_uv.x > borders.y ? (floored_uv.x - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve)
- (floored_uv.y > borders.y ? (floored_uv.y - borders.y)*(5. + 5.*dissolve) : 0.)*(dissolve)
- (floored_uv.x < borders.x ? (borders.x - floored_uv.x)*(5. + 5.*dissolve) : 0.)*(dissolve)
@@ -52,8 +52,8 @@ vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv)
vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords )
{
vec4 tex = Texel( texture, texture_coords);
vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba;
MY_HIGHP_OR_MEDIUMP vec4 tex = Texel( texture, texture_coords);
MY_HIGHP_OR_MEDIUMP vec2 uv = (((texture_coords)*(image_details)) - texture_details.xy*texture_details.ba)/texture_details.ba;
if (!shadow && dissolve > 0.01){
if (burn_colour_2.a > 0.01){
@@ -76,9 +76,9 @@ vec4 position( mat4 transform_projection, vec4 vertex_position )
if (hovering <= 0.){
return transform_projection * vertex_position;
}
float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale;
float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist))
MY_HIGHP_OR_MEDIUMP float mid_dist = length(vertex_position.xy - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
MY_HIGHP_OR_MEDIUMP vec2 mouse_offset = (vertex_position.xy - mouse_screen_pos.xy)/screen_scale;
MY_HIGHP_OR_MEDIUMP float scale = 0.2*(-0.03 - 0.3*max(0., 0.3-mid_dist))
*hovering*(length(mouse_offset)*length(mouse_offset))/(2. -mid_dist);
return transform_projection * vertex_position + vec4(0,0,0,scale);

View File

@@ -1,9 +1,15 @@
extern number time;
extern number vort_speed;
extern vec4 colour_1;
extern vec4 colour_2;
extern number mid_flash;
extern number vort_offset;
#if defined(VERTEX) || __VERSION__ > 100 || defined(GL_FRAGMENT_PRECISION_HIGH)
#define MY_HIGHP_OR_MEDIUMP highp
#else
#define MY_HIGHP_OR_MEDIUMP mediump
#endif
extern MY_HIGHP_OR_MEDIUMP number time;
extern MY_HIGHP_OR_MEDIUMP number vort_speed;
extern MY_HIGHP_OR_MEDIUMP vec4 colour_1;
extern MY_HIGHP_OR_MEDIUMP vec4 colour_2;
extern MY_HIGHP_OR_MEDIUMP number mid_flash;
extern MY_HIGHP_OR_MEDIUMP number vort_offset;
#define PIXEL_SIZE_FAC 700.
#define BLACK 0.6*vec4(79./255.,99./255., 103./255., 1./0.6)
@@ -11,21 +17,21 @@ extern number vort_offset;
vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords )
{
//Convert to UV coords (0-1) and floor for pixel effect
number pixel_size = length(love_ScreenSize.xy)/PIXEL_SIZE_FAC;
vec2 uv = (floor(screen_coords.xy*(1./pixel_size))*pixel_size - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
number uv_len = length(uv);
MY_HIGHP_OR_MEDIUMP number pixel_size = length(love_ScreenSize.xy)/PIXEL_SIZE_FAC;
MY_HIGHP_OR_MEDIUMP vec2 uv = (floor(screen_coords.xy*(1./pixel_size))*pixel_size - 0.5*love_ScreenSize.xy)/length(love_ScreenSize.xy);
MY_HIGHP_OR_MEDIUMP number uv_len = length(uv);
//Adding in a center swirl, changes with time
number speed = time*vort_speed;
number new_pixel_angle = atan(uv.y, uv.x) + (2.2 + 0.4*min(6.,speed))*uv_len - 1. - speed*0.05 - min(6.,speed)*speed*0.02 + vort_offset;
vec2 mid = (love_ScreenSize.xy/length(love_ScreenSize.xy))/2.;
vec2 sv = vec2((uv_len * cos(new_pixel_angle) + mid.x), (uv_len * sin(new_pixel_angle) + mid.y)) - mid;
MY_HIGHP_OR_MEDIUMP number speed = time*vort_speed;
MY_HIGHP_OR_MEDIUMP number new_pixel_angle = atan(uv.y, uv.x) + (2.2 + 0.4*min(6.,speed))*uv_len - 1. - speed*0.05 - min(6.,speed)*speed*0.02 + vort_offset;
MY_HIGHP_OR_MEDIUMP vec2 mid = (love_ScreenSize.xy/length(love_ScreenSize.xy))/2.;
MY_HIGHP_OR_MEDIUMP vec2 sv = vec2((uv_len * cos(new_pixel_angle) + mid.x), (uv_len * sin(new_pixel_angle) + mid.y)) - mid;
//Now add the smoke effect to the swirled UV
sv *= 30.;
speed = time*(6.)*vort_speed + vort_offset + 1033.;
vec2 uv2 = vec2(sv.x+sv.y);
MY_HIGHP_OR_MEDIUMP vec2 uv2 = vec2(sv.x+sv.y);
for(int i=0; i < 5; i++) {
uv2 += sin(max(sv.x, sv.y)) + sv;
@@ -34,17 +40,17 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords
}
//Make the smoke amount range from 0 - 2
number smoke_res =min(2., max(-2., 1.5 + length(sv)*0.12 - 0.17*(min(10.,time*1.2 - 4.))));
MY_HIGHP_OR_MEDIUMP number smoke_res =min(2., max(-2., 1.5 + length(sv)*0.12 - 0.17*(min(10.,time*1.2 - 4.))));
if (smoke_res < 0.2) {
smoke_res = (smoke_res - 0.2)*0.6 + 0.2;
}
number c1p = max(0.,1. - 2.*abs(1.-smoke_res));
number c2p = max(0.,1. - 2.*(smoke_res));
number cb = 1. - min(1., c1p + c2p);
MY_HIGHP_OR_MEDIUMP number c1p = max(0.,1. - 2.*abs(1.-smoke_res));
MY_HIGHP_OR_MEDIUMP number c2p = max(0.,1. - 2.*(smoke_res));
MY_HIGHP_OR_MEDIUMP number cb = 1. - min(1., c1p + c2p);
vec4 ret_col = colour_1*c1p + colour_2*c2p + vec4(cb*BLACK.rgb, cb*colour_1.a);
number mod_flash = max(mid_flash*0.8, max(c1p, c2p)*5. - 4.4) + mid_flash*max(c1p, c2p);
MY_HIGHP_OR_MEDIUMP vec4 ret_col = colour_1*c1p + colour_2*c2p + vec4(cb*BLACK.rgb, cb*colour_1.a);
MY_HIGHP_OR_MEDIUMP number mod_flash = max(mid_flash*0.8, max(c1p, c2p)*5. - 4.4) + mid_flash*max(c1p, c2p);
return ret_col*(1. - mod_flash) + mod_flash*vec4(1., 1., 1., 1.);
}