0.61.0.0
Features
Arnold : Added support for Arnold 7, including multiple simultaneous interactive renders. This is in addition to continuing support for Arnold 6.2 - the appropriate version of GafferArnold is chosen automatically on startup based on the
$ARNOLD_ROOT
environment variable.GraphEditor :
Added new “Focus Node” concept. Clicking on the top right of a node tags it as the focus node, and editors and viewers can be set to follow the focus node. This is useful when you have several viewers that you want to view the same node, but you don’t want them to follow selection.
Nodes and connections which don’t contribute to computing the Focus Node are now dimmed. This helps see what part of the graph is active, taking into account the current context.
Image Viewer : Added Luminance option to the channel selection menu.
Animation :
Added new “Cubic” and “Bezier” interpolation modes which will smoothly interpolate between key values. The shape of the interpolated curves can be controlled by adjusting the slope and scale of key tangents, which are displayed and can be interactively manipulated in the Animation Editor.
Added new user interface panel in the Animation Editor with controls for key value, time, interpolation mode and tangent slope, scale and tie mode.
Improvements
HierarchyView : Moved processing to a background thread, so that displaying slow scenes does not cause the HierarchyView to lock up the UI.
GraphEditor :
Improved drawing performance for large node graphs. Gains of about 40% are typical, with much greater gains when looking at a small region of a large graph or performing selection tests (for example when hovering over something or dragging a connection).
Added support for middle-drag panning while dragging nodes and connections using G.
Made connections slightly more visible when zoomed out.
Cancellation : Improved responsiveness of cancellation of tasks waiting on results from another thread.
ImageReader : Channels from EXR subimages named
rgb
,rgba
ordepth
(either uppercase or lowercase) are now loaded into Gaffer’s primary image layer.PathFilter : Removed
scene:filter:inputScene
andscene:path
variables from the context used to evaluate thepaths
plug. This improves performance in some scenarios, and prevents the creation of invalid filters where the paths themselves depend on the current scene location.Switch : Removed variables such as
scene:path
andimage:channelName
from the context used to evaluate theenabled
plug. This improves performance in some scenarios, and prevents the creation of invalid switches.NodeEditor : Added option in node editor context menu to set interpolation of an animated value.
Animation : Added new
ConstantNext
interpolation mode, evaluates to the value of the next key for all times greater than the time of the key.USD : Added support for loading constant primvars from non-geometric prims. These are represented in Gaffer as attributes with a
render:
prefix.Arnold : Added support for
render:
prefixed attributes. For example, a Color3f attribute calledrender:displayColor
will be readable asdisplayColor
from auser_data_rgb
shader.
Fixes
PathListingWidget :
Fixed subtle bugs in the underlying Qt model, although they haven’t been observed to cause problems in practice.
Fixed potential hangs when displaying Paths which launch threaded computes.
Animation :
Fixed bug in
Key.setType()
. Previously it modified the value instead of the type.Fixed crash when dragging multiple keys around in editor.
Fixed bug which resulted in preview key being incorrectly drawn at the origin.
Fixed bug that cleared key selection when selecting multiple curves via path listing or gadget.
Fixed bug when pressing f to frame viewport which resulted in a blank background in certain cases (#4410).
Inserting a new key in editor (Hold “Ctrl” and left click on curve) is now undone/redone as a distinct step.
Fixed bug when selecting curve for first time via gadget, keys appear, then disappear (#4443)
Fixed bug where curves would not become visible in gadget until the path listing expansion was changed (#4408)
ParallelAlgo : Fixed deadlock in
callOnUIThread()
.NameSwitch : Fixed context management bug that allowed variables such as
scene:path
to leak into the context used to evaluate theselector
plug.GafferTest.TestCase : Fixed
assertNodesConstructWithDefaultValues()
to recurse through all plugs.NodeBinding : Fixed bug that could cause type queries to fail if types derived from Switch or ContextProcessor were wrapped for subclassing in Python.
Arnold : Fixed bug that prevented the type of a
user:
attribute from being changed during an interactive render.
API
ScriptNode : Added focus node API.
GraphComponent : Inlined
children()
method, yielding 20-40% improvements in various child iteration benchmarks.Gadget :
Added
layerMask()
andrenderBound()
virtual functions.Added
BackMidBack
render layer.
ViewportGadget :
Added
gadgetsAt()
overload which returns the gadgets rather than taking an output parameter by reference.Added
gadgetsAt()
overload taking a raster space region (rather than position) and an optional layer filter.Add support for Gadget’s double click signal.
PathListingWidget :
setSortable()
andgetSortable()
are no longer deprecated. The underlying bug that made them unreliable has been fixed.Path processing has been moved to a background thread. The API remains unchanged, but updates to the displayed data are made asynchronously with respect to calls to methods of the PathListingWidget.
GafferTest.TestCase : Added
assertFloat32Equal()
function, raises AssertionError if two values do not compare equal after conversion to single precision float.GafferUITest.TestCase : Unexpected Qt messages are now reported as test failures.
Context : Modified
ChangedSignal
to use aCatchingSignalCombiner
, which prevents exceptions from one slot preventing the execution of another.Menu : callable passed as the “checkBox” parameter of a menu item can now return None.
Path :
Added optional
canceller
argument toisValid()
,isLeaf()
,propertyNames()
,property()
andchildren()
methods.Added
cancellationSubject()
virtual function that must be implemented by any paths which access the node graph.
ScenePath : Added support for cancellation of calls to
isValid()
andchildren()
.FileSystemPath : Added support for cancellation of calls to
children()
andproperty()
.PathFilter : Added support for cancellation of calls to
filter()
.Animation :
curve.addKey()
andkey.setTime()
now return active clashing keycurve.addKey()
now has optional remove parameter that defaults to true, if false active clashing key is not removed and becomes inactive.key.setTime()
will not remove active clashing key, instead it becomes become inactive. inactive key at old time becomes active.Added
curve.removeInactiveKeys()
function, removes all the inactive keys parented to a curve.Added
key.isActive()
function, returns true if key is parented to curve and is the active key at its current time.Added
curve.insertKey()
functions, insert key at specified time with optionally specified value.Added
curve.keyTimeChangedSignal()
function, returns a signal that is called when a key’s time has changedAdded
curve.keyValueChangedSignal()
function, returns a signal that is called when a key’s value has changedAdded
curve.keyInterpolationChangedSignal()
function, returns a signal that is called when a key’s interpolation has changedAdded new api for cubic interpolation modes, key tangents and tie mode (see header
Animation.h
for full details)
AnimationGadget :
Added
selectedKeys()
function, returns current set of selected keys.Added
onTimeAxis()
function, returns true if specified line is over the time axis of the gadget.Added
onValueAxis()
function, returns true if specified line is over the value axis of the gadget.
Breaking Changes
ImageReader : Channels from EXR subimages named
rgb
,rgba
ordepth
(either uppercase or lowercase) are now loaded into Gaffer’s primary image layer.FilteredChildIterator/FilteredRecursiveChildIterator : Removed all namespace-level typedefs, which were deprecated in Gaffer 0.59.0.0. Use the class-level typedefs instead, for example
Plug::Iterator
in place ofPlugIterator
.Gadget :
Moved
render()
andrenderRequestSignal()
to ViewportGadget.Removed
select()
method.Replaced
hasLayer()
virtual function withlayerMask()
.Added
renderBound()
virtual function.Renamed
doRenderLayer()
torenderLayer()
, and added newrenderReason
argument, which can be used to check for selection renders without needing to querySelector::currentSelector()
.
ViewportGadget : Deprecated old
gadgetsAt()
signature. Please use the new form instead.ArnoldOptions : Removed support for the
ai:ignore_motion_blur
option. Turn off thesampleMotion
option using a StandardOptions node instead.DotNodeGadget and AuxiliaryNodeGadget now use more inherited functionality from StandardNodeGadget, which could cause problems if anyone has subclassed the gadgets
Fullscreen hotkey is now F11 instead of `.
Removed support for linking editors (following the focus node replaces most practical uses of this feature).
Animation :
Renamed
Type
enum toInterpolation
.Interpolation of a key now affects span to next instead of previous key.
Renamed Key’s
set/getType()
accessors toset/getInterpolation()
.Renamed
Step
interpolation mode toConstant
.Removed customised Key equality operators, the default operators compare on object identity.
Path : Added
canceller
arguments to virtual methods. Note that Python subclasses can be made compatible with both Gaffer 0.60 and 0.61 simply by adding acanceller = None
argument.PathFilter : Added
canceller
argument todoFilter()
method. Note that Python subclasses can be made compatible with both Gaffer 0.60 and 0.61 simply by adding acanceller = None
argument.CopyAttributes : Removed backwards compatibility for accessing input and source scenes as
in[0]
andin[1]
respectively. Usein
andsource
instead.
Build
Updated to GafferHQ/dependencies 4.0.0 :
OpenVDB : Updated to version 8.1.0.
TBB : Updated to version 2020.2.
Qt : Updated to version 5.15.2.
PySide : Updated to version 5.15.2.
Cortex : Updated to version 10.3.0.0.