Pseudo Pixel Sorting V2

Version 2 of this, now with masking support

 

Inspired by: https://www.shadertoy.com/view/tltyzB

Shader code
shader_type canvas_item;

uniform float mask_softness = 1.4; // negative values result in mask being inverted
uniform float mask_threshold = 0.6;

uniform float sort :hint_range(0.0, 2.0)= 0.0;

void fragment(){
	vec2 uv = FRAGCOORD.xy / (1.0 / SCREEN_PIXEL_SIZE).xy;
	vec4 tex = texture(SCREEN_TEXTURE, uv);
	
	// Masking
	float f = mask_softness / 2.0;
	float a = mask_threshold - f;
	float b = mask_threshold + f;
	float average = (tex.x + tex.y + tex.z) / 3.0;
	float mask = smoothstep(a, b, average);
	
	// Pseudo Pixel Sorting
	float sort_threshold = 1.0 - clamp(sort / 2.6, 0.0, 1.0);
	vec2 sort_uv = vec2(uv.x, sort_threshold);
	
	// Curved melting transition
	vec2 transition_uv = uv;
	float turbulance = fract(sin(dot(vec2(transition_uv.x), vec2(12.9, 78.2)))* 437.5);
	transition_uv.y += pow(sort, 2.0 + (sort * 2.0)) * mask * turbulance;
	COLOR = texture(SCREEN_TEXTURE, transition_uv);
	
	// Draw pixel sorting effect behind the melting transition
	if(transition_uv.y > 1.){
		COLOR = texture(SCREEN_TEXTURE, sort_uv);
	}else{
		COLOR = texture(SCREEN_TEXTURE, uv);
	}
	
//	COLOR = vec4(mask, mask, mask, 1.0); // Uncomment this to check mask
}
Tags
glitch, Pixel Sort, pixel sorting, Post processing
The shader code and all code snippets in this post are under CC0 license and can be used freely without the author's permission. Images and videos, and assets depicted in those, do not fall under this license. For more info, see our License terms.

More from Ahopness

Pseudo Pixel Sorting

Gaussian Blur Functions for GLES2

CRT Shader with realistic blurring

Related shaders

Pseudo Pixel Sorting

Sub-Pixel Accurate Pixel-Sprite Filtering

3d Pixel Sway – Godot 4

Subscribe
Notify of
guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
drslowpokephd
drslowpokephd
6 months ago

I was able to get this shader to work by replacing the instances of SCREEN_TEXTURE with TEXTURE