[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