Releases: GafferHQ/gaffer
Version 0.16.0.3
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
UI
- Box : Copy all metadata when promoting plugs.
- UIEditor : Never edit user plug for Box nodes.
Version 0.16.0.1
UI
- UIEditor : Update preset value on selection change.
- ShaderSwitchUI : Fix NodeGraph representation (#1461).
Version 0.16.0.0
Apps
- Python
- GUI
- Removed cortex nodes from the node menu. They can be reintroduced
with an appropriate config file, but our intention is that Cortex
play only a "behind the scenes" role in Gaffer in the future.
- Removed cortex nodes from the node menu. They can be reintroduced
Core
- Added version metadata to all saved files (#1436).
- Fixed dispatching of nodes inside References.
- Python expressions can now write to AtomicBoxPlugs.
- Added support for promoting ArrayPlugs to boxes.
UI
- Fixed image format menu to make changes undoable.
- Added sequence browsing to the relevant file choosers.
- Hid TaskContextVariables.variables plug in the NodeGraph.
- Fixed editability of promoted CompoundDataPlugs.
- Box promotion now tranfers nodule and connection colours.
Image
- Added a Resize node. This will replace the Reformat node over time.
- Added a Crop node.
- Added a Shuffle node (#1380).
- Added Premultiply and Unpremultiply nodes.
- ImageWriter
- Fixed writing to image formats which don't support separate
display and data windows - the full display window is now written,
padded with black as necessary. - Added progress message.
- Fixed tiled writing (previously scanlines were always written).
- Fixed writing to image formats which don't support separate
Scene
- Fixed bug in Isolate which meant that a filter which matched nothing
at all had no effect. It now removes the entire scene as expected. - Fixed bug in Prune which meant that a filter which matched the root
was not removing the entire scene. - Added support for arbitrary IECore::PreWorldRenderables in global
options. - Improved performance of bounds propagation (around 7% improvement
for a Transform node and a complex filter).
Cortex
- Fixed bug which caused errors with read-only parameter plugs.
API
- Replaced all InputGenerators with ArrayPlugs, and removed InputGenerator
class. ImageProcessor and SceneProcessor may now provide an array of
inputs for any derived class to use. - Paths
- Added sequence support to FileSystemPath.
- Added FileSequencePathFilter class for filtering sequences from
FileSystemPath. - FileSequencePathPlugValueWidget supports metadata for sequence
display. - Deprecated SequencePath.
- Added Resample node to GafferImage, for use in node internals.
- Dispatcher
- The current job directory is added to the context for use
by Executable nodes.
- The current job directory is added to the context for use
- Sampler
- Fixed binding of sample( int, int )
- Added AtomicBox2fPlug.
- Made SceneNode and SceneProcessor subclassable in Python.
- Made ImageNode and ImageProcessor subclassable in Python.
- Made SubGraph subclassable in Python.
- Added _copy argument to ImagePlug.channelData() method.
- CompoundPlug deprecation
- Rederived the following plugs from ValuePlug or Plug in preparation
for removal of CompoundPlug :- BoxPlug
- CompoundNumericPlug
- Transform2DPlug
- TransformPlug
- CompoundDataPlug
- ArrayPlug
- Replaced use of CompoundPlug in the following nodes
- Light
- Outputs
- Rederived the following plugs from ValuePlug or Plug in preparation
- Added support for extra constructor arguments in node wrappers.
Incompatibilities
The scene and image processing nodes have been overhauled to allow any
node to use an array of inputs. While full backwards compatibility with
old scenes is expected, please let us know if you have any problems
loading an old scene. Please also update any dependent code to the new
APIs as soon as possible.
- Removed InputGenerator. Use ArrayPlug instead.
- Removed FilterMixinBase. Use FilterProcessor instead.
- SwitchComputeNode and SwitchDependencyNode now require that the "in"
plug is an ArrayPlug. - Changed base classes for many plugs, breaking binary compatibility
but in most cases not source compatibility.
Build
- Added checks for doxygen and inkscape prior to building.
- Fixed non-reporting of graphics build errors (#1395).
- Updated to faster container-based testing on Travis.
- Added appleseed unit tests to Travis setup.
Version 0.15.0.0
UI
- UI Editor
- Added drag and drop of objects onto Set nodes in the NodeGraph.
- Fixed crash which could occur when opening recent files.
- Fixed crash which could occur when using OpenGL widgets within Maya.
- Added support for summary tooltips on node UI tabs (#332).
- Fixed bugs which could cause a blank NodeEditor if an expression
referenced a script variable. - Fixed bugs in channel mask menus on image processing nodes.
Core
- Added Wedge node. This allows tasks to be dispatched multiple times
using a range of values (#1372). - Added TaskContextVariables node. This allows variables to be defined
within the tree of tasks (renders etc) executed by a dispatcher. - Added Loop node. This takes an input and loops it N times through an
external graph before outputting it again. This provides the user with
the ability to do things with the graph which were previously only
achievable with code. - Reference
- Fixed serialisation of empty reference.
- Fixed serialisation of user plug metadata.
- Fixed referencing of promoted plugs
- ExecutableNode requirements plug
- UnionFilter filter inputs
- OSLImage and OSLObject shader plugs.
- RenderManShader coshader plugs (#1358).
- Expression
- Fixed support for setting GafferImage FormatPlugs.
- ContextVariables
- Fixed serialisation bug where additional plugs were added on
save/load and copy/paste.
- Fixed serialisation bug where additional plugs were added on
- Improved Context and ValuePlug performance.
Image
- Added ImageLoop node.
- Performance
- Improved Reformat performance.
- Improved threading peformance for small images.
- ImageWriter
- Improved error messages.
- Fixed bugs with empty filenames and filenames using
substitutions.
- ImageTransform
- Fixed copy/paste.
- Fixed dirty propagation bug which could prevent the viewer
updating at the right time.
- ImageReader
- Added error reporting for missing files.
Scene
- Added SceneLoop node.
- Transform
- Fixed bugs in World mode.
- Added Parent, Local Reset and World Reset modes.
- Renamed Object space to Local.
- Changed default space to Local.
- Note that these are backwards incompatible changes, necessary to
fix an important bug and get the Transform node on a solid footing
for the future. To get the same results as the old World mode, use
the new Parent mode.
- FreezeTransform
- Fixed bug which prevented the UI updating when the input object
was changed.
- Fixed bug which prevented the UI updating when the input object
- Fixed bugs which could cause incorrect bounds to be computed.
Appleseed
- Removed options and attributes that are not useful in Gaffer.
- Fixed default values for some options and attributes.
- Documented all nodes.
- Added support for shading overrides.
API
- Pass-through connections may now be made for FormatPlug (#1250).
- Added TaskContextProcessor base class. This enables the development
of ExecutableNodes which request their input requirements in different
contexts. - Added support for directly setting Color3f context values from Python.
- UI Metadata additions. Many additions were made to the metadata supported
by the Node UIs, and the existing UIs were ported to make use of it.- "layout:visibilityActivator"
- "plugValueWidget:type"
- "compoundDataPlugValueWidget:editable"
- "boolPlugValueWidget:displayMode"
- "vectorDataPlugValueWidget:dragPointer"
- "pathPlugValueWidget:leaf"
- "pathPlugValueWidget:valid"
- "pathPlugValueWidget:bookmarks"
- "fileSystemPathPlugValueWidget:extensions"
- "fileSystemPathPlugValueWidget:extensionsLabel"
- ScriptProcedural
- Added context parameter.
- BoolWidget
- Added setDisplayMode()/getDisplayMode() accessors.
- Added AcceptsDependencyCycles Plug flag. See the Loop node for an
example of use. - Added FileSystemPathPlugValueWidget.
- Metadata
- Fixed inconsistent handling of NULL values.
- Added methods for deregistering values.
- Removed GafferUI.SectionedCompoundPlugValueWidget.
- Activator expressions are now attached to the parent of the plug, rather than always being on the node.
- Removed StringPlugValueWidget continuousUpdate constructor argument. Use metadata instead.
- Removed MultiLineStringPlugValueWidget continuousUpdate constructor argument. Use metadata instead.
- SceneNode
- Added childNames argument to bounds union methods.
- SceneAlgo
- Added
bound( const IECore::Object * )
function.
- Added
Build
- Updated to Cortex 9.0.0.
- Updated to OIIO 1.5.17.
- Updated to OSL 1.6.8.
- Updated to 1.2.0-beta.
Incompatibilies
- Removed
Reference::fileNamePlug()
(#801). UseReference::fileName()
instead. UsecontinueOnError = True
when loading old scripts. - Removed arguments from CompoundDataPlugValueWidget constructor. Use
Metadata instead. - Removed SectionedCompoundDataPlugVlueWidget. Use LayoutPlugValueWidget
and metadata instead. - Changed base class for ImagePlug.
- Changed base class for ScenePlug.
- Changed base class for SplinePlug.
- Removed ImageMixinBase. Use ImageProcessor instead.
- Removed SceneMixinBase. Use SceneProcessor instead.
- Removed GafferUI.SectionedCompoundPlugValueWidget. Use LayoutPlugValueWidget instead.
- Activator expressions are now attached to the parent of the plug, rather than always being on the node.
- Changed ChannelMaskPlugValueWidget constructor arguments.
- Changed Transform behaviour to fix bug in world space mode, add new modes and change the default mode to local. If you need the old world space behaviour, use the new parent space mode.
Version 0.14.0.0
UI
- NodeGraph
- Improved "Select Affected Objects" menu item. This is now available
on filters as well as on scene processors. - Added support for dragging objects from the Viewer and SceneHierarchy
and dropping them onto scene processors and PathFilters, to specify
the affected objects.- Dragging onto a node replaces the current paths.
- Shift+Drag adds to the current paths.
- Control+Drag removes from the current paths.
- Added plug context menu for moving promoted plugs on Boxes.
- Improved "Select Affected Objects" menu item. This is now available
- NodeEditor
- Added "Select Affected Objects" menu item in the tool menu for
filters and scene processors.
- Added "Select Affected Objects" menu item in the tool menu for
- UIEditor
- Added + button for adding plugs, and - button for deleting them.
- Added the ability to create nested sections and drag+drop plugs
between them.
- Viewer
- Fixed grid and gnomon menus.
Core
- Expression
Scene
- Improved ParentConstraint so it is acts more like the equivalent
parenting operation, and maintains the local transforms of the
objects being constrained. Note that this is a change of behaviour,
but one that we feel is much for the better. - Fixed ShaderAssignment to allow referencing of promoted shader input
plugs.
API
-
Added
parallelTraverse()
andfilteredParallelTraverse()
methods
to SceneAlgo. These make it trivial to traverse all locations in a
scene using multiple threads. -
Added inputTransform argument to
Constraint::computeConstraint()
. -
Removed TransformPlugValueWidget.
-
Used Plug rather than CompoundPlug in several places. CompoundPlug
is being phased out because the Plug base class is now perfectly
capable of having child plugs.ExecutableNode::dispatcherPlug()
- LocalDispatcher dispatcher plug
Shader::parametersPlug()
-
Fixed support for boost python object methods as menu commands.
-
Pointer
- Fixed
registerPointer()
method. - Added binding for
registerPointer()
.
- Fixed
-
Added
scoped
argument toSignal.connect()
python bindings. -
Added
SignalClass
for binding signals, and deprecated the old
SignalBinder
. -
Added support for binding signals with 4 arguments.
-
Added
LazyMethod.flush()
method. -
Fixed update bug in
PathListingWidget.setSelectedPaths()
. -
Added support for "nodule:type" metadata to control the type
of nodule created for a plug. This should be used in preference
toNodule::registerNodule()
, which has been deprecated. -
Added support for modifying CompoundNodule orientation, spacing
and direction using plug metadata. -
Improved signalling of instance metadata changes.
-
Added default arguments for ValuePlug constructor arguments.
Incompatibilities
-
Changed Constraint::computeConstraint() function signature.
-
Changed ParentConstraint behaviour to include the local transform of the constrained object.
-
Removed TransformPlugValueWidget.
-
Changed plug type returned by ExecutableNode::dispatcherPlug().
-
Changed Dispatcher::SetupPlugsFn signature.
-
Changed ExecutableNode::dispatcherPlug() signature.
-
Changed Shader::parametersPlug() to Plug rather than CompoundPlug.
-
Removed asUserPlug arguments from Box promotion methods. Plugs are
now always promoted directly under a box, and never as user plugs. -
Changed signature of
Nodule::registerNodule()
when registering a subclass. -
Changed signature of CompoundNodule constructor, which now accepts a Plug
rather than CompoundPlug. -
Replaced UIEditor setSelectedPlug()/getSelectedPlug() methods with
setSelection()/getSelection(). -
Added arguments to Metadata signals.
Version 0.13.1.0
Apps
- Test app can now run multiple named test cases, specified via the
"testCases" command line argument. - Fixed errors caused by special characters in .gfr filenames.
UI
- Fixed unwanted viewport scrolling when dragging from one NodeGraph
into another, or from the NodeEditor across a NodeGraph (#1321). - Hid Viewer diagnostic modes for unavailable renderers.
- Fixed SceneInspector inheritance and history windows, which were broken
in 0.13.0.0. - Fixed ObjectWriter UI, which was broken in 0.13.0.0.
OSL
- Added utility shaders for float maths and noise.
Image
- Fixed bug in DeleteChannels::hashChannelNames().
Houdini
- Added support for Houdini 14 (requires Cortex 9.0.0-b7).
API
- Added GafferUI._qtObject method.
- PlugLayout
- Added layoutSections() method.
- Added section argument to layoutOrder() method.
Build
- Added support for Boost >= 1.54.
- Fixed Appleseed packaging. We were omitting the directory containing
the Cortex display driver.
Version 0.13.0.0
Apps
- Improved error message for execute app.
Core
- Improved Dispatcher
- Stopped merging of identical tasks from different nodes.
We decided that this auto-merging caused more confusion than it
was worth, and it may actually have prevented useful executable
graphs which would have been intentionally running identical
tasks at different points in the graph. - Added cycle detection.
- Stopped merging of identical tasks from different nodes.
UI
- Avoided unnecessary rebuilds of MenuBar menus. This can improve
performance for slow-to-build custom menus. - Added font file browser to the Text node.
- Improved NodeGraph plug tooltips - they now contain the plug description.
- Plugs may now be promoted to Box level via the right click plug
menu in the NodeGraph. - Fixed search box in file open dialogues.
- Improved dialogues for picking scene paths
- Opened in tree mode rather than list mode
- Removed unnecessary columns
- Added filtering to display only cameras where appropriate
- CustomAttributes/DeleteAttributes
- Added right click menu for quickly adding attributes from the
currently selected object.
- Added right click menu for quickly adding attributes from the
- Viewer
- Added shading mode menu. This allows the default shading to be overridden
with another shader. Currently configured menu entries allow visualisation
of shader assignments and visibility for RenderMan, Arnold and Appleseed
(#1037). - Improved error handling.
- Added shading mode menu. This allows the default shading to be overridden
- SceneInspector
- Improved shader display in attributes section. The node colour of the
assigned shader is used as the background colour. - Improved performance (#1050).
- Improved shader display in attributes section. The node colour of the
- Node UIs
- Added tool menu to NodeEditor
- Added support for metadata-driven activators.
- Added support for metadata-driven section summaries.
- Added support for metadata-driven custom widgets.
Scene
- InteractiveRender
- Fixed crash when deleting a running InteractiveRender.
- Fixed coordinate system update problem.
- Fixed bug preventing filter plugs from being promoted to Boxes.
- Improved set computation
- Separated the computation of sets from the computation of globals.
This should prevent delays caused when calculating large unneeded
sets along with the globals. - Made sets compute individually on demand. This should reduce the
overhead of large unneeded sets. - Added "sets" plug to source nodes, to allow set membership to
be defined at creation time. - Optimised SetFilter hashing.
- Prevented wildcards from being used in the Set node (#1307).
- Separated the computation of sets from the computation of globals.
- Made Parameters node compatible with subclasses of Light/Camera/ExternalProcedural,
such as those used internally at IE. - Shader node now adds "gaffer:nodeColor" entry into the blind data
for the shader in the scene - this allows UI components to display
the colour as appropriate. - Added AttributeVisualiser node. This applies an OpenGL shader to
visualise the values of attributes and shader assignments.
Appleseed
- Fixed typo in AppleseedOptions plug names.
Documentation
- Improved doxyen documentation configuration.
- Documented all GafferScene nodes.
- Documented all GafferOSL nodes.
- Documented all GafferRenderMan nodes.
- Documented all GafferArnold nodes.
- Added support for Arnold "desc" metadata items.
API
-
Refactored Node UI to provide all features via the PlugLayout and
Metadata entries.- Added support for a "fixedLineHeight" metadata entry in
MultiLineStringPlugValueWidget. - Added support for "layout:section" metadata - this allows the
layout to be split into sections, and will provide the basis for
replacing the Sectioned* widgets, adding support for sections in
the UIEditor, and replacing the section management code in the
StandardNodeUI. - Added support for Metadata activators - these allow the editability
of a plug to be driven by the values of other plugs. - Added support for section summaries driven by Metadata.
- Deprecated SectionedCompoundDataPlugValueWidget.
- Deprecated SectionedCompoundPlugValueWidget.
- Improved layoutOrder() API. It now returns the ordered plugs
for a specific parent, rather than accepting a possibly unrelated
list of plugs. - Added support for arbitrary custom widgets to be inserted into
layouts. - Reimplemented StandardNodeUI using PlugLayout.
- Added support for a "fixedLineHeight" metadata entry in
-
Fixed ExecutableNode::requirements() binding.
-
Added support for fixing the height (measured in number of lines)
of the MultiLineTextWidget. -
Fixed support for functools.partial( classMethod ) commands in
Menus. -
ScenePath : added setScene()/getScene() accessors.
-
Added SceneFilterPathFilter class. This tongue twister uses any of
the GafferScene::Filter nodes to implement a Gaffer::PathFilter to
filter the children of a GafferScene::ScenePath. -
Added ScenePath::createStandardFilter() method.
-
Fixed crash when a Path is deleted before its PathFilter.
-
Added PathChooserDialogue.pathChooserWidget() method.
-
Added ScenePathPlugValueWidget.
-
Gave precedence to exact plug matches over wildcard matches in Metadata
queries. -
Added addition controls over Context substitution methods.
-
Improved StringPlug with additional control over substitutions.
-
Improved PlugType to support box and bool plugs.
-
Added ValuePlugSerialiser::repr() method. This is intended to allow
derived class bindings to base their ownrepr()
implementation on
the ValuePlug one. -
Made TypedObjectPlug compatible with instantiation for new types
outside of Gaffer. This is achieved by moving the implementation into a
.inl file which may be included as necessary. Added TypedObjectPlugClass
to simplify binding such instantiations. -
Implemented PathMatcherData::hash().
-
Added GafferScene::PathMatcherDataPlug.
-
Reimplemented SceneNode sets API.
-
Added GafferUI.LazyMethod for deferring widget method calls until
visible/idle.Incompatibilities
-
StringPlug
- Reimplemented as a standalone class
- TypedPlug is no longer instantiated (binary incompatibility).
- Must now include "Gaffer/StringPlug.h" rather than "Gaffer/TypedPlug.h"
(source incompatibility).
-
GafferCortex
- Removed BoxParameterHandler and CompoundNumericParameterHandler. Their
functionality is now covered by TypedParameterHandler.
- Removed BoxParameterHandler and CompoundNumericParameterHandler. Their
-
GafferScene
- Reimplemented sets API.
- Removed SceneReader "sets" plug.
-
GafferAppleseed
- Fixed typo in AppleseedOptions plug names.
-
PlugLayout
- Changed layoutOrder() signature.
-
StandardNodeUI
- Removed DisplayMode enum.
- Removed displayMode constructor argument.
- Removed _header() method.
- Removed _tabbedContainer() method.
Build
- Updated default dependency versions
- OIIO 1.5.13
- OSL 1.6.3dev
- LLVM 3.4
- Alembic 1.5.8
- Cortex 9.0.0-b6
- Added bundled Appleseed renderer
Version 0.12.1.0
Core
- Fixed hangs introduced in 0.12.0.0. These were seen when stopping
Appleseed renders and when ganging plugs in Caribou. - Fixed thread-related crashes introduced in 0.12.0.0. These have not
been observed in the wild, but caused intermittent failures in the
unit tests.
UI
- Improved error messages output by OpDialogue.
- Fixed unwanted auto-expansion in SceneHierarchy panel.
Scene
- Added current scene location to error messages emitted by SceneProcedural.
- Reduced memory usage for sets by 10%.
- Optimised set computations. This reduces globals computation time for
a complex production scene by 60%. - Fixed PathFilter wildcard matching bug.
OSL
- Added metadata presets support for color and point parameters.
API
- Added iterators to GafferScene::PathMatcher.
- Added GafferUI.EditMenu.selectionAvailable() method.
Version 0.12.0.0
Core
- Optimised CompoundDataPlug::hash() to ignore disabled members. This
reduces globals hashing time by 20% for a complex production scene. - Fixed Expression serialisation bugs (#1081, #1243).
- Optimised ValuePlug hash caching. It now caches more aggressively,
keeping cache entries alive across multiple computations. This reduces
scene traversal time for a complex production scene by 70%. - Improved dirty propagation mechanism.
- Batched propagation for UndoContexts, so dirtiness is signalled
only once for operations batched within a single undo action. - Fixed bugs which meant dirtiness was signalled when child/parent
plug connections were in an inconsistent state. - Addition and removal of dynamic plugs now triggers dirty
propagation.
- Batched propagation for UndoContexts, so dirtiness is signalled
- The values of environment variables used for string plug
substitutions are now frozen at startup.
UI
- Improved indicator for non-default plug values (#1216).
- Added copy/paste entries to plug menus (#601).
- SceneInspector now shows parameters for ExternalProcedural and
Light objects. - Added available set names to Set node "sets" plug popup menu.
Scene
- Fixed PathMatcher wildcard matching bug (#1252).
- Added Parameters node. This can be used for tweaking the parameters
of lights, cameras and external procedurals (#1259). - Added PointsType node (#476).
- Fixes Seeds node to take into account the bounding box of the generated
points. - Fixed dirty propagation bugs in CoordinateSystem and ClippingPlane
nodes. - Improved InteractiveRenderer pausing during edits.
- Added DeleteSets node.
- Fixed CustomOptions dirty propagation (#1039).
- Fixed ContextVariables dirty propagation.
- Optimised Filter mechanism, giving a 7-20% improvement in performance
across a range of production scenes.
Appleseed
- Added support for interactive renderering with shader and light
edits.
Image
- Added support for image metadata
- ImagePlug has a new metadata child plug.
- ImageReader reads metadata from file.
- ImageWriter writes metadata to file.
- ImagePrimitiveSource loads metadata from
ImagePrimitive::blindData()
. - Merge copies metadata from the first input.
- ImageMetadata node creates/sets metadata.
- DeleteImageMetadata node removed metadata.
- CopyImageMetadata transfers metadata from one image to another.
- Optimised many nodes with direct internal pass-though connections.
API
- StringAlgo
- Added
hasWildcards()
function. - Removed flawed MatchPatternLess (#1252).
- Added
- NodeAlgo
- Added
isSetToUserDefault( plug )
function.
- Added
- RendererAlgo
- Added
outputAttributes()
method.
- Added
- ImageNode
hash*()
andcompute*()
methods are no longer pure virtual.
This allows subclasses to make direct internal connections to
pass through input plugs unchanged.
- PlugValueWidget
- Replaced
_dropValue()
method with_convertValue()
.
- Replaced
- Menu
- Added support for
functools.partial( WeakMethod )
in menu commands.
- Added support for
- Simplified and improved Merge node implementation.
- Added MetadataProcessor base class to GafferImage.
- Added Plug::dirty() virtual method. This is used to inform a Plug
that it has been dirtied by Plug::propagateDirtiness(). - Fixed DependencyNodeWrapper to translate python exceptions to C++.
Build
- Fixed compilation without NDEBUG=1 with gcc 4.1.2.
Incompatibilities
- Removed MatchPatternLess from StringAlgo.h.
- Replaced PlugValueWidget
_dropValue()
method with_convertValue()
. - Removed GafferImage::FilterProcessor.
- Added/removed virtual overrides in GafferImage.
- Added virtual function to Plug.