vec3 apply_fog(vec3 color) { float sun_amount = 0.0; if (lights_count >= 1U && lights[0].type == LIGHT_DIR) sun_amount = max(dot(normalize(f_pos.xyz), normalize(-lights[0].dir)), 0.0); vec3 fog_color_v = mix(fog_color, lights[0].color, pow(sun_amount, 30.0)); float fog_amount_v = 1.0 - min(1.0, exp(-length(f_pos.xyz) * fog_density)); return mix(color, fog_color_v, fog_amount_v); }