Material Soloing
✨ New in Katana 6.0: Arbitrary ports can now be soloed through a set of new member functions on NetworkMaterialCreate and NetworkMaterialEdit nodes. To achieve this MaterialSoloingConverter
s are used.
Introduction
Any port can be soloed, given a compatible MaterialSoloingConverter
plug-in has been registered using the standard PluginRegistry
system. More details can be found in the Example User MaterialSoloingConverter section below.
A MaterialSoloingConverter
defines a conversion network from a given port type, to a type which is appropriate for rendering. By default, some MaterialSoloingConverter
s are defined within Katana, however developers are free to inherit from BaseMaterialSoloingConverter
and register their own.
Any material soloing is non-persistent, and will not be saved to disk, baked (e.g via: LookFileBake, LookFileMultiBake, UsdMaterialBake, and LookFileMaterialsOut nodes), or partake in disk renders.
MaterialSoloingConverter Base Class
- class BaseMaterialSoloingConverter.BaseMaterialSoloingConverter
Bases:
ABC
Base class for extending Network Material Soloing MaterialSoloingConverters.
Classes derived from this class should be registered as Katana plug-ins of type MaterialSoloingConverter.
A single derived class should represent the conversion from a single
portToSolo
to a network which can be used to solo that port.- abstract createConversionNetwork(portToSolo: Port, mscContainerGroup: GroupNode) tuple[Port, dict[str, Port]]
Creates the MaterialSoloingConverter network. This function should be overridden in derived classes and should have the following responsibilities: * Create an MSC network contained within an MSC container group node * Return the start port, and a mapping of terminal port names to MSC network end ports
- Return type:
2-
tuple
ofNodegraphAPI.Port
anddict
ofstr
toNodegraphAPI.Port
- Parameters:
portToSolo (
Port
) – Port from which the implemented conversion network will take it’s input from.mscContainerGroup (
GroupNode
) – Group node to place conversion network nodes inside of.portToSolo
mscContainerGroup
- Returns:
A tuple containing the starting port of the MSC network, and a mapping of terminal port names to the end ports of the network.
- Return type:
tuple
[Port
,dict
[str
,Port
]]
- abstract getBaseShadingNodeType() str
- Return type:
str
- Returns:
Name of the base shading node type used by the derived class.
- Return type:
str
- abstract getName() str
- Return type:
str
- Returns:
Human-readable name for this MSC class.
- Return type:
str
- abstract isCompatible(portToSolo: Port) bool
Checks whether a given port can be used as input to this MaterialSoloingConverter’s network.
- Return type:
bool
- Parameters:
portToSolo (
Port
) – The port which is to be checked for compatibility with this MaterialSoloingConverter.portToSolo
- Returns:
True if this MSC is compatible with the given port, False otherwise.
- Return type:
bool
Example User MaterialSoloingConverter
Developers are free to write their own MaterialSoloingConverter, an example of this could look like the following:
from PluginsAPI.BaseMaterialSoloingConverter import BaseMaterialSoloingConverter
class MyMaterialSoloingConverter(BaseMaterialSoloingConverter):
pass
PluginRegistry = [
("MaterialSoloingConverter", 1, "MyMaterialSoloingConverter", MyMaterialSoloingConverter)
]
The body of MyMaterialSoloingConverter
should be replaced with implementations of methods marked abstract
in the PluginsAPI.BaseMaterialSoloingConverter.BaseMaterialSoloingConverter
class, example MaterialSoloingConverter
s for commonly used render plug-ins can be found under $KATANA_ROOT/plugins/Src/Resources/Core/Plugins
.
To capture the plug-in, add it to your KATANA_RESOURCES
env path variable in a Plugins
subfolder. For example:
# For a plug-in at /home/Gandalf/katana_resources/Plugins/MyMaterialSoloingConverter.py:
KATANA_RESOURCES=/home/Gandalf/katana_resources
Material Solo Attribute Usage
See also
Attribute Conventions For Solo Materials for more information on the soloMaterial
attribute.
When a MaterialResolve
Op is run, the soloMaterial
and material
attribute groups are copied to
the assignee (likely a geometry scene graph location).
A MaterialSoloResolve
Op has been introduced as an implicit resolver, and is inserted at the
front of all render plug-in terminal Op chains when a Live or Preview render is triggered
(note: disk renders are exempt), and is also run before viewer implicit resolvers are run, meaning soloing works in the viewer as well.
The MaterialSoloResolve
Op moves any soloMaterial
attribute groups to a material
attribute
group at the same scene graph location, effectively applying the solo material.
As well as the MaterialSoloResolve
Op being added to Live and Preview renders, all soloMaterial
attributes are removed on look file bake by being inserted at the start of any look file bake Op chains,
e.g: LookFileBake, LookFileMultiBake, UsdMaterialBake, and
LookFileMaterialsOut nodes are all included.