This release requires Arnold version 18.104.22.168 or newer.
Added optional raytraced rendering, to provide high quality preview of lighting and shading. Initially only Arnold is supported, but other renderers will be added in future.
Added FPS counter option to Gadget menu.
ImageReader : Improved support for multi-part OpenEXR files, including fixes for reading many non-standard-conforming files from 3rd party software (#4559). The new
channelInterpretationplug controls the naming of channels loaded from multi-part files.
ImageWriter : Added support for writing multi-part OpenEXR files using a new
layoutplug. This includes presets for standard conforming single-part and multi-part files, and several presets that match Nuke’s behaviour.
ImageNode : Added support for multi-view images.
ImageNodes can now output multiple “views”. Views are effectively independent images, and may have separate data windows, formats, channels and metadata, and even be mixtures of deep and flat images.
The multi-view feature was originally intended for storing stereo renders, but may also may used for general processing where it is convenient to group multiple images into one stream.
image:viewNamecontext variable specifies which view is currently being processed. This can be used to process each view with different settings, for instance via an Expression or Spreadsheet.
Multi-view images can be read from and written to EXR files via the ImageReader and ImageWriter nodes.
Added new nodes specifically for working with multi-view images :
CreateViews : For combining single view images into a multi-view image.
SelectView : For choosing one view from a multi-view image as a single view image.
CopyViews : For combining views from multi-view sources.
DeleteViews : For removing views from multi-view images.
Anaglyph : For viewing stereo images in a format appropriate for red-blue anaglyph glasses.
A new dropdown menu in the Viewer chooses which view is being displayed.
ContextQuery : Added node to access a context variable value directly without needing to use an expression.
Viewer : Improved accuracy of OpenColorIO display transforms when applied using the GPU.
Added support for
layerNamestring parameter, which can be used to customise the naming of channels in EXR outputs. Currently only supported for Arnold renders.
Added support for
layerPerLightGroupboolean parameter, which automatically splits the outputs into separate layers, one for each light group.
Added support for purpose-based material assignments in SceneReader and SceneWriter. To render or author such assignments, a ShuffleAttributes node must currently be used to shuffle to and from the standard shader attributes.
Added basic support for loading UsdLux lights. The data is available in Gaffer, but needs manual conversion to meet the requirements of a specific renderer.
ImageReader/ImageWriter : Added support for JPEG 2000 (
Spreadsheet : Added
activeRowIndexplug, which outputs the index of the currently active row.
InteractiveArnoldRender : Added support for an
updateInteractivelybool parameter for render outputs. This can be used to request more frequent updates for AOVs other than the beauty image.
ChannelPlugValueWidget : Improved the ordering of channel names presented in the menu.
PresetsPlugValueWidget : The children of compound plugs are now shown when in “Custom” mode.
LightEditor/SceneViewInspector : Improved performance when viewing complex scenes, by improving cache usage during history queries.
Node menu : Removed unsupported Arnold shaders
ramp_float. The OSL
FloatSplineshaders should be used instead.
Image Channel Selectors : Channel names are now shown in “natural order”. This means a numerical part of the name is compared numerically, instead of alphabetically (so “channel13” comes after “channel2”).
Seeds : Fixed point distribution generated on MacOS to match the point distribution generated on Linux.
RenderController : Fixed duplicate
callback( Completed )calls from
updateInBackground()when priority paths are specified.
PresetsPlugValueWidget/FormatPlugValueWidget : Fixed handling of evaluation errors (now turns red instead of failing to draw).
ImageTestCase : Fixed bug in
assertImagesEqual()where bad pixel data could go undetected when using
Merge : Fixed rare failure to update when changing which channels existed on input.
CollectScenes : An empty
rootNameVariablevalue no longer causes the creation of a context variable named
"". Instead, no context variable is created (but the scenes are still collected).
TransformQuery : Removed unnecessary elements from hash.
Fixed bug which could cause
cameraChangedSignal()even when the camera was unchanged.
setCenterOfInterest()so that it doesn’t emit
cameraChangedSignal()if the center of interest is unchanged.
Added GIL release in
AnimationEditor : Fixed glitches in the drawing of tangent handles during drags.
ArnoldMeshLight : Fixed bug which caused
ai:autobump_visibilityattributes to be inadvertently modified.
ArnoldShader/ArnoldLight : Fixed potential buffer overrun when loading color parameters with
removeOutputs()method now also removes any outputs from child plugs. This is consistent with the
setInput()method, which has always managed child plug inputs.
Fixed bug which meant that child output connections were not removed when a plug was removed from a node.
Expression : Fixed error when updating an expression which was previously connected to a deleted spreadsheet row (#4614).
ArnoldRender : Fixed rendering of single-channel AOVs specified using Gaffer’s generic
float|int|uint <name>syntax. Outputs specified using Arnold’s
<name> FLOAT|INT|UINTsyntax will now issue a warning, and should be updated to use the generic syntax.
Constraint : Restricted
targetVertexto positive integers.
ScriptContainer : Fixed
typeName(), which was omitting the
Text : Fixed wrapping bug that caused blank lines to be inserted if a single word was too long for the line.
SceneReader : Fixed loading of USD asset paths containing
ImageNode : Added virtual
computeViewNames()methods which must be implemented by derived classes (unless an input connection is made for
viewNamesplug for outputting the names of the views in an image.
Added ViewScope class for specifying the
viewNamearguments to the convenience accessors such as
PlugAlgo : Added optional
Added Python bindings for optional
Added Python binding for
idsForPaths()methods. These make it possible to identify an object in the scene from a
TestCase : Added
ImageTestCase : Added
MenuButton : Added
registeredRenderers()methods. These allow any suitable
IECoreScenePreview::Rendererto be used to draw the scene.
renderer.nameplug to control which renderer is used.
renderer.arnoldplug to control Arnold render settings.
PlugLayout : Improved activator support. The
layout:visibilityActivatormetadata may now take boolean values to control activation directly. This is useful when an activator only applies to one plug, or it applies to several but depends on properties of each plug. String values are treated as before, referring to a predefined activator.
ViewportGadget : Added a
CameraFlagsenum, which is used in
cameraChangedSignal()to specify what aspects of the camera have changed.
NodeAlgo : Added support for presets on compound plugs. If all child plugs have a particular preset then the parent plug is considered to have it too, and calling
applyPreset( parent, preset )will apply it to all the children.
Added a new Signals namespace with Signal, Connection, ScopedConnection and Trackable classes. This provides significant performance and memory usage improvements over the old
Removed usage of
boost::signals::detail::unusableas a substitute for the
voidreturn type in the Signal bindings. Custom SlotCallers may now use a standard
The following signals now use a
CatchingCombinerso that exceptions in one slot will not interfere with calls to other slots :
ApplicationRoot : ClipboardSignal.
GraphComponent : UnarySignal and BinarySignal.
Gadget : VisibilityChangedSignal, EnterLeaveSignal and IdleSignal.
Node : UnaryPlugSignal, BinaryPlugSignal, ErrorSignal.
ScriptNode : ActionSignal, UndoAddedSignal.
ViewportGadget : UnarySignal.
The following signals now handle exceptions thrown from C++ slots as well as Python slots :
Gadget : ButtonSignal, DragBeginSignal, DragDropSignal, KeySignal.
The following signals no longer suppress exceptions thrown from Python slots :
StandardSet : MemberAcceptanceSignal.
Monitor : Subclasses may now override
forceMonitoring()in order to ensure the monitored processes always run, instead of being skipped when they are cached.
ValuePlug : Added
ScriptContainer : Added Python binding.
Version.h : Added
ImagePlug : The
image:viewNamecontext variable must now be set when evaluating plugs other than
guiapp provides a default, but standalone scripts may need to be adjusted to specify
ImageWriter/SceneWriter : The overrides for TaskNode virtual methods are now
public. Use the
outplugs with numeric suffixes starting at 0 (rather than 1).
TweakPlug and TweaksPlug :
Removed methods for tweaking shader networks.
Backwards compatibility is provided when loading old
Arnold : Removed support for Arnold versions prior to 22.214.171.124.
CollectScenes : Changed behaviour when
Removed visibility animation.
Removed drag&drop positioning.
ViewportGadget : Added a
changesargument to CameraChangedSignal.
ImageReader : Changed the default interpretation of channel names in multi-part OpenEXR files. Set the
Legacyto preserve the old behaviour.
ImageWriter : Multi-part OpenEXR files are now written by default. Set the
Single Partto write a single-part file instead.
SubTree : Removed the
/root location from generated sets, because root membership is unsupported elsewhere in Gaffer.
OSLShader : Removed
ArnoldMeshLight : The
ai:autobump_visibilityattributes are no longer modified. Use a separate ArnoldAttributes node if necessary.
enabledRowNames. Backwards compatibility is provided when loading old
Replaced all usage of
Gaffer::Signals. These are largely source-compatible, with the following changes :
snake_casenaming has been replaced with
Connection groups are not supported. Use
connectFront()to connect in front of existing slots.
The Connection class has simple
setBlocked()/getBlocked()accessors, rather than
Gaffer/BlockedConnection.hheader file. BlockedConnection can now be found in the Signals namespace provided by
Gaffer/CatchingSignalCombiner.hheader file. CatchingSignalCombiner can now be found as
Moved all Python classes into the
Deprecated the default value for the
scoped = Trueto maintain the previous behaviour, or consider using an unscoped connection.
ViewportGadget : Removed
RenderRequestSignaltype. Use the identical
Replaced all usage of
Random : Renamed
.gfrfiles will be converted automatically on loading.
SceneAlgo : Removed
history()no longer uses an ID in the context to ensure fresh evaluations, it instead uses
Monitor::forceMonitoring()to temporarily disable caching.
Moved minimum required C++ standard to C++17.
Updated to GCC 9.3.1 for Linux builds.
Updated to GafferHQ/dependencies 5.0.0 :
Alembic : Updated to version 1.8.3.
Blosc : Updated to 1.21.1.
Boost : Updated to version 1.76.0.
CMark : Updated to 0.29.0.
Cortex : Updated to 10.4.0.0.
CMark : Updated to 0.29.0.
HDF5 : Updated to 1.12.0.
LibFFI : Updated to 3.4.2.
LibPNG : Updated to 1.6.37.
LLVM : Updated to version 11.1.0.
OpenColorIO : Updated to version 2.1.1.
OpenJPEG : Added version 2.4.0.
OpenImageIO : Updated to version 126.96.36.199.
OpenShadingLanguage : Updated to version 188.8.131.52.
OpenSSL : Updated to 1.1.1i.
OpenVDB : Updated to version 9.1.0, and added nanovdb.
PySide : Updated to 5.15.4.
Python : Updated to 3.8.13 (MacOS only).
Qt : Updated to 5.15.4.
Subprocess32 : Now packaged as a regular module rather than as a
TBB : Updated to version 2020.3.
USD : Updated to version 21.11.