1.0.0.0
Note
This release requires Arnold version 7.1.0.0 or newer.
Features
Viewer :
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
channelInterpretation
plug controls the naming of channels loaded from multi-part files.ImageWriter : Added support for writing multi-part OpenEXR files using a new
layout
plug. 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.
A new
image:viewName
context 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.
Improvements
Viewer : Improved accuracy of OpenColorIO display transforms when applied using the GPU.
Outputs :
Added support for
layerName
string parameter, which can be used to customise the naming of channels in EXR outputs. Currently only supported for Arnold renders.Added support for
layerPerLightGroup
boolean parameter, which automatically splits the outputs into separate layers, one for each light group.
USD :
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 (
.jp2
) images.Spreadsheet : Added
activeRowIndex
plug, which outputs the index of the currently active row.InteractiveArnoldRender : Added support for an
updateInteractively
bool 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_rgb
andramp_float
. The OSLColorSpline
andFloatSpline
shaders 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”).
Fixes
Seeds : Fixed point distribution generated on MacOS to match the point distribution generated on Linux.
RenderController : Fixed duplicate
callback( Completed )
calls fromupdateInBackground()
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 usingignoreDataWindow
.Merge : Fixed rare failure to update when changing which channels existed on input.
CollectScenes : An empty
rootNameVariable
value 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.
ViewportGadget :
Fixed bug which could cause
setCamera()
to emitcameraChangedSignal()
even when the camera was unchanged.Fixed
setCenterOfInterest()
so that it doesn’t emitcameraChangedSignal()
if the center of interest is unchanged.Added GIL release in
setViewport()
Python bindings.
AnimationEditor : Fixed glitches in the drawing of tangent handles during drags.
ArnoldMeshLight : Fixed bug which caused
ai:autobump_visibility
attributes to be inadvertently modified.ArnoldShader/ArnoldLight : Fixed potential buffer overrun when loading color parameters with
gaffer.plugType
metadata.Plug :
The
removeOutputs()
method now also removes any outputs from child plugs. This is consistent with thesetInput()
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|UINT
syntax will now issue a warning, and should be updated to use the generic syntax.Constraint : Restricted
targetVertex
to positive integers.ScriptContainer : Fixed
typeName()
, which was omitting theGaffer::
prefix.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
<UDIM>
tokens.
API
ImageNode : Added virtual
hashViewNames()
andcomputeViewNames()
methods which must be implemented by derived classes (unless an input connection is made forout.viewNames
).ImagePlug :
Added
viewNames
plug for outputting the names of the views in an image.Added ViewScope class for specifying the
image:viewName
context variable.Added optional
viewName
arguments to the convenience accessors such aschannelNames()
andchannelData()
.
ImageAlgo :
Added optional
viewName
arguments toimage()
,imageHash()
andtiles()
.Added
viewIsValid()
function.Added
sortedChannelNames()
function.
PlugAlgo : Added optional
value
argument tocanSetValueFromData()
.RenderController :
Added Python bindings for optional
callback
argument toupdate()
andupdateMatchingPaths()
.Added Python binding for
updateInBackground()
.Added
pathForID()
,pathsForIDs()
,idForPath()
andidsForPaths()
methods. These make it possible to identify an object in the scene from auint id
AOV.
TestCase : Added
assertNodeIsDocumented()
method.ImageTestCase : Added
metadataBlacklist
argument toassertImagesEqual()
.MenuButton : Added
setErrored()
andgetErrored()
methods.SceneView :
Added
registerRenderer()
andregisteredRenderers()
methods. These allow any suitableIECoreScenePreview::Renderer
to be used to draw the scene.Added
renderer.name
plug to control which renderer is used.Added
renderer.arnold
plug to control Arnold render settings.
PlugLayout : Improved activator support. The
layout:activator
andlayout:visibilityActivator
metadata 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
CameraFlags
enum, which is used incameraChangedSignal()
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.Signals :
Added a new Signals namespace with Signal, Connection, ScopedConnection and Trackable classes. This provides significant performance and memory usage improvements over the old
boost::signals
library.Removed usage of
boost::signals::detail::unusable
as a substitute for thevoid
return type in the Signal bindings. Custom SlotCallers may now use a standardvoid
return type.The following signals now use a
CatchingCombiner
so 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
mightForceMonitoring()
andforceMonitoring()
in order to ensure the monitored processes always run, instead of being skipped when they are cached.ValuePlug : Added
hashCacheTotalUsage()
function.ScriptContainer : Added Python binding.
Version.h : Added
versionString()
function.
Breaking Changes
ImagePlug : The
image:viewName
context variable must now be set when evaluating plugs other thanviewNamesPlug()
. Thegui
app provides a default, but standalone scripts may need to be adjusted to specifyimage:viewName
explicitly.ImageWriter/SceneWriter : The overrides for TaskNode virtual methods are now
protected
rather thanpublic
. Use theTaskPlug
API instead.ShaderQuery :
addQuery()
now createsquery
andout
plugs with numeric suffixes starting at 0 (rather than 1).TweakPlug and TweaksPlug :
Moved to
Gaffer
module.Removed methods for tweaking shader networks.
Backwards compatibility is provided when loading old
.gfr
files.
Arnold : Removed support for Arnold versions prior to 7.1.0.0.
CollectScenes : Changed behaviour when
rootNameVariable
is empty.PopupWindow :
Removed
sizeMode
andcloseOnLeave
constructor arguments.Removed visibility animation.
Removed drag&drop positioning.
ViewportGadget : Added a
changes
argument to CameraChangedSignal.ImageReader : Changed the default interpretation of channel names in multi-part OpenEXR files. Set the
channelInterpretation
plug toLegacy
to preserve the old behaviour.ImageWriter : Multi-part OpenEXR files are now written by default. Set the
layout
plug toSingle Part
to write a single-part file instead.SubTree : Removed the
/
root location from generated sets, because root membership is unsupported elsewhere in Gaffer.OSLShader : Removed
prepareSplineCVsForOSL()
method. UseIECoreScene::ShaderNetworkAlgo::expandSplineParameters()
instead.ArnoldMeshLight : The
ai:autobump_visibility
attributes are no longer modified. Use a separate ArnoldAttributes node if necessary.Spreadsheet :
Renamed
activeRowNames
plug toenabledRowNames
. Backwards compatibility is provided when loading old.gfr
files.Renamed
ui:spreadsheet:activeRowNamesConnection
metadata toui:spreadsheet:enabledRowNamesConnection
.
Signals :
Replaced all usage of
boost::signals
withGaffer::Signals
. These are largely source-compatible, with the following changes :Boost
snake_case
naming has been replaced withCamelCase
.Connection groups are not supported. Use
connectFront()
to connect in front of existing slots.The Connection class has simple
setBlocked()/getBlocked()
accessors, rather thanblock()/unblock()/blocked()
methods.
Removed the
Gaffer/BlockedConnection.h
header file. BlockedConnection can now be found in the Signals namespace provided byGaffer/Signals.h
.Remove the
Gaffer/CatchingSignalCombiner.h
header file. CatchingSignalCombiner can now be found asSignals::CatchingCombiner
inGaffer/Signals.h
.Moved all Python classes into the
Gaffer.Signals
submodule.Deprecated the default value for the
scoped
argument toSignal.connect()
. Passscoped = True
to maintain the previous behaviour, or consider using an unscoped connection.
ViewportGadget : Removed
RenderRequestSignal
type. Use the identicalUnarySignal
instead.Replaced all usage of
boost::optional
withstd::optional
.Random : Renamed
contextEntry
plug toseedVariable
. Old.gfr
files will be converted automatically on loading.SceneAlgo : Removed
historyIDContextName()
function.history()
no longer uses an ID in the context to ensure fresh evaluations, it instead usesMonitor::forceMonitoring()
to temporarily disable caching.
Build
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 2.3.11.0.
OpenShadingLanguage : Updated to version 1.11.17.0.
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
.egg
package.TBB : Updated to version 2020.3.
USD : Updated to version 21.11.