[Bf-blender-cvs] [470d66397d5] blender2.8: Eevee: Fix ggx sun light.

Clément Foucault noreply at git.blender.org
Tue May 30 17:18:19 CEST 2017


Commit: 470d66397d579944d2cbc54e9596073015b4493e
Author: Clément Foucault
Date:   Tue May 30 15:23:57 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB470d66397d579944d2cbc54e9596073015b4493e

Eevee: Fix ggx sun light.

===================================================================

M	source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
M	source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
index 07fff8ac2d2..e91c4a4411b 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_direct_lib.glsl
@@ -20,6 +20,14 @@ float direct_diffuse_point(LightData ld, ShadingData sd)
 	return bsdf;
 }
 
+/* infinitly far away point source, no decay */
+float direct_diffuse_sun(LightData ld, ShadingData sd)
+{
+	float bsdf = max(0.0, dot(sd.N, -ld.l_forward));
+	bsdf *= M_1_PI; /* Normalize */
+	return bsdf;
+}
+
 /* From Frostbite PBR Course
  * Analitical irradiance from a sphere with correct horizon handling
  * http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf */
@@ -66,13 +74,6 @@ float direct_diffuse_rectangle(LightData ld, ShadingData sd)
 	return bsdf;
 }
 
-/* infinitly far away point source, no decay */
-float direct_diffuse_sun(LightData ld, ShadingData sd)
-{
-	float bsdf = max(0.0, dot(sd.N, -ld.l_forward));
-	bsdf *= M_1_PI; /* Normalize */
-	return bsdf;
-}
 
 #if 0
 float direct_diffuse_unit_disc(vec3 N, vec3 L)
@@ -94,6 +95,13 @@ vec3 direct_ggx_point(ShadingData sd, float roughness, vec3 f0)
 	return F_schlick(f0, VH) * bsdf;
 }
 
+vec3 direct_ggx_sun(LightData ld, ShadingData sd, float roughness, vec3 f0)
+{
+	float bsdf = bsdf_ggx(sd.N, -ld.l_forward, sd.V, roughness);
+	float VH = max(dot(sd.V, normalize(sd.V - ld.l_forward)), 0.0);
+	return F_schlick(f0, VH) * bsdf;
+}
+
 vec3 direct_ggx_sphere(LightData ld, ShadingData sd, float roughness, vec3 f0)
 {
 	vec3 L = normalize(sd.l_vector);
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
index ca3cec62bdb..92069dc37e4 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -86,9 +86,9 @@ void light_shade(
 {
 #ifdef USE_LTC
 	if (ld.l_type == SUN) {
-		diffuse = direct_diffuse_sun(ld, sd) * albedo;
 		/* TODO disk area light */
-		specular = direct_ggx_point(sd, roughness, f0);
+		diffuse = direct_diffuse_sun(ld, sd) * albedo;
+		specular = direct_ggx_sun(ld, sd, roughness, f0);
 	}
 	else if (ld.l_type == AREA) {
 		diffuse =  direct_diffuse_rectangle(ld, sd) * albedo;
@@ -101,11 +101,12 @@ void light_shade(
 #else
 	if (ld.l_type == SUN) {
 		diffuse = direct_diffuse_sun(ld, sd) * albedo;
+		specular = direct_ggx_sun(ld, sd, roughness, f0);
 	}
 	else {
 		diffuse = direct_diffuse_point(ld, sd) * albedo;
+		specular = direct_ggx_point(sd, roughness, f0);
 	}
-	specular = direct_ggx_point(sd, roughness, f0);
 #endif
 }




More information about the Bf-blender-cvs mailing list