[Bf-codereview] File output and image node improvements for arbitrary layer access (issue 6199059)

lukas.toenne at googlemail.com lukas.toenne at googlemail.com
Thu May 10 11:00:04 CEST 2012


Reviewers: bf-codereview_blender.org,

Description:
A couple more changes to the file and image nodes to improve access to
layers that don't follow Blender's rlayer.rpass naming scheme.

--- Changes to File Output node ---
* Flat layer names in EXR multilayer files.

   For a socket with name "AAA" the previous resulting EXR layer name
would be "AAA.AAA", i.e. the render layer as well as render pass would
use the socket name.

   Now the "render_layer.render_pass" scheme is ignored in multilayer
files, socket names are directly written to EXR layers (EXR layer name
is "AAA" in this example). If sockets should have a notion of "render
layer" this can still be achieved by explicitly adding a separator, e.g.
"AAA.BBB". When loading such layers into a Blender Image struct, the
name is interpreted as a "render_layer.render_pass" again (although the
image node does not care about it, see below).

* Socket sub-paths (for singlelayer) or layer names (for multilayer) are
stored in dedicated string variables in the socket storage data. This
way the RNA can define precise string subtypes (PROP_FILEPATH) and
length. The file/layer slots are defined as separate structs with own
name properties in the RNA as well, so they can be used nicely with the
list template.

* Ensure unique socket paths/layer names to prevent overwriting of files
and layers respectively.

--- Changes to Image node ---
* Loading multilayer OpenEXR files has improved layer name splitting
into render layer + render pass names now. This properly supports
arbitrary EXR layer names now. Example:

   OpenEXR layer name:   AAA.BBB.CCC

   is split into

   Render layer name:    AAA.BBB
   Render pass name:     CCC

   If the layer name has no '.' separators the render layer name is
empty.

* Image node ignores the selected render layer in the image user data.
Instead all existing layers are displayed at the same time by combining
the render layer names with render pass names again, to reconstruct the
original EXR layer name. This avoids the problem that render layers with
empty name are not selectetable in the dropdown and allows using all
image layers at the same time without duplicating the node.

Please review this at http://codereview.appspot.com/6199059/

Affected files:
   source/blender/blenkernel/BKE_blender.h
   source/blender/blenkernel/BKE_node.h
   source/blender/blenloader/intern/readfile.c
   source/blender/blenloader/intern/writefile.c
   source/blender/editors/space_node/drawnode.c
   source/blender/imbuf/intern/openexr/openexr_api.cpp
   source/blender/makesdna/DNA_node_types.h
   source/blender/makesrna/RNA_access.h
   source/blender/makesrna/intern/rna_nodetree.c
   source/blender/nodes/composite/nodes/node_composite_image.c
   source/blender/nodes/composite/nodes/node_composite_outputFile.c




More information about the Bf-codereview mailing list