summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorGilles Roudiere <gilles.roudiere@gmail.com>2017-09-29 13:47:38 +0200
committerGitHub <noreply@github.com>2017-09-29 13:47:38 +0200
commit2c5fa0947d724c0dcb24643f692f7a9d686a5490 (patch)
treec8bd2f60ee8545f350e7a47bf25e60ab0120ac79 /drivers
parentdee100139008bd4dd8c270da6a7f5aa326a32c25 (diff)
parent8cb67b03a9cd7df802ea9a98f6ac2a10e6071cb8 (diff)
Merge pull request #11672 from tagcup/fix_oren_nayar
Fix Oren-Nayar diffuse.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gles3/shaders/scene.glsl5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl
index 9b78430325..5c7cfecf3e 100644
--- a/drivers/gles3/shaders/scene.glsl
+++ b/drivers/gles3/shaders/scene.glsl
@@ -920,6 +920,7 @@ LIGHT_SHADER_CODE
#elif defined(DIFFUSE_OREN_NAYAR)
{
+ // see http://mimosa-pudica.net/improved-oren-nayar.html
float LdotV = dot(L, V);
float NdotL = dot(L, N);
float NdotV = dot(N, V);
@@ -928,10 +929,10 @@ LIGHT_SHADER_CODE
float t = mix(1.0, max(NdotL, NdotV), step(0.0, s));
float sigma2 = roughness * roughness;
- vec3 A = 1.0 + sigma2 * (diffuse_color / (sigma2 + 0.13) + 0.5 / (sigma2 + 0.33));
+ vec3 A = 1.0 + sigma2 * (- 0.5 / (sigma2 + 0.33) + 0.17*diffuse_color / (sigma2 + 0.13) );
float B = 0.45 * sigma2 / (sigma2 + 0.09);
- light_amount = max(0.0, NdotL) * (A + vec3(B) * s / t) / M_PI;
+ light_amount = diffuse_color * dotNL * (A + vec3(B) * s / t) / M_PI;
}
#elif defined(DIFFUSE_TOON)