StickerClone/shaders/shader_color_replacer.gdshader
2024-07-23 22:31:13 +02:00

43 lines
No EOL
1.4 KiB
Text

shader_type canvas_item;
//Hat
uniform vec4 hat_color : source_color;
uniform vec4 hat_replace_color : source_color;
uniform float hat_color_threshold : hint_range(0.0, 1.0, 0.001);
//Hair
uniform vec4 hair_color : source_color;
uniform vec4 hair_replace_color : source_color;
uniform float hair_color_threshold : hint_range(0.0, 1.0, 0.001);
//Skin
uniform vec4 skin_color : source_color;
uniform vec4 skin_replace_color : source_color;
uniform float skin_color_threshold : hint_range(0.0, 1.0, 0.001);
//Clothes
uniform vec4 clothes_color : source_color;
uniform vec4 clothes_replace_color : source_color;
uniform float clothes_color_threshold : hint_range(0.0, 1.0, 0.001);
void fragment() {
// Called for every pixel the material is visible on.
vec4 tex_color = texture(TEXTURE, UV);
float hat_distance = length(tex_color.rgb - hat_color.rgb);
float hair_distance = length(tex_color.rgb - hair_color.rgb);
float skin_distance = length(tex_color.rgb - skin_color.rgb);
float clothes_distance = length(tex_color.rgb - clothes_color.rgb);
if(hat_distance < hat_color_threshold){
tex_color = hat_replace_color;
}else if(hair_distance < hair_color_threshold){
tex_color = hair_replace_color;
}else if(skin_distance < skin_color_threshold){
tex_color = skin_replace_color;
}else if(clothes_distance < clothes_color_threshold){
tex_color = clothes_replace_color;
}
COLOR = tex_color;
}