From 87ace4682761bdeaa8f18ae12a186dbfb83d4e04 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 26 Feb 2021 14:13:15 +0100 Subject: 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. --- .../blender/blenkernel/intern/cryptomatte_test.cc | 45 +++++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'source/blender/blenkernel/intern/cryptomatte_test.cc') 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 -- cgit v1.2.3