[Bf-blender-cvs] [f46b908cc5e] blender2.8: Eevee: Expose Shadow filter size.

Clément Foucault noreply at git.blender.org
Sun Sep 10 03:16:45 CEST 2017


Commit: f46b908cc5e62049e911d963303d36c4ab4e3a64
Author: Clément Foucault
Date:   Sat Sep 2 01:42:34 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBf46b908cc5e62049e911d963303d36c4ab4e3a64

Eevee: Expose Shadow filter size.

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

M	release/scripts/startup/bl_ui/properties_data_lamp.py
M	source/blender/draw/engines/eevee/eevee_lights.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
M	source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
M	source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl

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

diff --git a/release/scripts/startup/bl_ui/properties_data_lamp.py b/release/scripts/startup/bl_ui/properties_data_lamp.py
index 6c4d7e9d1c4..c9b5fa80122 100644
--- a/release/scripts/startup/bl_ui/properties_data_lamp.py
+++ b/release/scripts/startup/bl_ui/properties_data_lamp.py
@@ -377,9 +377,12 @@ class DATA_PT_EEVEE_shadow(DataButtonsPanel, Panel):
             split = layout.split()
             split.active = lamp.use_shadow
 
-            col = split.column(align=True)
+            sub = split.column()
+            col = sub.column(align=True)
             col.prop(lamp, "shadow_buffer_clip_start", text="Clip Start")
             col.prop(lamp, "shadow_buffer_clip_end", text="Clip End")
+            col = sub.column()
+            col.prop(lamp, "shadow_buffer_soft", text="Soft")
 
             col = split.column(align=True)
             col.prop(lamp, "shadow_buffer_bias", text="Bias")
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index 20d46619787..b70cfcb01dc 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -754,6 +754,7 @@ void EEVEE_draw_shadows(EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl)
 			srd->shadow_inv_samples_ct = 1.0f / srd->shadow_samples_ct;
 			srd->clip_near = la->clipsta;
 			srd->clip_far = la->clipend;
+			srd->filter_size = la->soft * 0.0005f;
 			copy_v3_v3(srd->position, ob->obmat[3]);
 			for (int j = 0; j < 6; j++) {
 				float tmp[4][4];
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 1507e8be08e..724764b5291 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -231,6 +231,7 @@ typedef struct EEVEE_ShadowRender {
 	float clip_far;
 	float shadow_samples_ct;
 	float shadow_inv_samples_ct;
+	float filter_size;
 } EEVEE_ShadowRender;
 
 /* ************ VOLUME DATA ************ */
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index 713fb2a31d5..97ee6bccafc 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -25,6 +25,7 @@ layout(std140) uniform shadow_render_block {
 	float farClip;
 	float shadowSampleCount;
 	float shadowInvSampleCount;
+	float shadowFilterSize;
 };
 
 flat in int shFace; /* Shadow layer we are rendering to. */
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
index 508df7a6b37..4eafef05082 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_geom.glsl
@@ -9,6 +9,7 @@ layout(std140) uniform shadow_render_block {
 	float farClip;
 	float shadowSampleCount;
 	float shadowInvSampleCount;
+	float shadowFilterSize;
 };
 
 layout(triangles) in;
diff --git a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
index 9a7161660f7..61a26d999b7 100644
--- a/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/shadow_store_frag.glsl
@@ -9,6 +9,7 @@ layout(std140) uniform shadow_render_block {
 	float farClip;
 	float shadowSampleCount;
 	float shadowInvSampleCount;
+	float shadowFilterSize;
 };
 
 #ifdef CSM
@@ -35,12 +36,13 @@ vec3 octahedral_to_cubemap_proj(vec2 co)
 
 void make_orthonormal_basis(vec3 N, float rot, out vec3 T, out vec3 B)
 {
-	vec3 UpVector = (abs(N.z) < max(abs(N.x), abs(N.y))) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
+	vec3 UpVector = (abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0);
 	vec3 nT = normalize(cross(UpVector, N));
 	vec3 nB = cross(N, nT);
 
 	/* Rotate tangent space */
-	vec2 dir = vec2(cos(rot * 3.1415 * 2.0), sin(rot * 3.1415 * 2.0));
+	float angle = rot * 3.1415 * 2.0;
+	vec2 dir = vec2(cos(angle), sin(angle));
 	T =  dir.x * nT + dir.y * nB;
 	B = -dir.y * nT + dir.x * nB;
 }
@@ -138,7 +140,7 @@ void main() {
 	uvs.xy = fract(uvs.xy);
 
 	/* get cubemap vector */
-	vec3 cubevec = octahedral_to_cubemap_proj(uvs.xy);
+	vec3 cubevec = normalize(octahedral_to_cubemap_proj(uvs.xy));
 
 /* TODO Can be optimized by groupping fetches
  * and by converting to radial distance beforehand. */
@@ -146,8 +148,8 @@ void main() {
 	vec3 T, B;
 	make_orthonormal_basis(cubevec, wang_hash_noise(0u), T, B);
 
-	T *= 0.01;
-	B *= 0.01;
+	T *= shadowFilterSize;
+	B *= shadowFilterSize;
 
 #ifdef ESM
 	float accum = 0.0;



More information about the Bf-blender-cvs mailing list