shader_type canvas_item; uniform int step_count = 168; uniform int inner = 101; uniform int pixel_size = 121; uniform int highlight = 0; uniform float grid_thickness = 0.125; uniform float offset = 0.0; float mask(float inner_radius, float outer_radius, vec2 p) { if (inner_radius < length(p) && length(p) < outer_radius) { return 1.0; } else { return 0.0; } } float f(vec2 uv, vec2 p) { float angle = atan(p.y, p.x) / PI / 2.0 + 0.5 + offset/float(step_count); float color = round(angle * float(step_count)) / float(step_count); return color; } float grid_mask(vec2 uv) { float x = mod(uv.x*float(pixel_size), 1.0); float y = mod(uv.y*float(pixel_size), 1.0); return step(grid_thickness, x)* step(grid_thickness, y); } void fragment() { vec2 p = UV - vec2(0.5, 0.5); p = round(p * float(pixel_size)) / float(pixel_size); float color = f(UV, p); //color *= edge_mask(UV, vec2(0.002, 0.002)); vec3 chroma = vec3(color, color, color); int i = int(color * float(step_count)); if (i == highlight) { chroma = vec3(0.0, 1.0, 0.0); } else if (i % 2 == 0) { chroma = vec3(0.3, 0.3, 0.3); } else if (i % 2 == 1) { chroma = vec3(0.6, 0.6, 0.6); } chroma *= grid_mask(UV); chroma *= mask(float(inner) / float(pixel_size * 2), 0.5, p); COLOR = vec4(chroma, 1.0); } //void light() { // // Called for every pixel for every light affecting the CanvasItem. // // Uncomment to replace the default light processing function with this one. //}