[Bf-blender-cvs] [9a63fa21eb4] master: Color management: change view transform for color pickers and display modes.

Brecht Van Lommel noreply at git.blender.org
Fri Feb 1 20:57:29 CET 2019


Commit: 9a63fa21eb45038ce747748156da61b14213d6c7
Author: Brecht Van Lommel
Date:   Fri Feb 1 20:30:10 2019 +0100
Branches: master
https://developer.blender.org/rB9a63fa21eb45038ce747748156da61b14213d6c7

Color management: change view transform for color pickers and display modes.

* Use simple default view transform for color pickers, as Filmic does not work
  well for all types of colors. We better handle this with an option and tagging
  of colors as emissive or albedo like.
* For solid/workbench we also no longer use Filmic, as there is not enough contrast
  and it's not really needed since this is not physically based lighting.
* For lookdev always take into account the view transform and look. Other view
  settings like exposure are only taken into account if scene lighting is used,
  since these are often dependent on scene light intensity.

Fixes T61022, T57649, T59363.

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

M	release/datafiles/colormanagement/config.ocio
M	source/blender/blenkernel/BKE_colortools.h
M	source/blender/blenkernel/intern/colortools.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/versioning_defaults.c
M	source/blender/draw/engines/eevee/eevee_engine.c
M	source/blender/draw/engines/eevee/eevee_private.h
M	source/blender/draw/engines/workbench/workbench_data.c
M	source/blender/draw/engines/workbench/workbench_effect_aa.c
M	source/blender/draw/engines/workbench/workbench_private.h
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/imbuf/IMB_colormanagement.h
M	source/blender/imbuf/intern/colormanagement.c

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

diff --git a/release/datafiles/colormanagement/config.ocio b/release/datafiles/colormanagement/config.ocio
index 411af8ebdf2..e9663382b04 100644
--- a/release/datafiles/colormanagement/config.ocio
+++ b/release/datafiles/colormanagement/config.ocio
@@ -70,7 +70,7 @@ displays:
     - !<View> {name: Default, colorspace: Raw}
 
 active_displays: [sRGB, DCIP3, Rec709, XYZ, None]
-active_views: [Filmic, Default, RRT, Raw, Log]
+active_views: [Default, Filmic, RRT, Raw, Log]
 
 colorspaces:
   - !<ColorSpace>
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index 49508fee05c..15015eb85e0 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -94,10 +94,12 @@ void BKE_color_managed_display_settings_copy(
         const struct ColorManagedDisplaySettings *settings);
 
 /* Initialize view settings to be best suitable for render type of viewing.
- * This will use default view transform from the OCIO configuration. */
+ * This will use default view transform from the OCIO configuration if none
+ * is specified. */
 void BKE_color_managed_view_settings_init_render(
         struct ColorManagedViewSettings *settings,
-        const struct ColorManagedDisplaySettings *display_settings);
+        const struct ColorManagedDisplaySettings *display_settings,
+        const char *view_transform);
 
 /* Initialize view settings which are best suitable for viewing non-render
  * images. For example,s movie clips while tracking. */
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index 8f05634322a..487468b1c61 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -1574,23 +1574,28 @@ void BKE_color_managed_display_settings_copy(ColorManagedDisplaySettings *new_se
 
 void BKE_color_managed_view_settings_init_render(
         ColorManagedViewSettings *view_settings,
-        const ColorManagedDisplaySettings *display_settings)
+        const ColorManagedDisplaySettings *display_settings,
+        const char *view_transform)
 {
 	struct ColorManagedDisplay *display =
 	        IMB_colormanagement_display_get_named(
 	                display_settings->display_device);
-	BLI_strncpy(
-	        view_settings->view_transform,
-	        IMB_colormanagement_display_get_default_view_transform_name(display),
-	        sizeof(view_settings->view_transform));
+
+	if (!view_transform) {
+		view_transform = IMB_colormanagement_display_get_default_view_transform_name(display);
+	}
+
 	/* TODO(sergey): Find a way to make look query more reliable with non
 	 * default configuration. */
-	BLI_strncpy(view_settings->look, "None", sizeof(view_settings->look));
+	STRNCPY(view_settings->view_transform, view_transform);
+	STRNCPY(view_settings->look, "None");
 
 	view_settings->flag = 0;
 	view_settings->gamma = 1.0f;
 	view_settings->exposure = 0.0f;
 	view_settings->curve_mapping = NULL;
+
+	IMB_colormanagement_validate_settings(display_settings, view_settings);
 }
 
 void BKE_color_managed_view_settings_init_default(
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 618b2f94812..9c7a911e478 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -773,7 +773,8 @@ void BKE_scene_init(Scene *sce)
 
 	BKE_color_managed_display_settings_init(&sce->display_settings);
 	BKE_color_managed_view_settings_init_render(&sce->view_settings,
-	                                            &sce->display_settings);
+	                                            &sce->display_settings,
+	                                            "Filmic");
 	BLI_strncpy(sce->sequencer_colorspace_settings.name, colorspace_name,
 	            sizeof(sce->sequencer_colorspace_settings.name));
 
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 22c58c9e479..bfb236b0167 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -301,6 +301,7 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
 			if (app_template && STREQ(app_template, "Video_Editing")) {
 				/* Filmic is too slow, use default until it is optimized. */
 				STRNCPY(scene->view_settings.view_transform, "Default");
+				STRNCPY(scene->view_settings.look, "None");
 			}
 			else {
 				/* AV Sync break physics sim caching, disable until that is fixed. */
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index cea89f531ac..6120a036deb 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -53,7 +53,7 @@ static void eevee_engine_init(void *ved)
 		/* Alloc transient pointers */
 		stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
 	}
