0.59.0.0
This release provides substantial improvements to USD support, an upgrade to Qt 5.12, and builds for both Python 2 and 3.
Caution
The current plug values are now omitted when exporting a Box for referencing. See Improvements section for more details.
Serialisation fixes for dynamic TransformPlugs and Transform2DPlugs mean that files saved in Gaffer 0.59 may not load in Gaffer 0.58. This only affects plugs with customised default values.
Features
Unencapsulate : Added new node to expand capsules created by Encapsulate back into regular scene hierarchy. This discards the performance advantages of working with capsules, but is useful for debugging, or when it is necessary to alter a capsule’s contents downstream.
Improvements
USD :
Mesh : Added automatic conversion of USD’s
st
primitive variables to and from Gaffer’suv
primitive variable.Curves : Added support for widths, type, wrap and basis.
Points : Added support for widths and ids.
Primitives :
Added support for normals, velocity and acceleration.
Added automatic conversion of USD’s
displayColor
primitive variable to and from Gaffer’sCs
primitive variable.
Camera : Added reading of cameras and the standard cameras set.
Instancing :
Improved interoperability with UsdGeomPointInstancers :
A new “usd:pointInstancers” set is automatically generated on reading, allowing a single Gaffer Instancer/SetFilter to target all point instancers.
Renamed point instancer primitive variables to align with the defaults on the Instancer node.
Improved performance and memory usage when reading scenes using USD’s scenegraph instancing.
Attributes :
Added support for USD’s visibility attribute, converting it to and from Gaffer’s
scene:visible
attribute.Added support for USD’s
purpose
attribute, converting it to and from ausd:purpose
string attribute in Gaffer.Added support for USD’s
kind
attribute, converting it to and from ausd:kind
string attribute in Gaffer.
Sets :
All UsdCollections can now be loaded as Gaffer sets.
Gaffer sets are now written to standard UsdCollections, and not to an unusable default prim.
Substantially improved performance for both reading and writing.
Untyped prims are now loaded as empty locations instead of being ignored.
Improved warning logging.
Box :
Improved strategy used for exporting for referencing. Before, the current values of the Box plugs were converted into the default values of the Reference during export. This was error prone as it was too easy to export new defaults after changing values for testing. We now export default values as they are, and omit current values completely. Two new menu items allow the default values to be authored explicitly from the current values at any time.
Added “Reset Default Values” item to NodeEditor tool menu. This sets the default values for all plugs from their current values.
Added “Reset Default Value” item to plug context menu. This sets the default value from the current value.
ImageReader : Added initial support for reading RAW files.
CustomAttributes :
extraAttributes
is now a CompoundObjectPlug, allowing it to define complex attribute values including shading networks.GraphEditor : Improved performance slightly for large graphs.
Warp : Defaulted
useDerivatives
to off for nodes created via the UI. Using derivatives is only beneficial when the warp is highly anisotropic, and it has a significant performance impact.CopyChannels : Improved performance for the special case of a single input.
Catalogue/Viewer : Improved tile throughput for interactive renders.
Performance : Replaced standard memory allocator with jemalloc. Set
GAFFER_JEMALLOC=0
to disable this and use the standard allocator.Merge : Optimized image merging. This has been tackled in several ways, with different levels of impact. Some extreme cases, such as using a multiply to merge two large datawindows with little overlap, now produce much smaller data windows. Other cases can benefit a lot from being able to pass through input tiles unmodified. For cases without a huge shortcut, there is an approximately 20% speedup from lower level optimization.
Checkerboard : Optimized image generation when rotation is 0.
InteractiveRender : Added a warning when attribute edits require geometry to be regenerated, as this can have a performance impact. Examples in Arnold include subdivision changes or changes to attributes inherited by procedurals.
NodeMenu : Removed Loop node. This node can have severe consequences for performance if used inappropriately. Depending on the use case, the Collect nodes and others often provide a more performant alternative. The Loop node can still be created via the scripting API, but we recommend you consider the alternatives and/or request advice before using it.
TransformTool : Improved tool state messaging to include node names and/or paths.
Fixes
USD :
Fixed writing of animated creases and corners.
Fixed writing of animated sphere radius.
Fixed various animation reading bugs.
Fixed handling of interpolation for normals.
Fixed writing of indexed primitive variables to non-indexed USD attributes.
Fixed handling of GeometricInterpretation/Role.
TransformTools : Fixed bug finding existing nodes inside EditScopes.
Viewer : Fixed bug that caused mouse clicks in empty toolbar regions to be ignored.
PlugAlgo/BoxIO : Fixed bug handling nested compound plugs.
Resample : Fixed hash of intermediate
deep
plug.String matching :
Fixed erroneous matches in specific cases involving multiple space-separated patterns and the
*
wildcard.Fixed severe performance problem caused by many
*
wildcards in space-separated match patterns.
Box/Reference :
Fixed export and referencing of TransformPlugs with modified default values (#3946).
Fixed export and referencing of CompoundDataPlugs with modified default values (#3907).
Fixed loss of spreadsheet values when using “Duplicate as Box” (#3972).
Fixed export and referencing of SplinePlugs.
Fixed incorrect presentation of referenced CompoundDataPlugs (#4020).
Encapsulate : Fixed incorrect motion blur when deformation blur is turned on for the Capsule itself (#3557).
Spreadsheet : Fixed serialisation of default values which do not match those of the default row.
Checkerboard : Checker colors are now exactly equal to the colorA and colorB parameters. Previously, there were very tiny floating point errors which grew larger as the distance from origin increased.
Transform2DPlug : Fixed serialisation of dynamic plugs, such as plugs promoted to a Box.
SplinePlug : Fixed bug that meant
isSetToDefault()
could return true even if it had computed inputs. It now returns false in this case, and never triggers an upstream compute.
API
Gadget :
Added
updateLayout()
virtual method to simplify implementation of container types.Added
dirty()
method for finer grained tracking of changes thanrequestRender()
provided.Deprecated
requestRender()
method. Usedirty()
instead.
OSLShader : Added
registerCompatibleShader()
method to allow connections from non-OSL shaders to be made.ImageGadget : Added
tileUpdateCount()
andresetTileUpdateCount()
methods. These are useful for measuring performance.TestRunner : Added
PerformanceScope.setNumIterations()
method.TestCase/TestRunner : The hash cache is now cleared before running each test.
TransformPlug/Transform2DPlug : Added constructor arguments for specifying child plug default values.
ValuePlug :
Added
defaultHash()
virtual method.Added
dirtyCount()
public method.
ValuePlugSerialiser :
Added
valueRepr()
method.Added support for
valuePlugSerialiser:omitParentNodePlugValues
context variable. This is used for exporting Boxes for referencing, and by ExtensionAlgo.
CompoundObjectPlug : AtomicCompoundDataPlugs are now accepted as inputs.
ImageAlgo :
tiles()
now returns a top level dictionary containing all the tileOrigins as a V2iVectorData, and each channel as an ObjectVectorData of channelDatas with corresponding indices. This allowstiles()
to run substantially faster, more than twice as fast if the input network is very cheap.ConfirmationDialogue : Added optional
details
constructor argument which accepts text to be shown in a collapsed “Details” section.Node :
Improved speed of
RecursiveIterator
andRecursiveRange
for nodes.Added new
GAFFER_NODE_DECLARE_TYPE
andGAFFER_NODE_DEFINE_TYPE
macros. Subclasses should use these in preference toGAFFER_GRAPHCOMPONENT_DECLARE_TYPE
andGAFFER_GRAPHCOMPONENT_DEFINE_TYPE
.Deprecated all namespace-level iterator typedefs for Node and its subclasses. Use the class-level typedefs instead.
Plug : Deprecated all namespace-level iterator typedefs for Plug and its subclasses. Use the class-level typedefs instead.
RendererAlgo :
Moved RendererAlgo bindings into a
GafferScene.RendererAlgo
submodule. The old names are provided for temporary backwards compatibility but are considered deprecated and will be removed in the future.Added Python binding for
objectSamples()
function.
SceneTestCase : Changed base class to ImageTestCase, to provide methods for comparing images.
Capsule : Expiry is no longer detected based on the dirtyCount of the source scene. This removes a debugging tool that could be useful, but allows nodes that create Capsules to have more granular hashing behaviour. If the behaviour of the source scene is captured by a hash that can be used by the capsule, then we can reuse the capsule when that hash matches, and we don’t need to invalidate if the capsule is changed back to a cached value.
Breaking Changes
USD :
The
st
,displayColor
and UsdGeomPointInstancer primitive variables have been renamed.Removed reading/writing of
cortex:
prefixed attributes.
Gadget : Added new virtual method and private member variables.
ImageGadget : Removed/moved private member variables.
OpenColorIOTransform : Made
transform()
method protected rather than public.BackgroundMethodTest : Removed public visibility from private
TestWidget
andWaitingSlot
.Box : The current plug values are now omitted when exporting for referencing, rather than being transformed into new default values.
Reference : Removed support for boxes exported prior to version 0.9.0.0.
TransformPlug/Transform2DPlug : Added constructor arguments.
ValuePlug : Added virtual method.
ValuePlugSerialiser : Removed support for
valuePlugSerialiser:resetParentPlugDefaults
context variable.NameValuePlugValueWidget : Removed support for using the
Plug.Dynamic
flag to determine whether or not thename
plug is shown. UsenameValuePlugValueWidget:ignoreNamePlug
metadata instead.Attributes : Changed type of
extraAttributes
plug from AtomicCompoundDataPlug to CompoundObjectPlug.Light/Camera : Removed button for adding custom plugs in the “Visualisation” section.
Metadata : Removed compatibility for loading graph bookmarks created in versions prior to 0.33.0.0. Resave the file from Gaffer 0.58.0.0 to preserve the bookmarks if necessary.
RendererAlgo :
Objects which don’t support deformation blur are now always sampled at the integer frame time. Previously they were sampled at shutter open time if deformation blur was turned on.
Changed type used to represent sample times from
std::set<float>
tostd::vector<float>
, to align with theIECoreScenePreview::Renderer
API.
Encapsulate : Removed private data member.
Build
Dependencies : Updated to version 2.1.1
Qt 5.12.8
Boost 1.68
Cortex 10.1.2.0
OpenEXR 2.4.1
Appleseed 2.1.0-beta
USD 20.11
OpenSSL 1.1.1h
See https://github.com/GafferHQ/dependencies/releases/tag/2.1.1 for full details.