0.17.0.0

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.