Gaffer 1.4 release
This page contains a collated and ordered list of changelog entries for all Gaffer 1.4.x.x releases up to and including Gaffer 1.4.15.2.
Features
- Arnold : Added support for Arnold 7.3. Note that a minimum of 7.3.1.0 is required, meaning that 7.3.0.0 is not supported.
- Cycles :
- Updated to version 4.0.2.
- Added support for CUDA and Optix devices (GCC 11 and Windows builds only).
- ContactSheet : Added new node for creating contact sheets from multiple input images.
- 3Delight :
- Added interactive Viewer renderer.
- Added “3Delight Cloud” renderer, for rendering using the 3Delight cloud.
- DeepSlice : Added a new node for clipping out part of an image based on depth.
- Dispatcher : Dispatchers are now TaskNodes, allowing them to be nested in a task graph. Possibilities include :
- Using a LocalDispatcher and a Wedge to launch multiple TractorDispatcher jobs.
- Using a nested LocalDispatcher to perform a group of tasks on a single blade within a TractorDispatcher job.
- GraphEditor : Added X shortcut for removing connections between nodules. Hold X then left click to remove all connections under the cursor. Hold X then left drag to draw a line, all connections that intersect with the line will be removed once the drag is ended (#788).
- ImageInspector : Added a new panel for inspecting image format, metadata and channel statistics.
- LightPosition Tool :
- Added a variation on the shadow placement tool to place highlights. Lights are positioned such that they will create a specular highlight at the target point.
- Added
Diffuse
mode for placing lights along the normal of the target position.
- MeshTessellate : Added a new node for increasing the polycount of subdivision meshes.
- MeshTessellate/MeshType : Added support for special-purpose subdiv options: interpolateBoundary, faceVaryingLinearInterpolation, triangleSubdivisionRule.
- RenderPassEditor :
- Added
type
column for configuring specific passes to render with a predefined type. We provide default configurations of a number of render pass types, these can be modified to suit specific workflows via the RenderPassShader node or by registering new types and processors via the RenderPassTypeAdaptor in a startup file. - The default render pass type configurations include :
- A “shadow” type for catching shadows cast by
caster
locations oncatcher
locations. - A “reflection” type for catching reflections cast by
caster
locations oncatcher
locations. The roughness of the reflective material can be configured per catcher location by creating auser:renderPass:reflectionCatcher:roughness
float attribute. - A “reflectionAlpha” type for catching reflection mattes cast by
caster
locations oncatcher
locations. The colour of the matte can be configured per caster location by creating auser:renderPass:reflectionCaster:color
Color3f attribute.
- A “shadow” type for catching shadows cast by
- Added
- RenderPassShader : Added new node for overriding a shader used by a render pass type.
- SelectionTool : Added select mode plug. When set to anything except
Standard
using the SelectionTool causes the actual scene location selected to potentially be modified from the originally selected location. Selection modifiers work identically for deselection. Currently, two selectors are implemented :- USD Kind : When selecting, the first ancestor location with a
usd:kind
attribute matching the chosen list of USD Kind will ultimately be selected. USD’s Kind Registry includesAssembly
,Component
,Group
,Model
andSubComponent
by default and can be extended via USD startup scripts. - Shader Assignment : When selecting, the first ancestor location with a renderable and direct (not inherited) shader attribute will ultimately be selected. This can be used to select either surface or displacement shaders.
- USD Kind : When selecting, the first ancestor location with a
- ShaderTweaks : Added support for creating ShaderTweakProxy nodes that allow making input connections to the original network.
- Viewer : Added support for Cycles GPU rendering via a new Device option in the Cycles viewer settings.
Improvements
- Annotations :
- Added support for
{plug}
value substitutions in node annotations. - Added Ctrl + Enter keyboard shortcut to annotation dialogue. This applies the annotation and closes the dialogue.
- Added support for
- Arnold :
- OSL shaders with connections from multiple outputs are no longer duplicated on export to Arnold.
- Gaffer’s native OpenColorIO config is now automatically translated to Arnold. Use an ArnoldColorManager node to override this behaviour.
- Added support for Int64Data and UInt64Data custom attributes, allowing USD’s
instanceId
to be used as a custom attribute in the Instancer node. Warnings are emitted if values are out of range for Arnold’s 32 bit ints. - If it exists, an
ai:volume
attribute is preferred over anai:surface
attribute when resolving shaders for volumes.
- ArnoldAttributes : Added syntax highlighting and auto-complete for set expressions on the
shadowGroup
plug. - ArnoldShader :
- Added parameter tooltips based on
help
metadata provided by Arnold. - Added a UI layout for the new
openpbr_surface
shader. - Moved Arnold 7.3.3.0’s new
standard_volume.scatter_diffusion
parameters to a “Scatter Diffusion” section of the UI. - Moved the
toon
shader’s*_tonemap_hue_saturation
parameters to appropriate sections in the UI. - The following parameters are now visible in the GraphEditor :
- The
aov_input
parameter of theaov_write_int
shader. - The
data_input
parameter of thecolor_jitter
shader. - The
input_int
andseed
parameters of therandom
shader. - The
index
parameters of theswitch_rgba
andswitch_shader
shaders. - The
default
parameter of theuser_data_int
shader.
- The
- The following parameters can now be made visible in the GraphEditor :
- The
flake_layers
parameter of thecar_paint
shader. - The
data_seed
,proc_seed
,obj_seed
, andface_seed
parameters of thecolor_jitter
shader.
- The
- Added parameter tooltips based on
- Arnold
light_decay
:- Increased the size of the triangle indicators for the decay ranges.
- The decay range indicators are now scaled by the light’s
gl:visualiser:scale
attribute. - The decay range is now ignored when framing a light in the Viewer.
- AttributeTweaks, CameraTweaks, ShaderTweaks, OptionTweaks, PrimitiveVariableTweaks :
- Added support for a
{source}
token which is substituted with the original value when tweaking a string inReplace
mode. - Added tooltips documenting the tweak modes.
- Added support for a
- AttributeQuery, PrimitiveVariableQuery, ContextQuery, OptionQuery, ShaderQuery : Added support for querying arrays of length 1 as their equivalent scalar types.
- Backdrop : Improved drawing order for nested backdrops :
- Larger backdrops are automatically drawn behind smaller ones, so that nested backdrops will always appear on top.
- Added a
depth
plug to assign a manual drawing depth for the rare cases where the automatic depth is unwanted.
- BackgroundTask : Added reporting of tasks attempting to wait for themselves.
- Cache : Increased default computation cache size to 8Gb. Call
Gaffer.ValuePlug.setCacheMemoryLimit()
from a startup file to override this. - Catalogue :
- Added
imageNames
output plug, containing the names of all images in the Catalogue. Among other things this can be used to drive a Wedge or ContactSheet node and a CatalogueSelect. - Added a handle for controlling the relative sizes of the listing and image property widgets.
- Added
- CodeWidget :
- Added highlighting of braces and operators.
- Added Ctrl+L shortcut for selecting all text on the current line.
- Collect : Added the ability to collect StringVectorData inputs.
- ColorChooser :
- Added channel names to identify sliders.
- Setting the saturation to zero no longer resets the hue and setting the value to zero no longer resets the hue and saturation.
- CropWindowTool : Added
Alt
+C
for toggling both the crop window tool and the relevant crop windowenabled
plug. - Cryptomatte : Renamed
__manifestScene
plug tomanifestScene
so it is no longer considered to be private. - Cycles :
- Updated the UI of Cycles shaders and lights for ease of use and to match Blender conventions.
- Hide certain parameters based on UI selections.
- Renamed and reordered parameters and created sections to match Blender.
- Changed all the Cycles items in the Gaffer tab menu to title case.
- Changed default value for
principled_bsdf.specular_ior_level
to0.5
, matching Blender. - Added support for
uv.tangent
anduv.tangent_sign
primitive variables to assist in rendering with normal maps (#5269).
- CyclesOptions : Improved device selection UI.
- 3Delight :
- Added NSI screen static sampling pattern option (
dl:staticsamplingpattern
). - Added support for
layerName
parameter in output definitions. - Added support for
filter
parameter in output definitions. - Added camera overscan support.
- Added support for reading
dl:
anduser:
attributes from shaders. - Added
importanceSampleFilter
plug to DelightOptions, providing denoiser-compatible output. - Added support for external procedurals.
- Matched DelightOptions default values for
oversampling
andshadingSamples
to 3Delight’s own default values. - NSI scene description export format is now based on file extension -
.nsi
for binary and.nsia
for ASCII. - Added support for multipart EXR renders by using the same file name parameter on multiple outputs.
- Added support for scalarformat, colorprofile, filterwidth and arbitrary custom NSI outputlayer and outputdriver attributes.
- Updated the default output presets to include scalarformat, colorprofile, filter and filterwidth output parameters.
- Added NSI screen static sampling pattern option (
- Dispatcher : Reduced internal overhead of
dispatch()
call, with one benchmark showing around a 3x speedup. - EditScope :
- Added a summary of edits in the NodeEditor, with the ability to select the affected objects and quickly navigate to the processor nodes.
- Added summaries of set membership edits in the NodeEditor.
- Filtered the EditScope menu to show only nodes that are active in the relevant context.
- EditScopePlugValueWidget : Width can now be configured via
<layoutName>:width
metadata. This enables customisation of the Edit Scope menu width by registering metadata in a startup file, such asGaffer.Metadata.registerValue( GafferSceneUI.RenderPassEditor.Settings, "editScope", "layout:width", 450 )
to double the standard width of the Edit Scope menu in the Render Pass Editor.- When viewing the output of a Box, the menu now displays the Edit Scopes contained within.
- Added support for dropping an Edit Scope node onto the widget to set it as the current Edit Scope.
- Added support for middle-dragging from the widget to access the current Edit Scope node.
- Added icon representing the Edit Scope node colour.
- File Browser : The “Type” column can now be sorted. This sorts directories separately from files, which are sorted by their extension.
- GraphComponent : Node and Plug names may now start with a numeric digit.
- GraphEditor :
- The source node for any location can be located by dragging the location into the GraphEditor from the Viewer or HierarchyView.
- Removed all renderer-specific Render and InteractiveRender nodes from the node menu. These nodes still exist for backwards compatibility with old scenes, but the generic Render and InteractiveRender nodes should now be used instead.
- Improved logic used to connect a newly created node to the selected nodes.
- Improved pointer used to indicate when dropping a location would find the source node.
- Group : Added
sets
plug, to control what sets the group belongs to. - HierarchyView, LightEditor, RenderPassEditor, SetEditor : Reduced potential UI stalls when first showing a scene.
- ImageReader :
- Added
fileValid = False
metadata to images from missing frames, whenmissingFrameMode
isBlack
orHold
. - Improved multithreading of EXR reads. This can result in a performance improvement of around 4X for large images.
- Added OIIO config that disables OIIO threading by default. This simplifies our threading model, and has no impact on performance for our main use cases. If read performance of Gaffer compositing using non-EXR formats, such as Tiff, is important to you, you may want to add your own config to turn OIIO threading back on.
- Added
- ImageStats : Added
areaSource
plug, allowing area to be driven by the input display window or data window. - LightEditor :
- Added support for Arnold light blockers and barndoor, gobo and decay light filters.
- Values of inherited attributes are now displayed in the Light Editor. These are presented as dimmed “fallback” values. Values are inherited from an ancestor of the inspected location or from attributes created in the scene globals.
- Default values are now displayed as dimmed “fallback” values for attributes that don’t exist in the scene.
- When a fallback value is displayed, the cell’s tooltip includes a description of the source of the value.
- Mute and solo columns now accurately reflect the presence of the
light:mute
attribute (for the Mute column) and membership in thesoloLights
set (for the Solo column) for all scene locations, not just for lights. - Added the ability to register columns for editing any parameter in a light’s shader network. The parameter to edit is registered in the form
shaderName.parameterName
when callingGafferSceneUI.LightEditor.registerParameter
. - Added columns for Arnold-specific parameters on USD lights.
- LightEditor, RenderPassEditor : Fallback values shown in the history window are displayed with the same dimmed text colour used for fallback values in editor columns.
- LightPositionTool :
- The tool is now only visible for members of the
__lights
set, instead of all objects. - Changed the pointer to
notEditable
when using keyboard combinations that do not apply to the current tool mode.
- The tool is now only visible for members of the
- LocalDispatcher :
- Added a new dockable LocalJobs editor, to replace the floating window previously accessible via the “Execute/Local Jobs” menu item.
- Task output is now shown in the UI.
- Jobs are no longer removed from the UI as soon as they complete.
- Incomplete jobs are now killed automatically when the application is closed, after prompting to confirm that shutdown should go ahead.
- NodeEditor :
- Improved image channel selectors :
- Added “Custom” option, to allow strings to be entered manually.
- Added right-click context menu.
- Improved performance when showing a node with many colour plugs. Showing the Arnold
standard_surface
shader is now almost 2x faster.
- Improved image channel selectors :
- NodeEditor, NameWidget : Invalid characters are automatically converted to
_
when renaming a node or plug, and:
is no longer treated as invalid. - NodeEditor, UIEditor, PythonEditor : Added popup hint for the Ctrl+Return shortcut.
- NumericWidget : Added the ability to use Ctrl + scroll wheel to adjust values in the same manner as Up and Down (#6009).
- OpenColorIO : When a script-level OpenColorIO variable contains a Gaffer
${contextVariable}
reference, its evaluation is now deferred to the point of use. This allows it to pick up overrides introduced by nodes such as ContextVariables and Wedge. - OptionTweaks : Tweak
value
plugs can now access metadata registered globally tooption:{tweakName}
, where{tweakName}
is the value of the tweak’sname
plug. - ParameterInspector : Added the ability to inspect parameters on any shader in a light or shader’s shader network.
- PathFilterUI : Added the ability to drag and drop scene paths onto Box and Reference nodes. Doing so will create a new PathFilter with the selected paths if none is connected, or update an existing connected PathFilter.
- Premultiply : Added
useDeepVisibility
plug, which weights samples according to their visibility based on the opacity of samples in front. - PythonCommand : Added standard popup menu to
command
widget in NodeEditor. - RenderPassEditor :
- Added preset menu for choosing a render pass type from the list of available registered types. An “auto” type is included in the list when an auto type function has been registered.
- Added “Camera Inclusions” and “Camera Exclusions” columns, providing control over the camera visibility of scene locations in each render pass.
- Added “Matte Inclusions” and “Matte Exclusions” columns, providing control over the scene locations used as holdout mattes in each render pass.
- The currently active render pass can now be unset by double clicking on its green dot in the “Active” column.
- Added “Select Affected Objects” popup menu item.
- RenderPassEditor, LightEditor : Improved update performance for certain graph configurations, by optimising
SceneAlgo::history()
(#5199). - Resize :
- Added support for deep images.
- Added “Nearest” filter.
- SceneInspector :
- Added support for dragging inspector labels, such as those containing the names of attributes, options, output parameters, parameters, primitive variables, and sets.
- Set names beginning with “__” such as “__lights” or “__cameras” are now displayed as-is, rather than being transformed to “Lights” or “Cameras”.
- SceneReader : ModelAPI
extentsHints
are now considered when loading the bounding box for a location in Gaffer. This can significantly reduce the time taken to load bounds for large USD assemblies. If necessary, this behaviour can be disabled by setting theIECOREUSD_USE_MODELAPI_BOUNDS
environment variable with a value of0
. - ScenePlug, ImagePlug : Child plugs are now serialisable. Among other things, this enables them to be driven by expressions (#3986).
- ScriptWindow : Added “Save” option to dialogue shown when closing a window containing unsaved changes.
- SetEditor : Added support for dragging a set name onto a node in the Graph Editor to create or modify a connected
SetFilter
node. Holding Shift while dragging will add to the set expression. Holding Control will remove from the set expression. Only set expressions with a simple list of sets are supported. Expressions with boolean or hierarchy operators are not supported. - SetExpressions : Set Expressions containing only whitespace characters are now treated as empty rather than producing an error.
- SetFilter, StandardAttributes, StandardOptions : Added syntax highlighting and auto-complete for set expressions.
- ShaderTweaks : Added support for wildcards in the shader name, in order to tweak multiple shaders at once.
- ShaderTweaks, ShaderQuery : Improved performance of parameter selection dialogue. For some particularly large shader networks, speedups are greater than 100x.
- Shuffle :
- Reimplemented to match ShuffleAttributes and ShufflePrimitiveVariables.
- Any number of shuffles can be added using the UI.
- Wildcards can be used to match multiple source channels, and expressions can be used to map them to destination channels.
- Source channels can optionally be deleted after shuffling.
- Overwriting of destination channels can optionally be avoided.
- Added
missingSourceMode
plug to determine behaviour when a source channel doesn’t exist.
- Reimplemented to match ShuffleAttributes and ShufflePrimitiveVariables.
- Spreadsheet : Added support for metadata to be automatically forwarded from plugs downstream of a column’s
out
plug to the column’s default row. - Switch :
- Added
deleteContextVariables
plug. - Added
connectedInputs
output plug.
- Added
- TaskList, FrameMask : Reimplemented in C++ for improved performance.
- Toolbars : Changed hotkey behavior to toggle any tool on and off. Exclusive tools such as the Translate and Crop Window tools activate the first tool (currently Selection Tool) when they are toggled off.
- TweakPlug :
ListAppend
,ListPrepend
andListRemove
modes are now supported for string values. In this case, the string is treated as a space-separated list. - UI Editor :
- Added the ability to edit the scale of node icons.
- Improved layout of Box node plug creator visibility toggles.
- Added code examples to button code placeholder text.
- USD :
- Added automatic render-time translation of UsdPreviewSurface shaders to Cycles.
- Added automatic render-time translation of UsdPreviewSurface shaders to 3Delight.
- USDLight :
- Added Arnold-specific extension parameters.
- Added parameter tooltips.
- Viewer : Added diagnostic shading mode for visualising the values of the
usd:purpose
attribute as colours :- White : Default
- Green : Render
- Blue : Proxy
- Red : Guide
- Wireframe :
- Improved performance ~3x.
- Improved cancellation responsiveness.
Fixes
- AnnotationsGadget : Fixed potential hang in
annotationText()
Python binding. - Arnold :
- Fixed rendering of shaders imported from HtoA via USD.
- Fixed USD export of shaders to use
outputs:out
instead ofoutputs:DEFAULT_OUTPUT
. - Fixed rendering of
osl
shaders using thecode
parameter. - Fixed bug preventing UI metadata for Imagers from being loaded for Arnold 7.3.
- Fixed rendering of
ai:volume
shaders loaded from USD (#5830). - Renamed Arnold/Globals/Imager menu option to Arnold/Globals/Imagers so that the actual ArnoldImager node menu option wasn’t overwritten.
- Fixed rendering of VDB volumes without
file_mem_bytes
metadata.
- ArrayPlug :
- Fixed error when
resize()
removed plugs with input connections. - Fixed error when
resize()
was used on an output plug.
- Fixed error when
- BackgroundTask : Fixed potential deadlock caused by destroying a BackgroundTask from Python while it was still running.
- Catalogue :
- Fixed undo for image reordering via drag & drop.
- Fixed bugs caused by reordering images using
GraphComponent::reorderChildren()
. - Fixed bug which allowed locked Catalogues to be edited.
- Fixed NodeEditor update when the first image is added or the last image is removed.
- CodeWidget :
- Fixed bug that could prevent changes from being committed while the completion menu was visible.
- Fixed errors handling highlights which spanned more than one line, such as triple-quoted strings in the PythonEditor.
- Removed unwanted
\n
prefix in lines passed toCompleters
. - Prevented spurious emission of
editingFinishedSignal()
when showing the completions menu. - Prevented the completion menu from popping up inappropriately when the highlighter was changed.
- Collect : Fixed display of results collected from TypedObjectPlug inputs.
- ColorChooser : Fixed emission of
colorChangedSignal()
while the widget was in an inconsistent internal state. - ColorChooserPlugValueWidget : Fixed bug that allowed the editing of locked plugs and nodes.
- ColorToVector : Fixed parameter types.
- Constraint : The
target
browser now shows locations from thetargetScene
if it has an input connection. Before it always showed locations from the main input. - CreateViews : Fixed loading of files saved from Gaffer 1.5+.
- Cryptomatte :
- Fixed errors when the input image didn’t contain the main
RGBA
channels. - Fixed inaccurate hash.
- Fixed errors when the input image didn’t contain the main
- Cycles :
- Fixed hangs and crashes when using non-default session modes such as SVM shading.
- Fixed failure to render background light in batch renders (#5234).
- Fixed failure to update when reverting a background shader to previous values.
- Fixed bug preventing a background light from being added to a light group.
- Fixed rendering to the Catalogue using the batch Render node (#5905). Note that rendering a mixture of Catalogue and file outputs is still not supported, and in this case any file outputs will be ignored.
- DeepState : Fixed handling of
NaN
values and samples whereZBack
is less thanZ
. - 3Delight :
- Fixed failure to change sampling pattern per frame.
- Fixed Resolution Multiplier support.
- Fixed UI visibility of
angle
parameter for distant lights, which was previously hidden. - Fixed export of
Varying
primitive variables on meshes (#5781). - Fixed loading of surface shaders such as
dlStandard
so that they can be connected to the inputs of shaders such asdlLayeredMaterial
.
- Dispatcher : The job directory is no longer created when dispatch is cancelled by a slot connected to
preDispatchSignal()
. - Expression :
setExpression()
now respects configs that provide backwards compatibility for old plug names. - FlatImageProcessor : Fixed bug that could cause an input to be evaluated with an invalid
image:viewName
. - File Browser : Windows only : Fixed bug in
HiddenFilePathFilter
that caused sequences to be treated as though they are hidden files (#5810). - FormatPlug : Fixed potential hang in
acquireDefaultFormatPlug()
Python binding. - FramingConstraint : Fixed crash caused by attempts to constrain objects that were not cameras.
- Gadget : Fixed access to
DragDropEvent.sourceWidget
andDragDropEvent.destinationWidget
from Python slots connected to a Gadget’s DragDropSignals. - GraphGadget : Fixed unwanted highlighting of nodes when custom drag & drop handlers were active.
- GafferTest, GafferImageTest : Fixed import of these modules if the
Gaffer
module had not been imported previously. - HierarchyView, LightEditor, PrimitiveInspector, SceneInspector : Fixed bug which allowed scenes from private plugs to be displayed.
- ImageGadget : Fixed loading of non-8-bit images. Among other things, this fixes the display of 16 bit node icons in the GraphEditor.
- ImageInspector : Fixed broken UI caused by double-clicking in the Image tab.
- ImageReader :
- Fixed crash caused by invalid OpenEXR
multiView
attributes. - Fixed array metadata loading bugs, including the loading of
ICCProfile
metadata.
- Fixed crash caused by invalid OpenEXR
- ImageStats :
- Fixed output of infinite values, which were previously being clamped.
- Results for min/max now correctly reflect zero values outside the data window.
- InteractiveRender :
- Fixed crash triggered by a render adaptor depending on its
renderer
input to adapt the scene globals. - Removed unintentional ability for render adaptors to change the renderer being used.
- Fixed crash triggered by a render adaptor depending on its
- LazyMethod : Fixed errors caused by running idle callbacks without a valid Qt Widget.
- LightEditor : Fixed regression (introduced in 1.4.8.0) causing the mute and solo icons to not show up for groups.
- LightEditor, RenderPassEditor : Added missing icon representing use of the
CreateIfMissing
tweak mode in the history window. - LightPositionTool :
- Fixed bug that caused the target/pivot positions to be lost when placing a light with Z scale not equal to 1.0.
- Fixed bug that allowed a non-light object to be moved by clicking or dragging the target or pivot.
- Linux : Fixed crashes at startup on platforms - including RHEL 9.4 - with a more recent
glibc
(#5856). - LocalDispatcher :
- Fixed delays and zombie processes caused by shutting down Gaffer while background jobs were running. Background jobs are now killed before Gaffer exits instead.
- Stopped failed jobs jumping to the end of the Local Jobs UI.
- Fixed message log update.
- Fixed
Job.statistics()
errors on Windows, ensuring that apid
is always returned when available.
- Loop : Fixed handling of empty
indexVariable
. This now disables the Loop instead of creating an unnamed context variable. - MultiLineTextWidget :
- Fixed rendering of disabled widgets, which now show faded text.
- Fixed behaviour of
editingFinishedSignal()
to match TextWidget : it is now also emitted when the text is activated (seeactivatedSignal()
).
- MultiLineStringMetadataWidget : The Ctrl+Return shortcut now updates the metadata value immediately.
- NameSwitch : Fixed NodeEditor tab order, so that the Settings tab precedes the Advanced tab.
- NameWidget : Fixed bug which allowed plugs on locked nodes to be renamed.
- NodeAlgo : Fixed presets inheritance for promoted plugs with multiple outputs.
- NodeEditor : Fixed broken layouts caused by computation errors in plugs used by section summaries.
- NodeMenu, NodeEditor :
userDefault
metadata is now evaluated in the script context, so it can depend on script variables. - OpenColorIO : Fixed the display transform used to show colours in popups.
- OptionQuery : Fixed bug which allowed the
scene:path
context variable to leak into the context used to evaluate the globals. - PathFilter : Fixed bug allowing dropping paths onto read-only
PathFilter
nodes in the graph. - PlugAlgo :
- Updated
canSetValueFromData()
,setValueFromData()
andgetValueAsData()
with support for missing types. - Fixed promotion of CompoundDataPlugs with non-dynamic children, such as the
Camera.renderSettingOverrides
plug.
- Updated
- PlugPopup : Fixed error when displaying a popup with no PlugValueWidget.
- Premultiply : Fixed handling of non-existent alpha channel.
- PrimitiveInspector : Fixed bug which claimed “Location does not exist” for objects without any primitive variables.
- PythonCommand : Fixed loading of files saved from Gaffer 1.5+.
- ResamplePrimitiveVariables : Fixed handling of periodic curves.
- SceneReader :
- Fixed crash reading facevarying normals skinned with UsdSkel.
- Fixed loading of facevarying normals skinned with UsdSkel.
- Stopped loading USD
lightLinks
andshadowLinks
collections as sets. - USD asset paths on Windows now use
/
as the path separator, instead of\
. SetIECOREUSD_FORCE_ASSET_PATH_FORWARD_SLASH=0
to keep the previous behaviour. - Fixed loading of animated ModelAPI extents from USD.
- SceneAlgo : Fixed exception handling for Python render adaptors. Previously an exception during adaptor construction caused a
SystemError
. - SceneWriter :
- Fixed crash when writing to a USD file that is already open elsewhere.
- Fixed handling of ‘:’ characters in set names when writing to USD. These were previously converted to ’_’ but are now preserved.
- Fixed writing of locations with names that are not valid USD identifiers.
- Fixed handling of shader parameters not supported in USD, such as texture inputs to OpenGLShader.
- Fixed import of
treatAsPoint
andtreatAsLine
parameters on UsdLux lights.
- SceneInspector : Fixed “Show History” menu items.
- SceneReader :
- Fixed duplicate loading of
arnold:*
attributes on lights. These are now omitted, since they are converted to parameters on the light shader itself. - Fixed error loading USD Volumes with empty fields. These will now issue a warning and load as empty locations.
- Fixed duplicate loading of
- SceneReader, SceneWriter : Fixed handling of Arnold-specific parameters on UsdLux lights.
- Shader : Fixed “Revert to Defaults” menu item in NodeEditor (#1862).
- ShaderTweaks : Fixed potential crash if a ShaderTweakProxy was used to accidentally create a cyclic connection.
- ShaderView : Fixed crash caused by a SceneCreator returning
None
. - ShowURL : Fixed opening of “file://” URLs on Windows (#5861).
- Slider : Fixed bug where two undo steps were needed to get back to the original value when dragging.
- Spreadsheet : Fixed “Sets”, “Operators” and “Select Affected Objects” popup menu items, which were broken in 1.4.5.0.
- TaskNode / GafferCortex : Fixed missing GIL releases that caused hang at ImageEngine.
- TransformTool : Fixed alignment of green “value changed” icon for
orientation
plugs. - TweakPlug : Fixed incorrect results and potential crashes in list modes.
- UI : Fixed hangs caused by garbage collection of removed Editors. One common example involved viewing a Catalogue in the NodeEditor after removing the ImageInspector (#5877).
- UIEditor : The Ctrl+Return shortcut now updates the button code immediately.
- USD : Fixed
Unsupported value type "StringData" for parameter "input"
warning when convertingUsdTransform2d
shaders with noin
connections to Arnold. - ValuePlug : Fixed the plug passed to
Monitor::forceMonitoring()
. PreviouslyProcess::destinationPlug()
was being passed instead ofProcess::plug()
. - VectorDataWidget :
- Fixed bug allowing dropping paths onto read-only widgets.
- Fixed bug causing paths to display as “…” after the last visible “/” when the widget wasn’t wide enough to show the entire path.
- Viewer :
- Fixed handling of Gaffer
${contextVariable}
references in OpenColorIO variable values. The Viewer now updates the Display Transform appropriately when the value of the context variable changes. - Fixed Cycles shader balls.
- Fixed selection overlay glitches with an Arnold
skydome_light
and an empty selection. - Fixed drawing of custom mesh light texture visualisers (#6002).
- Fixed handling of Gaffer
- Viewer, ImageGadget :
- Fixed partial image updates when an unrelated InteractiveRender was running (#6043).
- Fixed “colour tearing”, where updates to some image channels became visible before updates to others.
- Fixed unnecessary texture updates when specific image tiles don’t change.
- ViewportGadget : Fixed selection issues with Intel GPUs (#901, #2788).
- Widget :
- Fixed bug that prevented Gadgets from receiving drops from another application.
- Fixed errors when dragging from another application onto widgets that didn’t expect it.
- WidgetAlgo : Fixed issue preventing
grab()
from capturing popup menus on Windows. - Windows :
- Removed “Error(s) running Gaffer” shutdown message. It was misleading when errors originated in the renderer rather than Gaffer itself.
- Fixed conflicts with other software installations on
PATH
. ThePXR_USD_WINDOWS_DLL_PATH
environment variable is now set to an empty string if it is not already set, preventing USD from adding all entries fromPATH
to Python’s DLL search paths.
API
- ArnoldShaderUI : Added support for
gaffer.nodeGadget.color
RGB metadata in.mtd
files, to specify per-shader colouring of nodes in the GraphEditor. - AnnotationsGadget : Added
annotationText()
method. - Box2fVectorDataPlug : Added new plug type for storing arrays of Box2f.
- BoxPlug : Added Python bindings for
ValueType
,PointType
andChildType
type aliases. - Catalogue : Deprecated
image:index
metadata. - Color3fPlug : Added
setValue( V3f() )
overload. - ContactSheetCore : Added a new node to do provide the basis for networks that create contact sheets from multiple input images.
- ContextAlgo : Deprecated. Use ScriptNodeAlgo instead.
- ContextTracker : Added a new class that determines what contexts nodes are evaluated in relative to the focus node. This allows UI components to provide improved context-sensitive feedback to the user.
- DeepPixelAccessor : Added utility class for accessing deep samples while abstracting away the underlying tile storage.
- DocumentationAlgo : Added table and strikethrough support to
markdownToHTML()
. - Editor : Added
Settings
class, which should be used to store settings for subclasses. See LightEditor and ImageInspector for examples. - EditScopeUI : Added an API for customising the EditScope’s NodeEditor with summaries for each processor :
- ProcessorWidget provides a base class for custom widgets, and a factory mechanism for registering them against processors.
- SimpleProcessorWidget provides a base class for widgets with a simple summary label and optional action links.
- ExtensionAlgo : Added
exportNode()
andexportNodeUI()
functions. - GafferTractor : Added
tractorAPI()
method used for accessing thetractor.api.author
module. - GafferTractorTest : Added
tractorAPI()
method which returns a mock API if Tractor is not available. This allows the GafferTractor module to be tested without Tractor being installed. - HierarchyView : Added
sceneListing()
method, to allow the context menu to be customised. - IconPathColumn :
- Added constructor which allows the full header CellData to be specified.
- Added
prefix()
andproperty()
accessors.
- Image : Added
createSwatch()
static method. - ImageGadget : Removed
textureLoader()
method. - ImageTestCase : in
assertImageEqual
function, maxDifference may now be a tuple, to specify an asymmetric range. - Label : Added
textSelectable
constructor argument. - LabelPlugValueWidget : Added optional
labelPlugValueWidget:showValueChangedIndicator
metadata entry. If a plug has this entry set toFalse
, the icon next to the label that indicates the value has changed will not be shown. Defaults toTrue
if the value is not set. - LightEditor :
- Added
deregisterColumn()
method for removing columns. - Added
registerShaderParameter()
method for registering parameters for shader attributes that are not the same as therendererKey
. - Added
columnName
parameter toregisterParameter()
method, matching the behaviour ofRenderPassEditor.registerOption()
.
- Added
- LocalDispatcher :
- Added
Job.status()
andJob.statusChangedSignal()
methods. - Added
Job.messages()
andJob.messagesChangedSignal()
methods. - Added
Job.frameRange()
,Job.environmentCommand()
andJob.startTime()
methods. - Added
Job.cpuUsage()
andJob.memoryUsage()
methods. - Added
JobPool.addJob()
andJobPool.removeJob()
methods.
- Added
- Loop :
- Added
previousIteration()
method. - Added
nextIterationContext()
method.
- Added
- Menu : Menu items with “checkBox” enabled now draw their checked indicator in place of their “icon” when both are defined.
- MetadataWidget : Added
NumericMetadataWidget
class. - MultiLineTextWidget : Added
setSelection()
andgetSelection()
methods. - ParallelAlgo : Added
canCallOnUIThread()
function. - Pointer : Added
fileName()
method. - PathColumn :
- Added
CellData::sortValue
member, to provide additional control over sorting in the PathListingWidget. - Added missing Python binding for
headerData()
method.
- Added
- PathListingWidget : Added
columnContextMenuSignal()
, allowing multiple clients to collaborate on the creation of a column-specific context menu. - ParallelAlgoTest : Added
UIThreadCallHandler.receive()
method. - PlugAlgo :
setValueFromData()
andcanSetValueFromData()
now support conversion of arrays of length 1 to their equivalent scalar types. - PlugLayout : Added support for activators in Boxes and extension nodes by allowing
layout:activator:activatorName
metadata to contain a Python string to be executed. Execution is performed in an environment where aparent
variable refers to node or plug represented by the layout, and from which plug values can be obtained. - PopupWindow : Added
parent
argument topopup()
method. This allows popup windows to inherit the display transform from the main UI. - RenderPassEditor : Added
deregisterColumn()
method. - RenderPassWedge : Render adaptors may now be used to delete and/or disable render passes, by passing
client = "RenderPassWedge"
toSceneAlgo.registerRenderAdaptor()
. - RenderPassTypeAdaptor :
- Added registration methods for defining render pass types and processors.
- Added
registerAutoTypeFunction()
method to define a function used to automatically derive the render pass type from the render pass name when therenderPass:type
option value is “auto”. - Added
autoTypeFunction()
method.
- SceneAlgo : Added mechanism for scoping render adaptors to specific clients and/or renderers.
- ScenePathPlugValueWidget : The
scenePathPlugValueWidget:scene
metadata now accepts a space-separated list of plugs, taking the first plug which has an input connection. - ScriptNodeAlgo : Added new namespace with functions for managing shared UI state for GafferSceneUI.
- SelectionTool : Added static
registerSelectMode()
method for registering a Python or C++ function that will modify a selected scene path location. Users can choose which mode is active when selecting. - SetExpressionPlugValueWidget : Added new editor for set expressions, with syntax highlighting and auto-complete.
- ShaderPlug : Added
parameterSource()
method returning theValuePlug
responsible for generating a parameter in a shader network. - ShaderUI : Added support for
nodeGadget:color
metadata registered against{shaderType}:{shaderName}
, to specify per-shader colouring of nodes in the GraphEditor. - ShufflesPlug :
- Added
ignoreMissingSource
argument toshuffle()
. - Added
shuffleWithExtraSources()
method.
- Added
- ShufflePlugValueWidget : Widgets for the
source
anddestination
plugs can now be customised using standardplugValueWidget:type
metadata. - StandardPathColumn :
- Added constructor which allows the full header CellData to be specified.
- Added missing Python binding for
property()
method.
- TextWidget : Added
selectedText()
convenience method. - TextWidget, MultilineTextWidget :
- Added
setPlaceholderText()
andgetPlaceholderText()
methods. - Added
placeholderText
constructor argument.
- Added
- TractorDispatcher : The
preSpoolSignal()
now provides an additionaltaskData
argument to slots, which maps from Tractor tasks to information about the Gaffer tasks they will execute. - TypedObjectPlug : Added Python bindings for the default values of the
defaultValue
constructor argument. - USDShader : Added support for loading from the UsdSchemaRegistry as well as from the SdrRegistry. This is now used when loading UsdLuxLights.
- VisibleSet : Added Python constructor with keyword arguments for
expansions
,inclusions
andexclusions
. - Widget : Added a 0.5 pixel offset to
ButtonEvent.line
objects passed to mouse event signals such asbuttonPressSignal()
anddragMoveSignal()
- Window : Added
preCloseSignal()
, which allows connected slots to prevent a window from being closed.
Documentation
- Windows : Documentation is now included in Windows release packages.
- Updated with generic Render and InteractiveRender nodes in place of deprecated renderer-specific nodes.
Breaking Changes
- Arnold : Removed support for Arnold 7.1.
- Backdrop : Changed default drawing order. Use the new
depth
plug to override the order if necessary. - Cycles : Updated to version 4.0.2.
- CyclesAttributes : Removed the
cycles:dupliGenerated
andcycles:dupliUV
attributes. - CyclesOptions :
- Changed
hairShape
default value to “ribbon”, to match Cycles’ and Blender’s own defaults. - Removed
useFrameAsSeed
plug. The frame is now automatically used as the seed ifseed
is not set. - Removed all texture cache options. These had never been exposed in the UI because this never became an official Cycles feature.
- Removed
cryptomatteAccurate
. This feature is no longer present in Cycles. - Removed
cycles:integrator:sampling_pattern
option. This is intended only for debugging, but is still available via a CustomOptions node.
- Changed
- 3Delight :
- Changed default layer names for outputs.
- Changed NSI scene description export with
.nsi
file extension from ASCII to binary (.nsia
is used for ASCII now).
- DelightOptions : Changed default values for
oversampling
andshadingSamples
plugs. - Dispatcher :
- Removed
createMatching()
method. - Removed non-const TaskBatch accessors
frames()
andpreTasks()
. - Made
TaskBatch
constructors private. - The job directory is no longer available in slots connected to
preDispatchSignal()
. - Removed
nodes
arguments from dispatch signals. Use thedispatcher["tasks"]
plug instead. - Removed
script
andcontext
arguments fromframeRange()
method. The current frame and full frame range are now queried from the current context.
- Removed
- DispatcherUI :
- Removed
appendMenuDefinitions()
,appendNodeContextMenuDefinitions()
,executeSelected()
andrepeatPrevious()
functions. - Removed
DispatcherWindow
class.
- Removed
- Enums : Replaced
IECore.Enum
types with standard Python types from theenum
module. - ImageProcessor : Internal connections to the
out
plug are no longer serialised. - ImageStatsUI : Removed
postCreate()
. - InteractiveRenderTest : Subclasses must now return the shader output plug from creation methods such as
_createConstantShader()
. - LocalDispatcher :
- Removed
JobPool.jobFailedSignal()
. - Removed
JobPool.failedJobs()
method. Failed jobs now remain in place in the mainjobs()
container. - Removed
Job.failed()
andJob.killed()
methods. UseJob.status()
instead. - Removed
Job.execute()
method. This should not have been public. - Removed
Job.messageHandler()
method. UseJob.messages()
instead. - Removed
Job.description()
method. - Removed
Job.statistics()
method. UseJob.memoryUsage()
andJob.cpuUsage()
instead. - JobPool no longer derives from RunTimeTyped.
- Removed
- LocalDispatcherUI : Removed
appendMenuDefinitions()
function. - OpenColorIOContext : Removed
configEnabledPlug()
,configValuePlug()
,workingSpaceEnabledPlug()
andworkingSpaceValuePlug()
methods. Use the OptionalValuePlug child accessors instead. - OSLShader : Output parameters are now loaded onto the
out
plug for all types (surface
,displacement
etc), not justshader
. - Pointer :
- Removed
Pointer( const ImagePrimitive * )
constructor. - Removed
image()
method.
- Removed
- Preferences : Removed
cache
plug. - Process : Removed non-const variant of the
handleException()
method. - Render : Changed
render:includedPurposes
default to"default", "render"
. - SceneProcessor : Subclasses no longer serialise internal connections to the
out
plug. - Shuffle :
- Removed ChannelPlug type. Use
Gaffer.ShufflePlug
instead. - Renamed
channels
plug toshuffles
plug, matching nodes such as ShuffleAttributes and ShufflePrimitiveVariables.
- Removed ChannelPlug type. Use
- ShuffleUI : Removed
nodeMenuCreateCommand()
. - StandardLightVisualiser : Added
attributeName
argument tosurfaceTexture()
virtual method. - StringPlug : Removed deprecated
precomputedHash
argument fromgetValue()
method. - TaskNode :
- The
Task
constructor no longer takes a copy of the context, so the context must not be modified after being passed. - Removed
Task( taskNode, context )
constructor. UseTask( taskNode["task"], context )
instead.
- The
- USD : Removed Embree Hydra delegate.
- ValuePlug : Removed deprecated
getObjectValue()
overload. - Windows launch script : Removed the hardcoded
/debugexe
switch used whenGAFFER_DEBUG
is enabled, making it possible to use debuggers other than Visual Studio. Debug switches can be added to theGAFFER_DEBUGGER
environment variable instead.
Build
- Cortex : Updated to version 10.5.9.5.
- Cycles : Updated to version 4.0.2.
- Embree : Updated to version 4.3.0.
- Imath : Updated to version 3.1.9.
- MaterialX : Updated to version 1.38.8.
- LibWebP : Added version 1.3.2.
- OpenEXR : Updated to version 3.1.13.
- OpenImageIO : Updated to version 2.5.8.0.
- OpenPGL : Updated to version 0.5.0.
- OpenShadingLanguage : Updated to version 1.12.14.0.
- OpenSubdiv : Updated to version 3.5.1.
- OpenSSL : Removed.
- OpenVDB : Updated to version 10.1.0.
- PsUtil : Added version 5.9.6.
- PySide : Updated to version 5.15.12.
- Python : Updated to version 3.10.13.
- Qt :
- Updated to version 5.15.12.
- Removed QtPurchasing library.
- Removed QtNetworkAuth library.
- USD :
- Updated to version 23.11.
- Added
sdrOsl
, for inclusion of OSL shaders in the Sdr Registry. - Fixed issue where
gaffer
wrapper may not exist when callingusdGenSchema
from a clean build.
- MacOS : Fixed issue where
Python.framework
may not be found when building with a prebuilt dependencies package.