[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