0.53.0.0¶
This release provides several features useful for look development, including component-level connections for colour and vector parameters, a new ShaderTweaks node for making downstream tweaks, and an ArnoldTextureBake node for baking UV textures. We’ve also added a nifty new system for quickly accessing nodes via numeric hotkeys, and made numerous other enhancements and bug fixes.
Caution
This release replaces nodes such as SceneLoop and ImageLoop with more general purpose nodes such as Loop. Backwards compatibility is provided for loading old scripts, but any scripts saved in Gaffer 0.53 will not be loadable in previous versions. Test carefully before upgrading, because there is no going back.
Features¶
- ArnoldTextureBake : Added a new node for baking Arnold shading networks down into UV textures (#2931).
- Numeric bookmarks : Added the ability to associate a numeric hotkey to a node, providing
quick pinning of the node into any editor. Use
Ctrl+[0-9]
in the GraphEditor to assign the bookmark, and then simply hit[0-9]
to pin that node into the editor below the cursor (#2974). - ShaderTweaks : Added a new node to allow shader parameters to be overridden downstream of the shader assignment. This replaces the old LightTweaks node, with the addition of new functionality to allow new connections to be made (#2954, #2983).
- GraphEditor : Added support for making connections to the individual components of colour and vector parameters (#2938, #2973, #755).
- Viewer (#2985, #2666, #2717, #3001) :
- Added “History” context menu for the selected scene object.
- Added “Edit Source…” to open a NodeEditor for the node that created the object.
- Added “Edit Tweaks…” to open a NodeEditor for the most recent ShaderTweaks node applied to the object.
- Added “History” context menu for the selected scene object.
- BoxOut : Added a
passThrough
plug, providing a convenient way of allowing Boxes to be disabled (#2879). - UDIMQuery : Added a new node to query the texture UDIMs used by a set of objects (#2913).
- Wireframe : Added a new node for converting MeshPrimitives into a wireframe representation using CurvesPrimitives (#2914).
Improvements¶
- Loop : Added plug context menu item for connecting previous to next (#2887).
- ArnoldOptions :
- ArnoldRender (#2919) :
- Added support for a “camera” parameter in outputs, allowing renders from multiple cameras to be performed in a single process.
- Added support for Arnold’s
uv_camera
.
- SceneInspector : Added curve basis to Object section (#2892).
- Dispatch app : Added
-show
argument to control which nodes are shown in-gui
mode (#2900). - Dispatcher (#2942) :
- Added
dispatcher:scriptFileName
context variable. - Added support for nested dispatchers, with the inner dispatch sharing the job directory for the outer dispatch (#2942).
- Added
- Dot/ContextProcessor/Switch/Loop : Improved serialisation to use a call to
setup()
rather than manual creation of plugs. This makes the serialisation format a better learning tool for aspiring scripters (#2981). - BoolPlugValueWidget : Added colour to indicate animation inputs and compute errors (#2990).
- OSLShader : Improved nodule labelling (#2983).
- PlugAdder : Added support for label metadata (#2345, #2983).
- Shader/Light : Improved the representation of shaders in the scene dataflow. These
now use a dedicated
IECoreScene::ShaderNetwork
class rather than a cumbersomeIECore::ObjectVector
. This lays the groundwork for features such as downstream tweaks (#2902). - GraphEditor : Changed hotkey for the Bookmarks menu from
Ctrl+B
toB
(#3000). - Error Handling : Added the plug full name, frame, and scene path (if applicable)
to the logging output as additional
DEBUG
log messages (#2976).
Fixes¶
- ValuePlug : Fixed bug in finding the ComputeNode for a plug. In specific
circumstances this could cause a
Value for Plug not set as expected
error (#2955, #2950). - ViewportGadget/GadgetWidget : Fixed enter/leave event handling bug (#2938).
- ShaderAssignment : OSL shaders of type “shader” are now assigned correctly as “osl:surface” and not “osl:shader” (#2983).
- Metadata bindings : Fix crashes caused by calling
value( None )
(#2996).
Documentation¶
- Improved the “Getting Started” scripting tutorial, renaming it to “Node Graph Editing in Python”.
- Added “Working with the Node Graph” section, including documentation for Box nodes in particular.
- Improved the “Controls and Shortcuts” section (#2929).
API¶
- SceneAlgo (#2985, #3001) :
- Added
history()
method for returning the tree of operations used to generate a a particular part of the scene. - Added
source()
method to return the node originally responsible for the creation of a particular location. - Added
shaderTweaks()
method to return the most recent ShaderTweaks node applied to an attribute.
- Added
- Metadata (#2953) :
- Values may now be registered for plugs of a specific type.
- Values may now be registered to specific named descendants of plugs of a specific type.
- CompoundNumericNodule : Added new nodule type to allow connections to be made to child components (#2938).
- MetadataAlgo : Added methods for numeric bookmarks (#2974).
- ContextProcessor : Added
setup()
,inPlug()
andoutPlug()
methods (#2880). - Loop : Added
setup()
,inPlug()
andoutPlug()
methods (#2887). - TweakPlug (#2954, #2983) :
- Added default template argument to
valuePlug()
method. - Made
applyTweak()
const. - Added
mode
argument to convenience constructors. - Added
applyTweaks()
method for tweakingShaderNetworks
. - Added support for connecting new shaders into a
ShaderNetwork
.
- Added default template argument to
- Nodule : Added
nodule()
virtual method, used to return a nodule for a child plug (#2938). - GraphBookmarksUI : Removed
popupFindBookmarkMenu()
. UseconnectToEditor()
instead (#2974). - ProcessMessageHandler : Added a MessageHandler for injecing
Gaffer::Process
information as additionalDEBUG
log messages (#2976).
Build¶
- Replaced DEBUG option with BUILD_TYPE, with values of DEBUG, RELEASE or RELWITHDEBINFO (#2593).
Breaking Changes¶
- LightTweaks : Replaced with new general-purpose
ShaderTweaks
node (#2954). - Shader : Shaders are now represented with
IECoreScene::ShaderNetworks
rather thanIECore::ObjectVectors
(#2902). - Dispatcher : The base class now saves the script to dispatch automatically, so derived classes no longer need to do so (#2942).
- Metadata (#2953) :
- Removed all deprecated methods.
NodeValueFunction
has been replaced by a genericGraphComponentFunction
. This allows metadata to be registered by Plug TypeId.
- TweakPlug :
- ContextProcessors : Removed SceneContextVariables, DeleteSceneContextVariables, SceneTimeWarp, ImageContextVariables, DeleteImageContextVariables and ImageTimeWarp nodes. Use the generic equivalents instead. Compatibility with old scripts is provided by converting them automatically on loading (#2880).
- Loops : Removed SceneLoop and ImageLoop nodes. Use the generic Loop node instead. Compatibility with old scripts is provided by converting them automatically on loading (#2887).
- ScriptEditor (#2876) :
- Renamed to
PythonEditor
. Compatibility with old scripts and layouts is preserved by a config file. - Removed
script
variable. Use the newroot
variable instead. - Removed
parent
variable. Paste serialised scripts using the GraphEditor instead.
- Renamed to
- Screengrab app : Renamed
-scriptEditor
argument topythonEditor
(#2876). - Dispatch app : Renamed
-nodes
argument to-tasks
(#2900). - Nodule : Added virtual method (#2938).
- ScriptNode : Removed
scriptExecutedSignal()
(#2996).