[Bf-blender-cvs] [db326ae96d2] compositor-cryptomatte-workflow: Moved conversion to layer prefix function to cryptomatte node.

Jeroen Bakker noreply at git.blender.org
Tue Feb 16 09:47:21 CET 2021


Commit: db326ae96d20381a542dcfb99d37872b375a73bc
Author: Jeroen Bakker
Date:   Mon Feb 15 14:03:13 2021 +0100
Branches: compositor-cryptomatte-workflow
https://developer.blender.org/rBdb326ae96d20381a542dcfb99d37872b375a73bc

Moved conversion to layer prefix function to cryptomatte node.

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

M	source/blender/blenkernel/BKE_node.h
M	source/blender/compositor/nodes/COM_CryptomatteNode.cpp
M	source/blender/compositor/nodes/COM_CryptomatteNode.h
M	source/blender/editors/interface/interface_eyedropper_color.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/nodes/composite/nodes/node_composite_cryptomatte.c

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

diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index f0525927bbb..e39b6a448f9 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1285,6 +1285,7 @@ void ntreeCompositColorBalanceSyncFromCDL(bNodeTree *ntree, bNode *node);
 
 void ntreeCompositCryptomatteSyncFromAdd(struct Main *bmain, bNodeTree *ntree, bNode *node);
 void ntreeCompositCryptomatteSyncFromRemove(struct Main *bmain, bNodeTree *ntree, bNode *node);
+const char *ntreeCompositCryptomatteLayerPrefix(const bNode *node);
 
 /** \} */
 
diff --git a/source/blender/compositor/nodes/COM_CryptomatteNode.cpp b/source/blender/compositor/nodes/COM_CryptomatteNode.cpp
index ee11eb4f961..ff06d9e0998 100644
--- a/source/blender/compositor/nodes/COM_CryptomatteNode.cpp
+++ b/source/blender/compositor/nodes/COM_CryptomatteNode.cpp
@@ -40,28 +40,10 @@ CryptomatteNode::CryptomatteNode(bNode *editorNode) : Node(editorNode)
   /* pass */
 }
 
