Eevee: Draw background after depth prepass.
Reduce overdraw. 0.4ms goes to 0.01ms if background is completely occluded.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user