Page MenuHome

Blender fails to interpret a specific layer in OpenEXR multilayer file
Closed, ResolvedPublic

Description

System Information
Windows 7, Quadro 4000

Blender Version
Broken: 2.78.5, hash bd09b51
Worked: 2.78c and before

Short description of error
When outputting through a file output node to OpenEXR using the setup indicated in this screenshot here...

...the layer 'Image' later on when loading the rendering back into Blender in the compositor displays as fully transparent in the latest BuildBot version. In 2.78c, also in Natron, the image comes in fine.

Exact steps for others to reproduce the error
Drag and drop the following file (rendered in the setup indicated in the screenshot before) into the compositor:


Now connect the sockets one by one to the Viewer node. You'll notice that the layer named 'Image' is fully transparent, while other layers like 'AO' display their info fine. If you do the same thing in 2.78c, you'll see the image data with alpha channel as required.

Event Timeline

Sergey Sharybin (sergey) lowered the priority of this task from 90 to 50.

This is yet another bug caused by no-functional-changes commit :(

@Lukas Stockner (lukasstockner97), it is caused by rB4cf7fc3. The issue is that sock->storage->pass_name holds name "Combined", while the rpass->name contains "Image". So it is either matter of using sock->name for multi-layer image node or matter of converting Image to Combined pass name for render result when reading image.

Guess the first approach is more valid, because otherwise you'll loose original pass name from the file.

Hm, this special handling for Combined->Image+Alpha is really a PITA...

So, the problem here was that the Image output was reused since it already exists, but was configured to use the Combined pass. However, I just checked how 2.78c handles this situation, and it turns out that when you just F3-save a rendered image and put it into a Image node there, it gives you two passes named "Combined" and "Alpha", not Image and Alpha.

Therefore, one potential fix is to rename the default "Image" output to "Combined" for the Image node (not the RenderLayer node), which 1. makes the socket name->pass name mapping consistent and 2. makes behaviour similar to 2.78c.
One difference is that with that fix (P481) and the file from this report, the Image pass is displayed as the last socket, not the first as in 2.78c. But, the output ordering isn't really well-defined anyways for the Image node with arbitrary multilayer inputs, so I consider that acceptable.

@Sergey Sharybin (sergey), sounds good for you?

The reason why saving multi-layer layer with F3 gives different name is because Blender uses passes names for EXR passes. But you can call passes arbitrary in EXR, could also be "mammonth's banana". So not sure how this indicates a problem?

As for rename: i don't see how "Combined" socket name makes any sense for non-multilayer images (such as PNG i.e.). This is misleading and is not consistent with other node types (Movie Clip node in Compositor, Image node in texture node. Cycles shading is different here -- it calls everything a color). For multi-layer images we should be using names from EXR.