diff options
-rw-r--r-- | release/datafiles/colormanagement/config.ocio | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_colortools.h | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/colortools.c | 17 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 3 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_defaults.c | 1 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_engine.c | 24 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_private.h | 2 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_data.c | 6 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_effect_aa.c | 2 | ||||
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_private.h | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 27 | ||||
-rw-r--r-- | source/blender/imbuf/IMB_colormanagement.h | 2 | ||||
-rw-r--r-- | source/blender/imbuf/intern/colormanagement.c | 2 |
14 files changed, 57 insertions, 41 deletions
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 index d203932bec5..2cd80d202f6 100644 --- a/source/blender/draw/engines/workbench/workbench_private.h +++ b/source/blender/draw/engines/workbench/workbench_private.h @@ -252,7 +252,7 @@ typedef struct WORKBENCH_PrivateData { bool dof_enabled; /* Color Management */ - bool use_color_view_settings; + bool use_color_render_settings; } WORKBENCH_PrivateData; /* Transient data */ typedef struct WORKBENCH_EffectInfo { diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index e0fe0e9a14e..4740879928c 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -232,7 +232,7 @@ void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo); } \ } while (0) -void DRW_transform_to_display(struct GPUTexture *tex, bool use_view_settings); +void DRW_transform_to_display(struct GPUTexture *tex, bool use_view_transform, bool use_render_settings); void DRW_transform_none(struct GPUTexture *tex); void DRW_multisamples_resolve( struct GPUTexture *src_depth, struct GPUTexture *src_color, bool use_depth); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 51490c5feb6..2daeccdd572 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -256,7 +256,7 @@ struct DupliObject *DRW_object_get_dupli(const Object *UNUSED(ob)) * \{ */ /* Use color management profile to draw texture to framebuffer */ -void DRW_transform_to_display(GPUTexture *tex, bool use_view_settings) +void DRW_transform_to_display(GPUTexture *tex, bool use_view_transform, bool use_render_settings) { drw_state_set(DRW_STATE_WRITE_COLOR); @@ -272,19 +272,26 @@ void DRW_transform_to_display(GPUTexture *tex, bool use_view_settings) if (!(DST.options.is_image_render && !DST.options.is_scene_render)) { Scene *scene = DST.draw_ctx.scene; ColorManagedDisplaySettings *display_settings = &scene->display_settings; - ColorManagedViewSettings *active_view_settings; - ColorManagedViewSettings default_view_settings; - if (use_view_settings) { - active_view_settings = &scene->view_settings; + ColorManagedViewSettings view_settings; + if (use_render_settings) { + /* Use full render settings, for renders with scene lighting. */ + view_settings = scene->view_settings; + } + else if (use_view_transform) { + /* Use only view transform + look and nothing else for lookdev without + * scene lighting, as exposure depends on scene light intensity. */ + BKE_color_managed_view_settings_init_render(&view_settings, display_settings, NULL); + STRNCPY(view_settings.view_transform, scene->view_settings.view_transform); + STRNCPY(view_settings.look, scene->view_settings.look); } else { - BKE_color_managed_view_settings_init_render( - &default_view_settings, - display_settings); - active_view_settings = &default_view_settings; + /* For workbench use only default view transform in configuration, + * using no scene settings. */ + BKE_color_managed_view_settings_init_render(&view_settings, display_settings, NULL); } + use_ocio = IMB_colormanagement_setup_glsl_draw_from_space( - active_view_settings, display_settings, NULL, dither, false); + &view_settings, display_settings, NULL, dither, false); } if (!use_ocio) { diff --git a/source/blender/imbuf/IMB_colormanagement.h b/source/blender/imbuf/IMB_colormanagement.h index e5d8fb7f27e..3d41352f9fe 100644 --- a/source/blender/imbuf/IMB_colormanagement.h +++ b/source/blender/imbuf/IMB_colormanagement.h @@ -47,7 +47,7 @@ struct ColorSpace; void IMB_colormanagement_check_file_config(struct Main *bmain); -void IMB_colormanagement_validate_settings(struct ColorManagedDisplaySettings *display_settings, +void IMB_colormanagement_validate_settings(const struct ColorManagedDisplaySettings *display_settings, struct ColorManagedViewSettings *view_settings); const char *IMB_colormanagement_role_colorspace_name_get(int role); diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c index c2fb5e55bcb..27bc28664d9 100644 --- a/source/blender/imbuf/intern/colormanagement.c +++ b/source/blender/imbuf/intern/colormanagement.c @@ -1168,7 +1168,7 @@ void IMB_colormanagement_check_file_config(Main *bmain) } } -void IMB_colormanagement_validate_settings(ColorManagedDisplaySettings *display_settings, +void IMB_colormanagement_validate_settings(const ColorManagedDisplaySettings *display_settings, ColorManagedViewSettings *view_settings) { ColorManagedDisplay *display; |