Releases: GafferHQ/gaffer
Releases · GafferHQ/gaffer
Version 0.86.0
UI
- Added exposure and gamma controls to the image viewer (#571).
- Added colourspace management to the image viewer (#573). By default display colourspaces are taken from the OCIO config, but any image processing node (or Box containing them) can be registered via config files to provide alternative methods of colour management.
- Added auto expand option to the scene viewer (#163).
- Added Shift+Down shortcut for full expansion in the scene viewer (#556).
- Added "look through camera" in the scene viewer (#49).
- Added global Left/Right keyboard shortcuts for frame increment/decrement (#52).
- Added background operation to op dialogues in the op and browser apps. The UI now remains responsive during execution and displays IECore messages and results (#591).
- Objects can now be dragged from the Viewer and SceneHierarchy into path fields such as the AimConstraint target or the StandardOptions camera.
- Buttons now accept Return and Enter keypresses in addition to the space bar and clicking.
- Confirmation dialogues now focus the default button so they can be dismissed using the keyboard.
- Tarted up the About dialogue with a nice new logo courtesy of Tiziana Beretta.
- Fixed MenuButton bug whereby menus could be shown partially offscreen.
- Fixed Timeline bugs
- Wraparound during playback would remove the fractional part of the frame number
- Entering a value in the frame field which was outside the frame range would make it impossible to subsequently enter a fractional frame number.
- Changing the frame number via the numeric field didn't update until focus left the field.
- Fixed clipping problem in BusyWidget drawing, and removed overhead of invisible BusyWidgets.
- Fixed GadgetWidget overlay event handling problems.
- Fixed crashes when MultiSelectionMenu was used in GLWidget overlay.
- Viewer toolbar now omits labels when Metadata value is "".
- Made the NodeGraph save and restore its framing when entering and leaving Boxes (#626).
- Fixed PathWidget menu positioning when used as a GLWidget overlay.
Scene
- Added a UnionFilter node (#594).
- Optimised SceneReader. It now computes constant hashes where data is not animated, resulting in significant speedups and reduced memory consumption. Approximately 2x speedup and 50% memory usage reduction has been seen in animated production assets (#545).
- Optimised SceneHierarchy update for improved playback performance (#545). 4x speedups have been seen with animated production assets.
- Fixed the laggy node dragging seen after expanding the SceneHierarchy contents and moving the current frame a few times (#209).
- Disabled StandardOptions camera and resolution by default.
Image
- Optimised OpenColorIO node performance.
- Optimised grade node performance and memory usage (through improved hash implementation).
- Set Grade node's gamma plug minimum value to 0.
- Fixed threading related OpenColorIO crashes on OS X.
- Fixed ImagePrimitiveSource hashing bug. This would manifest itself as a corrupted image when connecting a disabled node downstream from a Display node (#420).
- Fixed miscellaneous hashing bugs.
Core
- Optimised StringPlug::getValue() and StringPlug::hash() for cases where the string doesn't contain substitutions.
- Fixed bug in Path inequality operator.
- Renamed python deprecation warning output - Python2.7 disabled this by default.
API
- Added a new Playback class. This provides a central controller for all clients who wish to initiate playback or react when playback occurs.
- Added ColorProcessor base class. This makes it easier to implement image processing nodes which mix across channels.
- DependencyNode::affects() is now called for output plugs too. This can trip up poorly implemented DependencyNode::affects() overrides - see f1e9cb3 for details.
- Resolved ambiguities in Widget auto-parenting keyword arguments. Parenting arguments should now be passed as "parenting = { ... }" rather than just "...". The old style of argument passing will be deprecated (#655).
- Added ViewportGadget::set/getCameraEditable() methods.
- Added previous root node to GraphGadget::rootChangedSignal().
- Added set/getTextSelectable() method to GafferUI.Label.
- Added Dialogue set/getModal() methods.
- Added Path._emitPathChanged() protected method. This can be used by derived classes to emit the pathChangedSignal(), avoiding emitting it if nothing is listening. All subclasses should use this in preference to self.pathChangedSignal()( self ).
- Added Context::hasSubstitutions() method. This can be used to query if a string contains any substitutions supported by Context::substitute().
- Added Slider set/getPositionIncrement() methods. These allows the cursor key position nudging behaviour to be controlled.
- Added const version of GafferUI::View::getPreprocessor.
- Added EnumPlugValueWidget.selectionMenu() method.
- Renamed ImageNode::hash_Plug() methods to hash_(), for consistency with the rest of the framework.
- Refactored ImageNode hashing for improved performance and clarity - see 78b8739 for details.
- Added many missing IntrusivePtr typedefs.
- Added support for "divider" Metadata in viewer toolbars.
Version 0.85.1
Scene
- Compatibility with Cortex 8.0.0b1
Version 0.85.0
API
- Added Bookmarks API for storing Path bookmarks by app, path type, and category (#55)
- Configs can define custom bookmarks on startup
- Parameters can specify a category with ["UI"]["bookmarksCategory"] user data
- Support in the gui, browser, and op apps
- Support in File menu, PathChooserDialogue, PathChooserWidget, PathParameter, PathVectorParameter, RenderMan shader parameter, Box, and Reference node UIs
- Added Style::changedSignal()
- Added Window set/getIcon and setting GafferLogoMini as the default window icon
- Added TextWidget set/getPreferredCharacterWidth methods
- Fixed ParameterisedHolder parameterChanged() crashes
- Fixed Widget.bound() on OS X
- Fixed some bugs with null plugs in Box's plug promotion methods
GL
- Fixed GLSL shaders used by the UI for OpenGL 2.1 (requires Cortex 8.0.0-a23)
- Fixed OpenGL drawing when embedded in Houdini (requires Cortex 8.0.0-a22)
UI
- Added ColorSwatchPlugValueWidget (#625)
- Added new Gaffer logos (though only using them for window icons currently)
- Increased preferred width of PathWidgets (#515)
- Improved PathChooserDialogue handling of invalid selections (#628)
- Fixed Dialogue positioning and focussing on Linux (#220, #642, #62)
- Fixed SectionedCompoundDataPlugValueWidget child widget bugs (#588)
- Fixed Timeline start/end field sizing bug (#111)
Scene
- Added DeleteAttributes node and AttributeProcessor base class (#587)
- Fixed PrimitiveVariableProcessor::affects()
RenderMan
- Fixed RenderManShader.acceptsInput() crash
OSL
- Added closure parameter support to OSLShader
Version 0.84.0
UI
- Added shift+drag of node to panel to create duplicate editor (#575).
- Added HSV readout for pixel below mouse in image viewer (#576).
- Improved the UI for Attributes and Options, to distinguish between the boolean used to enable a setting and the boolean used to define the value (#65).
- Fixed unwanted scaling of Button images.
- Added a toolbar to the viewer, initially with only a single button for specifying the 3D display style (#114).
- Improved MenuButton menu positioning.
- Fixed bug where searchable menus kept keyboard focus after closing.
- Fixed focus stealing problems apparent in Viewer and NodeGraph. They still take focus on mouse enter, but will not steal focus from text entry widgets (#555, #439).
- Added per-column visibility for CompoundVectorParameterValueWidget. Visibility is specified using the standard ["UI"]["visible"] userData entries on the child parameters which provide the columns (#526).
- Stopped plug controls accepting drags from themselves. This was causing trouble for users who were accidentally dragging and dropping a single line from a PathVectorDataPlugValueWidget onto itself, thus removing all the other lines.
- Added drag start threshold, to make it harder to accidentally start a drag (#593).
- Disabled "Remove input" menu item for read only plugs and uis.
- Disabled Box promotion menus on read only UIs (#604).
- Disabled ganging menu items for read only UIs.
- Stopped standard graph layout reconnecting invisible nodes.
Scene
- Prevented rogue connections being made to Shader "parameters" Plug.
- Fixed bugs in computing hashes for transform, object and attributes at the scene root.
OSL
- Added support for struct parameters.
- Added shaders for doing basic vector arithmetic.
- Added support for N global variable in OSLRenderer.
- Fixed OSLShader hash bug. Because OSL shaders are the first shader type we've supported where a single shader can have multiple outputs, we weren't taking into account which particular output was connected when computing the hash.
- Prevented vector->color connections for OSLShader nodes. OSL itself doesn't allow such connections so we mustn't either. Also added a vectorToColor shader to help work around the restriction.
Documentation
- Started versioning documentation releases - they follow the app release version.
- Changed modifier key styling in documentation content to match that used in interface.
- NodeEditor content expanded.
- NodeGraph content expanded.
- New images.
- New screen grab setups.
- Simplified example light shader.
API
- Renamed CheckBox to BoolWidget and added different display modes. CheckBox remains as an alias to BoolWidget for backwards compatibility.
- Added stream insertion operator for GafferScene::ScenePlug::ScenePath.
- Fixed RunTimeTyped declaration for SceneView. It was declared as deriving from View rather than View3D.
- Fixed bug in Widget.widgetAt().
- Added widget overlays to GLWidget. This allows any Widget subclass to be displayed as an overlay on top of the OpenGL contents.
- Added setColumnVisible/getColumnVisible methods to VectorDataWidget.
- Implemented VectorDataPlugValueWidget.setHighlighted().
- Fixed StandardNodeUI.setReadOnly() to properly affect plug labels.
- Implemented setPlug on a SectionedCompoundDataPlugValueWidget.
- Fixed DependencyNode::enabledPlug() python bindings.
- Added python binding for ValuePlug::setFrom().
Version 0.83.0
UI
- Added support for framing nodes and plugs dragged to the NodeGraph.
- Fixed overzealous pinning of nodes dragged to editors. Specifically, a node dragged from within an editor would be accepted as a pinning-drag into that very same editor. Now a drag must originate from outside the editor to be considered for pinning.
- Stopped GafferUI.Frame from expanding beyond the min/max of its contents. It now behaves like the other containers in this respect.
- Added highlighted rendering for frames.
- Added ConnectionPlugValueWidget. This is a fallback widget for plugs that otherwise have no value to display. It shows the input connection to the plug, and provides means of navigation to that input (#130).
- Added post-execution behaviours to OpDialogue. These allow the UI writer, the Op writer or the user to choose whether or not the dialogue should be closed after the Op has executed (#560).
- Fixed PathListingWidget errors when "/" path is invalid. Invalid root paths occur quite frequently in the SceneHierarchy editor when an invalid filename has been entered in a SceneReader or AlembicReader. Those nodes will still display an error, but the SceneHierarchy now won't output a confusing stacktrace which distracts people from the root cause (#528).
- Added Alt click modifier for selecting upstream nodes in GraphGadget. Alt+Shift click adds all upstream nodes to the selection. Alt+Ctrl click removes all upstream nodes from the selection (#437).
- Fixed launching of external URLs on OS X.
Scene
- Fixed Prune node's forward declarations of lights and cameras. Previously it would not correctly remove the forward declaration for an object whose ancestor had been pruned.
- Added Isolate node type. This removes all paths which are not directly above or below the chosen location - particularly useful for singling out certain assets from a large scene (#564).
- Improved default values for Seeds and Instancer nodes. The new defaults mean there are less steps to perform to get something happening.
- Stopped annoying startup errors when 3delight or arnold are missing (#486).
OSL
- Introduced a new gaffer module which integrates Open Shading Language.
- OSLShader node represents OSL shaders and allows them to be connected into shading networks.
- OSLImage node executes OSL shaders in the context of an input image to perform arbitrary image processing.
- OSLObject node executes OSL shaders in the context of an object's primitive variables to perform geometry deformation.
API
- Added custom formatters and name depth control to NameLabel.
- Added Widget.isAncestorOf() method.
- Added ButtonEvent.button field.
- Improved path matching to provide more complete information.
- Added GraphGadget::upstreamNodeGadgets() method.
Support apps
- Added ability to specify Widget to be grabbed in the screenGrab app.
Version 0.82.0
Core
- Made Plug::acceptsInput() consider current output connections (#532).
UI
- Added even-more-simplified mode to StandardNodeUI (#549).
- Fixed GraphGadget for NULL return from NodeGadget::create(). This allows NodeGadget::registerNodeGadget() to be used with functions that will return NULL to signify that the node should be hidden.
Scene
- Fixed errors reading polygon normals from Alembic files (courtesy of Cortex 8.0.0-a18).
- Added MapOffset node for offsetting texture coordinates.
RenderMan
- Fixed output of multiple displays (courtesy of Cortex 8.0.0-a18) (#357).
- Added automatic instancing capabilities (courtesy of Cortex 8.0.0-a18).
Version 0.81.0
Core
- Improved dirtiness propagation mechanism to remove duplicate signal emission.
UI
- Backdrop improvements
- Backdrop contents can now be scaled, so large backdrops can still have readable text when zoomed out.
- Fixed bug which meant that empty backdrops didn't immediately redraw as highlighted when selected.
- Improved resizing behaviour.
- Fixed cut and paste bug.
Scene
- Added doublesided attribute to StandardAttributes node (#275).
Arnold
- Fixed packaging of Arnold plugins.
- Fixed problem where light shaders weren't being created as lights.
RenderMan
- Fixed public build to work with older 3delight versions where RiProceduralV isn't available.
- Added support for several new attributes in RenderManAttributes node (#275).
API
- The plugDirtiedSignal() is now emitted when a value has been edited with ValuePlug::setValue() - this means that observers need only ever use plugDirtiedSignal() instead of also having to use plugSetSignal() as well.
- Added Style::characterBound(). This returns a bounding box guaranteed to cover the largest character in the font. It is useful for correctly positioning the text baseline among other things.
Version 0.80.0
UI
- NodeGraph now only drag-selects nodes that are wholly contained in the drag area, not merely intersecting it.
- Added a Backdrop node (#153).
RenderMan
- Added support for "help" shader annotation in RenderManShaderUI (#536). This provides help for the shader as a whole and is mapped into the MetaData as the node description, appearing in the NodeEditor as a tooltip.
API
- Added optional continuous update to string PlugValueWidgets, controlled by the continuousUpdate parameters to the constructor. This transfers the text from the ui to the plug on every keypress.
Core
- Fixed serialisation of dynamic BoxPlugs.
Documentation
- Improvements too numerous to mention.
Version 0.79.0
UI
- Added additional plug types to the CompoundDataPlug new plug menu (#522).
- Fixed bug in searchable Menus with no entries (#527).
Scene
- Added CustomAttributes and CustomOptions nodes. These will be used instead of the old Attributes and Options nodes, and exist to better distinguish their use from the Standard, RenderMan and Arnold options and attributes nodes. (#272)
RenderMan
- Enabled hosting of RenderManShaders inside custom Box classes. Previously it only worked inside Boxes and not classes derived from Box.
API
- Added python subclassing ability to Serialisation::Serialiser (#520).
Version 0.78.0
API
- Added python bindings for signal::num_slots and signal::empty().
- Added Gadget::idleSignal(). This allows Gadgets to do things during the idle times of the host event loop.
- Added NodeEditor.nodeUI() method.
- Added CompoundEditor.editorAddedSignal().
- Enabled subclassing of Box from Python.
- Made RenderManShaderUI public.
Core
- Fixed serialisation of ExecutableOpHolder.
- Added dynamic requirement plugs to Executable.
UI
- Added middle mouse drag for dragging nodules to the script editor without dragging a connection.
- Further increased width of plug labels in NodeEditor (#98).
- Fixed read-only RenderManShader UIs.
- Fixed bug whereby read-only PlugValueWidgets were accepting drags.
- Added Help menu.
- Added NodeGraph auto-scrolling (#14).
- Added support for "presets" parameter type hint.
OS X
- Fixed GafferImageUI linking.