[Bf-blender-cvs] [1be1600c325] blender2.8: Eevee: Draw background after depth prepass.

Clément Foucault noreply at git.blender.org
Mon Jul 31 18:26:59 CEST 2017


Commit: 1be1600c325eb1a52e405fa06fb23f5dca156b17
Author: Clément Foucault
Date:   Mon Jul 31 15:15:42 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB1be1600c325eb1a52e405fa06fb23f5dca156b17

Eevee: Draw background after depth prepass.

Reduce overdraw. 0.4ms goes to 0.01ms if background is completely occluded.

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

M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_lightprobes.c
M	source/blender/draw/engines/eevee/eevee_materials.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index 4272e344119..ea72569b4d0 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -165,15 +165,14 @@ static void EEVEE_draw_scene(void *vedata)
 		DRW_framebuffer_bind(fbl->main);
 		DRW_framebuffer_clear(false, true, false, NULL, 1.0f);
 
-		/* TODO move background after depth pass to cut some overdraw */
-		DRW_draw_pass(psl->background_pass);
-
 		/* Depth prepass */
 		DRW_stats_group_start("Prepass");
 		DRW_draw_pass(psl->depth_pass);
 		DRW_draw_pass(psl->depth_pass_cull);
 		DRW_stats_group_end();
 
+		DRW_draw_pass(psl->background_pass);
+
 		/* Create minmax texture */
 		DRW_stats_group_start("Main MinMax buffer");
 		EEVEE_create_minmax_buffer(vedata, dtxl->depth, -1);
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 7f593c2cc61..7a446d221fa 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -334,7 +334,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *veda
 	memset(pinfo->probes_planar_ref, 0, sizeof(pinfo->probes_planar_ref));
 
 	{
-		psl->probe_background = DRW_pass_create("World Probe Background Pass", DRW_STATE_WRITE_COLOR);
+		psl->probe_background = DRW_pass_create("World Probe Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
 
 		struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
 		DRWShadingGroup *grp = NULL;
@@ -1011,12 +1011,12 @@ static void render_scene_to_probe(
 		DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
 		DRW_viewport_matrix_override_set(winmat, DRW_MAT_WIN);
 
-		DRW_draw_pass(psl->probe_background);
-
 		/* Depth prepass */
 		DRW_draw_pass(psl->depth_pass);
 		DRW_draw_pass(psl->depth_pass_cull);
 
+		DRW_draw_pass(psl->probe_background);
+
 		// EEVEE_create_minmax_buffer(vedata, e_data.cube_face_depth);
 
 		/* Rebind Planar FB */
@@ -1069,6 +1069,7 @@ static void render_scene_to_planar(
 	DRW_framebuffer_clear(false, true, false, NULL, 1.0);
 
 	/* Turn off ssr to avoid black specular */
+	/* TODO : Enable SSR in planar reflections? (Would be very heavy) */
 	sldata->probes->ssr_toggle = false;
 
 	/* Avoid using the texture attached to framebuffer when rendering. */
@@ -1083,9 +1084,6 @@ static void render_scene_to_planar(
 	DRW_viewport_matrix_override_set(viewmat, DRW_MAT_VIEW);
 	DRW_viewport_matrix_override_set(viewinv, DRW_MAT_VIEWINV);
 
-	/* Background */
-	DRW_draw_pass(psl->probe_background);
-
 	/* Since we are rendering with an inverted view matrix, we need
 	 * to invert the facing for backface culling to be the same. */
 	DRW_state_invert_facing();
@@ -1095,6 +1093,9 @@ static void render_scene_to_planar(
 	DRW_draw_pass(psl->depth_pass_clip);
 	DRW_draw_pass(psl->depth_pass_clip_cull);
 
+	/* Background */
+	DRW_draw_pass(psl->probe_background);
+
 	EEVEE_create_minmax_buffer(vedata, tmp_planar_depth, layer);
 
 	/* Rebind Planar FB */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index c1112eedf0d..8cd9dd4829d 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -343,8 +343,9 @@ void EEVEE_materials_init(EEVEE_StorageList *stl)
 		frag_str = BLI_dynstr_get_cstring(ds_frag);
 		BLI_dynstr_free(ds_frag);
 
-		e_data.default_background = DRW_shader_create_fullscreen(
-		        datatoc_default_world_frag_glsl, NULL);
+		e_data.default_background = DRW_shader_create(
+		        datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl,
+		        NULL);
 
 		e_data.default_prepass_sh = DRW_shader_create(
 		        datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
@@ -668,7 +669,7 @@ void EEVEE_materials_cache_init(EEVEE_Data *vedata)
 	}
 
 	{
-		psl->background_pass = DRW_pass_create("Background Pass", DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR);
+		psl->background_pass = DRW_pass_create("Background Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL);
 
 		struct Gwn_Batch *geom = DRW_cache_fullscreen_quad_get();
 		DRWShadingGroup *grp = NULL;




More information about the Bf-blender-cvs mailing list