This version is built against Arnold 220.127.116.11, and is not compatible with earlier Arnold versions.
Spreadsheet : Added drag and drop reordering of rows.
InteractiveRender : Added support for motion blur.
Profiling : Added “Tools/Profiling” menu to annotate nodes with performance metrics.
Serialisation : Reduced script save times by around 50%.
Cancellation : Improved responsiveness by supporting cancellation of long computes in the following nodes :
Improved performance of Python expression evaluation when the same result is required in multiple threads. Specific expression benchmarks have shown a 10x speedup and some production scenes show an overall 15-30% improvement. Caution : This can expose pre-existing bugs in other nodes - see Breaking Changes for details.
Improved error message when Python expression assigns an invalid value.
Numeric Bookmarks : Changed the Editor 1-9 hotkeys to follow the bookmark rather than pinning it (#4074).
Editors : Simplified the Editor Focus Menu, removing some seldom used (but potentially ambiguous) modes (#4074).
Added support for sub-frame dragging with a Ctrl modifier, and fixed snapping of the frame indicator for regular drag operations.
The current frame is now drawn next to the playhead.
Increased image processing tile size from 64 pixels to 128 pixels. This reduces per-tile overhead on large images, dramatically increasing effective image performance in many cases.
SceneNode/SceneProcessor : Enforced that the value of the
enabledplug may not be varied using the
scene:pathcontext variable. Attempts to do so could result in the generation of invalid scenes. Filters are the appropriate way to enable or disable a node on a per-location basis, and should be used instead. This change yielded a 5-10% performance improvement for a moderately complex scene.
OSLImage : Avoided some unnecessary computes and hashing when calculating channel names or passing through channel data unaltered.
Context : Optimized
hash()method, and reduced overhead in
NameSwitch/Spreadsheet : Rows with an empty name are now treated as if they were disabled. See Breaking Changes for further details.
ContextVariables : Improved performance by around 50%.
FilterResults : Improved performance.
SceneAlgo : Reduced threading overhead for
filteredParallelTraverse(). This is particularly noticeable when visiting locations with many children.
Set : Added wildcard support to the
GraphEditor : Added tool menu with options to control visibility of annotations.
Render : Improved scene generation times for renders that use
dispatcher.batchSizeto render multiple frames at once. Previously Gaffer’s cache was cleared after scene generation on each frame, but this is now only done for single-frame batches.
Instancer : Fixed variation of prototype root attributes using context variables.
ScriptNode : Fixed bugs that allowed global variables to remain in the context after they had been disabled, renamed or deleted.
Fixed crash when reading Alembic caches with non-scalar
Fixed crash when reading Alembic caches with invalid primitive variables.
UDIMQuery and OSLImage : Fixed incorrectly isolated TBB which could cause hang when other nodes use Standard cache policy. Now uses TaskCollaboration to improve performance.
Wrapper : Removed the
PYTHONHOMEenvironment variable. This fixes problems running Gaffer in python-enabled versions of
CompoundNumericPlug : Fixed serialisation of dynamic plugs with non-default interpretations.
Refactored to allow EditableScope to avoid memory allocation where possible.
Added fast non-allocating
EditableScope::set( name, const T * )overload. This should be used in preference to the old
set( name, const T & )method.
EditableScope::setAllocated()method to replace the old
set()method in the rare circumstance where allocation is required.
variableHash()method, which returns the hash for an individual variable.
getIfExists()method, which returns
nullptrif a variable doesn’t exist.
getAsData()method, which returns a copy of a variable as
TypeDescriptionregistration class, which must be used to register any custom data types used in context variables.
GraphComponent : Added
Serialisation : Added
addModule()method, for adding imports to the serialisation.
Added optional value snapping for drag and button press operations. This is controlled via the
getHoverPositionVisible()accessors to control an optional position indicator drawn under the pointer.
Expression : Added
Engine::executeCachePolicy()method which must be implemented by subclasses.
ImageAlgo : Added constants for the default channel names -
SceneAlgo : Added optional
filteredParallelTraverse( scene, pathMatcher ).
AnnotationsGadget : Added
getVisibleAnnotations()methods to allow filtering of annotations.
MonitorAlgo : Added
Deformer : Added
computeProcessedObjectBound()virtual methods. These can optionally be overridden by derived classes to compute faster approximate bounds where possible.
NameSwitch/Spreadsheet : Rows with an empty name are now treated as if they were disabled. Previously they would cause confusion by being matched against empty selectors. Use the default row for empty selectors instead, or alternatively use a catch-all
Ownershipenum. The copy constructor now always performs a full copy.
Refactored Slider to provide all the functionality of NumericSlider, and removed NumericSlider.
Renamed initial constructor argument from
StandardOptions : Removed
cameraBlurplug. This never functioned as advertised, as the regular
deformationBlurblur settings were applied to cameras instead. As before, a StandardAttributes node may be used to customise blur for individual cameras.
Changed signature of the following methods to use
filteredParallelTraverse()overload which accepted a
Filter *. Pass
DeleteFaces / DeletePoints / DeleteCurves : The PrimitiveVariable name is now taken verbatim, rather than stripping whitespace.
Disabled copy construction.
The following methods now take a
const object &where they used to take
The following methods now take a
Serialisation &argument where they used to take
const Serialisation &:
repr()now takes a
Serialisation *where it used to take a
const Serialisation *.
valueRepr()now has an optional
Metadata : Renamed signal types :
serialisationrequired argument to
metadataModuleDependencies()method. Module dependencies are now declared automatically by
Editors : Removed the ‘Follow Scene Selection’ mode from the Node Editor Focus menu (#4074).
GafferSceneUI : Removed
ScriptNode : Added private member data.
Expression : Changed the Python expression cache policy to
Standard. This executes expressions behind a lock, and can cause hangs if buggy upstream nodes perform TBB tasks without an appropriate
TaskCollaborationpolicy. In this case, the
GAFFER_PYTHONEXPRESSION_CACHEPOLICYenvironment variable may be set to
TaskIsolationwhile the bugs are fixed.
Node : Removed
plugFlagsChangedSignal(). We aim to phase flags out completely in future, and none of the current flags are expected to be changed after construction.
ContextProcessor : Added
FilteredChildIterator/FilteredRecursiveChildIterator : Annotated all namespace-level typedefs with
[[deprecated]]. These were already documented as deprecated in Gaffer 0.59.0.0, but their use will now trigger compiler warnings. Please use the class-level typedefs instead, for example
Plug::Iteratorin place of
RendererAlgo : Removed from the API. The render adaptor registry and
applyCameraGlobals()are still available, but have been moved to SceneAlgo.
MonitorAlgo : Removed deprecated
annotate()overloads. Source compatibility is retained.
Instancer : Attributes from the prototype root are now placed at the instance root, rather than on the instance group. This allows context variation to potentially vary these attributes. Usually attribute inheritance will mean that this behaves the same, but scenes which explicitly override attributes at specific locations in the hierarchy after an instancer could see modified behaviour.
PointsGridToPoints : Changed default value of
filterinput, so that a filter must now be connected to specify the objects to modify.
GafferVDB : Changed base class of the following nodes :
LevelSetToMesh : Changed default value for
Moved minimum required C++ standard to C++14.
Moved minimum required TBB version to 2018 Update 3.
Dependencies : Updated to GafferHQ/dependencies 3.0.0 :