diff options
author | Hendrik Brucker <hendrik.brucker@mail.de> | 2023-01-24 01:08:32 +0100 |
---|---|---|
committer | Hendrik Brucker <hendrik.brucker@mail.de> | 2023-01-24 01:08:32 +0100 |
commit | 4bd01a93dc82b4ac5734ac2a4af70d49b4559496 (patch) | |
tree | 8c31f94cc0869c21c5c198f8a02907247d39530b /drivers | |
parent | c3539b4561f9b4d7dc4ba1c5859217e7fbf9c6fe (diff) |
Fix some SpotLight3D issues (clustering artifacts, light leak)
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gles3/shaders/scene.glsl | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index 951155e287..52ff70f746 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -690,7 +690,8 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, float atte #endif #if defined(LIGHT_RIM_USED) - float rim_light = pow(max(0.0, 1.0 - cNdotV), max(0.0, (1.0 - roughness) * 16.0)); + // Epsilon min to prevent pow(0, 0) singularity which results in undefined behavior. + float rim_light = pow(max(1e-4, 1.0 - cNdotV), max(0.0, (1.0 - roughness) * 16.0)); diffuse_light += rim_light * rim * mix(vec3(1.0), albedo, rim_tint) * light_color; #endif } |