From 2d4b638a674522507917b5f34ad8b5463ff42eb4 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Tue, 2 Mar 2021 11:08:04 +0100 Subject: Cryptomatte: Read metadata from multilayer OpenEXR. Currently the compositor reads cryptomatte meta-data from the render result. When loading a multilayer open exr file the meta-data was ignored. This patch will also load the cryptomatte meta-data from multilayer open exr files. This enabled workflows where the rendering and compositing are done in separate scenes or for future changes where the cryptomatte node will use the meta-data for name matching and color picking. Reviewed By: Sergey Sharybin Differential Revision: https://developer.blender.org/D10384 --- source/blender/compositor/nodes/COM_ImageNode.cpp | 18 ++++++++---------- source/blender/compositor/nodes/COM_ImageNode.h | 3 ++- 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'source/blender/compositor/nodes') diff --git a/source/blender/compositor/nodes/COM_ImageNode.cpp b/source/blender/compositor/nodes/COM_ImageNode.cpp index 596a448e6a0..69729e018d7 100644 --- a/source/blender/compositor/nodes/COM_ImageNode.cpp +++ b/source/blender/compositor/nodes/COM_ImageNode.cpp @@ -34,12 +34,12 @@ ImageNode::ImageNode(bNode *editorNode) : Node(editorNode) /* pass */ } NodeOperation *ImageNode::doMultilayerCheck(NodeConverter &converter, - RenderLayer *rl, + RenderLayer *render_layer, + RenderPass *render_pass, Image *image, ImageUser *user, int framenumber, int outputsocketIndex, - int passindex, int view, DataType datatype) const { @@ -47,19 +47,18 @@ NodeOperation *ImageNode::doMultilayerCheck(NodeConverter &converter, MultilayerBaseOperation *operation = nullptr; switch (datatype) { case COM_DT_VALUE: - operation = new MultilayerValueOperation(passindex, view); + operation = new MultilayerValueOperation(render_layer, render_pass, view); break; case COM_DT_VECTOR: - operation = new MultilayerVectorOperation(passindex, view); + operation = new MultilayerVectorOperation(render_layer, render_pass, view); break; case COM_DT_COLOR: - operation = new MultilayerColorOperation(passindex, view); + operation = new MultilayerColorOperation(render_layer, render_pass, view); break; default: break; } operation->setImage(image); - operation->setRenderLayer(rl); operation->setImageUser(user); operation->setFramenumber(framenumber); @@ -128,16 +127,15 @@ void ImageNode::convertToOperations(NodeConverter &converter, } if (rpass) { - int passindex = BLI_findindex(&rl->passes, rpass); switch (rpass->channels) { case 1: operation = doMultilayerCheck(converter, rl, + rpass, image, imageuser, framenumber, index, - passindex, view, COM_DT_VALUE); break; @@ -146,22 +144,22 @@ void ImageNode::convertToOperations(NodeConverter &converter, case 3: operation = doMultilayerCheck(converter, rl, + rpass, image, imageuser, framenumber, index, - passindex, view, COM_DT_VECTOR); break; case 4: operation = doMultilayerCheck(converter, rl, + rpass, image, imageuser, framenumber, index, - passindex, view, COM_DT_COLOR); break; diff --git a/source/blender/compositor/nodes/COM_ImageNode.h b/source/blender/compositor/nodes/COM_ImageNode.h index 1a811fe855d..e2053cfd3b8 100644 --- a/source/blender/compositor/nodes/COM_ImageNode.h +++ b/source/blender/compositor/nodes/COM_ImageNode.h @@ -24,6 +24,7 @@ #include "DNA_node_types.h" #include "RE_engine.h" +#include "RE_pipeline.h" /** * \brief ImageNode @@ -33,11 +34,11 @@ class ImageNode : public Node { private: NodeOperation *doMultilayerCheck(NodeConverter &converter, RenderLayer *rl, + RenderPass *render_pass, Image *image, ImageUser *user, int framenumber, int outputsocketIndex, - int passindex, int view, DataType datatype) const; -- cgit v1.2.3