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:
authorClément Foucault <foucault.clem@gmail.com>2019-07-09 15:34:38 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-07-09 15:34:56 +0300
commit484794ce6747068f898273328138fb96c263feac (patch)
tree79da5e123e2cab9f9f561f51ede297b795b5b00a /source/blender/draw/engines/eevee/eevee_render.c
parent986ff461fb7ff361f5fb1e5aab49e4f8892258e0 (diff)
Eevee: Fix first sample being accumulated without SSR
We check if the previous iteration (sample) was using a valid double buffer. If it wasn't, we request another iteration. This fix the issue for viewport,viewport render and image render. Related to T65761 Eevee render inconsistency between 3D View, Viewport render, and F12 Render
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);