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>2018-07-30 16:44:25 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-07-30 19:51:15 +0300
commitc86b5fa820d181c2beabdf4147ac17cb6ff8149b (patch)
tree4fc26cc4ff4e0cf024a9c15a72b123a67157a8c2
parent2e2e7aff7cb28337684534d2207816946407788b (diff)
Viewport: use Filmic without scene exposure/gamma/curves for workbench.
This ignores the scene color managment view settings for solid mode and lookdev when not using scene lights and world. The scene settings are intended for tweaking renders and should not affect studio lighting and matcaps. There may be cases where a simple sRGB transform is better than Filmic and we could add configuration for this. Not sure if it really matters and it may be better if we just assume matcaps and studiolights are all created for one view transform. Differential Revision: https://developer.blender.org/D3569
-rw-r--r--release/datafiles/colormanagement/config.ocio2
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c23
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h3
-rw-r--r--source/blender/draw/engines/workbench/workbench_data.c3
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_aa.c12
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h3
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c7
8 files changed, 35 insertions, 20 deletions
diff --git a/release/datafiles/colormanagement/config.ocio b/release/datafiles/colormanagement/config.ocio
index ce79dfeb540..c8466ab99fc 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: [Default, RRT, Raw, Log]
+active_views: [Filmic, Default, RRT, Raw, Log]
colorspaces:
- !<ColorSpace>
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index adbe165354a..8c66ba057b5 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -66,6 +66,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->background_alpha = DRW_state_draw_background() ? 1.0f : 0.0f;
stl->g_data->valid_double_buffer = (txl->color_double_buffer != NULL);
@@ -316,37 +317,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;
+
GPU_framebuffer_bind(dfbl->default_fb);
- DRW_transform_to_display(stl->effects->final_tx);
+ DRW_transform_to_display(stl->effects->final_tx, use_view_settings);
/* Debug : Ouput buffer to view. */
switch (G.debug_value) {
case 1:
- if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer);
+ if (txl->maxzbuffer) DRW_transform_to_display(txl->maxzbuffer, use_view_settings);
break;
case 2:
- if (effects->ssr_pdf_output) DRW_transform_to_display(effects->ssr_pdf_output);
+ if (effects->ssr_pdf_output) DRW_transform_to_display(effects->ssr_pdf_output, use_view_settings);
break;
case 3:
- if (effects->ssr_normal_input) DRW_transform_to_display(effects->ssr_normal_input);
+ if (effects->ssr_normal_input) DRW_transform_to_display(effects->ssr_normal_input, use_view_settings);
break;
case 4:
- if (effects->ssr_specrough_input) DRW_transform_to_display(effects->ssr_specrough_input);
+ if (effects->ssr_specrough_input) DRW_transform_to_display(effects->ssr_specrough_input, use_view_settings);
break;
case 5:
- if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer);
+ if (txl->color_double_buffer) DRW_transform_to_display(txl->color_double_buffer, use_view_settings);
break;
case 6:
- if (effects->gtao_horizons_debug) DRW_transform_to_display(effects->gtao_horizons_debug);
+ if (effects->gtao_horizons_debug) DRW_transform_to_display(effects->gtao_horizons_debug, use_view_settings);
break;
case 7:
- if (effects->gtao_horizons) DRW_transform_to_display(effects->gtao_horizons);
+ if (effects->gtao_horizons) DRW_transform_to_display(effects->gtao_horizons, use_view_settings);
break;
case 8:
- if (effects->sss_data) DRW_transform_to_display(effects->sss_data);
+ if (effects->sss_data) DRW_transform_to_display(effects->sss_data, use_view_settings);
break;
case 9:
- if (effects->velocity_tx) DRW_transform_to_display(effects->velocity_tx);
+ if (effects->velocity_tx) DRW_transform_to_display(effects->velocity_tx, use_view_settings);
break;
default:
break;
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 349a27a1765..bd1323dab3b 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -774,6 +774,9 @@ typedef struct EEVEE_PrivateData {
/* Mist Settings */
float mist_start, mist_inv_dist, mist_falloff;
+
+ /* Color Management */
+ bool use_color_view_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 24eb0f38a46..2b716b8ffe3 100644
--- a/source/blender/draw/engines/workbench/workbench_data.c
+++ b/source/blender/draw/engines/workbench/workbench_data.c
@@ -21,14 +21,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;
}
else if (v3d->shading.type == OB_RENDER &&
BKE_scene_uses_blender_opengl(scene))
{
wpd->shading = scene->display.shading;
+ wpd->use_color_view_settings = true;
}
else {
wpd->shading = v3d->shading;
+ wpd->use_color_view_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 6269496f568..deb9a517f96 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_aa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_aa.c
@@ -56,7 +56,7 @@ void workbench_aa_create_pass(WORKBENCH_Data *vedata, GPUTexture **tx)
}
}
-static void workspace_aa_draw_transform(GPUTexture *tx)
+static void workspace_aa_draw_transform(GPUTexture *tx, WORKBENCH_PrivateData *wpd)
{
if (DRW_state_is_image_render()) {
/* Linear result for render. */
@@ -64,7 +64,7 @@ static void workspace_aa_draw_transform(GPUTexture *tx)
}
else {
/* Display space result for viewport. */
- DRW_transform_to_display(tx);
+ DRW_transform_to_display(tx, wpd->use_color_view_settings);
}
}
@@ -79,7 +79,7 @@ void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
if (FXAA_ENABLED(wpd)) {
GPU_framebuffer_bind(fbl->effect_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
GPU_framebuffer_bind(dfbl->color_only_fb);
DRW_draw_pass(psl->effect_aa_pass);
}
@@ -92,11 +92,11 @@ void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
*/
if (effect_info->jitter_index == 1) {
GPU_framebuffer_bind(dfbl->color_only_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
}
else {
GPU_framebuffer_bind(fbl->effect_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
GPU_framebuffer_bind(dfbl->color_only_fb);
DRW_draw_pass(psl->effect_aa_pass);
}
@@ -104,6 +104,6 @@ void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx)
}
else {
GPU_framebuffer_bind(dfbl->color_only_fb);
- workspace_aa_draw_transform(tx);
+ workspace_aa_draw_transform(tx, wpd);
}
}
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index dc2894f0207..10ea0152b90 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -187,6 +187,9 @@ typedef struct WORKBENCH_PrivateData {
float viewvecs[3][4];
float ssao_params[4];
float ssao_settings[4];
+
+ /* Color Management */
+ bool use_color_view_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 d2c44cfef2a..0db16ab5472 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -234,7 +234,7 @@ void DRW_uniformbuffer_free(struct GPUUniformBuffer *ubo);
} \
} while (0)
-void DRW_transform_to_display(struct GPUTexture *tex);
+void DRW_transform_to_display(struct GPUTexture *tex, bool use_view_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 87239e7d93e..714edc23719 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -224,7 +224,7 @@ bool DRW_check_psys_visible_within_active_context(
* \{ */
/* Use color management profile to draw texture to framebuffer */
-void DRW_transform_to_display(GPUTexture *tex)
+void DRW_transform_to_display(GPUTexture *tex, bool use_view_settings)
{
drw_state_set(DRW_STATE_WRITE_COLOR);
@@ -239,8 +239,11 @@ void DRW_transform_to_display(GPUTexture *tex)
/* View transform is already applied for offscreen, don't apply again, see: T52046 */
if (!(DST.options.is_image_render && !DST.options.is_scene_render)) {
Scene *scene = DST.draw_ctx.scene;
+ ColorManagedDisplaySettings *display_settings = &scene->display_settings;
+ ColorManagedViewSettings *view_settings = (use_view_settings) ? &scene->view_settings : NULL;
+
use_ocio = IMB_colormanagement_setup_glsl_draw_from_space(
- &scene->view_settings, &scene->display_settings, NULL, dither, false);
+ view_settings, display_settings, NULL, dither, false);
}
if (!use_ocio) {