]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/common.glsl
Implement image-based lighting in PbrMaterial
[libs/gl.git] / shaderlib / common.glsl
index 94237c7acfd3cec3626497c85761db24b00e9106..1d5819a1bfc812648cfb800587b5071ab776bd72 100644 (file)
@@ -8,6 +8,7 @@ uniform EnvMap
 
 uniform sampler2D normal_map;
 uniform samplerCube environment_map;
+uniform samplerCube irradiance_map;
 
 layout(constant_id=auto) const bool use_normal_map = false;
 
@@ -84,15 +85,21 @@ virtual vec3 get_fragment_normal()
                return normalize(world_normal);
 }
 
-virtual vec3 get_environment_sample(vec3 direction)
+virtual vec3 get_environment_sample(vec3 direction, float roughness)
 {
-       return texture(environment_map, env_world_matrix*direction).rgb;
+       float lod = (2-roughness)*roughness*(textureQueryLevels(environment_map)-1);
+       return textureLod(environment_map, env_world_matrix*direction, lod).rgb;
 }
 
 virtual vec3 get_reflection(vec3 normal, vec3 look)
 {
        vec3 reflect_dir = reflect(look, normal);
-       return get_environment_sample(reflect_dir);
+       return get_environment_sample(reflect_dir, 0.0);
+}
+
+virtual vec3 get_irradiance_sample(vec3 normal)
+{
+       return texture(irradiance_map, env_world_matrix*normal).rgb;
 }
 
 vec3 apply_fog(vec3 color)