30 lines
No EOL
1.2 KiB
Text
30 lines
No EOL
1.2 KiB
Text
shader_type canvas_item;
|
|
|
|
// The color you want to replace (e.g., your #325512 background)
|
|
uniform vec4 key_color : source_color = vec4(0.196, 0.333, 0.071, 1.0);
|
|
// How close the color needs to be to match (0.01 to 0.1 is usually best)
|
|
uniform float sensitivity : hint_range(0.0, 1.0) = 0.05;
|
|
// Read the screen behind this shader
|
|
uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest;
|
|
|
|
void fragment() {
|
|
// 1. Get the original color of the screen at this position
|
|
vec4 screen_color = texture(screen_texture, SCREEN_UV);
|
|
|
|
// 2. Calculate the difference between the screen pixel and our target color
|
|
// We use the distance formula in 3D space:
|
|
// d = sqrt((r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2)
|
|
float diff = distance(screen_color.rgb, key_color.rgb);
|
|
|
|
if (diff <= sensitivity) {
|
|
// --- START YOUR EFFECT HERE ---
|
|
// Example: Making it pulse red
|
|
vec3 effect = screen_color.rgb + vec3(sin(TIME) * 0.5, 0.0, 0.0);
|
|
|
|
COLOR = vec4(effect, screen_color.a);
|
|
// --- END YOUR EFFECT HERE ---
|
|
} else {
|
|
// If it's NOT the target color, draw the screen exactly as it is
|
|
COLOR = screen_color;
|
|
}
|
|
} |