Gaffer turns 1.0

After 10+ years (honestly, we’ve lost count), and 300 released versions, Gaffer has turned 1.0.

We’re extremely proud to announce the release of Gaffer, bringing significant improvements in usability and interoperability. Not to mention the first release of a major update to the Viewer providing support for hybrid rendering, allowing high quality preview of lighting and shading while interacting with scenes.

What’s New

Raytraced Viewer

The Viewer is now configurable between the traditional OpenGL mode, and a new hybrid render mode where raytraced geometry is combined with OpenGL representations of manipulators, lights and cameras.

With a focus on interactivity, a number of presets are provided to help optimise viewport renders independently of traditional interactive or batch renders. Further customization of this behaviour can be easily achieved by modifying the renderer specific Viewer settings, conveniently editable as a Gaffer script.

Using the Viewer specific shading, texturing and lighting overrides.

Arnold is currently supported, with other renderers to be added in the future.

Multi-part OpenEXR Improvements

We’ve improved support for reading multi-part EXR files written from other DCCs, particularly improving support for reading multi-part EXR files written from Nuke. The ImageReader’s new channelInterpretation plug provides control over the input mapping. With additional modes supporting strict adherence to the OpenEXR specification, as well as a legacy mode providing backward compatibility with previous Gaffer releases.

New functionality has been added to the ImageWriter to allow for writing multi-part EXR files. The ImageWriter’s new layout plug provides control over the part and channel naming of the output image. A number of presets are provided here allowing for writing images conforming to the OpenEXR standards, or matching the behaviour of other DCCs such as Nuke. A “custom” mode provides fine grained control over both part and channel naming.

Multi-view Images

Image nodes can now output multiple “views”. Views can be thought of as independent images supporting separate data windows, formats, channels and metadata. Traditionally multi-view images have been used mainly for stereo work, but in Gaffer we’re keen to use them as a general purpose mechanism for passing multiple images in a single data stream. For instance, views can also be a mix of deep and flat images, allowing for convenient packaging of deep and flat data while working with images within Gaffer.

Nodes to Create, Select, Copy and Delete views have been added, as well as an Anaglyph node for converting multi-view stereo images for viewing with red-cyan glasses.

The Viewer provides a new UI widget for selecting the view to display, as well as hotkeys for toggling between views.

Inspecting multiple image views in the Viewer. This image has “left” & “right” stereo views generated from crops of an input image (with the unmodified input added for reference as a “source” view). An additional “anaglyph” view has also been added, created from the output of an Anaglyph node and then copied to the main image with CopyViews.


UsdLux lights can now be loaded from USD files, with each being read as a generic light ready for conversion to lights specific to your desired renderer. Currently this conversion can be performed manually via the ShaderQuery node introduced in Gaffer, but we plan to include automatic conversion for supported renderers in the near future.

The UsdLayerWriter node introduced in Gaffer compares two scenes and writes the differences to disk as a minimal USD file. This enables workflows such as using Gaffer to author shaders within a USD based pipeline, where the shader networks and their assignments are written to their own file ready to be layered with geometry and animation in Gaffer or other hosts with USD support. 

Other more general scene modifications representable in USD are supported here too, such as in the example below.

Applying edits to the USD Kitchen Set within Gaffer and the resulting .usda file containing only those edits as written by the USDLayerWriter. The USDLayerWriter has been provided the unmodified scene as the “base”, with the modified scene as the “layer”. The “layer” scene is compared with the “base” scene and any changes found will be written to disk.

Gaffer builds on this by introducing support for purpose-based material assignments in the SceneReader and SceneWriter, allowing preview materials to coexist with final looks.


We’ve added ContextQuery – a node that provides simple and direct access to context variables. ContextQuery provides significantly increased performance over the use of Python expressions for querying context variables, and is the now recommended approach.

Other Notable Improvements

Image channel names are now sorted in “natural order”, where numerical parts of channel names are sorted by value rather than alphabetically. This allows for “lightGroup10” to appear more naturally sorted after “lightGroup9”, rather than “lightGroup1”.

Natural ordering of channel names in Gaffer compared with the previous behaviour in Gaffer 0.61

We’ve improved performance of the Light Editor & Scene View Inspector when viewing complex scenes.

Arnold render outputs now support custom naming of channels in EXR outputs via the layerName string parameter.

Arnold render outputs now support a layerPerLightGroup boolean parameter, which automatically splits outputs into separate layers, one for each light group.

Spreadsheet nodes now have an added activeRowIndex plug, which outputs the index of the currently active row.

We’ve added support for reading and writing JPEG 2000 (.jp2) images.

Release Notes

The full list of new features, improvements, and fixes released in Gaffer can be found here.

Leave a Reply