1.4.0.0
Note
 This release introduces linux-gcc11 builds which are only compatible with Linux distributions using glibc 2.28 or higher.
These specific linux-gcc11 builds are intended for testing purposes while we upgrade our toolchain and dependencies to better align
with VFX Platform 2023, and should be considered “beta” in advance of a stable release in Gaffer 1.5.
Features
- Arnold : Added support for Arnold 7.3. Note that a minimum of 7.3.1.0 is required, meaning that 7.3.0.0 is not supported. 
- Cycles : - Updated to version 4.0.2. 
- Added support for CUDA and Optix devices (GCC 11 and Windows builds only). 
 
- Dispatcher : Dispatchers are now TaskNodes, allowing them to be nested in a task graph. Possibilities include : - Using a LocalDispatcher and a Wedge to launch multiple TractorDispatcher jobs. 
- Using a nested LocalDispatcher to perform a group of tasks on a single blade within a TractorDispatcher job. 
 
- SelectionTool : Added select mode plug. When set to anything except - Standardusing the SelectionTool causes the actual scene location selected to potentially be modified from the originally selected location. Selection modifiers work identically for deselection. Currently, two selectors are implemented :- USD Kind : When selecting, the first ancestor location with a - usd:kindattribute matching the chosen list of USD Kind will ultimately be selected. USD’s Kind Registry includes- Assembly,- Component,- Group,- Modeland- SubComponentby default and can be extended via USD startup scripts.
- Shader Assignment : When selecting, the first ancestor location with a renderable and direct (not inherited) shader attribute will ultimately be selected. This can be used to select either surface or displacement shaders. 
 
