diff options
author | Jeroen Bakker <jeroen@blender.org> | 2021-02-26 16:13:15 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2021-02-26 16:13:15 +0300 |
commit | 87ace4682761bdeaa8f18ae12a186dbfb83d4e04 (patch) | |
tree | 2efe16601fd9b69cfaf216c816f0c9daf41d6577 /source/blender/blenkernel/intern/cryptomatte_test.cc | |
parent | c489bb7c016fe4567516fbab4cc940b81f8e840f (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.cc | 45 |
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 |