0.56.0.0¶
This major feature release brings support for deep images and Arnold 6, and contains a wealth of improvements to light and camera visualisation in the Viewer.
Caution
Bug fixes to the ImageReader, ImageWriter and Resize nodes mean that the generated images will differ substantially in some circumstances. See the Breaking Changes section for more details.
Note
All official release builds are for Arnold 6 only, but source-level compatibility remains for Arnold 5.4 for those who wish to make custom builds.
Note
The following nodes have renamed plugs and/or added features, such that files saved in 0.56 are not fully compatible with 0.55 : Instancer, OpenGLAttributes, Light and Camera. See Breaking Changes and Improvements sections for more details.
Features¶
- Deep image support (#2668, #3405) :
- Updated ImageReader and ImageWriter to support deep images.
- Added new nodes for processing deep images : DeepToFlat, FlatToDeep, DeepMerge, DeepRecolor, DeepHoldout, DeepState, DeepTidy, Empty, DeepSampleCounts and DeepSampler.
- Updated existing nodes to support deep images where relevant.
- Viewer : Added the Crop Window Tool to image views to allow a scene’s crop window to be adjusted directly from the rendered image (#2835).
- ImageTransform : Added support for transform concatenation. This improves speed and filtering quality for chains of adjacent ImageTransforms (#2842).
- SphereLevelSet : Added new node for creating a level set representation of a sphere.
Improvements¶
- Viewer :
- Added visualisation of camera frustums and spot light cones. By default these are drawn only for selected objects, but menu items allow them to be enabled or disabled globally (#3569).
- Improved camera visualisation (#58).
- Improved visualisation of lights :
- Added texture previews for Arnold’s quad and skydome lights. All OSL shaders are supported, along with a small subset of Arnold shaders.
- Area lights are now drawn solid by default. This can be controlled via the Visualisation section of the Light node.
- Added intensity distribution preview for Arnold photometric lights.
- Extended color-correction to light textures, such that they now match rendered results (#3407).
- Reduced size of point lights to better match other light sources.
- Simplified the color indicator and removed the exposure wedges.
- Removed the contribution of intensity and exposure to the color indicator.
- Added support for mesh lights such that they draw a yellow outline around the source mesh.
- Improved display of Arnold quad lights set to portal mode.
- Added an approximation of Arnold area light spread.
- Added menu items to control visualiser scale.
- Added menu items to control the default drawing mode for lights.
- Improved f framing behaviour for light visualisations (#3569).
- Unified visualisation of light radius.
- Light : Moved light visualisation plugs to the compound data mechanism to allow lights to opt-in to setting a value at their location (#3407).
- Camera : Added Visualisation controls to the Camera node to allow frustum visualisation to be easily overridden per-camera (#3569).
- OpenGLAttributes :
- Added new light and camera visualisation attributes.
- Added sensible limits on attribute value plugs to prevent invalid settings.
- CropWindowTool :
- Added new mouse interactions to edit the crop region. Dragging outside creates a new region. Dragging inside moves the existing region. Shift-dragging inside creates a new region.
- Updated status presentation to match other tools (#2835).
- Tools :
- View navigation : Added support for precise movement adjustments by holding down Shift whilst using the scroll wheel or moving the camera in the Viewer and other Editors (#3324).
- AnimationEditor : Changed the modifier key used to enable single-axis zoom has changed to Ctrl to allow use in conjunction with precise movement mode (Shift) (#3324).
- Set expressions :
- Added
in
operator. The expressionA in B
selects all locations from set A which are descendants of a location from set B. - Added
containing
operator. The expressionA containing B
selects all locations from set A which are ancestors of a location from set B. - Removed restrictions on the allowable characters at the start of a set name.
- Added
- Instancer :
- Renamed
instances
plug toprototypes
andindex
plug toprototypeIndex
. This clarifies their meaning and matches the terminology used in USD. - Organised UI into sections.
- Added better defaults for the
orientation
andscale
plugs. - Added control over prototype root locations via a string array, which can be optionally specified using a plug, Constant primvar, or Vertex primvar.
- Renamed
- InteractiveArnoldRender : Enabled progressive refinement.
- ArnoldOptions : Added
subdivDicingCamera
,subdivFrustumCulling
andsubdivFrustumPadding
options. - OSLObject : Added non-uniform scale to standard primitive variable menu.
- OSLCode : Improved labelling of inputs and outputs. Since they represent variables used in the code, they are now labelled verbatim rather than prettified.
- Error handling : The Cortex exception type is now included in error messages where relevant.
- UI : Added the Gaffer version to the window title.
- Set : Hid unused
paths
plugs from the UI, in preparation for eventual removal of the plug itself. Thefilter
plug should now always be used in preference to thepaths
plug. - Layouts : Prevented editors pinned to a specific node from restoring with the editor pinned to an empty node set. Specific pinning is no longer saved or recalled.
- Documentation : Added examples for OSLImage and OSLObject nodes.
- Rendering : Added the name of the render node to image metadata via the
gaffer:sourceScene
header (#2835). - Test app : Added
stopOnFailure
arguments.
Fixes¶
- Resize : Fixed bug which caused unwanted image distortion when changing pixel aspect ratio.
- ImageReader/ImageWriter : Fixed bug which caused colour transforms to be performed on premultiplied pixel data.
- ImageTransform : Fixed inconsistent filtering of transforms containing rotation but no translation.
- Launch : Fixed bug which prevented gaffer launching when stored on case destroying file systems (#3477).
- CopyAttributes : Fixed bug loading scripts saved prior to version 0.55.0.0.
- Mix : Fixed wrong behaviour outside of mask data window.
- ImageStats : Fixed bug that would return 1.0 if the 4th channel was missing. Missing channels now always return 0.0.
- Viewer :
- Fixed bug that caused the StandardLightVisualiser to be used instead of renderer-specific ones (#3407).
- Fixed bug that caused duplicate drawing of inherited light filter state (#3502).
- Fixed bug that caused unexpected results when dragging into the Viewer when the Crop Window Tool was active (#2385).
- ParallelAlgo :
- Fixed handling of Python exceptions thrown from UIThreadCallHandler.
- Fixed GIL management for
popUIThreadCallHandler()
.
- InteractiveRender : Fixed GIL management bug in
setContext()
Python bindings. - OSLLight : Fixed bug which prevented visualisation attributes taking effect.
- BoolWidget : Fixed unwanted horizontal expansion.
- Style : Fixed Qt application style to use the same style on all platforms.
- Display : Fixed dirty propagation for new drivers and ensured that only the channelData plug is dirtied when new data is received (#2845).
- LabelPlugValueWidget : Fixed bug that prevented updates if the
label
metadata depended on the plug name. - ArnoldOptions : Fixed bugs in section summary formatting.
API¶
- Handle :
- Added an optional
processModifiers
argument to drag constructors that allows the built-in precision mode handling to be disabled (#3324). - Added a convenience constructor for
LinearDrag
that creates a drag in an arbitrary direction on the camera plane (#3324). - Added
AngularDrag
helper to manage drags that represent rotations around a single axis (#3324).
- Added an optional
- ImagePlug :
- Added plugs and methods to support deep data.
- Added
tilePixels()
andpixelIndex()
convenience functions.
- ImageAlgo :
- Added
tiles()
method, returning all the tiles for an image. - Added
throwIfSampleOffsetsMismatch()
method.
- Added
- FlatImageSource : Added a new base class to help in implementing image sources which generate flat data.
- FlatImageProcessor : Added a new base class to help in implementing image processors which don’t support deep data.
- GafferOSL : Added ShadingEngineAlgo to simplify the generation of shading point data for images, and rendering networks to textures.
- StandardLightVisualiser :
- Added
surfaceTexture
virtual method to allow derived classes to provide alternate surface representations (#3407). - Added
sphereWireframe
protected method. - Added support for optional
tintParameter
metadata forquad
,disk
,cylinder
andenvironment
type lights. This names a Color3f parameter that will used to tint the light’s final appearance.
- Added
- IECoreGLPreview :
- Added
VisualisationType
andVisualisationMap
to allow classification of renderables returned by visualisers. - IECoreGLPreview : Added support for more flexible visualisations via the
Visualisation
struct (#3569).
- Added
- SceneAlgo :
history()
now returns History items for all upstream plugs in the history chain, not just those where a computation was performed.- Added
sourceSceneName
andsourceScene
methods to retrieve source scene information from an ImagePlug (#3582).
- Process : Added
destinationPlug()
method. - GafferVDB : Added Interrupter class to forward Gaffer’s cancellation to OpenVDB’s algorithms.
Breaking Changes¶
- Resize : A bug fix means that results are changed significantly when changing pixel aspect ratios.
- ImageReader/ImageWriter : A bug fix means that results will now differ when applying colour transforms to images with alpha.
- Instancer :
- Renamed
instances
andindex
plugs. Compatibility with old.gfr
files is maintained via a config file. - Attributes assigned to a prototype root are now instanced onto
<prototypeName>
rather then<prototypeName>/<id>
(eg/instances/robot
rather than/instances/robot/0
)
- Renamed
- OSLObject : Removed support for the
GAFFEROSL_OSLOBJECT_CONTEXTCOMPATIBILITY
environment variable. - ShaderAssignment : Removed support for the
GAFFERSCENE_SHADERASSIGNMENT_CONTEXTCOMPATIBILITY
environment variable. - bin : Renamed the
gaffer.py
launch script (to__gaffer.py
) to avoid a collision with the mainGaffer
module (see #3477). This will cause the process string to change on systems that don’t support process renaming. - ViewportGadget : Added private members, ABI break only - source compatibility is maintained (#3324).
- Handle :
LinearDrag::position
andPlanarDrag::position
are no longerconst
methods.RotateHandle
,ScaleHandle
andTranslateHandle
value provider methods loseconst
-ness accordingly. - ImagePlug :
- Removed
image()
andimageHash()
methods. These are now available in the ImageAlgo namespace. - Changed default channel names to an empty list.
- Removed
- ImageNode : Added virtual methods.
- Light :
- StandardLightVisualiser :
- Removed protected methods
faceCameraVertexSource()
andenvironmentSphere()
(#3407). - Changed signature of
quadPortal()
method. - Changed signature of
spotlightParameters()
method.
- Removed protected methods
- LightFilterVisualiser : Moved
LightFilterVisualiser
intoIECoreGLPreview
, filter visualiser registrations will need updating (#3502). - ObjectToImage/ImagePrimitiveSource : Removed.
- ParallelAlgoTest : Removed
ExpectedUIThreadCall
. UseUIThreadCallHandler
instead. - OpenGLRenderer :
visualiser:scale
is now handled directly in the renderer. Visualisers should no longer apply this attribute to visualisations unless they need to invert this scale for any geometry-related components of the visualisation. - GafferScene : Renamed attribute
visualiser:scale
>gl:visualiser:scale
. Note : Existing scenes with OpenGLAttribute nodes setting this will need values re-entering. - IECoreGLPreview :
- Changed the return type of
(Light|LightFilter|Attribute)Visualiser
classes. Visualisations are now a vector ofVisualisation
structs(#3569). - Changed
ObjectVisualiser
return type toVisualisations
.
- Changed the return type of
- Arnold : Raised minimum required version to 5.4.
- RendererAlgo : Changed signature for
outputOutput
to include the source scene plug (#2835). - ViewportGadget : Made the SelectionScope and RasterScope classes non-copyable.