-	stl->g_data->use_color_view_settings = USE_SCENE_LIGHT(v3d) || !LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d);
+	stl->g_data->use_color_render_settings = USE_SCENE_LIGHT(v3d) || !LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d);
 	stl->g_data->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
 	stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL);
 	stl->g_data->valid_taa_history = (txl->taa_history != NULL);
@@ -308,39 +308,39 @@ static void eevee_draw_background(void *vedata)
 
 
 	/* Tonemapping and transfer result to default framebuffer. */
-	bool use_view_settings = stl->g_data->use_color_view_settings;
+	bool use_render_settings = stl->g_data->use_color_render_settings;
 
 	GPU_framebuffer_bind(dfbl->default_fb);
-	DRW_transform_to_display(stl->effects->final_tx, use_view_settings);
+	DRW_transform_to_display(stl->effects->final_tx, true, use_render_settings);
 
 	/* Debug : Output buffer to view. */
 	switch (G.debug_value) {
 		case 1:
-			if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer, use_view_settings);
+			if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer, false, false);
 			break;
 		case 2:
-			if (effects->ssr_pdf_output) DRW_transform_to_display(effects->ssr_pdf_output, use_view_settings);
+			if (effects->ssr_pdf_output) DRW_transform_to_display(effects->ssr_pdf_output, false, false);
 			break;
 		case 3:
-			if (effects->ssr_normal_input) DRW_transform_to_display(effects->ssr_normal_input, use_view_settings);
+			if (effects->ssr_normal_input) DRW_transform_to_display(effects->ssr_normal_input, false, false);
 			break;
 		case 4:
-			if (effects->ssr_specrough_input) DRW_transform_to_display(effects->ssr_specrough_input, use_view_settings);
+			if (effects->ssr_specrough_input) DRW_transform_to_display(effects->ssr_specrough_input, false, false);
 			break;
 		case 5:
-			if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer, use_view_settings);
+			if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer, false, false);
 			break;
 		case 6:
-			if (effects->gtao_horizons_debug) DRW_transform_to_display(effects->gtao_horizons_debug, use_view_settings);
+			if (effects->gtao_horizons_debug) DRW_transform_to_display(effects->gtao_horizons_debug, false, false);
 			break;
 		case 7:
-			if (effects->gtao_horizons) DRW_transform_to_display(effects->gtao_horizons, use_view_settings);
+			if (effects->gtao_horizons) DRW_transform_to_display(effects->gtao_horizons, false, false);
 			break;
 		case 8:
-			if (effects->sss_data) DRW_transform_to_display(effects->sss_data, use_view_settings);
+			if (effects->sss_data) DRW_transform_to_display(effects->sss_data, false, false);
 			break;
 		case 9:
-			if (effects->velocity_tx) DRW_transform_to_display(effects->velocity_tx, use_view_settings);
+			if (effects->velocity_tx) DRW_transform_to_display(effects->velocity_tx, false, false);
 			break;
 		default:
 			break;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index df107e55fff..d2e38f4a3ce 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -815,7 +815,7 @@ typedef struct EEVEE_PrivateData {
 	float mist_start, mist_inv_dist, mist_falloff;
 
 	/* Color Management */
-	bool use_color_view_settings;
+	bool use_color_render_settings;
 } EEVEE_PrivateData; /* Transient data */
 
 /* eevee_data.c */
diff --git a/source/blender/draw/engines/workbench/workbench_data.c b/source/blender/draw/engines/workbench/workbench_data.c
index d3fde2dd26a..998b70831ea 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -42,17 +42,17 @@ void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
 	View3D *v3d = draw_ctx->v3d;
 	if (!v3d) {
 		wpd->shading = scene->display.shading;
-		wpd->use_color_view_settings = true;
+		wpd->use_color_render_settings = true;
 	}
 	else if (v3d->shading.type == OB_RENDER &&
 	         BKE_scene_uses_blender_workbench(scene))
 	{
 		wpd->shading = scene->display.shading;
-		wpd->use_color_view_settings = true;
+		wpd->use_color_render_settings = true;
 	}
 	else {
 		wpd->shading = v3d->shading;
-		wpd->use_color_view_settings = false;
+		wpd->use_color_render_settings = false;
 	}
 
 	if (wpd->shading.light == V3D_LIGHTING_MATCAP) {
diff --git a/source/blender/draw/engines/workbench/workbench_effect_aa.c b/source/blender/draw/engines/workbench/workbench_effect_aa.c
index 04907ea5523..27bec676836 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_aa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_aa.c
@@ -61,7 +61,7 @@ static void workspace_aa_draw_transform(GPUTexture *tx, WORKBENCH_PrivateData *w
 	}
 	else {
 		/* Display space result for viewport. */
-		DRW_transform_to_display(tx, wpd->use_color_view_settings);
+		DRW_transform_to_display(tx, wpd->use_color_render_settings, wpd->use_color_render_settings);
 	}
 }
 
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list