-blender::StringRef CryptomatteNode::getCryptomatteLayerPrefix(const bNode &node) const
-{
-  NodeCryptomatte *cryptoMatteSettings = (NodeCryptomatte *)node.storage;
-
-  switch (cryptoMatteSettings->type) {
-    case CMP_CRYPTOMATTE_TYPE_OBJECT:
-      return CRYPTOMATTE_LAYER_PREFIX_OBJECT;
-
-    case CMP_CRYPTOMATTE_TYPE_MATERIAL:
-      return CRYPTOMATTE_LAYER_PREFIX_MATERIAL;
-
-    case CMP_CRYPTOMATTE_TYPE_ASSET:
-      return CRYPTOMATTE_LAYER_PREFIX_ASSET;
-  }
-  BLI_assert(false && "Invalid Cryptomatte layer.");
-  return "";
-}
-
 void CryptomatteNode::buildInputOperationsFromRenderSource(
     const CompositorContext &context,
     const bNode &node,
-    blender::Vector<NodeOperation *> &r_input_operations) const
+    blender::Vector<NodeOperation *> &r_input_operations)
 {
   Scene *scene = (Scene *)node.id;
   BLI_assert(GS(scene->id.name) == ID_SCE);
@@ -77,7 +59,7 @@ void CryptomatteNode::buildInputOperationsFromRenderSource(
   if (view_layer) {
     RenderLayer *render_layer = RE_GetRenderLayer(render_result, view_layer->name);
     if (render_layer) {
-      std::string prefix = getCryptomatteLayerPrefix(node);
+      std::string prefix = ntreeCompositCryptomatteLayerPrefix(&node);
       LISTBASE_FOREACH (RenderPass *, rpass, &render_layer->passes) {
         if (blender::StringRef(rpass->name, sizeof(rpass->name)).startswith(prefix)) {
           RenderLayersProg *op = new RenderLayersProg(rpass->name, COM_DT_COLOR, rpass->channels);
@@ -96,7 +78,7 @@ void CryptomatteNode::buildInputOperationsFromRenderSource(
 void CryptomatteNode::buildInputOperationsFromImageSource(
     const CompositorContext &context,
     const bNode &node,
-    blender::Vector<NodeOperation *> &r_input_operations) const
+    blender::Vector<NodeOperation *> &r_input_operations)
 {
   NodeCryptomatte *cryptoMatteSettings = (NodeCryptomatte *)node.storage;
   Image *image = (Image *)node.id;
@@ -128,7 +110,7 @@ void CryptomatteNode::buildInputOperationsFromImageSource(
     RenderLayer *render_layer = (RenderLayer *)BLI_findlink(&image->rr->layers, iuser->layer);
     if (render_layer) {
       int render_pass_index = 0;
-      std::string prefix = getCryptomatteLayerPrefix(node);
+      std::string prefix = ntreeCompositCryptomatteLayerPrefix(&node);
       for (RenderPass *rpass = (RenderPass *)render_layer->passes.first; rpass;
            rpass = rpass->next, render_pass_index++) {
         if (blender::StringRef(rpass->name, sizeof(rpass->name)).startswith(prefix)) {
@@ -146,7 +128,7 @@ void CryptomatteNode::buildInputOperationsFromImageSource(
 }
 
 blender::Vector<NodeOperation *> CryptomatteNode::createInputOperations(
-    const CompositorContext &context, const bNode &node) const
+    const CompositorContext &context, const bNode &node)
 {
   blender::Vector<NodeOperation *> input_operations;
   switch (node.custom1) {
diff --git a/source/blender/compositor/nodes/COM_CryptomatteNode.h b/source/blender/compositor/nodes/COM_CryptomatteNode.h
index bd7a0a11837..931f96f5e47 100644
--- a/source/blender/compositor/nodes/COM_CryptomatteNode.h
+++ b/source/blender/compositor/nodes/COM_CryptomatteNode.h
@@ -32,15 +32,15 @@ class CryptomatteNode : public Node {
   void convertToOperations(NodeConverter &converter, const CompositorContext &context) const;
 
  private:
-  blender::StringRef getCryptomatteLayerPrefix(const bNode &node) const;
-  blender::Vector<NodeOperation *> createInputOperations(const CompositorContext &context,
-                                                         const bNode &node) const;
-  void buildInputOperationsFromRenderSource(
+  static blender::StringRef getCryptomatteLayerPrefix(const bNode &node);
+  static blender::Vector<NodeOperation *> createInputOperations(const CompositorContext &context,
+                                                                const bNode &node);
+  static void buildInputOperationsFromRenderSource(
       const CompositorContext &context,
       const bNode &node,
-      blender::Vector<NodeOperation *> &r_input_operations) const;
-  void buildInputOperationsFromImageSource(
+      blender::Vector<NodeOperation *> &r_input_operations);
+  static void buildInputOperationsFromImageSource(
       const CompositorContext &context,
       const bNode &node,
-      blender::Vector<NodeOperation *> &r_input_operations) const;
+      blender::Vector<NodeOperation *> &r_input_operations);
 };
diff --git a/source/blender/editors/interface/interface_eyedropper_color.c b/source/blender/editors/interface/interface_eyedropper_color.c
index aff86a67963..5d1a049deeb 100644
--- a/source/blender/editors/interface/interface_eyedropper_color.c
+++ b/source/blender/editors/interface/interface_eyedropper_color.c
@@ -210,22 +210,6 @@ static bool eyedropper_cryptomatte_sample_fl(
     return false;
   }
 
-  const char *prefix = "";
-  switch (crypto->type) {
-    case CMP_CRYPTOMATTE_TYPE_OBJECT:
-      prefix = "CryptoObject";
-      break;
-    case CMP_CRYPTOMATTE_TYPE_MATERIAL:
-      prefix = "CryptoMaterial";
-      break;
-    case CMP_CRYPTOMATTE_TYPE_ASSET:
-      prefix = "CryptoAsset";
-      break;
-    default:
-      BLI_assert(false);
-      break;
-  }
-
   bool success = false;
   if (node->custom1 == CMP_CRYPTOMATTE_SRC_RENDER) {
     Scene *scene = (Scene *)node->id;
@@ -239,6 +223,7 @@ static bool eyedropper_cryptomatte_sample_fl(
         ViewLayer *view_layer = (ViewLayer *)BLI_findlink(&scene->view_layers, layerId);
         if (view_layer) {
           RenderLayer *rl = RE_GetRenderLayer(rr, view_layer->name);
+          const char *prefix = ntreeCompositCryptomatteLayerPrefix(node);
           success = eyedropper_cryptomatte_sample_renderlayer_fl(rl, prefix, fpos, r_col);
         }
       }
@@ -254,6 +239,7 @@ static bool eyedropper_cryptomatte_sample_fl(
       ImBuf *ibuf = BKE_image_acquire_ibuf(image, iuser, NULL);
       if (image->rr) {
         RenderLayer *rl = (RenderLayer *)BLI_findlink(&image->rr->layers, iuser->layer);
+        const char *prefix = ntreeCompositCryptomatteLayerPrefix(node);
         success = eyedropper_cryptomatte_sample_renderlayer_fl(rl, prefix, fpos, r_col);
       }
       BKE_image_release_ibuf(image, ibuf, NULL);
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index b5324a54668..291673b2920 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -2696,7 +2696,7 @@ static void node_composit_buts_cryptomatte(uiLayout *layout, bContext *C, Pointe
 
   col = uiLayoutColumn(layout, true);
   uiItemR(col, ptr, "type", 0, NULL, ICON_NONE);
-  uiItemL(col, IFACE_("Matte Objects:"), ICON_NONE);
+  uiItemL(col, IFACE_("Matte ID:"), ICON_NONE);
 
   uiLayout *row = uiLayoutRow(col, true);
   uiItemR(row, ptr, "matte_id", DEFAULT_FLAGS, "", ICON_NONE);
diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c
index 337ee777d99..24b0f1b9e03 100644
--- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c
+++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.c
@@ -111,6 +111,29 @@ void ntreeCompositCryptomatteSyncFromRemove(Main *UNUSED(bmain),
   }
 }
 
+const char *CRYPTOMATTE_LAYER_PREFIX_OBJECT = "CryptoObject";
+const char *CRYPTOMATTE_LAYER_PREFIX_MATERIAL = "CryptoMaterial";
+const char *CRYPTOMATTE_LAYER_PREFIX_ASSET = "CryptoAsset";
+const char *CRYPTOMATTE_LAYER_PREFIX_UNKNOWN = "";
+
+const char *ntreeCompositCryptomatteLayerPrefix(const bNode *node)
+{
+  NodeCryptomatte *cryptoMatteSettings = (NodeCryptomatte *)node->storage;
+
+  switch (cryptoMatteSettings->type) {
+    case CMP_CRYPTOMATTE_TYPE_OBJECT:
+      return CRYPTOMATTE_LAYER_PREFIX_OBJECT;
+
+    case CMP_CRYPTOMATTE_TYPE_MATERIAL:
+      return CRYPTOMATTE_LAYER_PREFIX_MATERIAL;
+
+    case CMP_CRYPTOMATTE_TYPE_ASSET:
+      return CRYPTOMATTE_LAYER_PREFIX_ASSET;
+  }
+  BLI_assert(false && "Invalid Cryptomatte layer.");
+  return CRYPTOMATTE_LAYER_PREFIX_UNKNOWN;
+}
+
 static void node_init_cryptomatte(bNodeTree *UNUSED(ntree), bNode *node)
 {
   NodeCryptomatte *user = MEM_callocN(sizeof(NodeCryptomatte), "cryptomatte user");



More information about the Bf-blender-cvs mailing list