[Bf-blender-cvs] [27b78c9c94b] master: Compositor: "Save as Render" for the file output node

Robert Guetzkow noreply at git.blender.org
Wed Jan 13 11:07:51 CET 2021


Commit: 27b78c9c94baf6fa43268e851de58da96f7d7123
Author: Robert Guetzkow
Date:   Wed Jan 13 11:01:44 2021 +0100
Branches: master
https://developer.blender.org/rB27b78c9c94baf6fa43268e851de58da96f7d7123

Compositor: "Save as Render" for the file output node

This commit adds the "Save as Render" feature to the file output node,
that allows to disable the application of the configured view transform
and other color management settings on the image. If disable it uses
the standard view transform instead. This feature was originally
suggested in T83842 and is part of the color management improvements
task in T68926. With this feature it is possible to toggle the
application of the color management settings for each input socket
of the File Output node individually.

Reviewed By: brecht

Maniphest Tasks: T68926, T83842

Differential Revision: https://developer.blender.org/D9921

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

M	source/blender/blenkernel/BKE_blender_version.h
M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/compositor/nodes/COM_OutputFileNode.cpp
M	source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cpp
M	source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h
M	source/blender/compositor/operations/COM_OutputFileOperation.cpp
M	source/blender/compositor/operations/COM_OutputFileOperation.h
M	source/blender/editors/space_node/drawnode.c
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/composite/nodes/node_composite_outputFile.c

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

diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 6e596c94cee..4191464dd5a 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -39,7 +39,7 @@ extern "C" {
 
 /* Blender file format version. */
 #define BLENDER_FILE_VERSION BLENDER_VERSION
-#define BLENDER_FILE_SUBVERSION 10
+#define BLENDER_FILE_SUBVERSION 11
 
 /* Minimum Blender version that supports reading file written with the current
  * version. Older Blender versions will test this and show a warning if the file
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index 61cf7e4ef49..f3f7ea608f5 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -1518,6 +1518,24 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
     }
   }
 
+  /* Enable "Save as Render" option for file output node by default (apply view transform to image
+   * on save) */
+  if (!MAIN_VERSION_ATLEAST(bmain, 292, 11)) {
+    FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
+      if (ntree->type == NTREE_COMPOSIT) {
+        LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
+          if (node->type == CMP_NODE_OUTPUT_FILE) {
+            LISTBASE_FOREACH (bNodeSocket *, sock, &node->inputs) {
+              NodeImageMultiFileSocket *simf = sock->storage;
+              simf->save_as_render = true;
+            }
+          }
+        }
+      }
+    }
+    FOREACH_NODETREE_END;
+  }
+
   /**
    * Versioning code until next subversion bump goes here.
    *
diff --git a/source/blender/compositor/nodes/COM_OutputFileNode.cpp b/source/blender/compositor/nodes/COM_OutputFileNode.cpp
index e0cff1de276..dcc1fbdec67 100644
--- a/source/blender/compositor/nodes/COM_OutputFileNode.cpp
+++ b/source/blender/compositor/nodes/COM_OutputFileNode.cpp
@@ -113,7 +113,8 @@ void OutputFileNode::convertToOperations(NodeConverter &converter,
               path,
               context.getViewSettings(),
               context.getDisplaySettings(),
-              context.getViewName());
+              context.getViewName(),
+              sockdata->save_as_render);
         }
         else if ((!is_multiview) || (format->views_format == R_IMF_VIEWS_INDIVIDUAL)) {
           outputOperation = new OutputSingleLayerOperation(context.getRenderData(),
@@ -123,7 +124,8 @@ void OutputFileNode::convertToOperations(NodeConverter &converter,
                                                            path,
                                                            context.getViewSettings(),
                                                            context.getDisplaySettings(),
-                                                           context.getViewName());
+                                                           context.getViewName(),
+                                                           sockdata->save_as_render);
         }
         else { /* R_IMF_VIEWS_STEREO_3D */
           outputOperation = new OutputStereoOperation(context.getRenderData(),
@@ -134,7 +136,8 @@ void OutputFileNode::convertToOperations(NodeConverter &converter,
                                                       sockdata->layer,
                                                       context.getViewSettings(),
                                                       context.getDisplaySettings(),
-                                                      context.getViewName());
+                                                      context.getViewName(),
+                                                      sockdata->save_as_render);
         }
 
         converter.addOperation(outputOperation);
diff --git a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cpp b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cpp
index 0b732357c92..7044fe402eb 100644
--- a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cpp
+++ b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.cpp
@@ -47,9 +47,10 @@ OutputOpenExrSingleLayerMultiViewOperation::OutputOpenExrSingleLayerMultiViewOpe
     const char *path,
     const ColorManagedViewSettings *viewSettings,
     const ColorManagedDisplaySettings *displaySettings,
-    const char *viewName)
+    const char *viewName,
+    const bool saveAsRender)
     : OutputSingleLayerOperation(
-          rd, tree, datatype, format, path, viewSettings, displaySettings, viewName)
+          rd, tree, datatype, format, path, viewSettings, displaySettings, viewName, saveAsRender)
 {
 }
 
