diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-03-09 17:38:17 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-03-23 17:21:58 +0300 |
commit | 7aab508e3273ae1762ae815bbecc8842938f0926 (patch) | |
tree | 94a0199e9eba3aea9da93cec1a4e053c2b61ffda /source/blender/makesrna | |
parent | 51727fe86fdeb1f01552afdac5a5d7b7ad4453b5 (diff) |
Color Management: support different settings for render and compositing output
The Output Properties > Output panel now has a Color Management subpanel to
override scene settings. When set to Override instead of Follow Scene, there
are settings to:
* For OpenEXR, choose a (linear) colorspace for RGBA passes
* For other file formats, use different display/view/look/exposure/gamma
These settings affect animation render output, image save of renders and the
compositor file output node. Additionally, the image save operator and
compositor file output nodes also support overriding color management.
Includes some layout changes to the relevant panels to accomdate the new
settings and to improve consistency. Ideally subpanels would be used to better
organize these settings, however nodes and operators don't currently support
creating subpanels.
Differential Revision: https://developer.blender.org/D14402
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_color.c | 5 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_scene.c | 56 |
2 files changed, 59 insertions, 2 deletions
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 373aec975c2..840674c7bc6 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -605,6 +605,11 @@ static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain, { ID *id = ptr->owner_id; + if (!id) { + /* Happens for color space settings on operators. */ + return; + } + if (GS(id->name) == ID_IM) { Image *ima = (Image *)id; diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 04afcd61717..e056ab7377c 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -20,6 +20,7 @@ #include "DNA_view3d_types.h" #include "DNA_world_types.h" +#include "IMB_colormanagement.h" #include "IMB_imbuf_types.h" #include "BLI_listbase.h" @@ -29,6 +30,7 @@ #include "BKE_armature.h" #include "BKE_editmesh.h" +#include "BKE_idtype.h" #include "BKE_paint.h" #include "BKE_volume.h" @@ -1440,6 +1442,35 @@ static const EnumPropertyItem *rna_ImageFormatSettings_exr_codec_itemf(bContext } # endif + +static bool rna_ImageFormatSettings_has_linear_colorspace_get(PointerRNA *ptr) +{ + ImageFormatData *imf = (ImageFormatData *)ptr->data; + return BKE_imtype_requires_linear_float(imf->imtype); +} + +static void rna_ImageFormatSettings_color_management_set(PointerRNA *ptr, int value) +{ + ImageFormatData *imf = (ImageFormatData *)ptr->data; + + if (imf->color_management != value) { + imf->color_management = value; + + /* Copy from scene when enabling override. */ + if (imf->color_management == R_IMF_COLOR_MANAGEMENT_OVERRIDE) { + ID *owner_id = ptr->owner_id; + if (owner_id && GS(owner_id->name) == ID_NT) { + /* For compositing nodes, find the corresponding scene. */ + const IDTypeInfo *type_info = BKE_idtype_get_info_from_id(owner_id); + owner_id = type_info->owner_get(G_MAIN, owner_id); + } + if (owner_id && GS(owner_id->name) == ID_SCE) { + BKE_image_format_color_management_copy_from_scene(imf, (Scene *)owner_id); + } + } + } +} + static int rna_SceneRender_file_ext_length(PointerRNA *ptr) { RenderData *rd = (RenderData *)ptr->data; @@ -5458,6 +5489,12 @@ static void rna_def_scene_image_format_data(BlenderRNA *brna) }; # endif + static const EnumPropertyItem color_management_items[] = { + {R_IMF_COLOR_MANAGEMENT_FOLLOW_SCENE, "FOLLOW_SCENE", 0, "Follow Scene", ""}, + {R_IMF_COLOR_MANAGEMENT_OVERRIDE, "OVERRIDE", 0, "Override", ""}, + {0, NULL, 0, NULL, NULL}, + }; + StructRNA *srna; PropertyRNA *prop; @@ -5616,17 +5653,32 @@ static void rna_def_scene_image_format_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Stereo 3D Format", "Settings for stereo 3D"); /* color management */ + prop = RNA_def_property(srna, "color_management", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, color_management_items); + RNA_def_property_ui_text( + prop, "Color Management", "Which color management settings to use for file saving"); + RNA_def_property_enum_funcs(prop, NULL, "rna_ImageFormatSettings_color_management_set", NULL); + RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL); + prop = RNA_def_property(srna, "view_settings", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "view_settings"); RNA_def_property_struct_type(prop, "ColorManagedViewSettings"); RNA_def_property_ui_text( prop, "View Settings", "Color management settings applied on image before saving"); prop = RNA_def_property(srna, "display_settings", PROP_POINTER, PROP_NONE); - RNA_def_property_pointer_sdna(prop, NULL, "display_settings"); RNA_def_property_struct_type(prop, "ColorManagedDisplaySettings"); RNA_def_property_ui_text( prop, "Display Settings", "Settings of device saved image would be displayed on"); + + prop = RNA_def_property(srna, "linear_colorspace_settings", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "ColorManagedInputColorspaceSettings"); + RNA_def_property_ui_text(prop, "Color Space Settings", "Output color space settings"); + + prop = RNA_def_property(srna, "has_linear_colorspace", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, "rna_ImageFormatSettings_has_linear_colorspace_get", NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text( + prop, "Has Linear Color Space", "File format expects linear color space"); } static void rna_def_scene_ffmpeg_settings(BlenderRNA *brna) |