shader_type canvas_item; render_mode unshaded; uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest; uniform vec4 add_color : source_color = vec4(1.0); uniform sampler2D fringe_color; uniform float fringe_threshold; uniform float threshold; varying vec4 global_center; varying vec4 screen_center; void vertex() { vec4 local_center = vec4(0.0, 0.0, 0.0, 1.0); // Transform local center to global coordinates global_center = CANVAS_MATRIX * local_center; // Called for every vertex the material is visible on. } void fragment() { // Called for every pixel the material is visible on. vec4 color = texture(screen_texture, SCREEN_UV); vec4 acol = add_color; acol.a = min(acol.a, color.a); //COLOR = mix(color, add_color, acol.a); vec2 ucrd = vec2(UV.x - 0.5, UV.y - 0.5) * 2.0; float d = ucrd.x * ucrd.x + ucrd.y * ucrd.y; if(d < threshold * threshold){ float ft = threshold - fringe_threshold; if(d < ft * ft){ COLOR = vec4(mix(color.rgb, add_color.rgb, acol.a), color.a); }else{ vec4 f_col = texture(fringe_color, vec2((pow(d, .5) - ft)/fringe_threshold)); COLOR = vec4(mix(color.rgb, f_col.rgb, acol.a), color.a); } }else{ COLOR = vec4(UV, 0, 0); } } //void light() { // // Called for every pixel for every light affecting the CanvasItem. // // Uncomment to replace the default light processing function with this one. //}