Skip to content

Releases: GafferHQ/gaffer

Gaffer 1.3.13.1

12 Mar 10:45
Compare
Choose a tag to compare

Fixes

  • DocumentationAlgo : Fixed generation of duplicate entries for aliased nodes in exportNodeReference().

Documentation

  • Node Reference : Removed duplicate entries for nodes that have been aliased by compatibility configs.

Gaffer 1.4.0.0b2

05 Mar 18:42
Compare
Choose a tag to compare
Gaffer 1.4.0.0b2 Pre-release
Pre-release

Features

  • 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).
  • 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.

Improvements

  • ImageReader : Added fileValid = False metadata to images from missing frames, when missingFrameMode is Black or Hold.
  • Viewer : Added Ctrl+PgUp shortcut for displaying the RGBA image layer (or the first available layer if RGBA doesn't exist) [^1].
  • RenderPassEditor [^1] :
    • Added "Inclusions", "Exclusions" and "Additional Lights" columns, to provide control over the locations included in the render for each render pass.
    • Added the ability to display render passes grouped in a hierarchy generated from the render pass name. The default grouping uses the first token delimited by "_" from the render pass name, such that render passes named "char_gafferBot" and "char_cow" would be displayed under a "/char" group, while "prop_ball" and "prop_box" would be displayed under a "/prop" group.
    • Render pass grouping can be configured in a startup file by using GafferSceneUI.RenderPassEditor.registerPathGroupingFunction( f ), where f is a function that receives a render pass name and returns the path that the render pass should be grouped under.
    • Grouped display can be enabled by default in a startup file by using Gaffer.Metadata.registerValue( GafferSceneUI.RenderPassEditor.Settings, "displayGrouped", "userDefault", IECore.BoolData( True ) ).
    • Dragging cells selected from the "Name" column now provides a list of the selected render pass names, rather than their paths.
    • Disabled render pass names are now dimmed to more clearly indicate their state.
  • RenderPassEditor, LightEditor, PathListingWidget : Boolean values are now displayed as checkboxes rather than 0 or 1 [^1].
  • Collect : Added the ability to collect StringVectorData inputs.
  • StandardOptions : Added inclusions, exclusions and additionalLights plugs, to control which locations are included in a render based on set expressions entered on these plugs. These, plus the existing includedPurposes plug are now grouped under the "Render Set" section of the UI [^1].
  • GafferScene : Registered the "RenderSetAdaptor" adapting the render:inclusions, render:exclusions and render:additionalLights options to prune scene locations before rendering [^1].

Fixes

  • 3Delight : Fixed startup errors on Windows when the DELIGHT environment variable wasn't defined [^1].
  • FlatImageProcessor : Fixed bug that could cause an input to be evaluated with an invalid image:viewName.
  • Collect : Fixed display of results collected from TypedObjectPlug inputs.

API

  • ScenePath : Added automatic conversion of a list of Python strings to a ScenePath [^1].
  • RenderPassEditor : Added registerPathGroupingFunction() and pathGroupingFunction() methods [^1].
  • ExtensionAlgo : Added exportNode() and exportNodeUI() functions.
  • Widget : Added a 0.5 pixel offset to ButtonEvent.line objects passed to mouse event signals such as buttonPressSignal() and dragMoveSignal()

Breaking Changes

  • CyclesOptions :
    • Removed useFrameAsSeed plug. The frame is now automatically used as the seed if seed is not set.
    • Removed all texture cache options. These had never been exposed in the UI because this never became an offical Cycles feature.
    • Removed cryptomatteAccurate. This feature is no longer present in Cycles.

[^1] : To be omitted from final release notes for 1.4.0.0.

Gaffer 1.3.13.0

05 Mar 18:28
Compare
Choose a tag to compare

Improvements

  • Viewer : Added Ctrl+PgUp shortcut for displaying the RGBA image layer (or the first available layer if RGBA doesn't exist).
  • RenderPassEditor :
    • Added "Inclusions", "Exclusions" and "Additional Lights" columns, to provide control over the locations included in the render for each render pass.
    • Added the ability to display render passes grouped in a hierarchy generated from the render pass name. The default grouping uses the first token delimited by "_" from the render pass name, such that render passes named "char_gafferBot" and "char_cow" would be displayed under a "/char" group, while "prop_ball" and "prop_box" would be displayed under a "/prop" group.
    • Render pass grouping can be configured in a startup file by using GafferSceneUI.RenderPassEditor.registerPathGroupingFunction( f ), where f is a function that receives a render pass name and returns the path that the render pass should be grouped under.
    • Grouped display can be enabled by default in a startup file by using Gaffer.Metadata.registerValue( GafferSceneUI.RenderPassEditor.Settings, "displayGrouped", "userDefault", IECore.BoolData( True ) ).
    • Dragging cells selected from the "Name" column now provides a list of the selected render pass names, rather than their paths.
    • Disabled render pass names are now dimmed to more clearly indicate their state.
  • RenderPassEditor, LightEditor, PathListingWidget : Boolean values are now displayed as checkboxes rather than 0 or 1.
  • StandardOptions : Added inclusions, exclusions and additionalLights plugs, to control which locations are included in a render based on set expressions entered on these plugs. These, plus the existing includedPurposes plug are now grouped under the "Render Set" section of the UI.
  • GafferScene : Registered the "RenderSetAdaptor" adapting the render:inclusions, render:exclusions and render:additionalLights options to prune scene locations before rendering.

API

  • ScenePath : Added automatic conversion of a list of Python strings to a ScenePath.
  • RenderPassEditor : Added registerPathGroupingFunction() and pathGroupingFunction() methods.

Gaffer 1.4.0.0b1

23 Feb 15:10
Compare
Choose a tag to compare
Gaffer 1.4.0.0b1 Pre-release
Pre-release

Note : This release introduces linux-gcc11 builds which are only compatible with Linux distributions using glibc 2.28 or higher.
These specific linux-gcc11 builds are intended for testing purposes while we upgrade our toolchain and dependencies to better align
with VFX Platform 2023, and should be considered "beta" in advance of a stable release in Gaffer 1.5.

Known bugs : Gaffer may crash when stopping an InteractiveCyclesRender with the CPU device and SVM shading mode. A fix is in progress.

Features

  • Cycles :
    • Updated to version 4.0.2.
    • Added support for CUDA and Optix devices (GCC 11 builds only).
  • 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.
  • DeepSlice : Added a new node for clipping out part of an image based on depth.
  • ImageInspector : Added a new panel for inspecting image format, metadata and channel statistics.

Improvements

  • Arnold : Gaffer's native OpenColorIO config is now automatically translated to Arnold. Use an ArnoldColorManager node to override this behaviour.
  • Toolbars : Changed hotkey behavior to toogle 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.
  • CropWindowTool : Added Alt + C for toggling both the crop window tool and the relevant crop window enabled plug.
  • TaskList, FrameMask : Reimplemented in C++ for improved performance.
  • 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.
  • Cache : Increased default computation cache size to 8Gb. Call Gaffer.ValuePlug.setCacheMemoryLimit() from a startup file to override this.
  • Dispatcher : Reduced internal overhead of dispatch() call, with one benchmark showing around a 3x speedup.
  • ScriptWindow : Added "Save" option to dialogue shown when closing a window containing unsaved changes.
  • Resize :
    • Added support for deep images.
    • Added "Nearest" filter.
  • 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.
  • NodeEditor : Improved image channel selectors :
    • Added "Custom" option, to allow strings to be entered manually.
    • Added right-click context menu.
  • Switch : Added connectedInputs output plug.
  • 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.
  • ImageStats : Added areaSource plug, allowing area to be driven by the input display window or data window.
  • 3Delight :
    • Added camera overscan support.
    • NSI scene description export format is now based on file extension - .nsi for binary and .nsia for ASCII.
    • Added support for reading dl: and user: attributes from shaders.
    • Added importanceSampleFilter plug to DelightOptions, providing denoiser-compatible output.
    • Matched DelightOptions default values for oversampling and shadingSamples to 3Delight's own default values.
    • Added support for external procedurals.
  • GraphEditor : Improved logic used to connect a newly created node to the selected nodes.
  • ScenePlug, ImagePlug : Child plugs are now serialisable. Among other things, this enables them to be driven by expressions (#3986).
  • Premultiply : Added useDeepVisibility plug, which weights samples according to their visibility based on the opacity of samples in front.
  • CyclesOptions : Improved device selection UI.
  • ImageReader : 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.

Fixes

  • BackgroundTask : Fixed potential deadlock caused by destroying a BackgroundTask from Python while it was still running.
  • Dispatcher : The job directory is no longer created when dispatch is cancelled by a slot connected to preDispatchSignal().
  • 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 a pid is always returned when available.
  • ImageStats :
    • Fixed output of infinite values, which were previously being clamped.
    • Results for min/max now correctly reflect zero values outside the data window.
  • NodeMenu, NodeEditor : userDefault metadata is now evaluated in the script context, so it can depend on script variables.
  • 3Delight : Fixed loading of surface shaders such as dlStandard so that they can be connected to the inputs of shaders such as dlLayeredMaterial.
  • DeepState : Fixed handling of NaN values and samples where ZBack is less than Z.
  • Premultiply : Fixed handling of non-existent alpha channel.
  • PlugAlgo : Fixed promotion of CompoundDataPlugs with non-dynamic children, such as the Camera.renderSettingOverrides plug.
  • ColorToVector : Fixed parameter types.

API

  • PathColumn :
    • Added CellData::sortValue member, to provide additional control over sorting in the PathListingWidget.
    • Added missing Python binding for headerData() method.
  • StandardPathColumn :
    • Added constructor which allows the full header CellData to be specified.
    • Added missing Python binding for property() method.
  • IconPathColumn :
    • Added constructor which allows the full header CellData to be specified.
    • Added prefix() and property() accessors.
  • Window : Added preCloseSignal(), which allows connected slots to prevent a window from being closed.
  • LocalDispatcher :
    • Added Job.status() and Job.statusChangedSignal() methods.
    • Added Job.messages() and Job.messagesChangedSignal() methods.
    • Added Job.frameRange(), Job.environmentCommand() and Job.startTime() methods.
    • Added Job.cpuUsage() and Job.memoryUsage() methods.
    • Added JobPool.addJob() and JobPool.removeJob() methods.
  • GafferTractor : Added tractorAPI() method used for accessing the tractor.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.
  • ParallelAlgo : Added canCallOnUIThread() function.
  • Label : Added textSelectable constructor argument.
  • ShufflesPlug :
    • Added ignoreMissingSource argument to shuffle().
    • Added shuffleWithExtraSources() method.
  • ShufflePlugValueWidget : Widgets for the source and destination plugs can now be customised using standard plugValueWidget:type metadata.
  • ImageTestCase : in assertImageEqual function, maxDifference may now be a tuple, to specify an asymmetric range.
  • Editor : Added Settings class, which should be used to store settings for subclasses. See LightEditor and ImageInspector for examples.
  • DeepPixelAccessor : Added utility class for accessing deep samples while abstracting away the underlying tile storage.
  • Color3fPlug : Added setValue( V3f() ) overload.

Breaking Changes

  • Arnold : Removed support for Arnold 7.1.
  • Cycles : Updated to version 4.0.2.
  • Render : Changed render:includedPurposes default to "default", "render".
  • Backdrop : Changed default drawing order. Use the new depth plug to override the order if necessary.
  • ValuePlug : Removed deprecated getObjectValue() overload.
  • Preferences : Removed cache plug.
  • 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. Use Task( taskNode["task"], context ) instead.
  • Dispatcher :
    • Removed createMatching() method.
    • Removed non-const TaskBatch accessors frames() and preTasks().
    • Made TaskBatch constructors private.
    • The job directory is no longer available in slots connected to preDispatchSignal().
    • Removed nodes arguments from dispatch signals. Use the dispatcher["tasks"] plug instead.
    • Removed script and context arguments from frameRange() method. The current frame and full frame range are now queried from the current context.
  • DispatcherUI :
    • Removed appendMenuDefinitions(), appendNodeContextMenuDefinitions(), executeSelected() and repeatPrevious() functions.
    • Removed DispatcherWindow class.
  • LocalDispatcher :
    • Removed `...
Read more

Gaffer 1.3.12.0

23 Feb 09:52
Compare
Choose a tag to compare

Improvements

  • SceneReader : Added basic loding of UsdGeomNurbsCurves, converting them to CurvesPrimitives (basis curves).
  • Console output : Every line is now prefixed with the message level.
  • RenderPasses : Added validation of render pass names entered in the names plug.
  • RenderPassEditor :
    • Added support for adding a new render pass to an EditScope by clicking the plus button at the bottom of the editor.
    • Added support for deleting selected render passes by clicking the minus button at the bottom of the editor, or by right-clicking one of the names and selecting 'Delete Selected Render Passes'.

Fixes

  • Viewer : Fixed context handling bug in the shader view (#5654).
  • PythonCommand : Fixed misleading results for repr( variables ) and str( variables ), which would suggest the dictionary was empty when it was not.
  • CompoundObject : Fixed crashes in Python bindings caused by passing None as a key.
  • Windows : Fixed "{path} was unexpected at this time." startup error when environment variables such as PATH contain " characters.
  • PathListingWidget : Fixed bug which caused the pointer to be stuck displaying the "values" icon after dragging cells with no value.
  • SceneAlgo : Fixed computation of history through Expression nodes.
  • LightTool : Fixed crash when deleting the node being viewed.
  • USD : Fixed loading of Arnold lights previously exported from Gaffer to USD.
  • Catalogue : Fixed connection delays on Windows.
  • Context : Fixed potential crash when setting a variable with ownership.

Documentation

  • Added Render Pass Editor shortcuts to the "Controls and Shortcuts" section.
  • Added Render Pass Editor (Arnold) example demonstrating use of the Render Pass Editor, as well as the RenderPasses and RenderPassWedge nodes.

API

  • EditScopeAlgo : Added support for creating render passes.
  • RenderPasses : Added registerRenderPassNameWidget() and createRenderPassNameWidget() methods for registration and creation of the widget used for editing render pass names.
  • RenderPassEditor : Added addRenderPassButtonMenuSignal() to allow customisation of the add render pass button behaviour.
  • ConfirmationDialogue : The cancel button may now be omitted by passing cancelLabel = None to the constructor.

Build

  • Cortex : Updated to version 10.5.6.2.

Gaffer 1.2.10.6

23 Feb 09:46
Compare
Choose a tag to compare

Fixes

  • Context : Fixed potential crash when setting a variable with ownership.

Gaffer 1.3.11.0

31 Jan 10:04
Compare
Choose a tag to compare

Features

  • 3Delight : Added support for USD SphereLight, RectLight, DiskLight, DistantLight, DomeLight and CylinderLight.
  • RenderPassEditor : Added a new editor UI for inspecting and editing render passes.

Improvements

  • Arnold :
    • ArnoldShader : Added a colour space presets menu for the image shader.
    • Added specific warning for outputs with space in name.
    • Added normal and depth AOVs.
  • CyclesShader : Added a colour space presets menu for the image_texture and environment_texture shaders (#5618).

Fixes

  • Reference : Fixed bug where GAFFER_REFERENCE_PATHS was not being searched when performing "Duplicate as Box" action.
  • Outputs :
    • Fixed bug which meant that adding an output via the UI was not undoable.
    • Fixed bug which allowed outputs to be added to a read-only node via the UI.

API

  • ArnoldShaderUI : Added support for colorSpace widget type metadata, allowing an OpenColorIO colour space to be chosen.
  • PathColumn : Added CellData::foreground member, to provide additional control over foreground colours in the PathListingWidget.

Gaffer 1.3.10.0

11 Jan 09:40
Compare
Choose a tag to compare

Features

  • LightPositionTool : Added tool to the scene viewer to place shadows. With a light selected, holding Shift + V and clicking on geometry will set the pivot point used for casting a shadow. Holding V and clicking sets the point to receive the shadow. The light is repositioned to be the same distance from the pivot, along the pivot-shadow point line, and oriented to face the shadow point.

Improvements

  • ArnoldShader, ArnoldColorManager, CyclesShader : Improved browsers for file parameters (#5592, #5602) :
    • Added filtering by extension.
    • Added bookmarks.
  • USDLight : Added file browser for shaping:ies:file parameter.
  • OpenColorIOContext : Added file browser for config plug.
  • Layouts : Added the ability to load layouts containing editors that aren't currently available. This allows layouts containing new editors introduced in Gaffer 1.4 to be loaded in Gaffer 1.3.
  • TranslateTool, RotateTool : Added tooltip to the upper left corner of the Viewer explaining how to use the target modes.
  • LightTool : Changed the color of the non-highlighted handles to orange and the highlighted handles to cyan for consistency with other highlight colors.
  • Outputs : Variable substitutions are now applied to gaffer:context:* image metadata values. This is needed when the value of a context variable contains references to other variables, with the default value for project:rootDirectory being one example.

Fixes

  • Arnold : Fixed translation of USD uchar attributes and shader parameters.
  • Orientation/Instancer : Now normalizes unnormalized quaternion inputs - this allows correctly processing files with primvars that contain unnormalized quaternions ( which it is possible to write from Houdini ).

API

  • EditScopeAlgo : Added support for editing options for a specific render pass.
  • ArnoldShaderUI : Added support for Gaffer filebrowser metadata in Arnold .mtd files. The following fields are supported, and correspond directly to the metadata documented on the PathPlugValueWidget and FileSystemPathPlugValueWidget :
    • path:leaf
    • path:valid
    • path:bookmarks
    • fileSystemPath:extensions
    • fileSystemPath:extensionsLabel

Gaffer 1.3.9.0

12 Dec 09:54
Compare
Choose a tag to compare

Improvements

  • 3Delight : Added support for subdivision corners and creases.
  • SetEditor :
    • Added "Selection" column displaying the number of currently selected members for each set.
    • Added "Hide Empty Selection" checkbox. When on, the SetEditor will only display sets with currently selected members.

Fixes

  • TransformTools : Fixed editing of XYZ component plugs with individual input connections, such as when only a single component is promoted to a Box.
  • AttributeQuery, OptionQuery, PrimitiveVariableQuery, ShaderQuery : Added support for querying values of all numeric data types, whereas before queries were limited to bool, int and float values.

API

  • PlugAlgo : setPlugFromData() now supports conversions from all numeric data types to BoolPlug, IntPlug and FloatPlug values.

Gaffer 1.3.8.0

28 Nov 11:57
Compare
Choose a tag to compare

Features

  • Viewer : Added "Snapshot To Catalogue" command to the right-click menu of the 3D view.
  • RenderPasses : Added new nodes for working with render passes. Render passes are defined as a list of names stored in the renderPass:names option in the scene globals, and can be used to dispatch tasks that vary based on those names. This can be useful for purposes such as producing multiple renders with varying object visibility and shading, or for writing variations of a scene to individual files.
    • RenderPasses : Added a new node for appending render passes to the scene globals.
    • DeleteRenderPasses : Added a new node for removing render passes from the scene globals.
    • RenderPassWedge : Added a new node for causing upstream tasks to be dispatched in a range of contexts where the value of the renderPass context variable is varied based on the render pass names defined in the renderPass:names option.

Improvements

  • GraphEditor : Added drag & drop of files into the graph editor, automatically creating a SceneReader, ImageReader or Reference node as appropriate.
  • ImageTransform, Resample : Improved performance for non-separable filters without scaling, with 2-6x speedups in some benchmark cases.
  • Outputs : Included renderPass in the filename for newly created Arnold, Cycles and 3Delight outputs. Allowing rendered images to be written to a specific directory based on the name of the current render pass.
  • GUI Config : Included renderPass in the default filename when writing ass files from an ArnoldRender node.
  • NameSwitch/Spreadsheet : Added "Render Pass" preset to selector plug.

Fixes

  • InteractiveRender : Fixed unnecessary updates to encapsulated locations when deforming an unrelated object.
  • InteractiveArnoldRender : Fixed creation of new Catalogue image when editing output metadata or pixel filter.
  • GraphEditor : Fixed error caused by additional connections to dragEnterSignal().
  • Windows Scene/OpenGL/Shader Menu : Removed \ at the beginning of menu items.
  • Arnold :
    • Fixed translation of UsdPreviewSurface normal maps.
    • Fixed translation of UsdPreviewSurface specularColor fallback value.
  • Scene History : Fixed error caused by Alt+E keypress on panels other than the Viewer, HierarchyView, LightEditor or NodeEditor.
  • ImageReader : Fixed crashes caused by null ustring metadata values.
  • Exception handling : Fixed memory leak caused by translation of IECore::Exception from C++ to Python and back again.

API

  • SceneGadget : Added snapshotToFile() method.
  • SceneAlgo :
    • Added history() overload for returning computation history independent of a scene location, this is useful when generating history from the globals.
    • Added optionHistory() method which returns a computation history for one specific option.
  • Widget : Added handling for drag & drop from an external application via the existing dragEnterSignal(), dragMoveSignal(), dragLeaveSignal() and dropSignal() signals.

Build

  • Cortex : Updated to version 10.5.4.2.
  • Instancer : Fixed ambiguous reference compilation errors when building with Boost 1.70.