Skip to content

Releases: GafferHQ/gaffer

Version 0.96.0

10 Jun 16:02
Compare
Choose a tag to compare
Version 0.96.0 Pre-release
Pre-release

Core

  • Added support for Box data to CompoundDataPlug.
  • Optimised the Context class considerably, particularly for temporary Contexts created during computation. A synthetic test which does nothing but create temporary Contexts shows a reduction in runtime of 97%, resulting in a 30% reduction in total runtime for a more real-world test using the Instancer node (#427).
  • Fixed Context copy construction doubling in Python bindings.
  • Fixed circular references within the undo system, which caused memory leaks where scripts were not destroyed at the appropriate time (#397).
  • Optimised ComputeNode::hash(). This yields ~14% reduction in runtime for a simple Reformat benchmark.

UI

  • Fixed PyQt circular references within GafferUI.Menu (#397).
  • Fixed crash caused by File->Quit menu item.
  • Improved UI for BoxPlugs.

Scene

  • Added crop window to StandardOptions node (#688).
  • Renamed gaffer:visibility attribute to scene:visible, to support the standard attribute with that name in Cortex scene caches.
  • Added a SetFilter node (#92).
  • Fixed deadlock removing input from running InteractiveRender node, or undoing or redoing such an operation.
  • Added pausing for interactive renders (#646).

API

  • Renamed BoxPlug min() and max() methods to minPlug() and maxPlug().
  • Made Context::Scope noncopyable.
  • Added GAFFERTEST_ASSERT macro. This should be used by test cases implemented in C++, and throws an exception which can be caught and reported by the Python unit test runner.
  • Added _copy argument to Context::get() bindings.
  • Added optimised Context copy constructor, primarily for use in constructing temporary Contexts. See class documentation for details.
  • Added checks for zombie ScriptNodes and Widgets at app shutdown. This can catch many common programming errors.
  • Added BoxPlugValueWidget class.

Version 0.95.0

22 May 09:13
Compare
Choose a tag to compare
Version 0.95.0 Pre-release
Pre-release

UI

  • Improved SceneReader UI with right click menu for toggling tags on and off in the tags and sets plugs.

Core

  • Fixed bug with references containing non-default plug values (#844).

Scene

  • Added preliminary support for sets (#92).
    • Added a Set node. This allows users to manage sets of named locations (with optional wildcards) as part of their graph flow.
    • Replaced "gaffer:forwardDeclarations" globals entry with a private set named "__lights".
    • Updated hierarchy modifying nodes to also modify sets to keep them in sync with the hierarchy.
    • Implemented loading of tags as sets in SceneReader.
    • An upcoming release will contain a SetFilter for actually making the sets useful.
  • Added a FreezeTransform node (#822).

RenderMan

  • Fixed IPR bug where shaders could leak onto the wrong objects.

API

  • Typedefed PathMatcherData into GafferScene namespace.
  • Optimised PathMatcher (the underlying data structure for sets).
  • Replaced GafferScene::Render base class with RendererAlgo.h header.
  • Simplified Executable nodes and tidied up implementation, in preparation for actually integrating Despatchers properly.

Version 0.94.0

14 May 21:25
Compare
Choose a tag to compare
Version 0.94.0 Pre-release
Pre-release

Apps

  • Increased default size of browser app (#795).
  • Added bookmarks support to Op windows in the browser app (#787).
  • Fixed position of quit confirmation dialogue (#751).
  • Fixed parsing of command line arguments with spaces.

UI

  • Fixed PySide incompatibility in VectorDataWidget.
  • Improved VectorDataWidget numeric editing (#637).
  • Simplified OpDialogue exception reporting (#806).
  • Fixed "Open Recent..." crash bug in PySide builds (#548).
  • Used OpDialogue to improve progress/error reports in OpPathPreview (#792).
  • Enabled background mode for OpDialogue launched from BrowserEditor.
  • Fixed OpPathPreview UI glitch.
  • Fixed "KeyError: 'currentTab'" error when loading custom layouts.
  • Added more sensible initial widget sizes to BrowserEditor. The sizes are also saved and restored when modes are switched.
  • Improved Bookmarks
    • Identifies recent items by full paths, so multiple recent items with the same basename may coexist.
    • Prevents heavy usage of one bookmarks category from removing the recent items for the general (no category) bookmarks.
    • Improves bookmarks UI in PathChooserWidget to display full paths of recent items.
    • Most recent items are now displayed at the top.
    • Added creation of bookmarks by dragging on to bookmarks icon.
  • Fixed cursor bug in StringPlugValueWidget continuous update mode (#796).
  • Fixed bug in non-editable MultiLineStringPlugValueWidgets.
  • Fixed upside down nodule labels.
  • Fixed overzealous Viewport drag tracking (#550).
  • Improved SceneHierarchy to view any output ScenePlug, regardless of name. This improves compatibility with Boxes, where the user can make an output plug with any name they want.
  • Added right click menu for Box plugs in NodeGraph. This allows the renaming and deletion of promoted nodules.
  • Added dropdown menu for Displays node quantize parameters.
  • Improved Displays node UI (#15).
  • Added command-line representation of Op values in the UI (#793).
  • Added workaround for squash/stretch in viewport camera look-through (#826).
  • Added custom editor to PathVectorDataWidget. This enables tab completion, nice dropdown menus and a browser for PathVectorDataParameters.
  • Added indexing methods to VectorDataWidget.
  • Added presetsOnly dropdown menus to CompoundVectorParameterValueWidget (#470).
  • Added an auto-load preset for ops (#804).
  • Added filtering by image type for ImageReader and ImageWriter file dialogues.

Core

  • Combined setValue() serialisation for CompoundNumericPlugs (#761).
  • Fixed Box plug promotion to support ImagePlugs and ScenePlugs.

Scene

  • Renamed GLSL shaders to UpperCamelCase. This matches the naming convention we use for OSL shaders.
  • Added a Grid node.
  • Fixed FilteredSceneProcessor to allow Box promotion of Filter plug.

Image

  • Fixed a bug in ImageTransform that could result in corrupted output.

API

  • Added GraphComponentClass and GadgetClass to improve bindings.
  • Added NodeGadgetClass to improve bindings of NodeGadgets.
  • Added immediate execution mode to OpDialogue.
  • Fixed NodeGadget::noduleTangent() binding.
  • Fixed potential bug in NodeGadget::create().
  • Fixed LRUCache getter cost calculations.
  • Fixed Metadata test hang.
  • Improved Window.resizeToFitChild() behaviour. If called on an as-yet unshown window, it would move the window to the top left corner of the screen. Now the window will still be opened in a sensible place. Added additional shrink and expand arguments to further control the resize behaviour.
  • Added support for fixed size CompoundVectorParameterValueWidget. The ["UI"]["sizeEditable"] user data entry can be given a BoolData value of False, which will cause the +/- buttons to be hidden in the UI, enforcing a fixed length on the data in the vector parameters.
  • Added per-column editability to CompoundVectorParameterValueWidget. This uses a ["UI"]["editable"] user data entry in each child parameter, where a BoolData value of False will make the column for that parameter read-only (#766).
  • Made Bookmarks.acquire() support passing Widgets and GraphComponents.
  • Added support for callable dialogue keywords in PathPlugValueWidget.
  • Fixed drag/drop to allow modal dialogue creation in dropSignal().
  • Added public Serialisation::acquireSerialiser() method.
  • Added ValuePlugSerialiser::valueNeedsSerialisation() method. This can be reimplemented by derived classes to provide more control over the serialisation of values.
  • Privatised numeric and string PlugValueWidget implementations.
  • Added ViewportGadget viewportChangedSignal() and cameraChangedSignal().
  • Added SpacerGadget size accessors.
  • Added iterator typedefs for all GafferUI::Gadget subclasses.
  • Improved Box plug promotion API.
  • Made BlockedConnection and UndoContext non-copyable.
  • Added useNameAsPlugName argument to CompoundDataPlug::addMembers(). Also added python bindings for CompoundDataPlug::fillCompoundData() and CompoundDataPlug::fillCompoundObject().
  • Gave Displays node parameter plugs more useful names.
  • Added VectorDataWidget.editSignal(). This allows custom Widgets to be provided to edit the values held in the table cells.
  • Added Widget.focusChangedSignal().
  • Added VectorDataWidget setColumnEditable/getColumnEditable methods.
  • Added right click preset menu for CompoundVectorParameterValueWidget. This also adds the ability for any custom parameter menu to operate with CompoundVectorParameters, whereas before they couldn't.

Build

  • Now using Coverity static analysis - this resulted in a number of bugs being found and fixed in this version.

Version 0.93.0

14 Apr 16:09
Compare
Choose a tag to compare
Version 0.93.0 Pre-release
Pre-release

Core

  • Added the ability to specify Metadata overrides to specify instances of Plugs and Nodes.

UI

  • Added UI Editor. This allows the user plug layout for any node to be edited - plugs can be reordered, dividers added and help strings specified. In particular this allows the creation of custom UIs for Boxes, which can then be exported and loaded by References.
  • Fixed initial unsortedness of PathListingWidgets.

Scene

  • Added PrimitiveVariables node. This allows arbitrary primitive variables with constant interpolation to be added to objects.
  • Added Duplicate node. This allows arbitrary numbers of duplicates of subhierarchies to be created, each with their own transform.

OSL

  • Specifying lockgeom=1 by default for all OSL shading engines. This means that primitive variables (user data in OSL parlance) are not automatically mapped to shader inputs unless those inputs have explicitly set lockgeom=0 in the source (which is rare). This almost doubles the speed of a simple image noising operation.
  • Fixed OSLShader::acceptsInput( NULL ) crash.

API

  • Added PlugLayout class, which creates node editor UIs driven by Metadata. This will replace all existing plug layouts over time.
  • Added StringAlgo.h, containing various string utilities, including wildcard matching (#707).
  • Added metadata accessors to OSLShader.
  • Fixed module import order and namespace pollution issues.
  • Replaced Metadata regexes with new string matching code.
  • Added Metadata signals emitted on registration of values.
  • Made NameWidget accept None for the the GraphComponent.
  • Added borderWidth argument to SplitContainer constructor.
  • Added PathListingWidget setHeaderVisible()/getHeaderVisible() methods.
  • Added PathListingWidget.pathAt() method.
  • Fixed bug in GafferUI::Pointer::setFromFile( "" )
  • Added a DictPath.dict() accessor.
  • Moved NodeEditor.acquire() to NodeSetEditor.acquire(). This allows it to be used to acquire an editor of any type.
  • Added fallbackResult to WeakMethod.
  • Fixed CompoundPlug plugSetSignal() emission when children change.

Version 0.92.1

18 Mar 17:15
Compare
Choose a tag to compare
Version 0.92.1 Pre-release
Pre-release

Scene

  • Improved shader assignment reporting in SceneInspector (#335)
  • Improved shader handle generation

Version 0.92.0

11 Mar 16:16
Compare
Choose a tag to compare
Version 0.92.0 Pre-release
Pre-release

Core

  • Made Plug flags serialisation more future proof (#684).
  • Removed redundant serialisation of default values. This reduced file sizes by 25% and load times by nearly 20% for a large production script. Note that changing the default value for a plug or shader parameter now represents a backwards compatibility break with old scripts.
  • Optimised python bindings, giving speedups in many areas, including file loading and shader generation.
  • Removed parameter mapping from ObjectReader
  • Fixed threading bugs in ObjectReader.
  • Fixed bugs preventing expressions being used with filenames in ObjectReader.

UI

  • Improved plug "Edit Input..." menu item. It now ensures that the input plug widget is directly visible on screen, whereas before it could only show the node editor for the input node.
  • Prevented nodes from being created offscreen (#640).
  • Exposed "enabled" plugs in a new Node Editor "Node" tab (#759).
  • Fixed MessageWidget crashes encountered in Maya.
  • Fixed bug preventing positioning of new nodes within backdrops (#769).
  • Added workaround for PyQt/uuid crashes (#775).
  • Added filtering so that DirNameParameter file browsers will only show directories and not files (#774).
  • Fixes image viewer colour swatches when the image doesn't contain an alpha channel.
  • Improved scene preview support to include .abc, .cob, and .pdc files (any files for which Cortex has a Reader implementation).

Scene

  • Options and Attributes nodes now have sensible default values for their plugs.

Image

  • Fixed bugs associated with negative display window origins.
  • Fixed crash when creating ImageWriters with another image node selected (#681 #255).

Arnold

  • Arnold shader names are now prefixed with "ai" within the node search menu, to aid finding them amongst the other nodes.

API

  • Added Widget.reveal() method (#503).
  • Added extend argument to NodeGraph.frame(). The default value of false behaves exactly as before - the specified set of nodes are framed in the viewport. A value of true still causes the nodes to be included in the framing, but in addition to the original contents of the frame.
  • Properly implemented CompoundNumericPlugValueWidget.childPlugValueWidget().
  • Removed MessageWidget.textWidget() method. The internal text widget should now be considered private. The currently displayed messages may be cleared using the new MessageWidget.clear() method.
  • Removed deprecated MessageWidget.appendException() method.
  • Added control over the default button to the OpDialogue. This controls whether the OK or Cancel button is focussed by default when displaying the Op. The default value is as before, focussing the OK button, but the value can be controlled either by user data in the Op or by passing an alternative argument to the OpDialogue constructor.
  • Adopted new Python wrapping mechanism from Cortex.
  • Fixed pollution of GafferUI namespace with IECore module.
  • Added DirNameParameterValueWidget.
  • PathPreviewWidget now respects registration order.

Build

  • Requires Cortex 8.2.0.

Version 0.91.0

24 Feb 18:41
Compare
Choose a tag to compare
Version 0.91.0 Pre-release
Pre-release

Apps

  • Fixed gui startup error in ocio.py.

Core

  • Fixed copy/paste problems where inappropriate values would be copied for plugs with inputs, where the input was not in the selection being copied (#740).

UI

  • Added a first implementation of an automatic node layout algorithm. This is available via the Edit/Arrange menu item (#638).
  • Fixed image viewer data window display in the presence of an offset display window.
  • Fixed TextGadget vertical bound. It was slightly different depending on the text contents, causing different nodes to appear with slightly different heights.
  • Moved OSLObject and OSLImage shader inputs to the left of the node.
  • Added message filtering to MessageWidget.

Scene

  • Fixed AlembicSource refresh failure (#737).
  • Fixed errors when AlembicSource filename is "".

RenderMan

  • Added support for multiple types in RSL "coshaderType" annotation (#621).

OSL

  • Added support for arbitrary image channels to the OSLImage node. The InChannel and InLayer shaders should be used to fetch channels and layers from the input image, and the OutChannel and OutLayer shaders may be used to write values to the output channels and layers. The Out* shaders should be plugged into an OutImage shader which is then plugged into the OSLImage node.
  • Added support for arbitrary primitive variables to the OSLObject node. The InFloat, InColor, InNormal, InPoint and InVector shaders provide access to vertex primitive variables on the input primitive, and the corresponding Out* shaders
    can be used to write values to the output primitive variables. The Out* shaders should be plugged into an OutObject shader which is then plugged in to the OSLObject node.
  • Added V3fVectorData support to OSLRenderer user data queries.
  • Fixed dirty propagation through OSLShader closure outputs.
  • Improved OSL processor shader input acceptance.
    • Only accepts OSLShader nodes if they hold a surface shader, as other shader types can't be used directly.
    • Also accepts Box and ShaderSwitch connections so that shaders can be connected indirectly.
  • Revised shader naming convention to UpperCamelCase. The names of existing shaders have therefore changed.

API

  • Moved OSLImage::shadingEngine() method to OSLShader::shadingEngine().
  • Removed FormatPlugSerialiser from the public interface - it was not intended to be subclassed.
  • Removed FormatBindings namespace and moved formatRepr() into the GafferImageBindings namespace.
  • Switched formatRepr() signature to take a reference rather than a pointer.
  • Added MessageWidget setMessageLevel() and getMessageLevel() methods.

Version 0.90.0

07 Feb 10:40
Compare
Choose a tag to compare
Version 0.90.0 Pre-release
Pre-release

Scene

  • Fixed off-by-one error in scene cache preview frame ranges.

UI

  • Fixed slight jump when connections are first drawn.
  • Removed PathFilter paths plug representation in the NodeGraph. There aren't really any nodes we would connect to it.
  • Improved OpDialogue warning display. If an Op completes successfully, but emits error or warning messages in the process, these will now always be flagged before the user can continue.

API

  • Refactored ConnectionGadget into an abstract base class with a factory, to allow for the creation of custom subclasses. A new StandardConnectionGadget class contains the functionality of the old ConnectionGadget. Config files may register creation function for connections to control the type of gadget created, and its style etc.
  • Added MessageWidget.messageCount() method. This returns the number of messages currently being displayed.
  • Added OpDialogue.messageWidget() method. This provides access to the message display for the Op being executed.
  • Added MessageWidget.forwardingMessageHandler(), to allow messages received by the widget to be propagated on to other handlers. This can be useful for connecting the OpDialogue to a centralised logging system.
  • Deprecated MessageWidget appendMessage() and appendException() methods. The same result can be achieved by passing messages via the message handler instead.

Version 0.89.0

29 Jan 19:53
Compare
Choose a tag to compare
Version 0.89.0 Pre-release
Pre-release

Core

  • Added Support for NumericPlug->BoolPlug and BoolPlug->NumericPlug connections.

UI

  • Added additional types to the user plug creation menu.
  • Added pre-selection highlighting in the NodeGraph (#94).
  • Added "Create Expression..." menu option for bool plugs.
  • Fixed NodeGraph resizing to crop rather than scale (#10).
  • Fixed read only CompoundPlug labels.
  • Added workarounds for Qt OpenGL problem on OS X (#404 and #396).

Scene

  • Added Parent node. This allows one hierarchy to be parented into another (#91).
  • Fixed bug which could cause incorrect bound computation at the parent node in the Instancer.
  • Seeds and Instancer classes now preserve existing children of the parent location, renaming the new locations to avoid name clashes if necessary.
  • Added tag filtering to the SceneReader node.
  • Enabled input connections to PathFilter "paths" plug. This allows it to be promoted to box level and be driven by expressions etc (#704).

Apps

  • Updated view app to contain tabs with different views (info, header, preview etc).
  • Added scene cache previews to the browser and view apps (#416).

API

  • Removed BranchCreator name plug - derived classes are now responsible for generating the entirety of their branch.
  • Modified BranchCreator hashing slightly to improve performance - derived classes hashBranch*() methods are now responsible for calling the base class implementation.
  • Fixed Box::canPromotePlug( readOnlyPlug ) to return false.
  • Fixed Box::canPromotePlug() to check child plugs too.
  • Fixed bug in read only Plugs with input connections.
  • Added Gadget setHighlighted() and getHighlighted() methods.
  • Added supportedExtensions() methods to ImageReader and SceneReader.
  • Added Viewer.view() and Viewer.viewGadgetWidget() methods.
  • Added NodeToolbar and StandardNodeToolbar classes.

Build

  • Updated public build to use OpenEXR 2.1.
  • Updated public build to use OpenImageIO 1.3.12.
  • Updated public build to use OpenShadingLanguage 1.4.1.
  • Removed pkg-config from the dependency requirements.

Version 0.88.1

16 Jan 21:47
Compare
Choose a tag to compare
Version 0.88.1 Pre-release
Pre-release

Core

  • Added env app which mimics /usr/bin/env
  • Enabled Python threading by default in Gaffer python module

UI

  • Renaming is available for promoted children of CompoundDataPlugs
  • Moved scene node filter plugs to the right hand side of the node

Image

  • Fixed threading issue in Display node