Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2021-02-26 16:13:15 +0300
committerJeroen Bakker <jeroen@blender.org>2021-02-26 16:13:15 +0300
commit87ace4682761bdeaa8f18ae12a186dbfb83d4e04 (patch)
tree2efe16601fd9b69cfaf216c816f0c9daf41d6577 /source/blender/blenkernel/intern/cryptomatte_test.cc
parentc489bb7c016fe4567516fbab4cc940b81f8e840f (diff)
Cryptomatte: Manifest Parsing.
This patch adds manifest parsing to Cryptomatte. Normally when loading cryptomatte layer from an OpenEXR file the manifest contains data to convert a hash to its original name of the object/material. In the future we want to use this to support lookup of cryptomatte hashes and show it to the user. Currently this logic isn't available to users (for now), but is required by D3959 where a new cryptomatte workflow is implemented.
Diffstat (limited to 'source/blender/blenkernel/intern/cryptomatte_test.cc')
-rw-r--r--source/blender/blenkernel/intern/cryptomatte_test.cc45
1 files changed, 43 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/cryptomatte_test.cc b/source/blender/blenkernel/intern/cryptomatte_test.cc
index 3773b2b3bf9..4a25f5f7d87 100644
--- a/source/blender/blenkernel/intern/cryptomatte_test.cc
+++ b/source/blender/blenkernel/intern/cryptomatte_test.cc
@@ -19,7 +19,7 @@
#include "BKE_cryptomatte.hh"
-namespace blender::bke::tests {
+namespace blender::bke::cryptomatte::tests {
TEST(cryptomatte, meta_data_key)
{
@@ -41,4 +41,45 @@ TEST(cryptomatte, extract_layer_name)
ASSERT_EQ("", BKE_cryptomatte_extract_layer_name(""));
}
-} // namespace blender::bke::tests
+TEST(cryptomatte, cryptomatte_layer)
+{
+ blender::bke::cryptomatte::CryptomatteLayer layer;
+ ASSERT_EQ("{}", layer.manifest());
+
+ layer.add_hash("Object", 123);
+ ASSERT_EQ("{\"Object\":\"0000007b\"}", layer.manifest());
+
+ layer.add_hash("Object2", 123245678);
+ ASSERT_EQ("{\"Object\":\"0000007b\",\"Object2\":\"0758946e\"}", layer.manifest());
+}
+
+TEST(cryptomatte, cryptomatte_layer_quoted)
+{
+ blender::bke::cryptomatte::CryptomatteLayer layer;
+ layer.add_hash("\"Object\"", 123);
+ ASSERT_EQ("{\"\\\"Object\\\"\":\"0000007b\"}", layer.manifest());
+}
+
+static void test_cryptomatte_manifest(std::string expected, std::string manifest)
+{
+ EXPECT_EQ(expected,
+ blender::bke::cryptomatte::CryptomatteLayer::read_from_manifest(manifest)->manifest());
+}
+
+TEST(cryptomatte, cryptomatte_layer_from_manifest)
+{
+ test_cryptomatte_manifest("{}", "{}");
+ test_cryptomatte_manifest("{\"Object\":\"12345678\"}", "{\"Object\": \"12345678\"}");
+ test_cryptomatte_manifest("{\"Object\":\"12345678\",\"Object2\":\"87654321\"}",
+ "{\"Object\":\"12345678\",\"Object2\":\"87654321\"}");
+ test_cryptomatte_manifest(
+ "{\"Object\":\"12345678\",\"Object2\":\"87654321\"}",
+ " { \"Object\" : \"12345678\" , \"Object2\" : \"87654321\" } ");
+ test_cryptomatte_manifest("{\"Object\\\"01\\\"\":\"12345678\"}",
+ "{\"Object\\\"01\\\"\": \"12345678\"}");
+ test_cryptomatte_manifest(
+ "{\"Object\\\"01\\\"\":\"12345678\",\"Object\":\"12345678\",\"Object2\":\"87654321\"}",
+ "{\"Object\\\"01\\\"\":\"12345678\",\"Object\":\"12345678\", \"Object2\":\"87654321\"}");
+}
+
+} // namespace blender::bke::cryptomatte::tests