[Bf-blender-cvs] [e82616aea60] blender2.8: Eevee: SSR: Optimize the AO out when not enabled.

Clément Foucault noreply at git.blender.org
Mon Jan 22 00:14:43 CET 2018


Commit: e82616aea600a5b4062e8af5021905cd9321ea09
Author: Clément Foucault
Date:   Sun Jan 21 17:31:47 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBe82616aea600a5b4062e8af5021905cd9321ea09

Eevee: SSR: Optimize the AO out when not enabled.

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

M	source/blender/draw/engines/eevee/eevee_screen_raytrace.c
M	source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl

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

diff --git a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
index 1b32666adb6..2917bfd1236 100644
--- a/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
+++ b/source/blender/draw/engines/eevee/eevee_screen_raytrace.c
@@ -37,7 +37,8 @@
 enum {
 	SSR_RESOLVE      = (1 << 0),
 	SSR_FULL_TRACE   = (1 << 1),
-	SSR_MAX_SHADER   = (1 << 2),
+	SSR_AO           = (1 << 3),
+	SSR_MAX_SHADER   = (1 << 4),
 };
 
 static struct {
@@ -83,6 +84,9 @@ static struct GPUShader *eevee_effects_screen_raytrace_shader_get(int options)
 		if (options & SSR_FULL_TRACE) {
 			BLI_dynstr_appendf(ds_defines, "#define FULLRES\n");
 		}
+		if (options & SSR_AO) {
+			BLI_dynstr_appendf(ds_defines, "#define SSR_AO\n");
+		}
 		char *ssr_define_str = BLI_dynstr_get_cstring(ds_defines);
 		BLI_dynstr_free(ds_defines);
 
@@ -194,6 +198,7 @@ void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *v
 
 	if ((effects->enabled_effects & EFFECT_SSR) != 0) {
 		int options = (effects->reflection_trace_full) ? SSR_FULL_TRACE : 0;
+		options |= ((effects->enabled_effects & EFFECT_GTAO) != 0) ? SSR_AO : 0;
 
 		struct GPUShader *trace_shader = eevee_effects_screen_raytrace_shader_get(options);
 		struct GPUShader *resolve_shader = eevee_effects_screen_raytrace_shader_get(SSR_RESOLVE | options);
@@ -237,18 +242,14 @@ void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *v
 		DRW_shgroup_uniform_buffer(grp, "hitBuffer", &vedata->txl->ssr_hit_output);
 		DRW_shgroup_uniform_buffer(grp, "pdfBuffer", &stl->g_data->ssr_pdf_output);
 		DRW_shgroup_uniform_buffer(grp, "prevColorBuffer", &txl->color_double_buffer);
-		DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
 		DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
 		DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo);
 		DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
 		DRW_shgroup_uniform_int(grp, "neighborOffset", &effects->ssr_neighbor_ofs, 1);
 		if ((effects->enabled_effects & EFFECT_GTAO) != 0) {
+			DRW_shgroup_uniform_texture(grp, "utilTex", EEVEE_materials_get_util_tex());
 			DRW_shgroup_uniform_buffer(grp, "horizonBuffer", &vedata->txl->gtao_horizons);
 		}
-		else {
-			/* Use ssr_specrough_input as fallback to avoid sampling problem on certain platform, see: T52593 */
-			DRW_shgroup_uniform_buffer(grp, "horizonBuffer", &txl->ssr_specrough_input);
-		}
 
 		DRW_shgroup_call_add(grp, quad, NULL);
 	}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
index 354526b2db9..aa88e365d93 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -191,8 +191,12 @@ void fallback_cubemap(
 
 	vec4 rand = texelfetch_noise_tex(gl_FragCoord.xy);
 	vec3 bent_normal;
+#ifdef SSR_AO
 	float final_ao = occlusion_compute(N, viewPosition, 1.0, rand, bent_normal);
 	final_ao = specular_occlusion(dot(N, V), final_ao, roughness);
+#else
+	const float final_ao = 1.0;
+#endif
 
 	/* Starts at 1 because 0 is world probe */
 	for (int i = 1; i < MAX_PROBE && i < prbNumRenderCube && spec_accum.a < 0.999; ++i) {



More information about the Bf-blender-cvs mailing list