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:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-01 22:30:10 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-02-01 22:56:42 +0300
commit9a63fa21eb45038ce747748156da61b14213d6c7 (patch)
tree7e954222ff84e0286fb922da991b2a51ed3c4c1d /source/blender/draw
parent81fc55f563a909e4011bd4dc4c078ab292be3a17 (diff)
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.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c24
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h2
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c6
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_aa.c2
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h2
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c27
7 files changed, 36 insertions, 29 deletions
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) {