[Bf-blender-cvs] [f107af35198] blender2.8: Eevee: Add support for TAA/SuperSampling for final render.

Clément Foucault noreply at git.blender.org
Mon Jan 29 22:23:31 CET 2018


Commit: f107af351988ab93aeccad33b1d09b536844c05c
Author: Clément Foucault
Date:   Mon Jan 29 19:39:53 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBf107af351988ab93aeccad33b1d09b536844c05c

Eevee: Add support for TAA/SuperSampling for final render.

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

M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/eevee_render.c
M	source/blender/draw/engines/eevee/eevee_temporal_sampling.c

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

diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 9d801ac1575..218de6ddd88 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -834,6 +834,8 @@ void EEVEE_motion_blur_free(void);
 
 /* eevee_temporal_sampling.c */
 int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
+void EEVEE_temporal_sampling_matrices_calc(
+        EEVEE_EffectsInfo *effects, float viewmat[4][4], float persmat[4][4], double ht_point[2]);
 void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
 void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata);
 void EEVEE_temporal_sampling_free(void);
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index c6db8ee29d7..54c20e661c4 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -163,7 +163,12 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *UNUSED(engine),
 	EEVEE_lights_cache_finish(sldata);
 	EEVEE_lightprobes_cache_finish(sldata, vedata);
 
-	{
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	ViewLayer *view_layer = draw_ctx->view_layer;
+	IDProperty *props = BKE_view_layer_engine_evaluated_get(view_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
+	unsigned int render_samples = BKE_collection_engine_property_value_get_int(props, "taa_render_samples");
+
+	while (render_samples-- > 0) {
 		float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.6f};
 		unsigned int primes[3] = {2, 3, 7};
 		double offset[3] = {0.0, 0.0, 0.0};
@@ -171,16 +176,17 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *UNUSED(engine),
 
 		BLI_halton_3D(primes, offset, stl->effects->taa_current_sample, r);
 		EEVEE_update_noise(psl, fbl, r);
+		EEVEE_temporal_sampling_matrices_calc(stl->effects, g_data->viewmat, g_data->persmat, r);
 
 		/* Refresh Probes & shadows */
 		EEVEE_lightprobes_refresh(sldata, vedata);
 		DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
 		EEVEE_draw_shadows(sldata, psl);
 
-		DRW_viewport_matrix_override_set(g_data->persmat, DRW_MAT_PERS);
-		DRW_viewport_matrix_override_set(g_data->persinv, DRW_MAT_PERSINV);
-		DRW_viewport_matrix_override_set(g_data->winmat, DRW_MAT_WIN);
-		DRW_viewport_matrix_override_set(g_data->wininv, DRW_MAT_WININV);
+		DRW_viewport_matrix_override_set(stl->effects->overide_persmat, DRW_MAT_PERS);
+		DRW_viewport_matrix_override_set(stl->effects->overide_persinv, DRW_MAT_PERSINV);
+		DRW_viewport_matrix_override_set(stl->effects->overide_winmat, DRW_MAT_WIN);
+		DRW_viewport_matrix_override_set(stl->effects->overide_wininv, DRW_MAT_WININV);
 		DRW_viewport_matrix_override_set(g_data->viewmat, DRW_MAT_VIEW);
 		DRW_viewport_matrix_override_set(g_data->viewinv, DRW_MAT_VIEWINV);
 
diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
index f4bf554f5b3..24b8117b6f5 100644
--- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
+++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
@@ -44,6 +44,23 @@ static void eevee_create_shader_temporal_sampling(void)
 	e_data.taa_resolve_sh = DRW_shader_create_fullscreen(datatoc_effect_temporal_aa_glsl, NULL);
 }
 
+void EEVEE_temporal_sampling_matrices_calc(
+        EEVEE_EffectsInfo *effects, float viewmat[4][4], float persmat[4][4], double ht_point[2])
+{
+	const float *viewport_size = DRW_viewport_size_get();
+
+	/* TODO Blackman-Harris filter */
+
+	window_translate_m4(
+	        effects->overide_winmat, persmat,
+	        ((float)(ht_point[0]) * 2.0f - 1.0f) / viewport_size[0],
+	        ((float)(ht_point[1]) * 2.0f - 1.0f) / viewport_size[1]);
+
+	mul_m4_m4m4(effects->overide_persmat, effects->overide_winmat, viewmat);
+	invert_m4_m4(effects->overide_persinv, effects->overide_persmat);
+	invert_m4_m4(effects->overide_wininv, effects->overide_winmat);
+}
+
 int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
 {
 	EEVEE_StorageList *stl = vedata->stl;
@@ -110,14 +127,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data
 
 					BLI_halton_2D(ht_primes, ht_offset, effects->taa_current_sample - 1, ht_point);
 
-					window_translate_m4(
-					        effects->overide_winmat, persmat,
-					        ((float)(ht_point[0]) * 2.0f - 1.0f) / viewport_size[0],
-					        ((float)(ht_point[1]) * 2.0f - 1.0f) / viewport_size[1]);
-
-					mul_m4_m4m4(effects->overide_persmat, effects->overide_winmat, viewmat);
-					invert_m4_m4(effects->overide_persinv, effects->overide_persmat);
-					invert_m4_m4(effects->overide_wininv, effects->overide_winmat);
+					EEVEE_temporal_sampling_matrices_calc(effects, viewmat, persmat, ht_point);
 
 					DRW_viewport_matrix_override_set(effects->overide_persmat, DRW_MAT_PERS);
 					DRW_viewport_matrix_override_set(effects->overide_persinv, DRW_MAT_PERSINV);



More information about the Bf-blender-cvs mailing list