Render: change view layer name convention to ViewLayer_001 to avoid OpenEXR issues

Some compositing applications do not support spaces and dots in layer names, and change
these to other symbols on import. This causes various compatibility issues, including
with Cryptomatte metadata. While technically those could be considered bugs in the
Cryptomatte implementation of other software, where they are not properly accounting for
that layer renaming, it's not ideal.

The OpenEXR channel naming convention is "layer.pass.channel". We get away with dots in
the layer name since we parse this from right to left, but it's a weak assumption.

Now we don't forbid using spaces or dots, and existing files are unchanged. But at
least by default names will be compatible, and hopefully other software catches up in
time to support more flexible layer names.

Ref T68924
This commit is contained in:
Brecht Van Lommel 2021-10-19 14:22:22 +02:00
parent 8e8932c8ff
commit 9e9d003a82
Notes: blender-bot 2023-02-14 11:21:40 +01:00
Referenced by issue #68924, OpenEXR pipeline improvements
3 changed files with 4 additions and 4 deletions

View File

@ -170,7 +170,7 @@ ViewLayer *BKE_view_layer_context_active_PLACEHOLDER(const Scene *scene)
static ViewLayer *view_layer_add(const char *name)
{
if (!name) {
name = DATA_("View Layer");
name = DATA_("ViewLayer");
}
ViewLayer *view_layer = MEM_callocN(sizeof(ViewLayer), "View Layer");
@ -248,7 +248,7 @@ ViewLayer *BKE_view_layer_add(Scene *scene,
BLI_uniquename(&scene->view_layers,
view_layer_new,
DATA_("ViewLayer"),
'.',
'_',
offsetof(ViewLayer, name),
sizeof(view_layer_new->name));

View File

@ -239,7 +239,7 @@ static void scene_init_data(ID *id)
/* Master Collection */
scene->master_collection = BKE_collection_master_add();
BKE_view_layer_add(scene, "View Layer", NULL, VIEWLAYER_ADD_NEW);
BKE_view_layer_add(scene, "ViewLayer", NULL, VIEWLAYER_ADD_NEW);
}
static void scene_copy_markers(Scene *scene_dst, const Scene *scene_src, const int flag)

View File

@ -294,7 +294,7 @@ static void blo_update_defaults_scene(Main *bmain, Scene *scene)
}
/* Rename render layers. */
BKE_view_layer_rename(bmain, scene, scene->view_layers.first, "View Layer");
BKE_view_layer_rename(bmain, scene, scene->view_layers.first, "ViewLayer");
/* Disable Z pass by default. */
LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {