[Bf-blender-cvs] [1250ace6418] blender2.8: Eevee: Fix refraction materials

Clément Foucault noreply at git.blender.org
Thu Nov 8 19:25:28 CET 2018


Commit: 1250ace641814098ed8e6715f6e69c5cbd46f8dd
Author: Clément Foucault
Date:   Thu Nov 8 13:07:22 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB1250ace641814098ed8e6715f6e69c5cbd46f8dd

Eevee: Fix refraction materials

Fix refraction depth not working without ScreenSpace Refraction.
Fix ScreenSpace Refraction masking reflections.

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

M	source/blender/draw/engines/eevee/eevee_materials.c
M	source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl

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

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 212f89e7216..78d5231a793 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -407,10 +407,11 @@ static void add_standard_uniforms(
 		DRW_shgroup_uniform_texture_ref(shgrp, "probePlanars", &vedata->txl->planar_pool);
 		DRW_shgroup_uniform_int(shgrp, "outputSsrId", ssr_id, 1);
 	}
-	if (use_refract && use_ssrefraction) {
-		BLI_assert(refract_depth != NULL);
-		DRW_shgroup_uniform_float(shgrp, "refractionDepth", refract_depth, 1);
-		DRW_shgroup_uniform_texture_ref(shgrp, "colorBuffer", &vedata->txl->refract_color);
+	if (use_refract) {
+		DRW_shgroup_uniform_float_copy(shgrp, "refractionDepth", (refract_depth) ? *refract_depth : 0.0 );
+		if (use_ssrefraction) {
+			DRW_shgroup_uniform_texture_ref(shgrp, "colorBuffer", &vedata->txl->refract_color);
+		}
 	}
 
 	if ((vedata->stl->effects->enabled_effects & EFFECT_VOLUMETRIC) != 0 &&
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 164b6da68bf..091709ebdd1 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_frag.glsl
@@ -330,37 +330,55 @@ void CLOSURE_NAME(
 	/* ---------------------------- */
 #if defined(CLOSURE_GLOSSY) || defined(CLOSURE_REFRACTION)
 
-	#ifdef CLOSURE_REFRACTION
-		#define ACCUM refr_accum
+	#if defined(CLOSURE_GLOSSY) && defined(CLOSURE_REFRACTION)
+		#define GLASS_ACCUM 1
+		#define ACCUM min(refr_accum.a, spec_accum.a)
+	#elif defined(CLOSURE_REFRACTION)
+		#define GLASS_ACCUM 0
+		#define ACCUM refr_accum.a
 	#else
-		#define ACCUM spec_accum
+		#define GLASS_ACCUM 0
+		#define ACCUM spec_accum.a
 	#endif
 
 	/* Starts at 1 because 0 is world probe */
-	for (int i = 1; ACCUM.a < 0.999 && i < prbNumRenderCube && i < MAX_PROBE; ++i) {
+	for (int i = 1; ACCUM < 0.999 && i < prbNumRenderCube && i < MAX_PROBE; ++i) {
 		float fade = probe_attenuation_cube(i, worldPosition);
 
 		if (fade > 0.0) {
 
-	#ifdef CLOSURE_GLOSSY
-			if (!(ssrToggle && ssr_id == outputSsrId)) {
-				vec3 spec = probe_evaluate_cube(i, worldPosition, spec_dir, roughness);
-				accumulate_light(spec, fade, spec_accum);
-			}
+	#if GLASS_ACCUM
+			if (spec_accum.a < 0.999) {
 	#endif
+		#ifdef CLOSURE_GLOSSY
+				if (!(ssrToggle && ssr_id == outputSsrId)) {
+					vec3 spec = probe_evaluate_cube(i, worldPosition, spec_dir, roughness);
+					accumulate_light(spec, fade, spec_accum);
+				}
+		#endif
 
-	#ifdef CLOSURE_CLEARCOAT
-			vec3 C_spec = probe_evaluate_cube(i, worldPosition, C_spec_dir, C_roughness);
-			accumulate_light(C_spec, fade, C_spec_accum);
+		#ifdef CLOSURE_CLEARCOAT
+				vec3 C_spec = probe_evaluate_cube(i, worldPosition, C_spec_dir, C_roughness);
+				accumulate_light(C_spec, fade, C_spec_accum);
+		#endif
+	#if GLASS_ACCUM
+			}
 	#endif
 
-	#ifdef CLOSURE_REFRACTION
-			vec3 trans = probe_evaluate_cube(i, refr_pos, refr_dir, roughnessSquared);
-			accumulate_light(trans, fade, refr_accum);
+	#if GLASS_ACCUM
+			if (refr_accum.a < 0.999) {
+	#endif
+		#ifdef CLOSURE_REFRACTION
+				vec3 trans = probe_evaluate_cube(i, refr_pos, refr_dir, roughnessSquared);
+				accumulate_light(trans, fade, refr_accum);
+		#endif
+	#if GLASS_ACCUM
+			}
 	#endif
 		}
 	}
 
+	#undef GLASS_ACCUM
 	#undef ACCUM
 
 	/* ---------------------------- */



More information about the Bf-blender-cvs mailing list