[Bf-blender-cvs] [45207bf3ce9] blender2.8: Eevee: Post process parameters.

Clément Foucault noreply at git.blender.org
Wed May 10 16:03:40 CEST 2017


Commit: 45207bf3ce96f008496caf1be8166fd09065c4a0
Author: Clément Foucault
Date:   Wed May 10 15:58:18 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB45207bf3ce96f008496caf1be8166fd09065c4a0

Eevee: Post process parameters.

-Display almost all parameters.
-Made some small adjustment to motion blur to support FOV motion blur.
-Made DOF max radius a parameter.

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

M	release/scripts/startup/bl_ui/properties_render_layer.py
M	source/blender/draw/engines/eevee/eevee_effects.c
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/eevee/shaders/effect_dof_frag.glsl
M	source/blender/draw/engines/eevee/shaders/effect_dof_vert.glsl
M	source/blender/draw/engines/eevee/shaders/effect_motion_blur_frag.glsl
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index 73b87ae96a1..eeb20bfee2d 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -48,7 +48,7 @@ class RENDERLAYER_UL_renderlayers(UIList):
 class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel):
     bl_label = "Layer List"
     bl_options = {'HIDE_HEADER'}
-    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
 
     def draw(self, context):
         layout = self.layout
@@ -150,12 +150,69 @@ class RENDERLAYER_PT_clay_settings(RenderLayerButtonsPanel, Panel):
         col.template_override_property(layer_props, scene_props, "ssao_samples")
 
 
