From 1065f8dc863bbc2dac985213c5e95b5d2b238ed3 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Sun, 8 Aug 2021 19:29:02 -0700 Subject: [PATCH] Add horizon specular occlusion --- drivers/gles2/shaders/scene.glsl | 2 ++ drivers/gles3/shaders/scene.glsl | 2 ++ 2 files changed, 4 insertions(+) diff --git a/drivers/gles2/shaders/scene.glsl b/drivers/gles2/shaders/scene.glsl index 12a6bbb55ace..fb890153c003 100644 --- a/drivers/gles2/shaders/scene.glsl +++ b/drivers/gles2/shaders/scene.glsl @@ -1686,6 +1686,8 @@ FRAGMENT_SHADER_CODE ref_vec.z *= -1.0; specular_light = textureCubeLod(radiance_map, ref_vec, roughness * RADIANCE_MAX_LOD).xyz * bg_energy; + float horizon = min(1.0 + dot(ref_vec, normal), 1.0); + specular_light *= horizon * horizon; #ifndef USE_LIGHTMAP { vec3 ambient_dir = normalize((radiance_inverse_xform * vec4(normal, 0.0)).xyz); diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index 8de8b478b7da..782a4be915e9 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -1882,6 +1882,8 @@ FRAGMENT_SHADER_CODE ref_vec = normalize((radiance_inverse_xform * vec4(ref_vec, 0.0)).xyz); vec3 radiance = textureDualParaboloid(radiance_map, ref_vec, roughness) * bg_energy; env_reflection_light = radiance; + float horizon = min(1.0 + dot(ref_vec, normal), 1.0); + env_reflection_light *= horizon * horizon; } } #ifndef USE_LIGHTMAP