• Spreadsheet : Added support for drag and drop. Values and Plugs can be dragged from outside a Spreadsheet to a cell to set its value or connect to its value plug.

  • Instancer : Added encapsulateInstanceGroups plug, which outputs the instances within capsules. This has the same performance benefits as using an Encapsulate node downstream, with the following additional benefits :

    • Significantly improved performance when the prototypes define sets. A benchmarch with 1 million instances saw set generation time go from 10s using a downstream Encapsulate node to 0.002s using encapsulateInstanceGroups.

    • Fewer unnecessary capsule invalidations, resulting in fewer interactive rendering updates.

    • Convenience.


  • ArnoldRender : Added support for animated camera parameters, such as field of view.

  • DeleteFaces/DeletePoints/DeleteCurves : Added ignoreMissingVariable plug which allows users to opt-out of errors.

  • Constraint : Added targetScene plug, to allow constraining to locations in another scene.

  • OSLObject :

    • Added support for connecting to the individual components of Vector, Point, Normal, UV and Color primitive variable inputs.

    • Added prototypeIndex to primitive variable creation menus.

  • OSLImage : Added support for connecting to the individual components of channel inputs.

  • SceneReader :

    • Added support for USD skinning and blendshapes, which are now applied automatically to meshes during loading.

    • Added interpolation for animated cameras loaded from Alembic caches.

    • PointsPrimitive variables with Varying interpolation are now conformed to Vertex interpolation on load. This is particularly helpful when loading points written from Houdini.

  • SceneWriter : Added support for writing cameras to Alembic caches.


  • Viewer :

    • Fixed bug that caused the Inspector to edit the wrong node when SetFilters were in use.

    • Fixed bugs when using the CameraTool to manipulate scaled cameras or lights. Note: the Viewport projection will no longer display the effects of scale or shear components in the view matrix.

  • Widget : Fixed incorrect ButtonEvent coordinate origin for mouse signals under certain widget configurations.

  • CatalogueSelect : Fixed broken presets for promoted imageName plugs.

  • PlugAlgo : Fixed metadata handling when promoting plugs which were themselves promoted from the constructor of a custom node.

  • NodeAlgo : Fixed corner case where a preset could be listed twice if it was specified by both preset:<name> and presetNames.

  • GafferUI : Fixed incorrect Tree/TableView horizontal header height.

  • Spreadsheet : Fixed bug that allowed values to be pasted onto plugs with inputs.

  • Render/InteractiveRender : Fixed bug in light filter context handling. This could result in light filters not being linked to the correct lights, or cause exceptions during scene translation.


  • M33fVectorDataPlug : Added new plug type for specifying arrays of 3x3 matrices.

  • FilterPlug : Added match method to evaluate the filter for the specified ScenePlug.

  • PlugAlgo :

    • extractDataFromPlug() now supports M33fPlug and M33fVectorDataPlug.

    • promote() allows metadata to be excluded from promotion by registering a <metadataName>:promotable metadata value of false.

  • NodeAlgo : If an input plug does not have presets of its own, it now inherits them from its first output. This is particularly useful when promoting plugs which have dynamic presets which are computed on demand. Previously the presets would have been baked in to the promoted plug, but by preventing promotion using presetNames:promotable = false and presetValues:promotable = false the promoted plug can continue to use the dynamic presets.

  • MetadataAlgo :

    • Added copyIf() function, to copy metadata matching an arbitrary predicate.

    • Deprecated the complex form of copy() in favour of a simpler overload and the new copyIf() function.

  • ViewportGadget : setCameraTransform now properly removes scale and shear from the supplied matrix.

  • RendererAlgo :

    • Added objectSamples() overload which fills vector<ConstObjectPtr> rather than vector<ConstVisibleRenderablePtr>.

    • Deprecated original objectSamples() method.


  • Cortex : Updated to version