Implicit Resolvers

Resolvers can be run by putting nodes explicitly into a project, but there are also a standard set of resolvers that are automatically implicitly run before rendering. In effect these are nodes that are automatically appended to the root of a node graph before rendering, so that it’s not necessary to manually add all the needed resolvers. This allows execution of procedural processes that are always needed, such as MaterialResolve.

The list of implicit resolvers is as follows:

Preprocess Resolvers

OpResolve(resolveIds=implicit_preprocess, lookfileresolve) - this resolves deferred Ops set to resolve during katana look file resolve. Ordinarily, such ops are resolved by LookFileResolve nodes; this resolver is a fail safe for when a LookFileResolve node is not present.

Standard Resolvers

LightLink.Resolve - this resolves light linking information that was previously set up by a LightLinkSetup node.

ReferentialInheritanceResolve - this resolves all locations with an inherits attribute referencing another location. The attributes from the referenced location are overlayed.

MaterialResolve - this looks for materialAssign attributes and creates local copies of materials taking into account any material overrides.

OpResolve(material attr) - this resolves deferred Ops set to resolve during material resolve.

MaterialUnderlayAttributesResolve - this resolves material underlay information by copying attributes from a location's material.underlayAttrs group to that location's root level without clobbering existing attributes.

RendererProceduralResolve - this is similar to MaterialResolve but for renderer procedurals. It looks for any locations with rendererProceduralAssign attributes.

FilenameResolve - this resolves {attr:xxx} tokens in material and rendererProcedural attribute groups. Refer to Using the {attr:xxx} and {globalattr:xxx} Syntax for Shader Parameters section for more information.

BoundsAdjust - this resolves any deferred bounds padding task that was previously set up by a BoundsAdjust node.

BoundsPropagateToAncestors - this resolves any deferred bounds propagation task that was previously set up by a BoundsAdjust node.

AdjustScreenWindowResolve - this resolves any screen window adjustment previously set up by a RenderSettings node.

ConstraintResolve - this looks for any constraints defined at /root/world in globals.constraintList and calculates the effects of any constraint on the transforms of locations.

MuteResolve - resolves mute states for lights created by GafferThree nodes.

Postprocess Resolvers

OpResolve(resolveIds=all) - this resolves deferred Ops set to resolve during op resolve.

RenderSettingsLocalize - this resolves render resolution, sample rate, and region of interest.

Normally when you inspect scene data in Katana’s UI you see the results before the implicit resolvers are run. It's only at render time that the implicit resolvers are added. If you want to see the effect of the implicit resolvers on the scene data you can switch them on by clicking on the Toggle Scene Graph Implicit Resolvers clapper-board icon in the menu bar or at top-right-hand side of the Scene Graph, Attributes or Viewer tabs. It then glows orange and a warning message is displayed to indicate that the implicit resolvers are now active in the UI.

For instance, if you switch the implicit resolvers on and view the attributes at a location that has an assigned material you'll see that:

There is now an attribute group called material with a local copy of the assigned material.

Any material overrides have been applied to the shader parameter values.

The original materialAssign value is removed.

Similarly any materialOverride attributes are removed.

The values of materialAssign and materialOverride are copied into info so they can still be inspected, for reference, but they are no longer active.