format_shaders/exo2/shaders/2_read_screen_tex.gdshader
2025-05-15 14:28:08 +02:00

34 lines
1.3 KiB
Text

shader_type canvas_item;
render_mode blend_disabled;
// On definit un uniform, donc quelque chose que le shader a en input
// ici hint_screen_texture signifie qu'on recupere la texture de l'ecran
// repeat_disable qu'on souhaite pas que la texture soit infinie et se repete
// filter_nearest qu'on veut pas d'interpolation bizzare
uniform sampler2D screen_tex : hint_screen_texture, repeat_disable, filter_nearest;
uniform vec3 new_green_color : source_color;
void fragment() {
// Called for every pixel the material is visible on.
vec3 screen_color = texture(screen_tex, SCREEN_UV).rgb;
// Le produit scalaire (dot) est tres utile pour avoir une sorte de distance entre deux vecteurs
// On veut savoir si le pixel derriere est vert,
// donc on compare ca au vecteur vert rgb normalize (vec3(0, 1, 0))
bool is_green = dot(normalize(screen_color), vec3(0, 1, 0)) > 0.69;
if (is_green){
// Moyenne ponderee, pour eviter d'avoir que du rouge (trop flat)
COLOR.rgb = (3.0*new_green_color + screen_color)/4.0;
}
else{
COLOR.rgb = screen_color;
}
// TODO
// Ajoute du bruit, je veux que les feuilles aient du bruit
// Ajoute une sorte de cadre, je veux bien voir les bordures de l'effet
}
//void light() {
// // Called for every pixel for every light affecting the CanvasItem.
// // Uncomment to replace the default light processing function with this one.
//}