X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=shaderlib%2Fcommon.glsl;h=dd8ac11f2564642078f9360aef97317e79b07497;hb=641e5ebbda682a6df6f84a4627e3728dbcef3683;hp=94237c7acfd3cec3626497c85761db24b00e9106;hpb=82282de52e8e8f3bbafefaf92bf76f53f2c2495e;p=libs%2Fgl.git diff --git a/shaderlib/common.glsl b/shaderlib/common.glsl index 94237c7a..dd8ac11f 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; @@ -51,8 +52,6 @@ void standard_transform() out vec3 world_light_dir = light_sources[0].position.xyz-world_vertex.xyz*light_sources[0].position.w; - out vec3 world_halfway_dir = normalize(world_light_dir-world_look_dir); - out float fog_coord = eye_vertex.z; if(use_clipping) @@ -84,15 +83,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)