- GraphEditor : Added X shortcut for removing connections between nodules. Hold X then left click to remove all connections under the cursor. Hold X then left drag to draw a line, all connections that intersect with the line will be removed once the drag is ended (#788). 
- LightPosition Tool : Added a variation on the shadow placement tool to place highlights. Lights are positioned such that they will create a specular highlight at the target point. 
- DeepSlice : Added a new node for clipping out part of an image based on depth. 
- MeshTessellate : Added a new node for increasing the polycount of subdivision meshes. 
- ImageInspector : Added a new panel for inspecting image format, metadata and channel statistics. 
Improvements
- Arnold : - OSL shaders with connections from multiple outputs are no longer duplicated on export to Arnold. 
- Gaffer’s native OpenColorIO config is now automatically translated to Arnold. Use an ArnoldColorManager node to override this behaviour. 
 
- ArnoldShader : Added parameter tooltips based on - helpmetadata provided by Arnold.
- CyclesOptions : Improved device selection UI. 
- 3Delight : - Added NSI screen static sampling pattern option ( - dl:staticsamplingpattern).
- Added support for - layerNameparameter in output definitions.
- Added support for - filterparameter in output definitions.
- Added camera overscan support. 
- Added support for reading - dl:and- user:attributes from shaders.
- Added - importanceSampleFilterplug to DelightOptions, providing denoiser-compatible output.
- Added support for external procedurals. 
- Matched DelightOptions default values for - oversamplingand- shadingSamplesto 3Delight’s own default values.
- NSI scene description export format is now based on file extension - - .nsifor binary and- .nsiafor ASCII.
 
- EditScope : Added a summary of edits in the NodeEditor, with the ability to select the affected objects and quickly navigate to the processor nodes. 
- GraphEditor : - The source node for any location can be located by dragging the location into the GraphEditor from the Viewer or HierarchyView. 
- Removed all renderer-specific Render and InteractiveRender nodes from the node menu. These nodes still exist for backwards compatibility with old scenes, but the generic Render and InteractiveRender nodes should now be used instead. 
- Improved logic used to connect a newly created node to the selected nodes. 
 
- GraphComponent : Node and Plug names may now start with a numeric digit. 
- LocalDispatcher : - Added a new dockable LocalJobs editor, to replace the floating window previously accessible via the “Execute/Local Jobs” menu item. 
- Task output is now shown in the UI. 
- Jobs are no longer removed from the UI as soon as they complete. 
- Incomplete jobs are now killed automatically when the application is closed, after prompting to confirm that shutdown should go ahead. 
 
- LightPositionTool : The tool is now only visible for members of the - __lightsset, instead of all objects.
- Catalogue : Added - imageNamesoutput plug, containing the names of all images in the Catalogue. Among other things this can be used to drive a Wedge or ContactSheet node and a CatalogueSelect.
- ImageReader : Added - fileValid = Falsemetadata to images from missing frames, when- missingFrameModeis- Blackor- Hold.
- Collect : Added the ability to collect StringVectorData inputs. 
- Toolbars : Changed hotkey behavior to toggle any tool on and off. Exclusive tools such as the Translate and Crop Window tools activate the first tool (currently Selection Tool) when they are toggled off. 
- CropWindowTool : Added - Alt+- Cfor toggling both the crop window tool and the relevant crop window- enabledplug.
- TaskList, FrameMask : Reimplemented in C++ for improved performance. 
- Cache : Increased default computation cache size to 8Gb. Call - Gaffer.ValuePlug.setCacheMemoryLimit()from a startup file to override this.
- Dispatcher : Reduced internal overhead of - dispatch()call, with one benchmark showing around a 3x speedup.
- ScriptWindow : Added “Save” option to dialogue shown when closing a window containing unsaved changes. 
- Resize : - Added support for deep images. 
- Added “Nearest” filter. 
 
- Shuffle : - Reimplemented to match ShuffleAttributes and ShufflePrimitiveVariables. - Any number of shuffles can be added using the UI. 
- Wildcards can be used to match multiple source channels, and expressions can be used to map them to destination channels. 
- Source channels can optionally be deleted after shuffling. 
- Overwriting of destination channels can optionally be avoided. 
 
- Added - missingSourceModeplug to determine behaviour when a source channel doesn’t exist.
 
- NodeEditor : Improved image channel selectors : - Added “Custom” option, to allow strings to be entered manually. 
- Added right-click context menu. 
 
- Switch : Added - connectedInputsoutput plug.
- Backdrop : Improved drawing order for nested backdrops : - Larger backdrops are automatically drawn behind smaller ones, so that nested backdrops will always appear on top. 
- Added a - depthplug to assign a manual drawing depth for the rare cases where the automatic depth is unwanted.
 
- ImageStats : Added - areaSourceplug, allowing area to be driven by the input display window or data window.
- ScenePlug, ImagePlug : Child plugs are now serialisable. Among other things, this enables them to be driven by expressions (#3986). 
- Premultiply : Added - useDeepVisibilityplug, which weights samples according to their visibility based on the opacity of samples in front.
- ImageReader : Improved multithreading of EXR reads. This can result in a performance improvement of around 4X for large images. 
- Added OIIO config that disables OIIO threading by default. This simplifies our threading model, and has no impact on performance for our main use cases. If read performance of Gaffer compositing using non-EXR formats, such as Tiff, is important to you, you may want to add your own config to turn OIIO threading back on. 
- Wireframe : - Improved performance ~3x. 
- Improved cancellation responsiveness. 
 
Fixes
- Arnold : - Fixed rendering of shaders imported from HtoA via USD. 
- Fixed USD export of shaders to use - outputs:outinstead of- outputs:DEFAULT_OUTPUT.
- Fixed rendering of - oslshaders using the- codeparameter.
 
- Cycles : - Fixed hangs and crashes when using non-default session modes such as SVM shading. 
- Fixed failure to render background light in batch renders (#5234). 
- Fixed failure to update when reverting a background shader to previous values. 
 
- 3Delight : - Fixed failure to change sampling pattern per frame. 
- Fixed Resolution Multiplier support. 
- Fixed UI visibility of - angleparameter for distant lights, which was previously hidden.
- Fixed export of - Varyingprimitive variables on meshes (#5781).
- Fixed loading of surface shaders such as - dlStandardso that they can be connected to the inputs of shaders such as- dlLayeredMaterial.
 
- Widget : - Fixed bug that prevented Gadgets from receiving drops from another application. 
- Fixed errors when dragging from another application onto widgets that didn’t expect it. 
 
- Gadget : Fixed access to - DragDropEvent.sourceWidgetand- DragDropEvent.destinationWidgetfrom Python slots connected to a Gadget’s DragDropSignals.
- GraphGadget : Fixed unwanted highlighting of nodes when custom drag & drop handlers were active. 
- Viewer : Fixed selection overlay glitches with an Arnold - skydome_lightand an empty selection.
- GafferTest, GafferImageTest : Fixed import of these modules if the - Gaffermodule had not been imported previously.
- ViewportGadget : Fixed selection issues with Intel GPUs (#901, #2788). 
- TransformTool : Fixed alignment of green “value changed” icon for - orientationplugs.
- PlugAlgo : - Updated - canSetValueFromData(),- setValueFromData()and- getValueAsData()with support for missing types.
- Fixed promotion of CompoundDataPlugs with non-dynamic children, such as the - Camera.renderSettingOverridesplug.
 
- Catalogue : - Fixed undo for image reordering via drag & drop. 
- Fixed bugs caused by reordering images using - GraphComponent::reorderChildren().
 
- Expression : - setExpression()now respects configs that provide backwards compatibility for old plug names.
- FlatImageProcessor : Fixed bug that could cause an input to be evaluated with an invalid - image:viewName.
- Collect : Fixed display of results collected from TypedObjectPlug inputs. 
- BackgroundTask : Fixed potential deadlock caused by destroying a BackgroundTask from Python while it was still running. 
- Dispatcher : The job directory is no longer created when dispatch is cancelled by a slot connected to - preDispatchSignal().
- LocalDispatcher : - Fixed delays and zombie processes caused by shutting down Gaffer while background jobs were running. Background jobs are now killed before Gaffer exits instead. 
- Stopped failed jobs jumping to the end of the Local Jobs UI. 
- Fixed message log update. 
- Fixed - Job.statistics()errors on Windows, ensuring that a- pidis always returned when available.
 
- ImageStats : - Fixed output of infinite values, which were previously being clamped. 
- Results for min/max now correctly reflect zero values outside the data window. 
 
- NodeMenu, NodeEditor : - userDefaultmetadata is now evaluated in the script context, so it can depend on script variables.
- DeepState : Fixed handling of - NaNvalues and samples where- ZBackis less than- Z.
- Premultiply : Fixed handling of non-existent alpha channel. 
- ColorToVector : Fixed parameter types. 
- Windows : Removed “Error(s) running Gaffer” shutdown message. It was misleading when errors originated in the renderer rather than Gaffer itself. 
API
- SelectionTool : Added static - registerSelectMode()method for registering a Python or C++ function that will modify a selected scene path location. Users can choose which mode is active when selecting.
- EditScopeUI : Added an API for customising the EditScope’s NodeEditor with summaries for each processor : - ProcessorWidget provides a base class for custom widgets, and a factory mechanism for registering them against processors. 
- SimpleProcessorWidget provides a base class for widgets with a simple summary label and optional action links. 
 
- TractorDispatcher : The - preSpoolSignal()now provides an additional- taskDataargument to slots, which maps from Tractor tasks to information about the Gaffer tasks they will execute.
- LabelPlugValueWidget : Added optional - labelPlugValueWidget:showValueChangedIndicatormetadata entry. If a plug has this entry set to- False, the icon next to the label that indicates the value has changed will not be shown. Defaults to- Trueif the value is not set.
- TypedObjectPlug : Added Python bindings for the default values of the - defaultValueconstructor argument.
- Box2fVectorDataPlug : Added new plug type for storing arrays of Box2f. 
- Catalogue : Deprecated - image:indexmetadata.
- ImageGadget : Removed - textureLoader()method.
- Pointer : Added - fileName()method.
- ExtensionAlgo : Added - exportNode()and- exportNodeUI()functions.
- Widget : Added a 0.5 pixel offset to - ButtonEvent.lineobjects passed to mouse event signals such as- buttonPressSignal()and- dragMoveSignal()
- PathColumn : - Added - CellData::sortValuemember, to provide additional control over sorting in the PathListingWidget.
- Added missing Python binding for - headerData()method.
 
- StandardPathColumn : - Added constructor which allows the full header CellData to be specified. 
- Added missing Python binding for - property()method.
 
- IconPathColumn : - Added constructor which allows the full header CellData to be specified. 
- Added - prefix()and- property()accessors.
 
- Window : Added - preCloseSignal(), which allows connected slots to prevent a window from being closed.
- LocalDispatcher : - Added - Job.status()and- Job.statusChangedSignal()methods.
- Added - Job.messages()and- Job.messagesChangedSignal()methods.
- Added - Job.frameRange(),- Job.environmentCommand()and- Job.startTime()methods.
- Added - Job.cpuUsage()and- Job.memoryUsage()methods.
- Added - JobPool.addJob()and- JobPool.removeJob()methods.
 
- GafferTractor : Added - tractorAPI()method used for accessing the- tractor.api.authormodule.
- GafferTractorTest : Added - tractorAPI()method which returns a mock API if Tractor is not available. This allows the GafferTractor module to be tested without Tractor being installed.
- ParallelAlgo : Added - canCallOnUIThread()function.
- Label : Added - textSelectableconstructor argument.
- ShufflesPlug : - Added - ignoreMissingSourceargument to- shuffle().
- Added - shuffleWithExtraSources()method.
 
- ShufflePlugValueWidget : Widgets for the - sourceand- destinationplugs can now be customised using standard- plugValueWidget:typemetadata.
- ImageTestCase : in - assertImageEqualfunction, maxDifference may now be a tuple, to specify an asymmetric range.
- Editor : Added - Settingsclass, which should be used to store settings for subclasses. See LightEditor and ImageInspector for examples.
- DeepPixelAccessor : Added utility class for accessing deep samples while abstracting away the underlying tile storage. 
- Color3fPlug : Added - setValue( V3f() )overload.
Documentation
- Updated with generic Render and InteractiveRender nodes in place of deprecated renderer-specific nodes. 
Breaking Changes
- Arnold : Removed support for Arnold 7.1. 
- Cycles : Updated to version 4.0.2. 
- 3Delight : - Changed default layer names for outputs. 
- Changed NSI scene description export with - .nsifile extension from ASCII to binary (- .nsiais used for ASCII now).
 
- InteractiveRenderTest : Subclasses must now return the shader output plug from creation methods such as - _createConstantShader().
- StandardLightVisualiser : Added - attributeNameargument to- surfaceTexture()virtual method.
- CyclesAttributes : Removed the - cycles:dupliGeneratedand- cycles:dupliUVattributes.
- CyclesOptions : - Changed - hairShapedefault value to “ribbon”, to match Cycles’ and Blender’s own defaults.
- Removed - useFrameAsSeedplug. The frame is now automatically used as the seed if- seedis not set.
- Removed all texture cache options. These had never been exposed in the UI because this never became an official Cycles feature. 
- Removed - cryptomatteAccurate. This feature is no longer present in Cycles.
- Removed - cycles:integrator:sampling_patternoption. This is intended only for debugging, but is still available via a CustomOptions node.
 
- Pointer : - Removed - Pointer( const ImagePrimitive * )constructor.
- Removed - image()method.
 
- Render : Changed - render:includedPurposesdefault to- "default", "render".
- Backdrop : Changed default drawing order. Use the new - depthplug to override the order if necessary.
- ValuePlug : Removed deprecated - getObjectValue()overload.
- Preferences : Removed - cacheplug.
- TaskNode : - The - Taskconstructor no longer takes a copy of the context, so the context must not be modified after being passed.
- Removed - Task( taskNode, context )constructor. Use- Task( taskNode["task"], context )instead.
 
- Dispatcher : - Removed - createMatching()method.
- Removed non-const TaskBatch accessors - frames()and- preTasks().
- Made - TaskBatchconstructors private.
- The job directory is no longer available in slots connected to - preDispatchSignal().
- Removed - nodesarguments from dispatch signals. Use the- dispatcher["tasks"]plug instead.
- Removed - scriptand- contextarguments from- frameRange()method. The current frame and full frame range are now queried from the current context.
 
- DispatcherUI : - Removed - appendMenuDefinitions(),- appendNodeContextMenuDefinitions(),- executeSelected()and- repeatPrevious()functions.
- Removed - DispatcherWindowclass.
 
- LocalDispatcher : - Removed - JobPool.jobFailedSignal().
- Removed - JobPool.failedJobs()method. Failed jobs now remain in place in the main- jobs()container.
- Removed - Job.failed()and- Job.killed()methods. Use- Job.status()instead.
- Removed - Job.execute()method. This should not have been public.
- Removed - Job.messageHandler()method. Use- Job.messages()instead.
- Removed - Job.description()method.
- Removed - Job.statistics()method. Use- Job.memoryUsage()and- Job.cpuUsage()instead.
- JobPool no longer derives from RunTimeTyped. 
 
- LocalDispatcherUI : Removed - appendMenuDefinitions()function.
- Process : Removed non-const variant of the - handleException()method.
- StringPlug : Removed deprecated - precomputedHashargument from- getValue()method.
- OpenColorIOContext : Removed - configEnabledPlug(),- configValuePlug(),- workingSpaceEnabledPlug()and- workingSpaceValuePlug()methods. Use the OptionalValuePlug child accessors instead.
- Windows launch script : Removed the hardcoded - /debugexeswitch used when- GAFFER_DEBUGis enabled, making it possible to use debuggers other than Visual Studio. Debug switches can be added to the- GAFFER_DEBUGGERenvironment variable instead.
- Enums : Replaced - IECore.Enumtypes with standard Python types from the- enummodule.
- Shuffle : - Removed ChannelPlug type. Use - Gaffer.ShufflePluginstead.
- Renamed - channelsplug to- shufflesplug, matching nodes such as ShuffleAttributes and ShufflePrimitiveVariables.
 
- ShuffleUI : Removed - nodeMenuCreateCommand().
- ImageStatsUI : Removed - postCreate().
- OSLShader : Output parameters are now loaded onto the - outplug for all types (- surface,- displacementetc), not just- shader.
- DelightOptions : Changed default values for - oversamplingand- shadingSamplesplugs.
- SceneProcessor : Subclasses no longer serialise internal connections to the - outplug.
- ImageProcessor : Internal connections to the - outplug are no longer serialised.
- USD : Removed Embree Hydra delegate. 
Build
- Cortex : Updated to version 10.5.6.2. 
- Cycles : Updated to version 4.0.2. 
- Embree : Updated to version 4.3.0. 
- Imath : Updated to version 3.1.9. 
- MaterialX : Updated to version 1.38.8. 
- LibWebP : Added version 1.3.2. 
- OpenEXR : - Updated to version 3.1.12. 
- Applied patches from the following pull requests : - https://github.com/AcademySoftwareFoundation/openexr/pull/1591 
- https://github.com/AcademySoftwareFoundation/openexr/pull/1684 
 
 
- OpenImageIO : Updated to version 2.5.8.0. 
- OpenPGL : Updated to version 0.5.0. 
- OpenShadingLanguage : Updated to version 1.12.14.0. 
- OpenSubdiv : Updated to version 3.5.1. 
- OpenSSL : Removed. 
- OpenVDB : Updated to version 10.1.0. 
- PsUtil : Added version 5.9.6. 
- PySide : Updated to version 5.15.12. 
- Python : Updated to version 3.10.13. 
- Qt : - Updated to version 5.15.12. 
- Removed QtPurchasing library. 
- Removed QtNetworkAuth library. 
 
- USD : Updated to version 23.11.