Gameboy Look

A simple shader which gives your game a gameboy look.

Shader code
shader_type canvas_item;

uniform vec4 whiteColor : hint_color = vec4(0.627, 0.812, 0.039, 1.0);
uniform vec4 lightGreyColor : hint_color = vec4(0.549, 0.749, 0.039, 1.0);
uniform vec4 darkGreyColor : hint_color = vec4(0.18, 0.451, 0.125, 1.0);
uniform vec4 blackColor : hint_color = vec4(0.0, 0.247, 0.0, 1.0);

float min4(float a, float b, float c, float d){
	return min(a, min(b, min(c, d)));
}

void fragment(){
	vec4 currentColor = texture(SCREEN_TEXTURE, SCREEN_UV);
	
	float blackDistance = distance(currentColor, vec4(vec3(0.0), 1.0));
	float whiteDistance = distance(currentColor, vec4(vec3(1.0), 1.0));
	float lightGrayDistance = distance(currentColor, vec4(vec3(0.666, 0.666, 0.666), 1.0));
	float darkGrayDistance = distance(currentColor, vec4(vec3(0.333, 0.333, 0.333), 1.0));
	
	if (
		whiteDistance == min4(whiteDistance, lightGrayDistance, darkGrayDistance, blackDistance)
	)
	{
		COLOR = whiteColor;
	}
	else if (
		blackDistance == min4(whiteDistance, lightGrayDistance, darkGrayDistance, blackDistance)
	)
	{
		COLOR = blackColor;
	}
	else if (
		darkGrayDistance == min4(whiteDistance, lightGrayDistance, darkGrayDistance, blackDistance)
	)
	{
		COLOR = darkGreyColor;
	}
	else if (
		lightGrayDistance == min4(whiteDistance, lightGrayDistance, darkGrayDistance, blackDistance)
	)
	{
		COLOR = lightGreyColor;
	}
	else{
		COLOR = whiteColor;
	}
}
Tags
2d, color effect, effect
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.
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
CJ Lewis
2 months ago

Thanks for posting