Skip to content

Releases: GafferHQ/gaffer

Version 0.22.0.0

28 Jan 10:40
Compare
Choose a tag to compare
Version 0.22.0.0 Pre-release
Pre-release

This release brings support for dispatching via Pixar's Tractor, in
additional to the usual medley of bug fixes and optimisations.

Core

  • Prevented the creation of cyclic connections (#1630).

UI

  • Fixed bugs in "Set Key" plug menu item.
  • Fixed Backdrop node positioning when creating a backdrop with no
    nodes selected (#1625).
  • Fixed NodeEditor layout problems caused by long summaries (#1629).

Scene

  • SceneProcedural (#1615)
    • Fixed bug which could cause motion blurred bounding
      boxes to be computed incorrectly.
    • Removed duplicate attribute computations. This shaves
      9% off the time to first pixel for a complex benchmark scene.

RenderMan

  • Improved time to first pixel for raytraced 3delight renders (#1614).

Arnold

  • Fixed warnings about inaccurate bounds (#1614).

Appleseed

  • Added support for volume priority attribute (#1631).

Tractor

  • Added a new GafferTractor module, which enables dispatching of
    Gaffer's task graphs to renderfarms running Pixar's Tractor (#1619).

Cortex

  • Fixed UI for promoted presets parameters (#1624).
  • Fixed parameter ordering in UI (#1627).

API

  • ValuePlug
    • Prevented the addition of children which are not themselves
      ValuePlugs.
    • Allowed subclassing in Python.
  • FilteredSceneProcessor
    • Removed restrictions on Filter::sceneAffectsMatch() (#1620).
  • SceneProcedural/ScriptProcedural
    • Added support for using Renderer::Procedural::noBound (#1614).
  • Fixed GIL management in DependencyNodeWrapper.
  • Added DownstreamIterator.
  • Improved error handling during dirty propagation.
  • Batched dirty propagation during script loading, execution and
    destruction (#1632).

Tests

  • Unexpected messages are now treated as errors.

Build

  • Requires Cortex 9.6.0.

Version 0.21.0.0

12 Jan 18:30
Compare
Choose a tag to compare
Version 0.21.0.0 Pre-release
Pre-release

Apps

  • Added gaffer stats application. This takes a script and prints out
    information about version, settings, variables and nodes (#1437).

Core

  • Fixed serialisation of quotes and other special characters in metadata
    keys. This was most visible when using special characters in custom
    preset names (#1599).
  • Simplified metadata serialisations (#1599).

UI

  • Fixed UV orientation for area light visualisations (#1600).
  • Fixed environment light visualisations on OSX (#1609).
  • Viewer (#1592)
    • Improved image viewer performance.
    • Fixed several image viewer bugs (#1427, #1426, #1356, #773).
    • Added support for custom toolbars on all edges of the viewer,
      for both views and nodes.
  • Fixed hang when browsing scene locations (#1618).

Image

  • Fixed reference counting bugs in Premultiply and Unpremultiply nodes
    (#1598).
  • Fixed crashes caused by Merge requesting nonexistent upstream
    channels (#1596).

Appleseed

  • Added support for exposure parameters on Appleseed lights (#1608).
  • Simplified light menus (#1608).
  • Improved environment light visualisations (#1608).

API

  • ImageAlgo
    • Added channelExists() function (#1596).
  • ExceptionAlgo
    • Fixed line number extraction for syntax errors (#1599).
  • Menu
    • Fixed broken shortcuts after assigning new menu definition (#1597).
    • Fixed scoping of MenuBar shortcuts. In particular this fixes
      a bug whereby an embedded Gaffer panel could prevent Maya's
      main window shortcuts from working (#1597).
  • Replaced all old-style python classes with new style ones #1607.
  • GafferImageUI
    • Added ImageGadget class.
  • PlugLayout improvements
    • Added support for "layout:divider" metadata - this replaces
      the old "divider" metadata.
    • Added support for multiple layouts, using a different metadata
      prefix for each layout.
    • Added support for creating partial layouts, using a new rootSection
      constructor argument.
  • Toolbar improvements
    • Toolbars can now be defined for all edges, not just the top of
      frame (#1592).
    • StandardNodeToolbar has a new constructor argument to choose which
      edge to create the toolbar for. A new "toolbarLayout:section" metadata
      value chooses which toolbar plugs belong in, with values of
      "Top", "Bottom", "Left" and "Right" (#1592).
  • GLWidget
    • Improved overlay mechanism. Overlays may be queried and removed as
      well as set. Container overlays are transparent to mouse events in
      areas where no child widget exists (#1592).
  • NumericPlugValueWidget
    • Added support for "fixedCharacterWidth" metadata.

Build

  • Added GCC 5 build to Travis test setup.

Incompatibilities

  • Removed ImageView::update() virtual override.
  • Replaced GLWidget.addOverlay() method with setOverlay()/getOverlay() methods.

Version 0.20.0.1

12 Jan 18:39
Compare
Choose a tag to compare
Version 0.20.0.1 Pre-release
Pre-release

UI

  • Added GIL release to some PathListingWidget methods to fix a hang

Version 0.20.0.0

15 Dec 20:05
Compare
Choose a tag to compare
Version 0.20.0.0 Pre-release
Pre-release

Apps

  • Added support for choosing the debugger used via a new GAFFER_DEBUGGER
    environment variable.

Core

  • Improved ContextProcessor performance. This shaved 10% off the startup
    time for a complex render (#1573).
  • Added framesPerSecond plug to ScriptNode. This provides user-level
    control over the frame rate for each script (#1576).
  • Fixed hang triggered by deletion of a plug during computation
    (#1576, #1580).

Dispatch

  • Moved all dispatch functionality from Gaffer module into a new
    GafferDispatch module. Backwards compatibility is provided by
    config files, but it is recommended that code be updated to use
    GafferDispatch directly (#1577).
  • Renamed "requirements" plug to "preTasks" and "requirement" plug
    to "task". Again, backwards compatibility is provided by a config
    file, but it is recommended that code be updated to use the new
    names (#1577).
  • Added "postTasks". These are nodes that are executed following another
    node, even if they are not explicitly included in the list of nodes
    to dispatch (#1577).
  • Added "dispatcher.immediate" plug to all executable nodes. This
    causes the node to be executed immediately in the current process
    when dispatched (#1577).
  • Removed "dispatcher.local.executeInForeground" plug - use the new
    "dispatcher.immediate" plug instead (#1577).
  • Added sequence support to PythonCommand node. This causes the command
    to be called once for all frames, instead of once per frame (#1578).
  • Fixed bug which could cause all frames downstream of pass-through
    nodes (like TaskList and TaskContextVariables) to depend on all
    upstream frames (#1577).
  • Fixed detection of direct dependency cycles (#1577).

Image

  • Crop
    • Added option to crop to a specific format, optionally centered (#1570).
  • Fixed crashes triggered by images with empty data windows (#1575).
  • Improved ImageWriter to write out images progressively as the input
    image is generated (#1517). This improved speed by 65% and memory usage
    by 60% when generating a 10K image.

Scene

  • Lights are now represented as attributes at a location rather than as
    objects. This allows lights for multiple different renderers to exist
    at the same location, allows the creation of area lights, and provides
    the necessary support for using shader networks within lights in the
    future (#1590).
  • Shader nodes now support the loading of light shaders (#1590).
  • Added metadata support for specifying the orientation of lights
    in the renderer (#1590).

RenderMan

  • Fixed crash when reloading coshader arrays.

UI

  • Improved viewport visualisation of lights (#1590, #11).
  • Added workaround for PySide bug which prevented stylesheets from
    working as expected (#1574).
  • Improved error reporting for failed dispatches (#1593).
  • Fixed graphical glitch in OpDialogue error icon (#1593).

API

  • ImageAlgo
    • Added parallelProcessTiles and parallelGather tiles functions
      to facilitate easy parallel processing of images (#1517).
  • BufferAlgo
    • Moved image window methods from ImageAlgo (#1517).
  • Format
    • Fixed space conversions for empty boxes (#1575).
  • TestCase
    • Improved output for assertTypeNamesArePrefixed() failures.
  • Dispatch
    • Renamed requirements -> preTasks
    • Added LoggingExecutableNode to GafferDispatchTest. This
      facilitates easier testing of dispatchers.
  • SceneUI
    • Added ObjectVisualiser and AttributeVisualiser base classes
      to support custom representations of objects and attributes
      within the viewport (#1590).
  • Metadata
    • Added methods for adding and querying non-node values (#1590).

Build

  • Added CXXSTD argument to SConstruct. Pass CXXSTD=c++11 to build
    with C++11 support (#1586).
  • Added testing with GCC 4.8 and C++11 to Travis test setup (#1586).
  • Updated Cortex version to 9.5.0 (minimum requirement is 9.3.0).

Incompatibilities

  • Removed "dispatcher.local.executeInForeground" plug - use the new
    "dispatcher.immediate" plug instead.
  • Moved image window methods from ImageAlgo.h into BufferAlgo.h.
  • Lights are now represented as attributes rather than as objects (#1590).
  • The Parameters node no longer works for lights (#1590).

Version 0.19.0.0

24 Nov 01:10
Compare
Choose a tag to compare
Version 0.19.0.0 Pre-release
Pre-release

Apps

  • Added a preference for OIIO cache memory to the gui app.

Core

  • Added a TaskSwitch node.
  • Added support for variable substitutions within SystemCommand.
  • Added a PythonCommand node.
  • Expression
    • Added support for assigning floats to IntPlugs in Python expressions.
    • Added detection of circular dependencies within expressions.
  • Added support for metadata edits on Reference nodes (#1536).
  • Fixed bug which caused internal connections to be removed when
    unparenting a Node.

UI

  • Fixed SceneInspector context bug.
  • Fixed display bug in Wedge string mode

Image

  • Added Blur node.
  • Added Text node.
  • ImageReader
    • Added modes for handling missing frames.
    • Added settings for masking image sequences.
    • Added automatic conversion to linear using OIIO colorspace
      metadata (#250).
    • Renamed old ImageReader to OpenImageIOReader - this is now
      just a utility class which is used internally.
  • Added ImagePrimitiveProcessor base class.
  • Added methods for controlling the OIIO cache memory.
  • Fixed bug which prevented the ImageWriter using the requested
    compression (#1538).
  • Resample
    • Added expandDataWindow plug.
    • Added support for "smoothGaussian" filter.
    • Fixed bug which prevented subpixel translations.
  • Fixed dirty propagation bugs in Offset node.
  • Added Difference operation to Merge.
  • ImageTransform
    • Improved performance up to 50%.
    • Improved quality.
    • Changed rotation direction to counter clockwise.
    • Made "cubic" the default filter./
  • Removed Reformat node. Use Resize instead.
  • Fixed computation of max in ImageStats.
  • Fixed performance bug when ImageNodes are used inside
    a Box subclass implemented in Python.
  • Fixed Merge dataWindow computation when the first input
    is unconnected.

Arnold

  • Added ray depth setting to ArnoldOptions node.

Documentation

  • Updated for latest changes.

API

  • Added python bindings for ImageWriter::Mode.
  • Expression::setExpression() preserves previous state in the case
    that parsing fails.
  • Stopped CompoundNumericPlug::getChild() from masking the base class
    equivalents.
  • Added ImageTestCase with assertImagesEqual() method.
  • Removed filter from ImageSampler.
  • Added Resample::filters() method.
  • ImageTestCase
    • Fixed threshold comparison bug in assertImagesEqual().
    • Added assertImageHashesEqual() method.
  • Added OpenColorIOTransform::availableSpaces() method
  • Context::Scope may now be constructed with a NULL argument -
    this is a no-op.
  • Reintroduced default format substitutions to AtomicFormatPlug.
  • Added GafferImage::Shape base class.
  • Removed ChannelMaskPlug::channelIndex() method. Use ImageAlgo
    colorIndex() method instead.
  • Added channel name utility methods to ImageAlgo.

Build

  • Improved reporting in Travis config.
  • Updated several dependencies to match the VFX Reference Platform.
    • Boost 1.55
    • OpenEXR 2.2.0
    • OpenColorIO 1.0.9
  • Updated to Appleseed 1.3.0-beta

Incompatibilities

  • ImageTransform now uses OIIO filters rather than GafferImage filters -
    the old filter names are no longer supported.
  • ImageTransform now rotates counter clockwise.
  • Removed Reformat and redirected it to Resize, which supports OIIO filters
    rather than GafferImage filters.
  • Removed filter plug from ImageSampler. Bilinear interpolation is used
    instead.
  • Removed FilterPlug. Use StringPlug instead.
  • Removed Filter. Use OIIO filters instead.
  • Removed FilterPlugValueWidget. Use presets instead.
  • Removed ChannelMaskPlug::channelIndex() method. Use ImageAlgo
    colorIndex() method instead.

Version 0.18.0.0

29 Oct 20:05
Compare
Choose a tag to compare
Version 0.18.0.0 Pre-release
Pre-release

This release brings a number of updates to GafferImage, including
user-editable Formats, bug fixes to Resize and Crop, and a new Offset
node. It also fixes a few bugs todo with Expressions, Switches, and UI
crashes.

Core

  • Node::userPlug() is now a Plug instead of a CompoundPlug.
  • Preventing unwanted child connection tracking on userPlug().
  • Changed scriptNode() to return this when node is a ScriptNode.
  • Support indirect connections to Switch index
    • Emitting Node::plugInputChangedSignal() for all downstream connections.
  • Expressions don't let __in plug track child inputs.
  • Added top level plug argument to Expression::Engine::apply().
  • PythonExpressionEngine drives apply() by plug type not data type.
  • PythonExpressionEngine supports arbitrary compound plugs types.
  • Improved PythonExpressionEngine::defaultExpression().
  • Fixed a bug in plugs/nodesWithMetadata.
  • Fixed errors when serialising parent metadata only.
  • Reference/Box no longer export user plugs (#801).

UI

  • Skipping intermediate dots in tooltips.
  • Fixed crash in the GraphGadget when a non-nodule plug was removed from a node.
  • Improved UI robustness for errors on enabledPlug() expressions.
  • Fixed potential connection lifetime bugs in the Viewer.

Image

  • Added AtomicFormatPlug and replaced all non-user facing FormatPlugs with this.
    • This plug does not perform default format substitutions.
    • This plug does not serialise registered Formats.
  • Changed FormatPlug to be a user-editable Format specification
    • Using FormatPlug in all user facing scenarios (e.g. Constant, Resize, etc).
  • Deprecated Reformat. Use Resize instead.
  • Moved default Format mechanism onto FormatPlug.
  • Fixed default Format issues inside boxes (#888).
  • Fixed nodes which were unusable if no default format was specified in the context (#888).
    • We now fall back to a default default format in that case.
  • The default format was not getting transferred to the script context after loading (#888).
  • Rationalised and simplified the Format registry.
    • Fixed registerFormat() so that a second registration overrides the first.
    • Requiring name when registering a format.
    • Names should no longer include the numeric values.
    • Renamed removeFormat() to deregisterFormat().
    • Removed unused signals and not-so-useful methods.
    • Separated registered names and ostream output.
      • The ostream output just uses numeric values, keeping it in line with
        the Imath classes.
      • Querying the registered name for a format returns an
        empty string if it hasn't been registered. Previously it returned
        a generated name, making it hard to tell if it had actually been
        registered or not.
  • FormatPlugValueWidget supports manual entry of custom formats.
    • This widget only supports FormatPlugs, not AtomicFormatPlugs.
  • ImageStats now uses a postCreate to set plug values via the UI only.
  • Renamed CropUI.postCreateCrop to CropUI.postCreate.
  • Fixed Resize disabling.
  • Add Offset node.
  • Fixed bug in Crop::affects().
  • Added Crop "resetOrigin" plug.
    • This resets the origin of the format back to [0,0], which is intuitively what is expected.

Incompatibilities

  • Changed type of Node::userPlug()
  • Moved default Format API from Format class onto FormatPlug class.
  • Changed Format registry API.
  • Crop now resets the display window origin to 0,0. Turn off the "resetOrigin" plug for the old behaviour.
  • Renamed CropUI.postCreateCrop to CropUI.postCreate.

Version 0.17.0.0

13 Oct 20:43
Compare
Choose a tag to compare
Version 0.17.0.0 Pre-release
Pre-release

This release brings several major features in addition to the usual enhancements and bug fixes. Of particular interest are the addition of a basic keyframing system, support for using OSL expressions alongside the existing Python expressions, and several new image processing nodes exposing OpenColorIO functionality.

Core

  • Added Animation node, providing basic support for keyframed animation.
  • Added frames-per-second support to Contexts, to map between frames
    and a time in seconds.
  • Expression
    • Fixed bug when identical expressions acted on different plug types.
    • Added support for calling context.getTime().
    • Added support for calling context.getFramesPerSecond().
    • Fixed bugs when a plug or node is renamed.
    • Fixed bugs when manually disconnecting an output or input
      of an expression.
    • Improved error reporting in the UI.
  • Fixed InputGenerator backwards compatibility bug introduced in
    0.16.0.0.
  • Box
    • Promoting a plug now properly copies plug metadata (#1468).
  • Plug
    • Fixed rare crash during dirty propagation.
    • Fixed bug in child connection tracking behaviour.

UI

  • NodeEditor
    • Plug context menus
      • Added keyframing menu items for numeric and bool plugs.
      • Added Lock/Unlock meu items.
      • Added menu item for creating an OSL expression.
    • Tool menu
      • Added "Revert to Defaults" menu item.
  • NodeGraph
    • Added right click menu items for reordering plugs on Boxes.
    • Fixed bugs triggered by the dynamic hiding and showing of plugs
      via the UIEditor.
  • Dot
    • Added optional labels. These can be derived from the
      dot node name or the upstream node name or may be
      specified directly.
  • Shader loading dialogues
    • Added bookmarks.
  • Viewer
    • Fixed bug which could mean the camera would move unexpectedly
      even when look-through mode is not enabled.
    • Fixed OpenColorIO configs.
  • UIEditor
    • Fixed renaming of empty user sections.
    • Prevented renaming of section to invalid names like "".
    • Added default Settings section.
    • Fixed presets UI to update values when the selected preset
      changes.
    • Ignores user plugs on box nodes.
  • Box
    • Added default Settings section.
    • Disabled plug addition button in User section.
  • Fixed bug which could cause the display of corrupted icons.
  • ShaderSwitch
    • Fixed UI to provide access to each input rather than just the
      array input as a whole (#1461).
  • Numeric fields
    • Ensured that keyboard-nudged numbers have an extra 0 added as
      necessary to ensure that the same digit is always being modified.

Image

  • New OpenColorIO nodes
    • LUT
    • CDL
    • DisplayTransform
  • ImageWriter
    • Added file format options.
    • Made sure OIIO queries for nchannel and alpha support are
      respected.
  • Merge
    • Fixed artifacts when the data windows differ between layers.
    • Fixed crash.
  • Resize
    • Fixed artifacts when upsizing with the sinc filter (#1457).
  • Changed convention for image bounding boxes to specify that the
    maximum coordinates are exclusive (outside the box).
  • Fixed Crop UI for images with the default format.
  • Resample
    • Fixed incorrect input sample region.

Scene

  • Fixed loading of UnionFilters from Gaffer 0.15.0.0 (#1474).
  • Fixed loading of FilterSwitches from Gaffer 0.15.0.0 (#1474).
  • Attributes are now output to the renderer before shaders at the
    same location. This works around a bug in 3delight's shader
    construction.
  • Fixed crash when loading sets from an empty SceneReader.
  • Added support for frames-per-second to SceneReader, AlembicSource
    and SceneWriter.

OSL

  • Added support for using OSL as a general purpose expression language.

Cortex

  • Fixed issue where non-ValuePlugs were not syncing during setPlugValue().
  • Fixed OpHolder node summaries.

API

  • Expression
    • Redesigned API to better support multiple languages.
  • Context
    • Added "framesPerSecond" variable and time accessors.
  • Metadata
    • Added nodesWithMetadata() and plugsWithMetadata() methods.
  • StandardNodeGadget
    • Removed orientation constructor parameter. Use metadata instead.
    • Added dynamic nodule reordering controlled by metadata.
  • ScriptNode
    • Fixed undo merging for CompoundNumericPlugs (#422).
  • Plug
    • Made setFlags() undoable.
  • PlugLayout
    • Ignore custom widgets with type "". This allows a widget
      inherited from a base class to be removed by a derived class
      or instance metadata.
  • Removed UserPlugValueWidget.
  • Added UserPlug namespace.
  • Deprecated use of arbitrary Widget constructor keyword arguments
    for auto-parenting. The parenting argument should be used instead.
  • Image
    • Renamed GafferImage::OpenColorIO to ColorSpace.
    • Changed convention for image bounding boxes to specify that the
      maximum coordinates are exclusive (outside the box).
      • Added image window utility methods to assist with this change.
    • Added OpenColorIOTransform abstract base class. This makes it
      easy to implement nodes whose processing is performed via OpenColorIO.
    • Sampler
      • Remove sample window accessors.
      • Deprecated constructor taking a filter.
  • Added NumericWidget.valueToString() method.

Incompatibilities

  • Redesigned expression API to better support multiple languages.
  • Changed convention for image bounding boxes to specify that the
    maximum coordinates are exclusive (outside the box).
  • NodeGadget
    • Added noduleAddedSignal() and noduleRemovedSignal().
  • StandardNodeGadget
    • Removed orientation constructor parameter. Use metadata instead.
  • GraphComponentWrapper
    • Improved constructors to allow any type to be passed to the single
      argument constructor.
  • Removed UserPlugValueWidget.
  • Deprecated use of arbitrary Widget constructor keyword arguments
    for auto-parenting. The parenting argument should be used instead.
  • Renamed GafferImage::OpenColorIO to ColorSpace.
  • Sampler
    • Remove sample window accessors.
    • Deprecated constructor taking a filter.

Version 0.16.0.4

15 Sep 17:02
Compare
Choose a tag to compare
Version 0.16.0.4 Pre-release
Pre-release

Scene

  • Output attributes to the renderer before other state to fix some inconsistent behaviour

Build

  • Updated IE internal build options to use more modern OCIO, OIIO, and OSL

Version 0.16.0.3

08 Sep 16:41
Compare
Choose a tag to compare
Version 0.16.0.3 Pre-release
Pre-release

UI

  • Fixed a problem whereby presets were not being transferred when
    promoting a compound plug on a RenderManAttributes node.

Core

  • Fixed issue where non-ValuePlugs were not syncing during
    setPlugValue().

Version 0.16.0.2

01 Sep 21:07
Compare
Choose a tag to compare
Version 0.16.0.2 Pre-release
Pre-release

UI

  • Box : Copy all metadata when promoting plugs.
  • UIEditor : Never edit user plug for Box nodes.