diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_render.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_render.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c index 2afd0b1d313..286bcd8f738 100644 --- a/source/blender/draw/engines/eevee/eevee_render.c +++ b/source/blender/draw/engines/eevee/eevee_render.c @@ -536,6 +536,11 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl return; } + /* SSR needs one iteration to start properly. */ + if (stl->effects->enabled_effects & EFFECT_SSR) { + tot_sample += 1; + } + while (render_samples < tot_sample && !RE_engine_test_break(engine)) { float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f}; float clear_depth = 1.0f; @@ -544,6 +549,25 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl double offset[3] = {0.0, 0.0, 0.0}; double r[3]; + if ((stl->effects->enabled_effects & EFFECT_SSR) && (render_samples == 1) && + !stl->effects->ssr_was_valid_double_buffer) { + /* SSR needs one iteration to start properly. + * This iteration was done, reset to the original target sample count. */ + render_samples--; + tot_sample--; + /* Reset sampling (and accumulation) after the first sample to avoid + * washed out first bounce for SSR. */ + EEVEE_temporal_sampling_reset(vedata); + stl->effects->ssr_was_valid_double_buffer = stl->g_data->valid_double_buffer; + } + /* Don't print every samples as it can lead to bad performance. (see T59649) */ + else if ((render_samples % 25) == 0 || (render_samples + 1) == tot_sample) { + char info[42]; + BLI_snprintf( + info, sizeof(info), "Rendering %u / %u samples", render_samples + 1, tot_sample); + RE_engine_update_stats(engine, NULL, info); + } + /* Copy previous persmat to UBO data */ copy_m4_m4(sldata->common_data.prev_persmat, stl->effects->prev_persmat); @@ -557,14 +581,6 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl EEVEE_lightprobes_refresh(sldata, vedata); EEVEE_lightprobes_refresh_planar(sldata, vedata); - /* Don't print every samples as it can lead to bad performance. (see T59649) */ - if ((render_samples % 25) == 0 || (render_samples + 1) == tot_sample) { - char info[42]; - BLI_snprintf( - info, sizeof(info), "Rendering %u / %u samples", render_samples + 1, tot_sample); - RE_engine_update_stats(engine, NULL, info); - } - /* Refresh Shadows */ EEVEE_lights_update(sldata, vedata); EEVEE_draw_shadows(sldata, vedata, stl->effects->taa_view); |