varying vec3 pos, vpos; float grid(vec2 p, float duty) { float w = duty * 0.5; p = fract(p); return smoothstep(1.0 - w, 1.0, p.x) + (1.0 - smoothstep(0.0, w, p.x)) + smoothstep(1.0 - w, 1.0, p.y) + (1.0 - smoothstep(0.0, w, p.y)); } void main() { vec3 p = pos * 500.0; const vec3 grid_color = vec3(1.0, 0.2, 0.8); const vec3 bg_color = vec3(0.5, 0.1, 1.0); vec3 color = grid_color * grid(p.xz, 0.2); float fog = min(abs(vpos.z) * 0.05, 1.0); gl_FragColor.xyz = mix(color, bg_color, fog); gl_FragColor.a = 1.0; }