+class RENDERLAYER_PT_eevee_poststack_settings(RenderLayerButtonsPanel, Panel):
+    bl_label = "Post Process Stack"
+    COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+    @classmethod
+    def poll(cls, context):
+        scene = context.scene
+        return scene and (scene.render.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        scene_props = scene.layer_properties['BLENDER_EEVEE']
+        layer = bpy.context.render_layer
+        layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+        col = layout.column()
+        col.template_override_property(layer_props, scene_props, "motion_blur_enable")
+        col.template_override_property(layer_props, scene_props, "dof_enable")
+        col.template_override_property(layer_props, scene_props, "bloom_enable")
+
+class RENDERLAYER_PT_eevee_postprocess_settings(RenderLayerButtonsPanel, Panel):
+    bl_label = "Post Process Settings"
+    COMPAT_ENGINES = {'BLENDER_EEVEE'}
+
+    @classmethod
+    def poll(cls, context):
+        scene = context.scene
+        return scene and (scene.render.engine in cls.COMPAT_ENGINES)
+
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        scene_props = scene.layer_properties['BLENDER_EEVEE']
+        layer = bpy.context.render_layer
+        layer_props = layer.engine_overrides['BLENDER_EEVEE']
+
+        col = layout.column()
+        col.label("Motion Blur:")
+        col.template_override_property(layer_props, scene_props, "motion_blur_samples")
+        col.template_override_property(layer_props, scene_props, "motion_blur_shutter")
+
+        col.label("Depth of Field:")
+        col.template_override_property(layer_props, scene_props, "bokeh_max_size")
+        col.template_override_property(layer_props, scene_props, "bokeh_threshold")
+        col.separator()
+
+        col.label("Bloom:")
+        col.template_override_property(layer_props, scene_props, "bloom_threshold")
+        col.template_override_property(layer_props, scene_props, "bloom_knee")
+        col.template_override_property(layer_props, scene_props, "bloom_radius")
+        col.template_override_property(layer_props, scene_props, "bloom_intensity")
+        col.separator()
+
+
 classes = (
     RENDERLAYER_UL_renderlayers,
     RENDERLAYER_PT_layers,
     RENDERLAYER_UL_renderviews,
     RENDERLAYER_PT_views,
     RENDERLAYER_PT_clay_settings,
+    RENDERLAYER_PT_eevee_poststack_settings,
+    RENDERLAYER_PT_eevee_postprocess_settings,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 0bbcfa3a49e..0135a859865 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -30,11 +30,13 @@
 
 #include "DNA_anim_types.h"
 #include "DNA_camera_types.h"
+#include "DNA_screen_types.h"
 #include "DNA_view3d_types.h"
 
 #include "BKE_camera.h"
 #include "BKE_object.h"
 #include "BKE_animsys.h"
+#include "BKE_screen.h"
 
 #include "eevee_private.h"
 #include "GPU_texture.h"
@@ -81,9 +83,12 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 	EEVEE_EffectsInfo *effects;
 
 	const DRWContextState *draw_ctx = DRW_context_state_get();
+	SceneLayer *scene_layer = draw_ctx->sl;
 	Scene *scene = draw_ctx->scene;
 	View3D *v3d = draw_ctx->v3d;
 	RegionView3D *rv3d = draw_ctx->rv3d;
+	ARegion *ar = draw_ctx->ar;
+	IDProperty *props = BKE_scene_layer_engine_evaluated_get(scene_layer, COLLECTION_MODE_NONE, RE_engine_id_BLENDER_EEVEE);
 
 	const float *viewport_size = DRW_viewport_size_get();
 
@@ -131,27 +136,58 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 	effects->enabled_effects = 0;
 
 #if ENABLE_EFFECT_MOTION_BLUR
-	{
+	if (BKE_collection_engine_property_value_get_bool(props, "motion_blur_enable")) {
 		/* Update Motion Blur Matrices */
 		if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
 			float ctime = BKE_scene_frame_get(scene);
-			float past_obmat[4][4], future_obmat[4][4], winmat[4][4];
-
-			DRW_viewport_matrix_get(winmat, DRW_MAT_WIN);
+			float delta = BKE_collection_engine_property_value_get_float(props, "motion_blur_shutter");
+			float past_obmat[4][4], future_obmat[4][4];
 
 			/* HACK */
-			Object cam_cpy;
+			Object cam_cpy; Camera camdata_cpy;
 			memcpy(&cam_cpy, v3d->camera, sizeof(cam_cpy));
+			memcpy(&camdata_cpy, v3d->camera->data, sizeof(camdata_cpy));
+			cam_cpy.data = &camdata_cpy;
 
 			/* Past matrix */
 			/* FIXME : This is a temporal solution that does not take care of parent animations */
 			/* Recalc Anim manualy */
-			BKE_animsys_evaluate_animdata(scene, &cam_cpy.id, cam_cpy.adt, ctime - 1.0, ADT_RECALC_ANIM);
-			BKE_object_where_is_calc_time(scene, &cam_cpy, ctime - 1.0);
+			BKE_animsys_evaluate_animdata(scene, &cam_cpy.id, cam_cpy.adt, ctime - delta, ADT_RECALC_ALL);
+			BKE_animsys_evaluate_animdata(scene, &camdata_cpy.id, camdata_cpy.adt, ctime - delta, ADT_RECALC_ALL);
+			BKE_object_where_is_calc_time(scene, &cam_cpy, ctime - delta);
+
+			/* Compute winmat */
+			CameraParams params;
+			BKE_camera_params_init(&params);
+
+			/* copy of BKE_camera_params_from_view3d */
+			{
+				params.lens = v3d->lens;
+				params.clipsta = v3d->near;
+				params.clipend = v3d->far;
+
+				/* camera view */
+				BKE_camera_params_from_object(&params, &cam_cpy);
+
+				params.zoom = BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
+
+				params.offsetx = 2.0f * rv3d->camdx * params.zoom;
+				params.offsety = 2.0f * rv3d->camdy * params.zoom;
 
+				params.shiftx *= params.zoom;
+				params.shifty *= params.zoom;
+
+				params.zoom = CAMERA_PARAM_ZOOM_INIT_CAMOB / params.zoom;
+			}
+
+			BKE_camera_params_compute_viewplane(&params, ar->winx, ar->winy, 1.0f, 1.0f);
+			BKE_camera_params_compute_matrix(&params);
+
+			/* FIXME Should be done per view (MULTIVIEW) */
 			normalize_m4_m4(past_obmat, cam_cpy.obmat);
 			invert_m4(past_obmat);
-			mul_m4_m4m4(effects->past_world_to_ndc, winmat, past_obmat);
+			mul_m4_m4m4(effects->past_world_to_ndc, params.winmat, past_obmat);
+
 
 #if 0       /* for future high quality blur */
 			/* Future matrix */
@@ -169,14 +205,14 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 			/* Current matrix */
 			DRW_viewport_matrix_get(effects->current_ndc_to_world, DRW_MAT_PERSINV);
 
-			effects->blur_amount = 0.5f;
+			effects->motion_blur_samples = BKE_collection_engine_property_value_get_int(props, "motion_blur_samples");
 			effects->enabled_effects |= EFFECT_MOTION_BLUR;
 		}
 	}
 #endif /* ENABLE_EFFECT_MOTION_BLUR */
 
 #if ENABLE_EFFECT_BLOOM
-	{
+	if (BKE_collection_engine_property_value_get_bool(props, "bloom_enable")) {
 		/* Bloom */
 		int blitsize[2], texsize[2];
 
@@ -196,11 +232,10 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 		                    &tex_blit, 1);
 
 		/* Parameters */
-		/* TODO UI Options */
-		float threshold = 0.8f;
-		float knee = 0.5f;
-		float intensity = 0.8f;
-		float radius = 8.5f;
+		float threshold = BKE_collection_engine_property_value_get_float(props, "bloom_threshold");
+		float knee = BKE_collection_engine_property_value_get_float(props, "bloom_knee");
+		float intensity = BKE_collection_engine_property_value_get_float(props, "bloom_intensity");
+		float radius = BKE_collection_engine_property_value_get_float(props, "bloom_radius");
 
 		/* determine the iteration count */
 		const float minDim = (float)MIN2(blitsize[0], blitsize[1]);
@@ -212,7 +247,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 		effects->bloom_sample_scale = 0.5f + maxIter - (float)maxIterInt;
 		effects->bloom_curve_threshold[0] = threshold - knee;
 		effects->bloom_curve_threshold[1] = knee * 2.0f;
-		effects->bloom_curve_threshold[2] = 0.25f / knee;
+		effects->bloom_curve_threshold[2] = 0.25f / max_ff(1e-5f, knee);
 		effects->bloom_curve_threshold[3] = threshold;
 		effects->bloom_intensity = intensity;
 
@@ -250,7 +285,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 #endif /* ENABLE_EFFECT_BLOOM */
 
 #if ENABLE_EFFECT_DOF
-	{
+	if (BKE_collection_engine_property_value_get_bool(props, "dof_enable")) {
 		/* Depth Of Field */
 		if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
 			Camera *cam = (Camera *)v3d->camera->data;
@@ -302,6 +337,7 @@ void EEVEE_effects_init(EEVEE_Data *vedata)
 			effects->dof_bokeh[0] = blades;
 			effects->dof_bokeh[1] = rotation;
 			effects->dof_bokeh[2] = ratio;
+			effects->dof_bokeh[3] = BKE_collection_engine_property_value_get_float(props, "bokeh_max_size");
 
 			effects->enabled_effects |= EFFECT_DOF;
 		}
@@ -351,7 +387,7 @@ void EEVEE_effects_cache_init(EEVEE_Data *vedata)
 		psl->motion_blur = DRW_pass_create("Motion Blur", DRW_STATE_WRITE_COLOR);
 
 		DRWShadingGroup *grp = DRW_shgroup_create(e_data.motion_blur_sh, psl->motion_blur);
-		DRW_shgroup_uniform_float(grp, "blurAmount", &effects->blur_amount, 1);
+		DRW_shgroup_uniform_int(grp, "samples", &effects->motion_blur_samples, 1);
 		DRW_shgroup_uniform_mat4(grp, "currInvViewProjMatrix", (float *)effects->current_ndc_to_world);
 		DRW_shgroup_uniform_mat4(grp, "pastViewProjMatrix", (float *)effects->past_world_to_ndc);
 		DRW_shgroup_uniform_buffer(grp, "colorBuffer", &effects->source_buffer);
@@ -432,7 +468,7 @@ void EEVEE_effects_cache_init(EEVEE_Data *vedat

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list