[Bf-blender-cvs] [bcbc2fc27ad] compositor-cryptomatte-workflow: Fixed Image workflow

Jeroen Bakker noreply at git.blender.org
Tue Mar 9 14:10:56 CET 2021


Commit: bcbc2fc27ad9d78f9ee5f7b976ce436fb0a19d20
Author: Jeroen Bakker
Date:   Tue Mar 9 13:27:24 2021 +0100
Branches: compositor-cryptomatte-workflow
https://developer.blender.org/rBbcbc2fc27ad9d78f9ee5f7b976ce436fb0a19d20

Fixed Image workflow

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

M	source/blender/compositor/nodes/COM_CryptomatteNode.cc

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

diff --git a/source/blender/compositor/nodes/COM_CryptomatteNode.cc b/source/blender/compositor/nodes/COM_CryptomatteNode.cc
index 780c0d490ad..5e13ae0757a 100644
--- a/source/blender/compositor/nodes/COM_CryptomatteNode.cc
+++ b/source/blender/compositor/nodes/COM_CryptomatteNode.cc
@@ -55,7 +55,7 @@ void CryptomatteNode::buildInputOperationsFromRenderSource(
   }
 
   const short cryptomatte_layer_id = 0;
-  std::string prefix = ntreeCompositCryptomatteLayerPrefix(&node);
+  const std::string prefix = ntreeCompositCryptomatteLayerPrefix(&node);
   LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
     RenderLayer *render_layer = RE_GetRenderLayer(render_result, view_layer->name);
     if (render_layer) {
@@ -88,8 +88,12 @@ void CryptomatteNode::buildInputOperationsFromImageSource(
 {
   NodeCryptomatte *cryptoMatteSettings = (NodeCryptomatte *)node.storage;
   Image *image = (Image *)node.id;
-  BLI_assert(!image || GS(image->id.name) == ID_IM);
-  if (!image || image->type != IMA_TYPE_MULTILAYER) {
+  if (!image) {
+    return;
+  }
+
+  BLI_assert(GS(image->id.name) == ID_IM);
+  if (image->type != IMA_TYPE_MULTILAYER) {
     return;
   }
 
@@ -113,13 +117,17 @@ 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 = ntreeCompositCryptomatteLayerPrefix(&node);
-      for (RenderPass *render_pass = (RenderPass *)render_layer->passes.first; render_pass;
-           render_pass = render_pass->next, render_pass_index++) {
-        if (blender::StringRef(render_pass->name, sizeof(render_pass->name)).startswith(prefix)) {
+    const std::string prefix = ntreeCompositCryptomatteLayerPrefix(&node);
+    LISTBASE_FOREACH (RenderLayer *, render_layer, &image->rr->layers) {
+      LISTBASE_FOREACH (RenderPass *, render_pass, &render_layer->passes) {
+        blender::StringRef combined_name =
+            blender::StringRef(render_layer->name,
+                               strnlen(render_layer->name, sizeof(render_layer->name))) +
+            "." +
+            blender::StringRef(render_pass->name,
+                               strnlen(render_pass->name, sizeof(render_pass->name)));
+
+        if (combined_name.startswith(prefix)) {
           MultilayerColorOperation *op = new MultilayerColorOperation(
               render_layer, render_pass, view);
           op->setImage(image);



More information about the Bf-blender-cvs mailing list