Releases: GafferHQ/gaffer
Releases · GafferHQ/gaffer
Gaffer 1.5.2.0
Caution : The GafferML features introduced in this release are considered experimental, and are not subject to the usual backwards compatibility guarantees that apply to the rest of Gaffer.
Features
- GafferML : Added a new module with the following nodes for running machine learning models via ONNX Runtime :
- DataToTensor : Converts Gaffer data to tensors.
- Inference : Loads ONNX models and performs inference using an array of input tensors.
- ImageToTensor : Converts images to tensors for use with the Inference node.
- TensorToImage : Converts tensors back to images following inference.
- VisualiserTool : Added tool to 3D viewer for visualising primitive variables on meshes.
Improvements
- MergeScenes : Removed unnecessary temporary contexts.
- RenderPassEditor :
- Added support for entering custom values in the
Type
column. Custom types can be later configured with a downstream NameSwitch selecting based on the value of therenderPass:type
option. - Columns that edit options now include the option name in their header tooltip.
- Improved description of
render:cameraExclusions
andrender:matteExclusions
options.
- Added support for entering custom values in the
Fixes
- MergeScenes : Fixed bug handling input connections not originating from the output of another node. These could cause locations provided by other inputs to lose all their properties.
- PathFilter : Fixed bug allowing dropping paths onto read-only
PathFilter
nodes in the graph. - VectorDataWidget : Fixed bug allowing dropping paths onto read-only widgets.
- GraphEditor : Fixed errors when dragging an unknown file type into the GraphEditor.
- Widget : Fixed
event.sourceWidget
for DragDropEvents generated from a Qt native drag within the same Gaffer process. This will now reference theGafferUI.Widget
that the Qt source widget belongs to, if any. - Catalogue : Fixed bug which "stole" drags that crossed the image listing but which were destined elsewhere, for instance a drag from the HierarchyView to a PathFilter in the GraphEditor.
- GadgetWidget : Fixed signal handling bug in
setViewportGadget()
. This could cause the widget to attempt to redraw unnecessarily when the old viewport requested a redraw. - EditScope : Fixed error updating the Global Edit Target in read-only files.
- RandomChoice : Fixed errors right-clicking on non-value plugs in the NodeEditor.
API
- PlugLayout : Activations may now depend on the presence of certain plugs, as they are now reevaluated when child plugs are added and removed.
- IECoreArnold::ShaderNetworkAlgo : Added a new API to allow just-in-time substitutions to be made when translating shaders to Arnold. Use with care.
Gaffer 1.4.15.3
Fixes
- ArrayPlug : Fixed loading of promoted plugs saved from Gaffer 1.5+.
- GraphEditor : Fixed errors when dragging an unknown file type into the GraphEditor.
- Widget : Fixed
event.sourceWidget
for DragDropEvents generated from a Qt native drag within the same Gaffer process. This will now reference theGafferUI.Widget
that the Qt source widget belongs to, if any. - Catalogue : Fixed bug which "stole" drags that crossed the image listing but which were destined elsewhere, for instance a drag from the HierarchyView to a PathFilter in the GraphEditor.
- GadgetWidget : Fixed signal handling bug in
setViewportGadget()
. This could cause the widget to attempt to redraw unnecessarily when the old viewport requested a redraw. - RandomChoice : Fixed errors right-clicking on non-value plugs in the NodeEditor.
Gaffer 1.5.1.0
Features
- EditScope : Introduced the Global Edit Target, providing script-level control over the target used by editors. The Global Edit Target can be set from a new "Edit Target" menu in the menu bar, which displays all available edit targets upstream of the focus node.
- Editors now follow the Global Edit Target by default, allowing for a simpler experience when switching multiple editors to a common target.
- Individual editors can be overridden to use a specific edit target where necessary. An overridden editor can return to following the Global Edit Target via the new "Follow Global Edit Target" menu item.
- While following the Global Edit Target, an editor's Edit Scope menu will shrink to only display an icon. When an Editor is overridden to a specific edit target, the menu grows to display the name of the target.
Improvements
- Instancer :
- Added
inactiveIds
plug for selecting primitive variables to disable some instances. - Added support for 64 bit integer ids (matching what is loaded from USD).
- Added
- DeletePoints : Added modes for deleting points based on a list of ids.
- Light Editor, Attribute Editor, Spreadsheet : Add original and current color swatches to color popups.
- SceneView : Added fallback framing extents to create a reasonable view when
SceneGadget
is empty, for example if the grid is hidden. - ColorChooser :
- Added an option to toggle the dynamic update of colors displayed in the slider and color field backgrounds. When enabled, the widget backgrounds update to show the color that will result from moving the indicator to a given position. When disabled, a static range of values is displayed instead.
- Holding the Control key now constrains dragging in the color field to a single axis.
- EditScope :
- Simplified the Edit Scope menu UI :
- Removed the dark background.
- Changed the menu button color to be always blue.
- Removed the "Navigation Arrow" button from the right side of the Edit Scope menu. Its actions have been relocated to a "Show Edits" submenu of the Edit Scope menu.
- Hid the label. It can be made visible for a specific plug by registering
editScopePlugValueWidget:showLabel
metadata with a value ofTrue
.
- Renamed "None" mode to "Source" and added icon.
- The "Source" menu item now displays a checkbox when chosen.
- Added a "No EditScopes Available" menu item that is displayed when no upstream EditScopes are available.
- Increased menu item icon sizes.
- A lock icon is now displayed next to read-only nodes.
- Simplified the Edit Scope menu UI :
- RenderPassEditor : Changed the current render pass indicator to yellow to match other context-related UI elements.
- GraphEditor : Moved "Show Input Connections" and "Show Output Connections" to "Connections" sub-menu and added "Show Input Labels" and "Show Output Labels" items.
Fixes
- Render, InteractiveRender : Added default node name arguments to the compatibility shims for removed subclasses such as ArnoldRender.
- GafferUITest : Fixed
assertNodeUIsHaveExpectedLifetime()
test for invisible nodes. - OpDialogue : Fixed
postExecuteBehaviour
handling. - LocalDispatcher : Fixed job status update when a job was killed immediately after being launched.
gaffer view
: Fixed default OpenColorIO display transform.- AnimationEditor : Fixed changing of the current frame by dragging the frame indicator or clicking on the time axis.
- ImageWriter : Matched view metadata to Nuke when using the Nuke options for
layout
. This should address an issue where EXRs written from Gaffer using Nuke layouts sometimes did not load correctly in Nuke (#6120). In the unlikely situation that you were relying on the old behaviour, you can set the env varGAFFERIMAGE_IMAGEWRITER_OMIT_DEFAULT_NUKE_VIEW = 1
in order to keep the old behaviour. - OSLObject : Fixed
getattribute()
to support 64 bit integer data, such as aninstanceId
primitive variable loaded from USD. Since OSL doesn't provide a 64 bit integer type, values are truncated to 32 bits. - MeshSplit : Vertex order is now preserved.
- DispatchDialogue : Removed
_DispatcherCreationWidget
from shown nodes.
API
- Int64VectorDataPlug : Added new plug type for passing vectors of int64.
- OpenColorIOConfigPlugUI :
- Added
connectToApplication()
function. - Deprecated
connect()
function. UseconnectToApplication()
instead.
- Added
- SceneEditor : Added
editScope()
method. - Image : Added optional
image
argument tocreateSwatch()
static method. - StandardNodeGadget : Added support for
nodeGadget:inputNoduleLabelsVisible
andnodeGadget:outputNoduleLabelsVisible
metadata for setting nodule labels always on. If the metadata entry is not set orFalse
, labels will be visible only when they are hovered over.
Build
- Cortex : Updated to version 10.5.11.0.
Gaffer 1.4.15.2
Caution : Due to GitHub Actions no longer being compatible with CentOS 7 containers, the build process for the
gcc9
builds has changed. The new builds should be entirely equivalent to earlier builds, but please notify us should any oddities appear.
Fixes
- PathFilter : Fixed bug allowing dropping paths onto read-only
PathFilter
nodes in the graph. - VectorDataWidget : Fixed bug allowing dropping paths onto read-only widgets.
Gaffer 1.5.0.1
Fixes
- CyclesShader : Fixed broken presets menus.
- Windows :
- Fixed handling of shader colour component to float connections in Cycles.
- Added
CORTEX_STARTUP_PATHS
to match the Linux wrapper.
- PlugPopup : Fixed error when displaying a popup with no PlugValueWidget.
- Instancer : Fixed issue where wrong prototypes were sometimes used in encapsulated renders.
Gaffer 1.4.15.1
Fixes
- PlugPopup : Fixed error when displaying a popup with no PlugValueWidget.
Gaffer 1.5.0.0
Note : Gaffer 1.5 marks the end of provision of GCC 9 builds on Linux. Use Gaffer 1.4 if you require GCC 9 builds.
Features
- AttributeEditor : Added a new editor UI for inspecting and editing attributes. This can be found in the tab next to the RenderPassEditor in the Standard layouts.
- ColorChooser :
- Added sliders for TMI (temperature, magenta, intensity) color space.
- Added color field, a widget giving control of two channels of "RGB", "HSV" or "TMI" triplets. The third channel is held constant.
- The color field and RGB, HSV and TMI slider groups can now be toggled on or off.
- Default visibility of the UI elements can now be set at startup by setting
colorChooser:inline:
andcolorChooser:dialogue:
entries for the inline chooser and dialogue chooser respectively, with the following suffixes :visibleComponents
: A string where each character is a visible component slider. Optional components arergbhsvtmi
.staticComponent
: A single character string for the component to use as the static component for the color field. The other two components in the "RGB", "HSV" and "TMI" triplets will be controllable in the widget.colorFieldVisible
: A boolean indicating if the color field should be visible or not.
- Added a menu item to the color chooser settings to save the UI configuration for the inline color chooser and the dialogue color chooser as a startup script to persist the configuration across Gaffer restarts.
- Changed the indicator for the color field and color sliders to an unfilled circle so the chosen color is visible in the center.
- Cycles : Added support for OSL shading with Optix devices.
- LevelSetToMesh : Added
destination
plug, allowing multiple input level sets to be merged into a single mesh at an arbitrary location. - MergeMeshes, MergePoints, MergeCurves : Added nodes for merging various primitive types.
- MeshToLevelSet : Added
destination
plug, allowing multiple input meshes to be merged into a single level set at an arbitrary location. - MetadataOverlay : Added a new node for adding metadata overlays to images, with control over formatting, layout, font and drop shadow.
- PatternMatch : Added a new node for matching strings against wildcard patterns.
- UI : The entire UI is now "focus aware", meaning it uses the upstream contexts generated by the focus node. This greatly enhances useability for complex context-based workflows. Examples include :
- The Viewer now views "pinned" nodes using the context in which they are evaluated by the focus node.
- The NodeEditor correctly displays the results of expressions using context variables created by the focus node.
- The GraphEditor shows when a node is disabled in the context in which it is evaluated by the focus node.
Improvements
- Arnold :
- Added location names to warning messages.
- A missing "P" primitive variable no longer aborts the render, but outputs a warning message instead.
- AttributeTweaks :
- The
{source}
substitution forlinkedLights
now expands todefaultLights
if the attribute doesn't exist yet. This makes tweaks such as({source}) - unwantedLights
reliable even if no light links have been authored yet. - AttributeTweaks : Added tooltips and presets for all attribute values.
- The
- CameraTweaks : Added
ignoreMissing
plug to align behaviour with the other Tweaks nodes. - Cycles :
- Added
is_sphere
plug to spot and point lights. Disablingis_sphere
is equivalent to enabling "Soft Falloff" in Blender, which reverts the light to the behaviour of Cycles 3.6 and earlier. - Changed sampling pattern to blue noise dithered sampling.
- Spot, disk, quad and point light strength now better match Blender, Arnold and hdCycles. As a result these lights are now
pi
times brighter at the same intensity when compared with previous versions. If necessary, this adjustment can be disabled by setting theGAFFERCYCLES_USE_LEGACY_LIGHTS
environment variable with a value of1
. - Simplified presentation of
principled_bsdf
,principled_hair_bsdf
, andprincipled_volume
shaders in the Graph Editor. A subset of parameter nodules are now visible by default, the remainder can be accessed by clicking on or connecting to the node's+
icon and choosing the parameter to make visible.
- Added
- CyclesOptions : Added
denoiseDevice
plug for configuring the device used for denoising. - Editor : The node graph is now evaluated in a context determined relative to the focus node.
- EditScope : Setting a Viewer or Editor's target edit scope to "None" will now prevent edits from being made within any upstream edit scope. To make edits in an edit scope, it must be set as the target.
- FreezeTransform :
- Improved performance for large meshes by using multithreading.
- Improved UI responsiveness by supporting cancellation of long computes.
- GraphEditor :
- Improved highlighting of active nodes, with more accurate tracking of Loop node iterations.
- Annotation
{plug}
substitutions are now evaluated in a context determined relative to the focus node. - The strike-through for disabled nodes is now evaluated in a context determined relative to the focus node.
- Custom dot labels are now evaluated in a context determined relative to the focus node.
- Added colour coding to the strike-throughs drawn for disabled nodes. Black indicates that the node is always disabled, and yellow indicates that its
enabled
plug has an input connection, and therefore might be context-sensitive.
- ImageReader : Non-standard "r", "g", "b" and "a" channel names are now automatically renamed to "R", "G", "B" and "A" on loading. As with other heuristics, this can be disabled by setting
channelInterpretation
to "EXR Specification". - Instancer :
- Improved Arnold raytracing performance for encapsulated instancers with many prototypes. All instances are now output in a single top-level procedural rather than a top-level procedural per prototype, resulting in more optimal BVH traversals in Arnold.
- Reduced scene generation time for encapsulated instancers by around 20%.
- LightEditor :
- Improved formatting of column headers containing whitespace.
- The "Double-click to toggle" tooltip is no longer displayed while hovering over non-editable cells, and a "Double-click to edit" tooltip is now displayed while hovering over other non-toggleable but editable cells.
- Added
is_sphere
column for Cycles lights.
- LightEditor, RenderPassEditor :
- The "Disable Edit" right-click menu item and D shortcut now act as a toggle, where edits disabled in the current session via these actions can be reenabled with D or by selecting "Reenable Edit" from the right-click menu.
- History windows now use a context determined relative to the current focus node.
- Metadata : Metadata registered to a node or plug targeting a descendant plug will now override metadata registered locally to the target.
- NodeEditor : Added Alt + middle-click action for showing context variable substitutions in strings.
- OptionTweaks, ContextVariableTweaks : Added
Remove
mode. - PlugLayout : Summaries and activators are now evaluated in a context determined relative to the focus node.
- Premultiply, Unpremultiply :
- Added
ignoreMissingAlpha
plug. - Optimised the pass-through of the alpha channel.
- Added
- PythonCommand : Added a
framesMode
plug which determines if the command is called once for each frame, once for each batch of frames, or once for each complete sequence. - PythonEditor, PythonCommand, Expression, UIEditor, OSLCode : Added line numbers to code editors (#6091).
- SceneReader : Added loading of
invisibleIds
andinactiveIds
primitive variables from UsdGeomPointInstancer. - SceneWriter : Improved emulation of component-level shader connections when exporting Arnold and Cycles shaders to USD. Native adaptor shaders are now used instead of OSL shaders that may not be available in the destination DCC.
- Spreadsheet : Added yellow underlining to the currently active row.
- TweakPlug : Improved performance when dealing with large lists.
- Windows : Gaffer now uses the TBB memory allocator for significantly better performance.
Fixes
- Arnold : Fixed "Flush Cache" menu items to work with renders being performed by an InteractiveRender node (rather than an InteractiveArnoldRender node).
- ArrayPlug :
- Fixed error when
resize()
removed plugs with input connections. - Fixed error when
resize()
was used on an output plug.
- Fixed error when
- ContextTracker : Removed unnecessary reference increment/decrement from
isTracked()
,context()
andisEnabled()
. - CreateViews : Fixed redundant serialisation of internal connections.
- Cycles :
- Fixed rendering of shaders with connections to individual
rgb
components of a colour orxyz
components of a vector (#5553). - Fixed issue where scaling unnormalized quad and disk lights would not affect their brightness.
- Fixed rendering of shaders with connections to individual
- Dispatcher : Fixed crashes caused by a dispatcher's
SetupPlugsFn
attempting to access the TaskNode it was being called for. Dispatchers may now introspect the TaskNode and add different plugs based on type (#915). - Editor : Fixed
Internal C++ object already deleted
errors when some editors were destroyed. - Expression, OSLCode : Fixed line numbers reported in OSL parse errors.
- FreezeTransform : Constant primitive variables with point/vector interpretations are now also transformed.
- GafferCortexUI : Removed usage of legacy PlugValueWidget API.
- GraphEditor :
- Fixed dimming of labels for BoxIn and BoxOut nodes.
- Fixed update of custom context-sensitive labels on Dot nodes.
- Fixed lingering error badges (#3820).
- Fixed D shortcut to respect read-only metadata on
enabled
plugs. Previously only metadata on the node itself was respected. - Fixed D sho...
Gaffer 1.5.0.0 alpha 3
Features
- ColorChooser :
- Added sliders for TMI (temperature, magenta, intensity) color space.
- Added color field, a widget giving control of two channels of "RGB", "HSV" or "TMI" triplets. The third channel is held constant.
- The color field and RGB, HSV and TMI slider groups can now be toggled on or off.
- Default visibility of the UI elements can now be set at startup by setting
colorChooser:inline:
andcolorChooser:dialogue:
entries for the inline chooser and dialogue chooser respectively, with the following suffixes :visibleComponents
: A string where each character is a visible component slider. Optional components arergbhsvtmi
.staticComponent
: A single character string for the component to use as the static component for the color field. The other two components in the "RGB", "HSV" and "TMI" triplets will be controllable in the widget.colorFieldVisible
: A boolean indicating if the color field should be visible or not.
- Added a menu item to the color chooser settings to save the UI configuration for the inline color chooser and the dialogue color chooser as a startup script to persist the configuration across Gaffer restarts.
- MeshToLevelSet : Added
destination
plug, allowing multiple input meshes to be merged into a single level set at an arbitrary location. - LevelSetToMesh : Added
destination
plug, allowing multiple input level sets to be merged into a single mesh at an arbitrary location. - Cycles : Added support for OSL shading with Optix devices.
Improvements
- Cycles :
- Added
is_sphere
plug to spot and point lights. Disablingis_sphere
is equivalent to enabling "Soft Falloff" in Blender, which reverts the light to the behaviour of Cycles 3.6 and earlier. - Changed sampling pattern to blue noise dithered sampling.
- Spot, disk, quad and point light strength now better match Blender, Arnold and hdCycles. As a result these lights are now
pi
times brighter at the same intensity when compared with previous versions. If necessary, this adjustment can be disabled by setting theGAFFERCYCLES_USE_LEGACY_LIGHTS
environment variable with a value of1
. - Simplified presentation of
principled_bsdf
,principled_hair_bsdf
, andprincipled_volume
shaders in the Graph Editor. A subset of parameter nodules are now visible by default, the remainder can be accessed by clicking on or connecting to the node's+
icon and choosing the parameter to make visible.
- Added
- Arnold : 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.
Fixes
- Viewer : Fixed hangs when focussing a node for the first time (bug introduced in 1.5.0.0a2).
- Cycles : Fixed issue where scaling unnormalized quad and disk lights would not affect their brightness.
- SceneReader : Fixed crash reading facevarying normals skinned with UsdSkel.
- ShaderView : Fixed crash caused by a SceneCreator returning
None
.
Breaking Changes
- Cycles : Removed custom handling of unnormalized lights. We now rely on Cycles' inbuilt behaviour which results in a brightness difference for unnormalized point, spot and disk lights.
- MeshToLevelSet : Objects which are not meshes are now converted to an empty VDB grid, instead of being left unchanged.
- LevelSetToMesh :
- Objects which are not level sets are now converted to an empty mesh, instead of being left unchanged.
- Removed the
adjustBounds
plug. In the rare case where it is important to recompute slightly tighter bounds, one workaround is to use ShufflePrimitiveVariables to shuffle from "P" to "P" withadjustBounds
checked. - Removed support for grid types other than
FloatGrid
. If other types are required, please request them.
Build
- Cortex : Updated to version 10.5.9.5.
- OpenShadingLanguage :
- Updated to version 1.13.11.0.
- Enabled Optix support.
Gaffer 1.4.15.0
Improvements
- Arnold : 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.
Fixes
- SceneReader : Fixed crash reading facevarying normals skinned with UsdSkel.
- ShaderView : Fixed crash caused by a SceneCreator returning
None
.
Build
- Cortex : Updated to version 10.5.9.5.
Gaffer 1.5.0.0 alpha 2
Features
- PatternMatch : Added a new node for matching strings against wildcard patterns.
Improvements
- Arnold :
- Added location names to warning messages.
- A missing "P" primitive variable no longer aborts the render, but outputs a warning message instead.
- Instancer :
- Improved Arnold raytracing performance for encapsulated instancers with many prototypes. All instances are now output in a single top-level procedural rather than a top-level procedural per prototype, resulting in more optimal BVH traversals in Arnold.
- Reduced scene generation time for encapsulated instancers by around 20%.
- NodeEditor : Added Alt + middle-click action for showing context variable substitutions in strings.
- LightEditor, RenderPassEditor : History windows now use a context determined relative to the current focus node.
- NumericWidget : Added the ability to use Ctrl + scroll wheel to adjust values in the same manner as Up and Down (#6009).
- NodeEditor : Improved performance when showing a node with many colour plugs. Showing the Arnold
standard_surface
shader is now almost 2x faster. - GraphEditor : Added colour coding to the strike-throughs drawn for disabled nodes. Black indicates that the node is always disabled, and yellow indicates that its
enabled
plug has an input connection, and therefore might be context-sensitive. - ListContainer : Adding a child widget with non-default alignment no longer causes the container to take up all available space.
- PythonCommand : Added a
framesMode
plug which determines if the command is called once for each frame, once for each batch of frames, or once for each complete sequence.
Fixes
- 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.
- Viewer :
- Fixed drawing of custom mesh light texture visualisers (#6002).
- Fixed BackgroundTask warning when deleting the node being viewed.
- GraphEditor :
- Fixed lingering error badges (#3820).
- Fixed D shortcut to respect read-only metadata on
enabled
plugs. Previously only metadata on the node itself was respected. - Fixed D shortcut to handle multiple selection with some nodes enabled and some disabled. This will now consistently disabled all nodes if at least one is enabled, rather than toggling each individually.
- RenderPassEditor :
- Fixed history window to update on context changes, for example, when the current frame is changed.
- Fixed invalid
scene:path
context variables created by the history window.
Breaking Changes
- IECoreArnold : Added
messageContext
argument toNodeAlgo::Converter
andNodeAlgo::MotionConverter
. - Instancer : Renamed
encapsulateInstanceGroups
plug toencapsulate
. Encapsulation now produces a single capsule at the.../instances
location, instead of capsules at each.../instances/<prototypeName>
location. - GraphGadget : Moved D shortcut handling to GraphEditor.
- PythonCommand : Removed
sequence
plug. Settings from old files are remapped automatically to the newframesMode
plug on loading.