0.20.0.0
Apps
Added support for choosing the debugger used via a new GAFFER_DEBUGGER environment variable.
Core
Improved ContextProcessor performance. This shaved 10% off the startup time for a complex render (#1573).
Added framesPerSecond plug to ScriptNode. This provides user-level control over the frame rate for each script (#1576).
Fixed hang triggered by deletion of a plug during computation (#1576, #1580).
Dispatch
Moved all dispatch functionality from Gaffer module into a new GafferDispatch module. Backwards compatibility is provided by config files, but it is recommended that code be updated to use GafferDispatch directly (#1577).
Renamed “requirements” plug to “preTasks” and “requirement” plug to “task”. Again, backwards compatibility is provided by a config file, but it is recommended that code be updated to use the new names (#1577).
Added “postTasks”. These are nodes that are executed following another node, even if they are not explicitly included in the list of nodes to dispatch (#1577).
Added “dispatcher.immediate” plug to all executable nodes. This causes the node to be executed immediately in the current process when dispatched (#1577).
Removed “dispatcher.local.executeInForeground” plug - use the new “dispatcher.immediate” plug instead (#1577).
Added sequence support to PythonCommand node. This causes the command to be called once for all frames, instead of once per frame (#1578).
Fixed bug which could cause all frames downstream of pass-through nodes (like TaskList and TaskContextVariables) to depend on all upstream frames (#1577).
Fixed detection of direct dependency cycles (#1577).
Image
Crop
Added option to crop to a specific format, optionally centered (#1570).
Fixed crashes triggered by images with empty data windows (#1575).
Improved ImageWriter to write out images progressively as the input image is generated (#1517). This improved speed by 65% and memory usage by 60% when generating a 10K image.
Scene
Lights are now represented as attributes at a location rather than as objects. This allows lights for multiple different renderers to exist at the same location, allows the creation of area lights, and provides the necessary support for using shader networks within lights in the future (#1590).
Shader nodes now support the loading of light shaders (#1590).
Added metadata support for specifying the orientation of lights in the renderer (#1590).
RenderMan
Fixed crash when reloading coshader arrays.
UI
API
ImageAlgo
Added parallelProcessTiles and parallelGather tiles functions to facilitate easy parallel processing of images (#1517).
BufferAlgo
Moved image window methods from ImageAlgo (#1517).
Format
Fixed space conversions for empty boxes (#1575).
TestCase
Improved output for assertTypeNamesArePrefixed() failures.
Dispatch
Renamed requirements -> preTasks
Added LoggingExecutableNode to GafferDispatchTest. This facilitates easier testing of dispatchers.
SceneUI
Added ObjectVisualiser and AttributeVisualiser base classes to support custom representations of objects and attributes within the viewport (#1590).
Metadata
Added methods for adding and querying non-node values (#1590).