This version enables Cycles support by default, as we believe we have made sufficient progress to allow wider testing. We may continue to make behaviour-changing updates if necessary though, so support is not yet considered final.
Python 2 support has been removed. All builds are now using Python 3.
Windows : Added official builds for Windows.
HierarchyView : Added control over the Visible Set, which defines the locations within the scene that are loaded and rendered by the Viewer.
The Inclusions column adds locations to the Visible Set, so that they and their descendants are rendered in the Viewer without needing to be expanded in the HierarchyView.
The Exclusions column excludes locations from the Visible Set, so that they and their descendants are never rendered in the Viewer, regardless of any other expansions or inclusions.
Locations can have their Visible Set inclusion or exclusion toggled by clicking within the appropriate column. Shift-clicking will remove the location and any of its descendants from the Visible Set. When multiple locations are selected, edits to any of the selected locations will affect all selected locations.
Mute/Solo : Added the ability to mute and solo lights.
A light can be muted by setting the
light:muteattribute. If that attribute is not present, the light will not be muted.
One or more lights can be enabled exclusively via membership in the
soloLightsset. If that set has one or more members, only the lights in that set will emit. If the set is empty, all lights emit according to their mute state. If a light is both muted and in the
soloLightsset, it will emit.
Light Editor :
Added a “Mute” column for toggling a light’s mute attribute on and off.
Added a “Solo” column to quickly add and remove lights from the
Lights : Added a
mutetoggle, which can be accessed in the node editor from the
Added a visual indication to lights in the viewport when they are muted. Muted lights use a dark gray outline instead of yellow.
Cycles : Muted lights are disabled in renders.
Arnold : Muted lights are disabled in renders.
Added new curve extrapolation modes to determine the shape of a curve outside the range of its keys.
Constant : Curve is extended as a flat line.
Linear : Curve is extended as a line with slope matching tangent in direction of extrapolation.
Cycle : Curve is repeated indefinitely.
CycleOffset : Curve is repeated indefinitely with each repetition offset in value to preserve continuity.
CycleFlop : Curve is repeated indefinitely with each repetition mirrored in time.
CycleFlip : Curve is repeated indefinitely with each repetition inverted in value and offset to preserve continuity.
Added new curve tab in Animation Editor with controls for setting the extrapolation modes of a curve.
Cycles : Updated to Cycles 3.4.
OSLObject, OSLImage : Improved performance when running heavy shaders on Linux (by 3x in one benchmark). This is achieved using OSL’s recently added batched shading API. In the event of any problem, the optimisation may be disabled by setting the environment variable
NodeEditor : Improved interactivity by moving computations onto background threads. The UI will no longer hang while the NodeEditor waits for the result of a slow computation.
Added a “Disable Edit” command to the right-click menu, to easily disable tweaks in EditScopes (shortcut D).
Added a “Remove Attribute” command to the right-click menu, to delete attributes using the EditScope (shortcut Delete).
Adjustments made to the width of the “Name” column are now preserved when switching between sections.
Isolate : The
keepLightssetting now also keeps light filters.
AttributeTweaks : Added
PathListingWidget : Added support for columns that can automatically stretch to make use of available space.
Animation Editor : For protruding tangents the slope and scale controls are now disabled (non editable) and display constrained values.
pathlib.Pathvalues may now be assigned to StringPlugs.
Render : An error is now emitted if the render camera is hidden, instead of rendering through a default camera instead (#5131).
ResamplePrimitiveVariables : Extended the supported data types when resampling from a Constant primitive variable.
Viewer : If Arnold is available, then it is preferred over Appleseed for performing OSL shader previews. If neither is available, then Cycles will be used (#5084).
FormatPlugValueWidget, ChannelPlugValueWidget, ChannelMaskPlugValueWidget, RGBAChannelsPlugValueWidget, ViewPlugValueWidget : Added support for showing multiple plugs at once, as needed when multiple Spreadsheet cells are selected for editing.
Improved read performance for sets in USD files, with a benchmark reading a moderately large set seeing more than 2x speedup.
Improved cancellation responsiveness when reading large sets from USD files.
SceneWriter : Improved performance when writing sets to USD files.
Spreadsheet : Improved display of image formats.
Layouts : Fixed bug applying window size and position from saved layouts (#5042).
Fixed input connections to individual color and vector components when rendering with a GPU device.
ai:GI_specular_depthoptions now default to
2when they are left unspecified, matching the default values on the ArnoldOptions node.
CompoundNumericPlugValueWidget : Fixed failure to construct with an empty list of plugs.
ChannelPlugValueWidget : Fixed compatibility with multi-view images.
Fixed bugs which allowed read-only nodes to be edited.
Fixed undo for
Removemenu item in Filter tab.
NodeEditor : Fixed bugs in handling of “green dot” non-default-value indicators with nested plugs.
3Delight : Fixed rendering with recent versions of 3Delight, which no longer use the
DL_DISPLAYS_PATHto search for display drivers.
Fixed memory leak.
Fixed thread safety bug that prevented concurrent access to metadata for the same plug or node from multiple threads.
ShufflePrimitiveVariables, ShuffleAttributes, OptionQuery, PrimitiveVariableQuery, ShaderQuery, ContextQuery, CreateViews, SetVisualiser, OSLImage, OSLObject, OSLCode, Outputs : Fixed bugs which allowed read-only nodes to be edited.
CodeWidget : Fixed auto-complete for
pathlib.Pathobjects, and any other classes which throw
AttributeErrorfor an attribute advertised by
Expression : Fixed non-deterministic parsing order for Python expressions (#4935).
FileSequencePathFilter : Fixed bug whereby files were considered to be part of a sequence if they were in a numbered directory. Now only numbers in the file’s name are considered.
BoolWidget : Fixed bug triggered by calling
setImage()from within a
LevelSetOffset, MeshToLevelSet, LevelSetToMesh, SphereLevelSet : Fixed bugs which could cause unnecessary repeated computations, or in the worst case, lead to deadlock.
ValuePlug : Fixed rare deadlock when a TaskParallel compute recurses to a Legacy compute with the same hash.
GafferTest : Fixed bug which caused
parallelGetValue()to use the wrong context.
LightEditor : Fixed bug which could cause attribute edits to be made for a parent location instead of the desired one.
BackgroundMethod : Fixed bug that could cause the
postCallto be called on a widget that had already been removed from the UI.
Filesystem path handling : Adopted
pathlib.Pathin the C++ and Python APIs respectively, with automatic conversion between the two. These simplify common use cases, and provide for more elegant cross-platform path handling.
load()now takes a
fileName()now returns a
exportForReference()now takes a
savePreferences()now takes a
preferencesLocation()now returns a
Added a constructor that accepts a
standardPath()method returning a
std::filesystem::pathobject in C++ and a
pathlib.Pathobject in Python.
StringPlug : Added a
setValue()overload taking a
jobDirectory()now returns a
Backups : File names are now represented using
temporaryDirectory()now returns a
registerReferenceScene()now takes a
exportExtension()now takes a
PlugValueWidget : Added new API to provide asynchronous updates. The old
_plugConnections()methods are deprecated, and support for them will be removed in a future version.
PathColumn : Added
sizeModeconstructor argument. These allow the size behaviour of a PathColumn to be configured.
EditScopeAlgo : Added
TestCase : Added
The slope and scale of protruding tangents is now constrained to match the values of the sibling tangent.
curve.extrapolationChangedSignal()function, returns a signal that is called when a curve’s extrapolation has changed.
Added new api for curve extrapolation modes (see header
Animation.hfor full details).
descriptionmetadata for curve extrapolation modes that is used to generate UI tooltips.
PlugAlgo : Added
renderAnimationCurve()function now takes a vector of curve vertices and an
inKeyRangeargument that indicates whether the specified curve vertices lie within the time range of the curve’s keys.
PlugAlgo : Added
PathColumn : Added
buttonDoubleClickSignal(). These allow a PathColumn to implement its own event handling.
Capsule : Removed attempts to detect invalidated Capsules.
VisibleSet/VisibleSetData : Added struct used to define a subset of the scene to be rendered based on expansions, inclusions, and exclusions. This is used to allow scene locations to be defined as always or never renderable, overriding the usual UI expansion behaviour.
ContextAlgo : Added
SceneGadget : Added
EditScopeAlgo : Added methods to modify and query modifications to set members in an Edit Scope.
Widget : Added support for a
_postContructor()method, which is called after the widget is fully constructed. This can be useful for performing post-initialisation work from a base class.
GafferTest : Added ObjectPlug overloads for
SceneTestCase : Added
assertParallelGetValueComputesObjectOnce(). This can be used to check that expensive computes are using an appropriate cache policy.
Gaffer ( Python module ) : Added
TestLightFilter : Added new node to GafferSceneTest, to aid in testing of scenarios involving LightFilters.
Python : Removed support for Python 2.
MaterialX : The majority of OSL shaders in
shaders/MaterialXare no longer provided, as the
OpenShadingLanguageproject removed them and no direct equivalent exists in the
MaterialXproject itself. We recommend using alternative shaders, or if necessary, sourcing them from a previous Gaffer release.
Arnold : Changed the default values for the
Locale : Removed
LC_NUMERIC=Cenvironment variable assignment from wrapper. This was a workaround for an OpenColorIO bug that has since been fixed.
Style : Changed the signature of the
Signal : Removed
disconnect( slot )method. This was a performance hazard because it was linear in the number of connections. Use
Connection::disconnect()instead, which is constant time.
GafferTest : Removed
Sets are now only written on the first frame for each file written.
SceneInterface::writeSet()is now used in preference to
SceneInterface::writeTags()for all non-legacy file formats.
SceneInterface::readSet()is now used in preference to
SceneInterface::readTags()for all non-legacy formats.
CatalogueUI : Hid OutputIndexColumn from public API.
ContextAlgo : Removed use of the
ui:scene:expandedPathscontext variable. Any code directly accessing
ui:scene:expandedPathsshould instead use the
getExpandedPaths()/setExpandedPaths()/expand()/expandDescendants()methods provided by
SceneGadget : Removed
getVisibleSet()are now used instead.
GafferUI : Removed the
getReadOnly()methods from the following widgets :
Reference : The
fileName()Python binding now returns a
Nonefor empty file names.
ApplicationRoot : The
preferencesLocation()Python binding now returns a
setValue( std::filesystem::path & )now uses
path.generic_string()for the value, whereas before an automatic conversion would have used
path.string()(the native string).
Dispatcher : the
jobDirectory()Python binding now returns a
Noneif it is empty.
ScenePlug::PathScope/SetScope: Removed deprecated functions which didn’t take pointers and required duplication of data.
ViewportGadget : Removed deprecated
Isolate : The
keepLightssetting now also keeps light filters.
Updated to GafferHQ/dependencies 6.0.0 :
Cortex : Updated to version 10.4.5.0.
Cycles : Updated to version 3.4.
Embree : Updated to version 3.13.4.
Expat : Added version 2.5.0.
Fmt : Added version 9.1.0.
OpenColorIO : Updated to version 2.1.2.
OpenImageIO : Updated to version 18.104.22.168.
OpenShadingLanguage : Updated to version 22.214.171.124.
OpenSubdiv : Updated to version 3.4.4.
PyString : Added version 1.1.4.
Updated to version 23.02.
Enabled the OpenImageIO plugin. Among other things, this allows OpenEXR textures to be shown in
YAML-CPP : Added version 0.7.0.
3Delight : Updated to 3Delight version 2.9.17.