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. //}