This is a sort of follow-up on this thread:
http://lists.gnu.org/archive/html/openexr-devel/2004-08/msg00007.html
At Hash Inc, to store multiple layers for the same render, we have
adopted the convention:
"layername.channelname"
Where channelnames are the conventional names like "R", "G", "B", "A",
etc. This is simple and works well.
However, we also had a need for storing the particular load order for
the layers/groups for compositing purposes. So we have added some
metadata in the header. It goes like this:
For each layer, there is a metadata attribute named :
"LayerO"
where "O" is a non 0-padded load order number starting with 1. This is a
string attribute with value :
"layername T R,G,B,..."
where "T" is the enum value of Imf::PixelType
and "R,G,B" is a comma separated list of channel names.
We also considered simply adding the load order number in front of the
channel name such as "O.layername.channelname" But the metadata way
greatly simplifies the channel name searching since we don't have to
scan through all of then first to parse and regroup them. We simply loop
through the meatadata and load/regroup the channels as listed in the
metadata. Furtheremore, it keeps the compatibility of the ad-hoc naming
convention "layername.channelname" for other applications to load them.
We also use the single buffer names "R", "G", etc to store the fully
composited final render result. This way, when our EXR files are loaded
in another application, at least the final render result is displayable.
I'm interested to know if anyone else have developped a way to store
layer order information in EXR files and if there is an actual need for
that kind of information.
Yves Poissant
Hash Inc.