[Bf-blender-cvs] [a0c564f86aa] blender2.8: Eevee: Hair: Disable SSR for hairs.

Clément Foucault noreply at git.blender.org
Mon May 14 00:10:07 CEST 2018


Commit: a0c564f86aafd17f1614620dbe918898635a1e35
Author: Clément Foucault
Date:   Mon May 14 00:18:00 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBa0c564f86aafd17f1614620dbe918898635a1e35

Eevee: Hair: Disable SSR for hairs.

SSR does not work with hair strands. Basically, the rays are too much
random to ever converge properly and just result in a soup of self
inter reflections.

So forcing it to not produce any SSR. Could potentially save some bandwidth
by not rendering hair to the SSR buffers.

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

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

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

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 80d305cb1e8..704b039e0f6 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -671,6 +671,7 @@ struct Closure {
 /* This is hacking ssr_id to tag transparent bsdf */
 #define TRANSPARENT_CLOSURE_FLAG -2
 #define REFRACT_CLOSURE_FLAG -3
+#define NO_SSR -999
 
 #  ifdef USE_SSS
 #    ifdef USE_SSS_ALBEDO
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 ca33aa99ed9..737a2977146 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -177,6 +177,13 @@ void CLOSURE_NAME(
 	float cos_theta = rand.x * 2.0 - 1.0;
 	float sin_theta = sqrt(max(0.0, 1.0f - cos_theta*cos_theta));;
 	N = N * sin_theta + B * cos_theta;
+
+#  ifdef CLOSURE_GLOSSY
+	/* Hair random normal does not work with SSR :(.
+	 * It just create self reflection feedback (which is beautifful btw)
+	 * but not correct. */
+	ssr_id = NO_SSR; /* Force bypass */
+#  endif
 #endif
 
 	/* ---------------------------------------------------------------- */
@@ -385,6 +392,12 @@ void CLOSURE_NAME(
 	}
 
 	out_spec += spec_accum.rgb * ssr_spec * spec_occlu * float(specToggle);
+
+#  ifdef HAIR_SHADER
+	/* Hack: Overide spec color so that ssr will not be computed
+	 * even if ssr_id match the active ssr. */
+	ssr_spec = vec3(0.0);
+#  endif
 #endif
 
 #ifdef CLOSURE_REFRACTION



More information about the Bf-blender-cvs mailing list