shader_type canvas_item; render_mode skip_vertex_transform; uniform vec4 color_1 : hint_color = vec4(1.0, 1.0, 1.0, 1.0); uniform vec4 color_2 : hint_color = vec4(0.0, 0.0, 0.0, 1.0); uniform vec2 checker_size = vec2(8.0, 8.0); uniform vec2 cycle_speed = vec2(0.0, 0.0); uniform vec2 pan_speed = vec2(0.0, 0.0); uniform mat4 uv_transform = mat4(1.0); float checker(vec2 uv) { vec2 div_uv = floor((uv) / checker_size); float fmodResult = mod(div_uv.x + div_uv.y, 2.0); return max(sign(fmodResult), 0.0); } void vertex() { UV = VERTEX; VERTEX = (WORLD_MATRIX * (EXTRA_MATRIX * vec4(VERTEX, 0.0, 1.0))).xy; } void fragment() { vec2 uv = UV - pan_speed * TIME; uv = (uv_transform * vec4(uv, 0.0, 1.0)).xy; uv -= cycle_speed * TIME; COLOR = mix(color_1, color_2, checker(uv)); }