@@ -273,9 +274,10 @@ OutputStereoOperation::OutputStereoOperation(const RenderData *rd,
                                              const char *name,
                                              const ColorManagedViewSettings *viewSettings,
                                              const ColorManagedDisplaySettings *displaySettings,
-                                             const char *viewName)
+                                             const char *viewName,
+                                             const bool saveAsRender)
     : OutputSingleLayerOperation(
-          rd, tree, datatype, format, path, viewSettings, displaySettings, viewName)
+          rd, tree, datatype, format, path, viewSettings, displaySettings, viewName, saveAsRender)
 {
   BLI_strncpy(this->m_name, name, sizeof(this->m_name));
   this->m_channels = get_datatype_size(datatype);
diff --git a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h
index bc057355cef..258ac1f9e98 100644
--- a/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h
+++ b/source/blender/compositor/operations/COM_OutputFileMultiViewOperation.h
@@ -38,7 +38,8 @@ class OutputOpenExrSingleLayerMultiViewOperation : public OutputSingleLayerOpera
                                              const char *path,
                                              const ColorManagedViewSettings *viewSettings,
                                              const ColorManagedDisplaySettings *displaySettings,
-                                             const char *viewName);
+                                             const char *viewName,
+                                             const bool saveAsRender);
 
   void *get_handle(const char *filename);
   void deinitExecution();
@@ -74,7 +75,8 @@ class OutputStereoOperation : public OutputSingleLayerOperation {
                         const char *name,
                         const ColorManagedViewSettings *viewSettings,
                         const ColorManagedDisplaySettings *displaySettings,
-                        const char *viewName);
+                        const char *viewName,
+                        const bool saveAsRender);
   void *get_handle(const char *filename);
   void deinitExecution();
 };
diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.cpp b/source/blender/compositor/operations/COM_OutputFileOperation.cpp
index 216b754f676..0a7e238fed1 100644
--- a/source/blender/compositor/operations/COM_OutputFileOperation.cpp
+++ b/source/blender/compositor/operations/COM_OutputFileOperation.cpp
@@ -215,7 +215,8 @@ OutputSingleLayerOperation::OutputSingleLayerOperation(
     const char *path,
     const ColorManagedViewSettings *viewSettings,
     const ColorManagedDisplaySettings *displaySettings,
-    const char *viewName)
+    const char *viewName,
+    const bool saveAsRender)
 {
   this->m_rd = rd;
   this->m_tree = tree;
@@ -232,6 +233,7 @@ OutputSingleLayerOperation::OutputSingleLayerOperation(
   this->m_viewSettings = viewSettings;
   this->m_displaySettings = displaySettings;
   this->m_viewName = viewName;
+  this->m_saveAsRender = saveAsRender;
 }
 
 void OutputSingleLayerOperation::initExecution()
@@ -265,7 +267,7 @@ void OutputSingleLayerOperation::deinitExecution()
     ibuf->dither = this->m_rd->dither_intensity;
 
     IMB_colormanagement_imbuf_for_write(
-        ibuf, true, false, m_viewSettings, m_displaySettings, this->m_format);
+        ibuf, m_saveAsRender, false, m_viewSettings, m_displaySettings, this->m_format);
 
     suffix = BKE_scene_multiview_view_suffix_get(this->m_rd, this->m_viewName);
 
diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.h b/source/blender/compositor/operations/COM_OutputFileOperation.h
index 915d59599e2..8717683b571 100644
--- a/source/blender/compositor/operations/COM_OutputFileOperation.h
+++ b/source/blender/compositor/operations/COM_OutputFileOperation.h
@@ -44,6 +44,7 @@ class OutputSingleLayerOperation : public NodeOperation {
   const ColorManagedDisplaySettings *m_displaySettings;
 
   const char *m_viewName;
+  bool m_saveAsRender;
 
  public:
   OutputSingleLayerOperation(const RenderData *rd,
@@ -53,7 +54,8 @@ class OutputSingleLayerOperation : public NodeOperation {
                              const char *path,
                              const ColorManagedViewSettings *viewSettings,
                              const ColorManagedDisplaySettings *displaySettings,
-                             const char *viewName);
+                             const char *viewName,
+                             const bool saveAsRender);
 
   void executeRegion(rcti *rect, unsigned int tileNumber);
   bool isOutputOperation(bool /*rendering*/) const
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 9e07c3d667b..0f02d2165ac 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -1884,6 +1884,7 @@ static void node_composit_buts_file_output_ex(uiLayout *layout, bContext *C, Poi
   PointerRNA active_input_ptr, op_ptr;
   uiLayout *row, *col;
   const bool multilayer = RNA_enum_get(&imfptr, "file_format") == R_IMF_IMTYPE_MULTILAYER;
+  const bool is_exr = RNA_enum_get(&imfptr, "file_format") == R_IMF_IMTYPE_OPENEXR;
   const bool is_multiview = (scene->r.scemode & R_MULTIVIEW) 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list