Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_render.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c32
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);