     // TODO: remove
     if(gl_FrontFacing)
     {
-        diffuse_mul = max(0.0, dot(normal_vec, normalize(dir)));
+        diffuse_mul = max(0.0, dot(normal_vec, dir));
         specular_mul = max(0.0, dot(normal_vec, half_vec));
     }
     else
     {
-        diffuse_mul = max(0.0, dot(-normal_vec, normalize(dir)));
+        diffuse_mul = max(0.0, dot(-normal_vec, dir));
         specular_mul = max(0.0, dot(-normal_vec, half_vec));
     }
 

    if(!dir_light.base.enabled)
        return;

    calc_common_lighting(normal_vec, dir_light.dir, dir_light.half_vec, material, dir_light.base, 1.0,
        scattered, reflected);
}

    tangent = normalize(tangent - dot(tangent, normal) * normal);
    vec3 bitangent = cross(tangent, normal);

    mat3 tangent_bitangent_normal = mat3(tangent, bitangent, normal);

    vec3 map_normal = texture(normal_map, tex_coord).xyz;
    map_normal = 2.0 * map_normal - vec3(1.0, 1.0, 1.0);

    vec3 new_normal = tangent_bitangent_normal * map_normal;
    return normalize(new_normal);
}

void calc_common_lighting(in vec3 normal_vec, in vec3 dir, in vec3 half_vec,
