This major release brings support for Arnold’s light blockers and adds a new UVInspector panel for viewing UVs and textures. It also brings a host of core UI changes, including a new look and improvements to layout management and node pinning. Additionally we’ve made advances under the hood, resulting in improved performance and lower memory usage in many cases. Read on for further details of these and numerous other enhancements and fixes…
This release brings substantial performance improvements in the generation
of ShaderAssignments, but at the expense of removing support for using the
context variable in shader networks. We recommend migrating such setups to use a
CustomAttributes node to generate a context-varying attribute which is then referenced
by the shader. This approach improves scene generation performance in Gaffer and
prevents the passing of large numbers of unique shader networks to the renderer.
Temporary backwards compatibility for old networks can be enabled by setting the
GAFFERSCENE_SHADERASSIGNMENT_CONTEXTCOMPATIBILITY environment variable to
The same optimisation applies to the OSLObject node, with temporary backwards compatibility
being available separately by setting the
- Light filters : Extended support for Arnold’s light filters by adding blockers (#3020) :
- Added new ArnoldLightFilter node for creating blockers.
- Added attribute for linking blockers to lights to StandardAttributes node.
- UVInspector : Added new editor for viewing UVs and associated textures (#3273).
- SetVisualiser : Added node to allow visualisation of set membership in the Viewer (#3117).
- Layouts :
- Improved tab management
- Added advanced pinning options, available from the context menu for the pinning icon (#3270)
- Editors can now follow the source node for the current scene selection.
- Editors can be linked so that an editor follows all pinning changes applied to another editor.
- OSLImage :
- OSLObject :
- Appleseed : Updated to Appleseed 2.0.5 (#3288).
- FilterResults : Improved performance. For certain FilterResults-heavy production graphs, we have seen 4-5x speedups in total scene generation time (#3174).
- Instancer/Parent/Seeds : Added a filter input to allow operation on multiple locations at once (#2917, #3176).
- TransformTools : Added precision mode enabled by holding
Shift. Added basic snapping to increments by holding
- Viewer : Prioritised update of objects being manipulated, resulting in much more fluid update (#3144).
- Node Menu :
- SceneReader : Added support for USD files that reference Alembic archives.
- Text : Added support for unicode characters (#2999).
- PythonCommand : Improved performance (#3029).
- GraphEditor :
- Added support for arbitrary node annotations specified by metadata.
:text” to specify the text to render, and “annotation: :color” to specify an associated colour (#3028).
- Added Ctrl-Drag functionality to deselect nodes (#3090).
- Made it show the root instead of removing the GraphEditor when the viewed Box is deleted (#3163).
- Added support for arbitrary node annotations specified by metadata. Use “annotation:
- UIEditor : Added support for setting the icon for a node (#3204).
- Stats app :
annotatedScriptargument to allow the saving of the script with monitor annotations added to it (#3028).
-hashCacheSizeLimitarguments for controlling cache limits (#3033).
- Added support for render output profiling via
- Added a
-contextSanitiserargument, used to check for common context handling errors (#3060).
- Added entries for SharedSceneInterface limits and usage (#3126).
- ArnoldTextureBake (#3026) : Added optional median filter.
- Hash cache (#3033) : Reduced memory usage and improved performance.
- GraphComponent : Reduced memory usage and improved script loading times (#3080).
- Shader : Improved performance of network generation (#3074).
- ShaderAssignment : Improved performance by removing support for varying shader networks by scene location (via the “scene:path” context variable) (#3074).
- AnimationEditor : Improved behaviour of the plug listing (#3106).
- Only selected nodes are shown, not their descendants.
- The ancestor node hierarchy is not shown redundantly.
- Improved performance.
- Test app :
- MeshTangents : Added support for additional computation modes (#3030).
- ImageWriter : Added DWA compression presets (#3153).
- Numeric Bookmarks : Added serialisation to preserve numeric bookmarks across sessions (#3157).
- SetExpressions : Added support for wildcard characters in set names (#3172).
- Lights :
- OpenGLAttributes : Added new “Light Visualiser” section, with control over visualisation scale and maximum texture resolution (#3219).
- UI : Improved stylesheet (#3193, #3229, #3246, #3249).
- SystemCommand : Added
shellplug, to determine whether or not the supplied command is interpreted as a shell command or executed directly (#3230).
- ArnoldShader : Added metadata for new shader parameters introduced in Arnold 5.3 (#3243).
- Dispatcher (#3024) :
- Added support for Switch nodes. The dedicated TaskSwitch node is still available, but will be removed in a future release.
- Added support for ContextProcessor nodes such as ContextVariables and TimeWarp. The dedicated TaskContextVariables node is still available, but will be removed in a future release.
- Light linking (#3265) :
- Fixed crash when hiding a linked light during an interactive Arnold render.
- Fixed crash when changing parameters on a linked light during an interactive Arnold render.
- Fixed bug which caused light links to be output unnecessarily if non-lights
where inadvertently added to the
- TransformTool : Fixed crash when using the tool while a Catalogue node saves an image in the background (#3196).
- GraphEditor (#3028) : Added bookmark annotations for Dots and other auxiliary nodes.
- ArnoldTextureBake (#3026) :
- Connected external dispatcher settings to internal render task.
- Connected preTasks plug to internal tasks.
- Fixed leakage of internal context variables.
- Viewer :
- Fixed keyboard modifier handling for object selection. Previously, holding down any modifier key whilst drag selecting or clicking an object in the Viewer would modify the current selection. This behaviour was only intended to be triggered by the Shift key (#3095).
- Fixed bug that prevented image updates after a computation error had occurred (#3273).
- Scene : Fixed context handling bugs in Transform, SceneWriter, SceneAlgo, Set, Isolate and Prune. This improves performance on some complex scenes (#3060).
- Offset : Fixed context handling bug (#3073).
- AnimationEditor (#3106) :
- Fixed visibility glitch in timeline hover indicator. It wasn’t being hidden when the mouse left the editor.
- Fixed bug when deselecting a curve - the plug listing selection was not being updated to reflect the change.
- PythonCommand :
- Fixed widget signal/slot lifetime issues (#3179).
- Using ScopedConnections is no longer needed as
Widgetnow derives from
- ScopedConnections can still be used when wanting to replace connections on the fly.
- Using ScopedConnections is no longer needed as
- NodeMenu : Fixed Delight/Light/DistantLight menu item (#3216).
- CropWindowTool :
- Dispatch app : Fixed configuration bug which caused GafferUI to be loaded unnecessarily.
This could cause a
QXcbConnection Could not connect to displaywhen run on a machine without an X server (#3237).
- Execute app : Stopped current frame of saved script leaking into the context for
- Stats app : Fixed VTuneMonitor scoping (#3196).
- Monitor : Fixed thread safety and scoping of monitors. Monitors now only see processes launched on the thread they were scoped on, and parallel tasks that are spawned by those processes (#3196).
- Reference : Fixed problems that meant that metadata was lost when promoting a plug from a reference (#3258).
- GraphComponent : Fixed crashes caused by passing
Noneas a child argument from Python (#3276, #3279).
- Expression : Fixed bug whereby expressions could break if nodes were renamed during copy/paste (#3283).
- CustomAttributes : Fixed performance regression caused by addition of the
- Warp : Fixed bug which prevented a derived class from using a single Engine for the whole
image. It is no longer necessary to append
- Added “Anatomy of a Camera” which gives an overview of Gaffer’s camera model, the terminology, the camera data in the scene, and how the data flows through the graph (#3050).
- Added a “Camera” section to “Working with Scenes” which covers usage and task information about the Camera node, manipulating camera objects, the CameraTweaks node, render overrides, and demos of a spherical and anamorphic camera setup (#3050).
- Added “Light Linking” which shows how light linking is set up and runs through an example scenario that would necessitate light links (#3114).
- Added mechanism for providing example node networks in the help menu. Examples can optionally be associated with certain node types. The Cog menu in the Node Editor lists any applicable Examples for the node type being edited (#3108).
- Added general improvements to readability and appearance in the stylesheet. Most notably, this makes the headings consistent, and the spacing between elements uniform (#3149).
- Added bootstrap scrollspy to improve signposting and to provide a mini-nav for articles (#3159).
- Moved tutorials to appropriate sections (#3210).
- Fixed broken links (#3210).
- ComputeNode : Added
computeCachePolicy()methods which can be overridden to provide additional control over caching. Default behaviour is unchanged. The new
Standardpolicy can be used to prevent multiple threads computing the same result in parallel, which is of particular relevance to expensive computes that load external resources. Computes which spawn TBB tasks must use the
- ThreadState : Added new class to consolidate tracking of current context, process and
monitors on a per-thread basis. When spawning tasks from a compute, it is your responsibility
to transfer thread state onto the threads executing the tasks, whereas
before only context needed to be transferred. New constructors for the various
Context::EditableScopeclasses make this relatively painless (#3196).
- ProcessException : Added new class used to wrap exceptions thrown during computation. This provides information about the plug and context where the exception was thrown (#3223).
- TextWidget/MultiLineTextWidget : Added support for unicode characters. In this
getText()method will return a UTF8 encoded string (#2999).
- ContextSanitisers : Added new ContextSanitiser classes to GafferSceneTest and GafferImageTest. These are Monitors which warn about common context handling mistakes (#3060, #3073).
- TaskNode (#3024, #3025) :
- Simplified implementation requirements for
postTasks()methods. It is now sufficient to construct
Tasksdirectly from the input plugs, with no requirement to find their source and check for a TaskNode.
- Added missing bindings for
Task( TaskPlug )and
- Simplified implementation requirements for
- ContextProcessor (#3024) :
- Added support for working with
Plugsrather than only
- AnnotationsGadget (#3028) : Added new gadget for rendering annotations for GraphGadgets.
- MonitorAlgo (#3028) : Added
annotate()methods for turning Monitor statistics into GraphEditor annotations.
- ValuePlug :
- Context (#3060) : Added
- SceneTestCase (#3060) :
- Added a ContextSanitiser that is active for the duration of the tests.
- Improved assert methods.
- GraphComponent : Added protected
parentChanged()virtual method (#3080).
- ImagePlug : Added convenience methods for evaluating global image properties (#3073).
- GraphComponentPath : Added property for accessing the GraphComponent (#3106).
- LightFilter : Added LightFilter class used as base for renderer-specific implementations (#3020).
- NameValuePlug : Introduced new plug type for associating a name with a value (#3161).
- SceneAlgo :
history()now returns a nullptr when called for empty scenes instead of precipitating a segfault (#3207).
- ExtensionAlgo : Added mechanism to export Boxes as Gaffer extensions via
exportExtension()(#3158). Gaffer extensions each define a new node type and are automatically integrated into the node menu.
- StringPlugValueWidget : Added support for “stringPlugValueWidget:placeholderText” metadata (#3218).
- Widget : Improved interaction with stylesheet. Widgets now provide “gafferClass” and “gafferClasses” Qt properties which allows stylesheets more precise control (#3229).
- MetadataWidget : Added new class and derived classes to allow editing of metadata values via the UI (#3143).
- UIEditor : Added support for registering custom PlugValueWidgets and associated metadata (#3143).
- TestRunner : Added new class with features for detecting performance regressions. Use the
PerformanceScopenested classes to annotate unit tests which test performance (#3127, (#3265).
- Plug : Deprecated
- Reference : Added
- ImageGadget : Added
- ImageView : Added
createDisplayTransform()static method (#3273).
- UVView : Added new View subclass for viewing UVs and textures (#3273).
- SourceSet : Added new Set subclass whose contents automatically track the source node for the current scene selection (#3270).
- NodeSetEditor (#3270) :
getNodeSetDriver()methods to link editors.
drivenNodeSets()method to query linked editors.
drivenNodeSetsChangedSignal()signals to allow editor links to be observed.
registerNodeSetDriverMode()to allow custom link modes to be added.
- Arnold : Updated to version 22.214.171.124.
- Appleseed : Updated to version 2.0.5-beta.
- OpenEXR : Updated to version 2.3.0.
- OpenVDB : Updated to version 6.0.0.
- Blosc : Updated to version 1.15.1.
- PySide : Updated to version corresponding with Maya 2018 Update 6.
- Cortex : Updated to version 10.0.0-a59.
- TBB : Updated to version 2018 Update 5.
- Alembic : Added python bindings.
- Improved debugging support (#3070) :
- Added support for using ASAN option with GCC.
- Enabled TBB debugging features in DEBUG builds.
-fno-omit-frame-pointercompiler flag for RELWITHDEBINFO builds.
- Fixed warnings when building with XCode 10.2 (#3094).
- Fixed problem where some Arnold modules were installed when ARNOLD_ROOT was not specified (#3101).
- Made GafferCortex an optional component at build time (#3168).
- Reduced the number of errors thrown during documentation build (#3212).
ShaderAssignment : Removed support for using the “scene:path” context variable in shader networks. Temporary backwards compatibility can be enabled by setting the
GAFFERSCENE_SHADERASSIGNMENT_CONTEXTCOMPATIBILITYenvironment variable to
OSLObject : Removed support for using the “scene:path” context variable in shader networks. Temporary backwards compatibility can be enabled by setting the
GAFFEROSL_OSLOBJECT_CONTEXTCOMPATIBILITYenvironment variable to
parentChanged()virtual method (#3080).
Experience in the Gaffer codebase suggests that
parentChanged()was a relatively common method name, which may now be inadvertently overriding the new virtual method. Clang will warn for these cases if
-Wallis used, but GCC requires
-Woverloaded-virtualto be used.
hash()method and associated member data.
- Removed deprecated
- Removed less-than operator.
- The equality operator now compares plug and context instead of hash.
ArrayPlug : Inputs are now required to be ArrayPlugs too (#3116).
BackdropNodeGadget/StandardNodeGadget (#3028) : Removed private member variables.
SceneTestCase (#3060) : Changed signatures for the following functions :
Shader : Changed base class to ComputeNode (#3074).
TweakPlug : Added compulsory ValuePlug argument to constructor used for serialisation (#3084).
AnimationEditor : Removed
ParallelAlgo : Replaced
Renderer API : Added
lightBlocker()virtual method (#3020).
CompoundDataPlug : Removed MemberPlug and
addMember()as well as
addOptionalMember(). Use NameValuePlug instead (#3161).
TransformTool : Added private members (ABI change only - source compatibility is maintained) (#3144).
RenderController : Added argument to
updateInBackground()(ABI change only, source compatibility is maintained) (#3144).
SceneGadget : Added new private member (ABI change only, source compatibility is maintained) (#3144).
LightVisualiser : The signature for
visualise()now also includes the attributes (#3180).
attributesas additional argument (#3260).
BranchCreator : Added
constantBranchSetNames()virtual methods (#3176).
EvaluateLightLinks : Removed. This was a node used internally to translate light links to renderers, work that is now done in RendererAlgo (#3265).
Context : Changed base class for Scope/EditableScope, and removed private member from Scope. Source compatibility is preserved (#3196).
Process : Changed base class, and removed optional
currentContextargument from protected constructor (#3196).
Monitor (#3196) :
- Changed base class to
setActive()/getActive()methods. Use the Scope class instead.
- Changed base class to
ComputeNode : Added virtual methods (#3174).
ValuePlug : Removed
TypedObjectPlug : Removed
GafferCortex : Removed GafferCortex module from standard builds (#3253).
Style : Changed colour arguments to
renderText()from Color3f to Color4f (#3273).