Set shader for ColorRect
shader_type canvas_item;
uniform vec4 cell_color_1 : source_color = vec4(0.1, 0.1, 0.1, 0.2);
uniform vec4 cell_color_2 : source_color = vec4(0, 0, 0, 0.2);
uniform vec2 grid_size = vec2(128, 128);
uniform float line_thickness : hint_range(0, 8) = 0;
uniform float dash_length = 0;
uniform vec4 grid_color : source_color = vec4(1, 1, 1, 0.5);
uniform vec2 sub_grid_size = vec2(64, 64);
uniform float sub_line_thickness : hint_range(0, 20) = 1.0;
uniform float sub_dash_length = 4.0;
uniform vec4 sub_grid_color : source_color = vec4(1, 1, 1, 0.3);
varying vec2 world_pos;
void vertex() {
world_pos = (MODEL_MATRIX * vec4(VERTEX, 0.0, 1.0)).xy;
}
float get_grid_mask(vec2 pos, vec2 size, float thickness, float dash) {
vec2 grid = abs(fract(pos / size - 0.5) - 0.5) * size;
float line = step(min(grid.x, grid.y), thickness);
float d_mask = step(fract((pos.x + pos.y) / (dash * 2.0)), 0.5);
return line * d_mask;
}
void fragment() {
vec2 checker_pos = floor(world_pos / grid_size);
float checker = mod(checker_pos.x + checker_pos.y, 2.0);
vec4 base_color = mix(cell_color_1, cell_color_2, checker);
float s_mask = get_grid_mask(world_pos, sub_grid_size, sub_line_thickness, sub_dash_length);
float m_mask = get_grid_mask(world_pos, grid_size, line_thickness, dash_length);
s_mask *= (1.0 - m_mask);
vec4 out_color = mix(base_color, sub_grid_color, s_mask * sub_grid_color.a);
out_color = mix(out_color, grid_color, m_mask * grid_color.a);
COLOR = out_color * texture(TEXTURE, UV);
}This feature is currently in beta.
Join the discussion! Log in to share your thoughts.
Log In to Comment