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:
authorSergey Sharybin <sergey@blender.org>2022-09-01 14:05:28 +0300
committerSergey Sharybin <sergey@blender.org>2022-09-01 15:39:26 +0300
commit06005b0870be9a0a3b73b4c388c26988f1f991d2 (patch)
tree429e4d235d1130ca5e0fcf892978223cfc2a7644 /intern/cycles/blender
parentcb771dbe76d4d5c6d1127dfedce4edd06e1c5b7b (diff)
Tweak cryptomatte channels naming to improve interoperability
Use lowercase rgba channel names which still by-passes lossy nature of DWA compression and which also keeps external compositing tools happy. Thanks Steffen Dünner for testing this patch! Differential Revision: https://developer.blender.org/D15834
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/sync.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/intern/cycles/blender/sync.cpp b/intern/cycles/blender/sync.cpp
index 9bd0abe2773..3808cbf1459 100644
--- a/intern/cycles/blender/sync.cpp
+++ b/intern/cycles/blender/sync.cpp
@@ -682,16 +682,16 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
/* Cryptomatte stores two ID/weight pairs per RGBA layer.
* User facing parameter is the number of pairs.
*
- * NOTE: Name channels lowercase xyzw so that compression rules check in OpenEXR DWA code uses
- * loseless compression. It is important to use lowercase since the capital Y uses lossy
- * compression in DWA. */
+ * NOTE: Name channels lowercase rgba so that compression rules check in OpenEXR DWA code uses
+ * loseless compression. Reportedly this naming is the only one which works good from the
+ * interoperability point of view. Using xyzw naming is not portable. */
int crypto_depth = divide_up(min(16, b_view_layer.pass_cryptomatte_depth()), 2);
scene->film->set_cryptomatte_depth(crypto_depth);
CryptomatteType cryptomatte_passes = CRYPT_NONE;
if (b_view_layer.use_pass_cryptomatte_object()) {
for (int i = 0; i < crypto_depth; i++) {
string passname = cryptomatte_prefix + string_printf("Object%02d", i);
- b_engine.add_pass(passname.c_str(), 4, "xyzw", b_view_layer.name().c_str());
+ b_engine.add_pass(passname.c_str(), 4, "rgba", b_view_layer.name().c_str());
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
}
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_OBJECT);
@@ -699,7 +699,7 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
if (b_view_layer.use_pass_cryptomatte_material()) {
for (int i = 0; i < crypto_depth; i++) {
string passname = cryptomatte_prefix + string_printf("Material%02d", i);
- b_engine.add_pass(passname.c_str(), 4, "xyzw", b_view_layer.name().c_str());
+ b_engine.add_pass(passname.c_str(), 4, "rgba", b_view_layer.name().c_str());
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
}
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_MATERIAL);
@@ -707,7 +707,7 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
if (b_view_layer.use_pass_cryptomatte_asset()) {
for (int i = 0; i < crypto_depth; i++) {
string passname = cryptomatte_prefix + string_printf("Asset%02d", i);
- b_engine.add_pass(passname.c_str(), 4, "xyzw", b_view_layer.name().c_str());
+ b_engine.add_pass(passname.c_str(), 4, "rgba", b_view_layer.name().c_str());
pass_add(scene, PASS_CRYPTOMATTE, passname.c_str());
}
cryptomatte_passes = (CryptomatteType)(cryptomatte_passes | CRYPT_ASSET);