X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=shaderlib%2Fcommon.glsl;h=1d5819a1bfc812648cfb800587b5071ab776bd72;hp=94237c7acfd3cec3626497c85761db24b00e9106;hb=6b9338845dfee441cd18ad6c633e4feef8ad14e1;hpb=87b74b1263710b0acb9e0b72283e972fd54ee91b diff --git a/shaderlib/common.glsl b/shaderlib/common.glsl index 94237c7a..1d5819a1 100644 --- a/shaderlib/common.glsl +++ b/shaderlib/common.glsl @@ -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)