mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 08:24:53 +01:00
Merge branch 'develop' into feature/label_wrap_for_all_entities
This commit is contained in:
commit
299359ab54
30 changed files with 2126 additions and 945 deletions
334
pype/hosts/maya/api/attributes.py
Normal file
334
pype/hosts/maya/api/attributes.py
Normal file
|
|
@ -0,0 +1,334 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Code to get attributes from render layer without switching to it.
|
||||||
|
|
||||||
|
https://github.com/Colorbleed/colorbleed-config/blob/acre/colorbleed/maya/lib_rendersetup.py
|
||||||
|
Credits: Roy Nieterau (BigRoy) / Colorbleed
|
||||||
|
Modified for use in Pype
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from maya import cmds
|
||||||
|
import maya.api.OpenMaya as om
|
||||||
|
import pymel.core as pm
|
||||||
|
|
||||||
|
import maya.app.renderSetup.model.utils as utils
|
||||||
|
from maya.app.renderSetup.model import renderSetup
|
||||||
|
from maya.app.renderSetup.model.override import (
|
||||||
|
AbsOverride,
|
||||||
|
RelOverride,
|
||||||
|
UniqueOverride
|
||||||
|
)
|
||||||
|
|
||||||
|
EXACT_MATCH = 0
|
||||||
|
PARENT_MATCH = 1
|
||||||
|
CLIENT_MATCH = 2
|
||||||
|
|
||||||
|
DEFAULT_RENDER_LAYER = "defaultRenderLayer"
|
||||||
|
|
||||||
|
|
||||||
|
def get_rendersetup_layer(layer):
|
||||||
|
"""Return render setup layer name.
|
||||||
|
|
||||||
|
This also converts names from legacy renderLayer node name to render setup
|
||||||
|
name.
|
||||||
|
|
||||||
|
Note: `DEFAULT_RENDER_LAYER` is not a renderSetupLayer node but it is
|
||||||
|
however the valid layer name for Render Setup - so we return that as
|
||||||
|
is.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> for legacy_layer in cmds.ls(type="renderLayer"):
|
||||||
|
>>> layer = get_rendersetup_layer(legacy_layer)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str or None: Returns renderSetupLayer node name if `layer` is a valid
|
||||||
|
layer name in legacy renderlayers or render setup layers.
|
||||||
|
Returns None if the layer can't be found or Render Setup is
|
||||||
|
currently disabled.
|
||||||
|
"""
|
||||||
|
if layer == DEFAULT_RENDER_LAYER:
|
||||||
|
# DEFAULT_RENDER_LAYER doesn't have a `renderSetupLayer`
|
||||||
|
return layer
|
||||||
|
|
||||||
|
if not cmds.mayaHasRenderSetup():
|
||||||
|
return None
|
||||||
|
|
||||||
|
if not cmds.objExists(layer):
|
||||||
|
return None
|
||||||
|
|
||||||
|
if cmds.nodeType(layer) == "renderSetupLayer":
|
||||||
|
return layer
|
||||||
|
|
||||||
|
# By default Render Setup renames the legacy renderlayer
|
||||||
|
# to `rs_<layername>` but lets not rely on that as the
|
||||||
|
# layer node can be renamed manually
|
||||||
|
connections = cmds.listConnections(layer + ".message",
|
||||||
|
type="renderSetupLayer",
|
||||||
|
exactType=True,
|
||||||
|
source=False,
|
||||||
|
destination=True,
|
||||||
|
plugs=True) or []
|
||||||
|
return next((conn.split(".", 1)[0] for conn in connections
|
||||||
|
if conn.endswith(".legacyRenderLayer")), None)
|
||||||
|
|
||||||
|
|
||||||
|
def get_attr_in_layer(node_attr, layer):
|
||||||
|
"""Return attribute value in Render Setup layer.
|
||||||
|
|
||||||
|
This will only work for attributes which can be
|
||||||
|
retrieved with `maya.cmds.getAttr` and for which
|
||||||
|
Relative and Absolute overrides are applicable.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
>>> get_attr_in_layer("defaultResolution.width", layer="layer1")
|
||||||
|
>>> get_attr_in_layer("defaultRenderGlobals.startFrame", layer="layer")
|
||||||
|
>>> get_attr_in_layer("transform.translate", layer="layer3")
|
||||||
|
|
||||||
|
Args:
|
||||||
|
attr (str): attribute name as 'node.attribute'
|
||||||
|
layer (str): layer name
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
object: attribute value in layer
|
||||||
|
|
||||||
|
"""
|
||||||
|
def _layer_needs_update(layer):
|
||||||
|
"""Return whether layer needs updating."""
|
||||||
|
# Use `getattr` as e.g. DEFAULT_RENDER_LAYER does not have
|
||||||
|
# the attribute
|
||||||
|
return getattr(layer, "needsMembershipUpdate", False) or \
|
||||||
|
getattr(layer, "needsApplyUpdate", False)
|
||||||
|
|
||||||
|
def get_default_layer_value(node_attr_):
|
||||||
|
"""Return attribute value in `DEFAULT_RENDER_LAYER`."""
|
||||||
|
inputs = cmds.listConnections(node_attr_,
|
||||||
|
source=True,
|
||||||
|
destination=False,
|
||||||
|
type="applyOverride") or []
|
||||||
|
if inputs:
|
||||||
|
override = inputs[0]
|
||||||
|
history_overrides = cmds.ls(cmds.listHistory(override,
|
||||||
|
pruneDagObjects=True),
|
||||||
|
type="applyOverride")
|
||||||
|
node = history_overrides[-1] if history_overrides else override
|
||||||
|
node_attr_ = node + ".original"
|
||||||
|
|
||||||
|
return pm.getAttr(node_attr_, asString=True)
|
||||||
|
|
||||||
|
layer = get_rendersetup_layer(layer)
|
||||||
|
rs = renderSetup.instance()
|
||||||
|
current_layer = rs.getVisibleRenderLayer()
|
||||||
|
if current_layer.name() == layer:
|
||||||
|
|
||||||
|
# Ensure layer is up-to-date
|
||||||
|
if _layer_needs_update(current_layer):
|
||||||
|
try:
|
||||||
|
rs.switchToLayer(current_layer)
|
||||||
|
except RuntimeError:
|
||||||
|
# Some cases can cause errors on switching
|
||||||
|
# the first time with Render Setup layers
|
||||||
|
# e.g. different overrides to compounds
|
||||||
|
# and its children plugs. So we just force
|
||||||
|
# it another time. If it then still fails
|
||||||
|
# we will let it error out.
|
||||||
|
rs.switchToLayer(current_layer)
|
||||||
|
|
||||||
|
return pm.getAttr(node_attr, asString=True)
|
||||||
|
|
||||||
|
overrides = get_attr_overrides(node_attr, layer)
|
||||||
|
default_layer_value = get_default_layer_value(node_attr)
|
||||||
|
if not overrides:
|
||||||
|
return default_layer_value
|
||||||
|
|
||||||
|
value = default_layer_value
|
||||||
|
for match, layer_override, index in overrides:
|
||||||
|
if isinstance(layer_override, AbsOverride):
|
||||||
|
# Absolute override
|
||||||
|
value = pm.getAttr(layer_override.name() + ".attrValue")
|
||||||
|
if match == EXACT_MATCH:
|
||||||
|
# value = value
|
||||||
|
pass
|
||||||
|
if match == PARENT_MATCH:
|
||||||
|
value = value[index]
|
||||||
|
if match == CLIENT_MATCH:
|
||||||
|
value[index] = value
|
||||||
|
|
||||||
|
elif isinstance(layer_override, RelOverride):
|
||||||
|
# Relative override
|
||||||
|
# Value = Original * Multiply + Offset
|
||||||
|
multiply = pm.getAttr(layer_override.name() + ".multiply")
|
||||||
|
offset = pm.getAttr(layer_override.name() + ".offset")
|
||||||
|
|
||||||
|
if match == EXACT_MATCH:
|
||||||
|
value = value * multiply + offset
|
||||||
|
if match == PARENT_MATCH:
|
||||||
|
value = value * multiply[index] + offset[index]
|
||||||
|
if match == CLIENT_MATCH:
|
||||||
|
value[index] = value[index] * multiply + offset
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise TypeError("Unsupported override: %s" % layer_override)
|
||||||
|
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def get_attr_overrides(node_attr, layer,
|
||||||
|
skip_disabled=True,
|
||||||
|
skip_local_render=True,
|
||||||
|
stop_at_absolute_override=True):
|
||||||
|
"""Return all Overrides applicable to the attribute.
|
||||||
|
|
||||||
|
Overrides are returned as a 3-tuple:
|
||||||
|
(Match, Override, Index)
|
||||||
|
Match:
|
||||||
|
This is any of EXACT_MATCH, PARENT_MATCH, CLIENT_MATCH
|
||||||
|
and defines whether the override is exactly on the
|
||||||
|
plug, on the parent or on a child plug.
|
||||||
|
Override:
|
||||||
|
This is the RenderSetup Override instance.
|
||||||
|
Index:
|
||||||
|
This is the Plug index under the parent or for
|
||||||
|
the child that matches. The EXACT_MATCH index will
|
||||||
|
always be None. For PARENT_MATCH the index is which
|
||||||
|
index the plug is under the parent plug. For CLIENT_MATCH
|
||||||
|
the index is which child index matches the plug.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
node_attr (str): attribute name as 'node.attribute'
|
||||||
|
layer (str): layer name
|
||||||
|
skip_disabled (bool): exclude disabled overrides
|
||||||
|
skip_local_render (bool): exclude overrides marked
|
||||||
|
as local render.
|
||||||
|
stop_at_absolute_override: exclude overrides prior
|
||||||
|
to the last absolute override as they have
|
||||||
|
no influence on the resulting value.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: Ordered Overrides in order of strength
|
||||||
|
|
||||||
|
"""
|
||||||
|
def get_mplug_children(plug):
|
||||||
|
"""Return children MPlugs of compound `MPlug`."""
|
||||||
|
children = []
|
||||||
|
if plug.isCompound:
|
||||||
|
for i in range(plug.numChildren()):
|
||||||
|
children.append(plug.child(i))
|
||||||
|
return children
|
||||||
|
|
||||||
|
def get_mplug_names(mplug):
|
||||||
|
"""Return long and short name of `MPlug`."""
|
||||||
|
long_name = mplug.partialName(useLongNames=True)
|
||||||
|
short_name = mplug.partialName(useLongNames=False)
|
||||||
|
return {long_name, short_name}
|
||||||
|
|
||||||
|
def iter_override_targets(override):
|
||||||
|
try:
|
||||||
|
for target in override._targets():
|
||||||
|
yield target
|
||||||
|
except AssertionError:
|
||||||
|
# Workaround: There is a bug where the private `_targets()` method
|
||||||
|
# fails on some attribute plugs. For example overrides
|
||||||
|
# to the defaultRenderGlobals.endFrame
|
||||||
|
# (Tested in Maya 2020.2)
|
||||||
|
print("Workaround for %s" % override)
|
||||||
|
from maya.app.renderSetup.common.utils import findPlug
|
||||||
|
|
||||||
|
attr = override.attributeName()
|
||||||
|
if isinstance(override, UniqueOverride):
|
||||||
|
node = override.targetNodeName()
|
||||||
|
yield findPlug(node, attr)
|
||||||
|
else:
|
||||||
|
nodes = override.parent().selector().nodes()
|
||||||
|
for node in nodes:
|
||||||
|
if cmds.attributeQuery(attr, node=node, exists=True):
|
||||||
|
yield findPlug(node, attr)
|
||||||
|
|
||||||
|
# Get the MPlug for the node.attr
|
||||||
|
sel = om.MSelectionList()
|
||||||
|
sel.add(node_attr)
|
||||||
|
plug = sel.getPlug(0)
|
||||||
|
|
||||||
|
layer = get_rendersetup_layer(layer)
|
||||||
|
if layer == DEFAULT_RENDER_LAYER:
|
||||||
|
# DEFAULT_RENDER_LAYER will never have overrides
|
||||||
|
# since it's the default layer
|
||||||
|
return []
|
||||||
|
|
||||||
|
rs_layer = renderSetup.instance().getRenderLayer(layer)
|
||||||
|
if rs_layer is None:
|
||||||
|
# Renderlayer does not exist
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get any parent or children plugs as we also
|
||||||
|
# want to include them in the attribute match
|
||||||
|
# for overrides
|
||||||
|
parent = plug.parent() if plug.isChild else None
|
||||||
|
parent_index = None
|
||||||
|
if parent:
|
||||||
|
parent_index = get_mplug_children(parent).index(plug)
|
||||||
|
|
||||||
|
children = get_mplug_children(plug)
|
||||||
|
|
||||||
|
# Create lookup for the attribute by both long
|
||||||
|
# and short names
|
||||||
|
attr_names = get_mplug_names(plug)
|
||||||
|
for child in children:
|
||||||
|
attr_names.update(get_mplug_names(child))
|
||||||
|
if parent:
|
||||||
|
attr_names.update(get_mplug_names(parent))
|
||||||
|
|
||||||
|
# Get all overrides of the layer
|
||||||
|
# And find those that are relevant to the attribute
|
||||||
|
plug_overrides = []
|
||||||
|
|
||||||
|
# Iterate over the overrides in reverse so we get the last
|
||||||
|
# overrides first and can "break" whenever an absolute
|
||||||
|
# override is reached
|
||||||
|
layer_overrides = list(utils.getOverridesRecursive(rs_layer))
|
||||||
|
for layer_override in reversed(layer_overrides):
|
||||||
|
|
||||||
|
if skip_disabled and not layer_override.isEnabled():
|
||||||
|
# Ignore disabled overrides
|
||||||
|
continue
|
||||||
|
|
||||||
|
if skip_local_render and layer_override.isLocalRender():
|
||||||
|
continue
|
||||||
|
|
||||||
|
# The targets list can be very large so we'll do
|
||||||
|
# a quick filter by attribute name to detect whether
|
||||||
|
# it matches the attribute name, or its parent or child
|
||||||
|
if layer_override.attributeName() not in attr_names:
|
||||||
|
continue
|
||||||
|
|
||||||
|
override_match = None
|
||||||
|
for override_plug in iter_override_targets(layer_override):
|
||||||
|
|
||||||
|
override_match = None
|
||||||
|
if plug == override_plug:
|
||||||
|
override_match = (EXACT_MATCH, layer_override, None)
|
||||||
|
|
||||||
|
elif parent and override_plug == parent:
|
||||||
|
override_match = (PARENT_MATCH, layer_override, parent_index)
|
||||||
|
|
||||||
|
elif children and override_plug in children:
|
||||||
|
child_index = children.index(override_plug)
|
||||||
|
override_match = (CLIENT_MATCH, layer_override, child_index)
|
||||||
|
|
||||||
|
if override_match:
|
||||||
|
plug_overrides.append(override_match)
|
||||||
|
break
|
||||||
|
|
||||||
|
if (
|
||||||
|
override_match and
|
||||||
|
stop_at_absolute_override and
|
||||||
|
isinstance(layer_override, AbsOverride) and
|
||||||
|
# When the override is only on a child plug then it doesn't
|
||||||
|
# override the entire value so we not stop at this override
|
||||||
|
not override_match[0] == CLIENT_MATCH
|
||||||
|
):
|
||||||
|
# If override is absolute override, then BREAK out
|
||||||
|
# of parent loop we don't need to look any further as
|
||||||
|
# this is the absolute override
|
||||||
|
break
|
||||||
|
|
||||||
|
return reversed(plug_overrides)
|
||||||
|
|
@ -2,7 +2,7 @@ import pyblish.api
|
||||||
|
|
||||||
from maya import cmds
|
from maya import cmds
|
||||||
|
|
||||||
from pype.hosts.maya.api import lib
|
from pype.hosts.maya.api.attributes import get_attr_in_layer
|
||||||
|
|
||||||
|
|
||||||
class CollectRenderableCamera(pyblish.api.InstancePlugin):
|
class CollectRenderableCamera(pyblish.api.InstancePlugin):
|
||||||
|
|
@ -24,7 +24,7 @@ class CollectRenderableCamera(pyblish.api.InstancePlugin):
|
||||||
self.log.info("layer: {}".format(layer))
|
self.log.info("layer: {}".format(layer))
|
||||||
cameras = cmds.ls(type="camera", long=True)
|
cameras = cmds.ls(type="camera", long=True)
|
||||||
renderable = [c for c in cameras if
|
renderable = [c for c in cameras if
|
||||||
lib.get_attr_in_layer("%s.renderable" % c, layer=layer)]
|
get_attr_in_layer("%s.renderable" % c, layer)]
|
||||||
|
|
||||||
self.log.info("Found cameras %s: %s" % (len(renderable), renderable))
|
self.log.info("Found cameras %s: %s" % (len(renderable), renderable))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ class ValidateModelName(pyblish.api.InstancePlugin):
|
||||||
# path to shader names definitions
|
# path to shader names definitions
|
||||||
# TODO: move it to preset file
|
# TODO: move it to preset file
|
||||||
material_file = None
|
material_file = None
|
||||||
active = False
|
|
||||||
regex = '(.*)_(\\d)*_(.*)_(GEO)'
|
regex = '(.*)_(\\d)*_(.*)_(GEO)'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import pype.hosts.maya.api.action
|
||||||
from pype.hosts.maya.api import lib
|
from pype.hosts.maya.api import lib
|
||||||
|
|
||||||
|
|
||||||
class ValidateJointsHidden(pyblish.api.InstancePlugin):
|
class ValidateRigJointsHidden(pyblish.api.InstancePlugin):
|
||||||
"""Validate all joints are hidden visually.
|
"""Validate all joints are hidden visually.
|
||||||
|
|
||||||
This includes being hidden:
|
This includes being hidden:
|
||||||
|
|
@ -20,7 +20,6 @@ class ValidateJointsHidden(pyblish.api.InstancePlugin):
|
||||||
order = pype.api.ValidateContentsOrder
|
order = pype.api.ValidateContentsOrder
|
||||||
hosts = ['maya']
|
hosts = ['maya']
|
||||||
families = ['rig']
|
families = ['rig']
|
||||||
category = 'rig'
|
|
||||||
version = (0, 1, 0)
|
version = (0, 1, 0)
|
||||||
label = "Joints Hidden"
|
label = "Joints Hidden"
|
||||||
actions = [pype.hosts.maya.api.action.SelectInvalidAction,
|
actions = [pype.hosts.maya.api.action.SelectInvalidAction,
|
||||||
|
|
@ -13,7 +13,6 @@ class ValidateShaderName(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
optional = True
|
optional = True
|
||||||
active = False
|
|
||||||
order = pype.api.ValidateContentsOrder
|
order = pype.api.ValidateContentsOrder
|
||||||
families = ["look"]
|
families = ["look"]
|
||||||
hosts = ['maya']
|
hosts = ['maya']
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,11 @@ class ValidateTransformNamingSuffix(pyblish.api.InstancePlugin):
|
||||||
version = (0, 1, 0)
|
version = (0, 1, 0)
|
||||||
label = 'Suffix Naming Conventions'
|
label = 'Suffix Naming Conventions'
|
||||||
actions = [pype.hosts.maya.api.action.SelectInvalidAction]
|
actions = [pype.hosts.maya.api.action.SelectInvalidAction]
|
||||||
SUFFIX_NAMING_TABLE = {'mesh': ["_GEO", "_GES", "_GEP", "_OSD"],
|
SUFFIX_NAMING_TABLE = {"mesh": ["_GEO", "_GES", "_GEP", "_OSD"],
|
||||||
'nurbsCurve': ["_CRV"],
|
"nurbsCurve": ["_CRV"],
|
||||||
'nurbsSurface': ["_NRB"],
|
"nurbsSurface": ["_NRB"],
|
||||||
'locator': ["_LOC"],
|
"locator": ["_LOC"],
|
||||||
None: ['_GRP']}
|
"group": ["_GRP"]}
|
||||||
|
|
||||||
ALLOW_IF_NOT_IN_SUFFIX_TABLE = True
|
ALLOW_IF_NOT_IN_SUFFIX_TABLE = True
|
||||||
|
|
||||||
|
|
@ -88,7 +88,7 @@ class ValidateTransformNamingSuffix(pyblish.api.InstancePlugin):
|
||||||
fullPath=True,
|
fullPath=True,
|
||||||
noIntermediate=True)
|
noIntermediate=True)
|
||||||
|
|
||||||
shape_type = cmds.nodeType(shapes[0]) if shapes else None
|
shape_type = cmds.nodeType(shapes[0]) if shapes else "group"
|
||||||
if not cls.is_valid_name(transform, shape_type,
|
if not cls.is_valid_name(transform, shape_type,
|
||||||
cls.SUFFIX_NAMING_TABLE,
|
cls.SUFFIX_NAMING_TABLE,
|
||||||
cls.ALLOW_IF_NOT_IN_SUFFIX_TABLE):
|
cls.ALLOW_IF_NOT_IN_SUFFIX_TABLE):
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ class ValidateKnobs(pyblish.api.ContextPlugin):
|
||||||
|
|
||||||
Knobs to validate and their values comes from the
|
Knobs to validate and their values comes from the
|
||||||
|
|
||||||
Controled by plugin settings that require json in following structure:
|
Controlled by plugin settings that require json in following structure:
|
||||||
"ValidateKnobs": {
|
"ValidateKnobs": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"knobs": {
|
"knobs": {
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,12 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin):
|
||||||
optional = True
|
optional = True
|
||||||
|
|
||||||
# presets
|
# presets
|
||||||
deadline_priority = 50
|
priority = 50
|
||||||
deadline_chunk_size = 1
|
chunk_size = 1
|
||||||
deadline_pool = ""
|
primary_pool = ""
|
||||||
deadline_pool_secondary = ""
|
secondary_pool = ""
|
||||||
deadline_group = ""
|
group = ""
|
||||||
deadline_department = ""
|
department = ""
|
||||||
|
|
||||||
def process(self, instance):
|
def process(self, instance):
|
||||||
instance.data["toBeRenderedOn"] = "deadline"
|
instance.data["toBeRenderedOn"] = "deadline"
|
||||||
|
|
@ -142,12 +142,12 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
# define chunk and priority
|
# define chunk and priority
|
||||||
chunk_size = instance.data.get("deadlineChunkSize")
|
chunk_size = instance.data.get("deadlineChunkSize")
|
||||||
if chunk_size == 0 and self.deadline_chunk_size:
|
if chunk_size == 0 and self.chunk_size:
|
||||||
chunk_size = self.deadline_chunk_size
|
chunk_size = self.chunk_size
|
||||||
|
|
||||||
priority = instance.data.get("deadlinePriority")
|
priority = instance.data.get("deadlinePriority")
|
||||||
if not priority:
|
if not priority:
|
||||||
priority = self.deadline_priority
|
priority = self.priority
|
||||||
|
|
||||||
payload = {
|
payload = {
|
||||||
"JobInfo": {
|
"JobInfo": {
|
||||||
|
|
@ -165,11 +165,11 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
"Priority": priority,
|
"Priority": priority,
|
||||||
"ChunkSize": chunk_size,
|
"ChunkSize": chunk_size,
|
||||||
"Department": self.deadline_department,
|
"Department": self.department,
|
||||||
|
|
||||||
"Pool": self.deadline_pool,
|
"Pool": self.primary_pool,
|
||||||
"SecondaryPool": self.deadline_pool_secondary,
|
"SecondaryPool": self.secondary_pool,
|
||||||
"Group": self.deadline_group,
|
"Group": self.group,
|
||||||
|
|
||||||
"Plugin": "Nuke",
|
"Plugin": "Nuke",
|
||||||
"Frames": "{start}-{end}".format(
|
"Frames": "{start}-{end}".format(
|
||||||
|
|
|
||||||
44
pype/settings/defaults/project_settings/deadline.json
Normal file
44
pype/settings/defaults/project_settings/deadline.json
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"publish": {
|
||||||
|
"MayaSubmitDeadline": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": false,
|
||||||
|
"tile_assembler_plugin": "oiio",
|
||||||
|
"use_published": true,
|
||||||
|
"asset_dependencies": true
|
||||||
|
},
|
||||||
|
"NukeSubmitDeadline": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": false,
|
||||||
|
"use_published": true,
|
||||||
|
"priority": 50,
|
||||||
|
"Chunk Size": 10,
|
||||||
|
"primary_pool": "",
|
||||||
|
"secondary_pool": "",
|
||||||
|
"group": "",
|
||||||
|
"department": ""
|
||||||
|
},
|
||||||
|
"HarmonySubmitDeadline": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": false,
|
||||||
|
"use_published": true,
|
||||||
|
"priority": 50,
|
||||||
|
"Chunk Size": 10000,
|
||||||
|
"primary_pool": "",
|
||||||
|
"secondary_pool": "",
|
||||||
|
"group": "",
|
||||||
|
"department": ""
|
||||||
|
},
|
||||||
|
"AfterEffectsSubmitDeadline": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": false,
|
||||||
|
"use_published": true,
|
||||||
|
"priority": 50,
|
||||||
|
"Chunk Size": 10000,
|
||||||
|
"primary_pool": "",
|
||||||
|
"secondary_pool": "",
|
||||||
|
"group": "",
|
||||||
|
"department": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,20 @@
|
||||||
{
|
{
|
||||||
"publish": {},
|
|
||||||
"general": {
|
"general": {
|
||||||
"skip_resolution_check": [],
|
"skip_resolution_check": [],
|
||||||
"skip_timelines_check": []
|
"skip_timelines_check": []
|
||||||
|
},
|
||||||
|
"publish": {
|
||||||
|
"CollectPalettes": {
|
||||||
|
"allowed_tasks": [
|
||||||
|
"."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"HarmonySubmitDeadline": {
|
||||||
|
"use_published": false,
|
||||||
|
"priority": 50,
|
||||||
|
"primary_pool": "",
|
||||||
|
"secondary_pool": "",
|
||||||
|
"chunk_size": 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -107,37 +107,249 @@
|
||||||
"overscan": 1.0
|
"overscan": 1.0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ext_mapping": {},
|
"create": {
|
||||||
|
"CreateAnimation": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateAss": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateAssembly": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateCamera": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateLayout": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateLook": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateMayaScene": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateModel": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main",
|
||||||
|
"Proxy",
|
||||||
|
"Sculpt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreatePointCache": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateRender": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateRenderSetup": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateReview": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateRig": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main",
|
||||||
|
"Sim",
|
||||||
|
"Cloth"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateSetDress": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main",
|
||||||
|
"Anim"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateUnrealStaticMesh": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateVrayProxy": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateVRayScene": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"CreateYetiRig": {
|
||||||
|
"enabled": true,
|
||||||
|
"defaults": [
|
||||||
|
"Main"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"publish": {
|
"publish": {
|
||||||
"CollectMayaRender": {
|
"CollectMayaRender": {
|
||||||
"sync_workfile_version": false
|
"sync_workfile_version": false
|
||||||
},
|
},
|
||||||
"ValidateCameraAttributes": {
|
"ValidateShaderName": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"optional": true
|
"regex": "(?P<asset>.*)_(.*)_SHD"
|
||||||
|
},
|
||||||
|
"ValidateAttributes": {
|
||||||
|
"enabled": false,
|
||||||
|
"attributes": {}
|
||||||
},
|
},
|
||||||
"ValidateModelName": {
|
"ValidateModelName": {
|
||||||
"enabled": true,
|
"enabled": false,
|
||||||
"material_file": {
|
"material_file": {
|
||||||
"windows": "",
|
"windows": "",
|
||||||
"darwin": "",
|
"darwin": "",
|
||||||
"linux": ""
|
"linux": ""
|
||||||
},
|
},
|
||||||
"regex": ""
|
"regex": "(.*)_(\\\\d)*_(.*)_(GEO)"
|
||||||
},
|
},
|
||||||
"ValidateAssemblyName": {
|
"ValidateTransformNamingSuffix": {
|
||||||
"enabled": true
|
|
||||||
},
|
|
||||||
"ValidateShaderName": {
|
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"regex": ""
|
"SUFFIX_NAMING_TABLE": {
|
||||||
|
"mesh": [
|
||||||
|
"_GEO",
|
||||||
|
"_GES",
|
||||||
|
"_GEP",
|
||||||
|
"_OSD"
|
||||||
|
],
|
||||||
|
"nurbsCurve": [
|
||||||
|
"_CRV"
|
||||||
|
],
|
||||||
|
"nurbsSurface": [
|
||||||
|
"_NRB"
|
||||||
|
],
|
||||||
|
"locator": [
|
||||||
|
"_LOC"
|
||||||
|
],
|
||||||
|
"group": [
|
||||||
|
"_GRP"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ALLOW_IF_NOT_IN_SUFFIX_TABLE": true
|
||||||
|
},
|
||||||
|
"ValidateColorSets": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"ValidateMeshHasOverlappingUVs": {
|
"ValidateMeshHasOverlappingUVs": {
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"ValidateAttributes": {
|
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"attributes": {}
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshArnoldAttributes": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshShaderConnections": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshSingleUVSet": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshHasUVs": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshLaminaFaces": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshNonManifold": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshUVSetMap1": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateMeshVerticesHaveEdges": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateNoAnimation": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateNoNamespace": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateNoNullTransforms": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateNoUnknownNodes": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateNodeNoGhosting": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateShapeDefaultNames": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateShapeRenderStats": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateTransformZero": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateCameraAttributes": {
|
||||||
|
"enabled": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateAssemblyName": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateAssRelativePaths": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
},
|
},
|
||||||
"ExtractCameraAlembic": {
|
"ExtractCameraAlembic": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
|
@ -221,6 +433,39 @@
|
||||||
0.8,
|
0.8,
|
||||||
0.5
|
0.5
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"ReferenceLoader": {
|
||||||
|
"enabled": true,
|
||||||
|
"representations": [
|
||||||
|
"ma",
|
||||||
|
"mb",
|
||||||
|
"abc",
|
||||||
|
"fbx"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"AudioLoader": {
|
||||||
|
"enabled": true,
|
||||||
|
"representations": [
|
||||||
|
"wav"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"GpuCacheLoader": {
|
||||||
|
"enabled": true,
|
||||||
|
"representations": [
|
||||||
|
"abc"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ImagePlaneLoader": {
|
||||||
|
"enabled": true,
|
||||||
|
"representations": [
|
||||||
|
"jpg",
|
||||||
|
"png",
|
||||||
|
"mov"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"MatchmoveLoader": {
|
||||||
|
"enabled": true,
|
||||||
|
"representations": []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"workfile_build": {
|
"workfile_build": {
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,22 @@
|
||||||
"deadline_pool": "",
|
"deadline_pool": "",
|
||||||
"deadline_pool_secondary": "",
|
"deadline_pool_secondary": "",
|
||||||
"deadline_chunk_size": 1
|
"deadline_chunk_size": 1
|
||||||
|
},
|
||||||
|
"ValidateOutputResolution": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateGizmo": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateScript": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"ValidateNukeWriteBoundingBox": {
|
||||||
|
"enabled": true,
|
||||||
|
"optional": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"workfile_build": {
|
"workfile_build": {
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ class DictImmutableKeysEntity(ItemEntity):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if child_obj.key in self.non_gui_children:
|
if child_obj.key in self.non_gui_children:
|
||||||
raise SchemaDuplicatedKeys(self.path, child_obj.key)
|
raise SchemaDuplicatedKeys("", child_obj.key)
|
||||||
self.non_gui_children[child_obj.key] = child_obj
|
self.non_gui_children[child_obj.key] = child_obj
|
||||||
|
|
||||||
if not first:
|
if not first:
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,10 @@
|
||||||
"type": "schema",
|
"type": "schema",
|
||||||
"name": "schema_project_ftrack"
|
"name": "schema_project_ftrack"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "schema",
|
||||||
|
"name": "schema_project_deadline"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "schema",
|
"type": "schema",
|
||||||
"name": "schema_project_maya"
|
"name": "schema_project_maya"
|
||||||
|
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "plugins",
|
|
||||||
"label": "Plugins",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "standalonepublisher",
|
|
||||||
"label": "Standalone Publisher",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "publish",
|
|
||||||
"label": "Publish plugins",
|
|
||||||
"is_file": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ExtractThumbnailSP",
|
|
||||||
"label": "ExtractThumbnailSP",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": false,
|
|
||||||
"key": "ffmpeg_args",
|
|
||||||
"label": "ffmpeg_args",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "list",
|
|
||||||
"object_type": "text",
|
|
||||||
"key": "input",
|
|
||||||
"label": "input"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "list",
|
|
||||||
"object_type": "text",
|
|
||||||
"key": "output",
|
|
||||||
"label": "output"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,223 @@
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"key": "deadline",
|
||||||
|
"label": "Deadline",
|
||||||
|
"collapsible": true,
|
||||||
|
"is_file": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "publish",
|
||||||
|
"label": "Publish plugins",
|
||||||
|
"is_file": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "MayaSubmitDeadline",
|
||||||
|
"label": "Submit maya job to deadline",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "optional",
|
||||||
|
"label": "Optional"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "enum",
|
||||||
|
"key": "tile_assembler_plugin",
|
||||||
|
"label": "Tile Assembler Plugin",
|
||||||
|
"multiselection": false,
|
||||||
|
"enum_items": [
|
||||||
|
{
|
||||||
|
"DraftTileAssembler": "Draft Tile Assembler"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"oiio": "Open Image IO"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "use_published",
|
||||||
|
"label": "Use Published scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "asset_dependencies",
|
||||||
|
"label": "Use Asset dependencies"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "NukeSubmitDeadline",
|
||||||
|
"label": "Nuke Submit to Deadline",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "optional",
|
||||||
|
"label": "Optional"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "use_published",
|
||||||
|
"label": "Use Published scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "priority",
|
||||||
|
"label": "Priority"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "Chunk Size",
|
||||||
|
"label": "Chunk Size"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "primary_pool",
|
||||||
|
"label": "Primary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "secondary_pool",
|
||||||
|
"label": "Secondary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "group",
|
||||||
|
"label": "Group"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "department",
|
||||||
|
"label": "Department"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "HarmonySubmitDeadline",
|
||||||
|
"label": "Harmony Submit to Deadline",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "optional",
|
||||||
|
"label": "Optional"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "use_published",
|
||||||
|
"label": "Use Published scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "priority",
|
||||||
|
"label": "Priority"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "Chunk Size",
|
||||||
|
"label": "Chunk Size"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "primary_pool",
|
||||||
|
"label": "Primary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "secondary_pool",
|
||||||
|
"label": "Secondary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "group",
|
||||||
|
"label": "Group"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "department",
|
||||||
|
"label": "Department"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "AfterEffectsSubmitDeadline",
|
||||||
|
"label": "After Effects Submit to Deadline",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "optional",
|
||||||
|
"label": "Optional"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "use_published",
|
||||||
|
"label": "Use Published scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "priority",
|
||||||
|
"label": "Priority"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "Chunk Size",
|
||||||
|
"label": "Chunk Size"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "primary_pool",
|
||||||
|
"label": "Primary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "secondary_pool",
|
||||||
|
"label": "Secondary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "group",
|
||||||
|
"label": "Group"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "department",
|
||||||
|
"label": "Department"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
"name": "schema_global_tools"
|
"name": "schema_global_tools"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "raw-json",
|
"type": "collapsible-wrap",
|
||||||
"label": "Project Folder Structure",
|
"label": "Project Folder Structure",
|
||||||
"key": "project_folder_structure",
|
"key": "project_folder_structure",
|
||||||
"use_label_wrap": true
|
"use_label_wrap": true
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,6 @@
|
||||||
"label": "Harmony",
|
"label": "Harmony",
|
||||||
"is_file": true,
|
"is_file": true,
|
||||||
"children": [
|
"children": [
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "publish",
|
|
||||||
"label": "Publish plugins",
|
|
||||||
"children": []
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "dict",
|
"type": "dict",
|
||||||
"collapsible": true,
|
"collapsible": true,
|
||||||
|
|
@ -31,6 +24,61 @@
|
||||||
"label": "Skip Timeliene Check for Tasks"
|
"label": "Skip Timeliene Check for Tasks"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "publish",
|
||||||
|
"label": "Publish plugins",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "CollectPalettes",
|
||||||
|
"label": "Collect Palettes",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "list",
|
||||||
|
"key": "allowed_tasks",
|
||||||
|
"label": "Allowed tasks",
|
||||||
|
"object_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "HarmonySubmitDeadline",
|
||||||
|
"label": "Harmony Submit to Deadline",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "use_published",
|
||||||
|
"label": "Use Published scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "priority",
|
||||||
|
"label": "priority"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "primary_pool",
|
||||||
|
"label": "Primary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "secondary_pool",
|
||||||
|
"label": "Secondary Pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "chunk_size",
|
||||||
|
"label": "Chunk Size"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,10 @@
|
||||||
"type": "schema",
|
"type": "schema",
|
||||||
"name": "schema_maya_capture"
|
"name": "schema_maya_capture"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "schema",
|
||||||
|
"name": "schema_maya_create"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "schema",
|
"type": "schema",
|
||||||
"name": "schema_maya_publish"
|
"name": "schema_maya_publish"
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
"type": "dict",
|
"type": "dict",
|
||||||
"collapsible": true,
|
"collapsible": true,
|
||||||
"key": "create",
|
"key": "create",
|
||||||
"label": "Create plugins",
|
"label": "Creator plugins",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"type": "dict",
|
"type": "dict",
|
||||||
|
|
@ -42,144 +42,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "dict",
|
"type": "schema",
|
||||||
"collapsible": true,
|
"name": "schema_nuke_publish",
|
||||||
"key": "publish",
|
"template_data": []
|
||||||
"label": "Publish plugins",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "PreCollectNukeInstances",
|
|
||||||
"label": "PreCollectNukeInstances",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "sync_workfile_version",
|
|
||||||
"label": "Sync Version from workfile"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"key": "ExtractThumbnail",
|
|
||||||
"label": "ExtractThumbnail",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "raw-json",
|
|
||||||
"key": "nodes",
|
|
||||||
"label": "Nodes"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"key": "ValidateKnobs",
|
|
||||||
"label": "ValidateKnobs",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "raw-json",
|
|
||||||
"key": "knobs",
|
|
||||||
"label": "Knobs"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"key": "ExtractReviewDataLut",
|
|
||||||
"label": "ExtractReviewDataLut",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"key": "ExtractReviewDataMov",
|
|
||||||
"label": "ExtractReviewDataMov",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "viewer_lut_raw",
|
|
||||||
"label": "Viewer LUT raw"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ExtractSlateFrame",
|
|
||||||
"label": "ExtractSlateFrame",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "viewer_lut_raw",
|
|
||||||
"label": "Viewer LUT raw"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "NukeSubmitDeadline",
|
|
||||||
"label": "NukeSubmitDeadline",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "number",
|
|
||||||
"key": "deadline_priority",
|
|
||||||
"label": "deadline_priority"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"key": "deadline_pool",
|
|
||||||
"label": "deadline_pool"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"key": "deadline_pool_secondary",
|
|
||||||
"label": "deadline_pool_secondary"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "number",
|
|
||||||
"key": "deadline_chunk_size",
|
|
||||||
"label": "deadline_chunk_size"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "schema",
|
"type": "schema",
|
||||||
|
|
|
||||||
|
|
@ -5,44 +5,6 @@
|
||||||
"label": "Standalone Publisher",
|
"label": "Standalone Publisher",
|
||||||
"is_file": true,
|
"is_file": true,
|
||||||
"children": [
|
"children": [
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "publish",
|
|
||||||
"label": "Publish plugins",
|
|
||||||
"is_file": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ExtractThumbnailSP",
|
|
||||||
"label": "ExtractThumbnailSP",
|
|
||||||
"is_group": true,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": false,
|
|
||||||
"key": "ffmpeg_args",
|
|
||||||
"label": "ffmpeg_args",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "list",
|
|
||||||
"object_type": "text",
|
|
||||||
"key": "input",
|
|
||||||
"label": "input"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "list",
|
|
||||||
"object_type": "text",
|
|
||||||
"key": "output",
|
|
||||||
"label": "output"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "dict-modifiable",
|
"type": "dict-modifiable",
|
||||||
"collapsible": true,
|
"collapsible": true,
|
||||||
|
|
@ -88,6 +50,44 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "publish",
|
||||||
|
"label": "Publish plugins",
|
||||||
|
"is_file": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "ExtractThumbnailSP",
|
||||||
|
"label": "ExtractThumbnailSP",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": false,
|
||||||
|
"key": "ffmpeg_args",
|
||||||
|
"label": "ffmpeg_args",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "list",
|
||||||
|
"object_type": "text",
|
||||||
|
"key": "input",
|
||||||
|
"label": "input"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "list",
|
||||||
|
"object_type": "text",
|
||||||
|
"key": "output",
|
||||||
|
"label": "output"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "create",
|
||||||
|
"label": "Creator plugins",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "schema_template",
|
||||||
|
"name": "template_create_plugin",
|
||||||
|
"template_data": [
|
||||||
|
{
|
||||||
|
"key": "CreateAnimation",
|
||||||
|
"label": "Create Animation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateAss",
|
||||||
|
"label": "Create Ass"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateAssembly",
|
||||||
|
"label": "Create Assembly"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateCamera",
|
||||||
|
"label": "Create Camera"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateLayout",
|
||||||
|
"label": "Create Layout"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateLook",
|
||||||
|
"label": "Create Look"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateMayaScene",
|
||||||
|
"label": "Create Maya Scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateModel",
|
||||||
|
"label": "Create Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreatePointCache",
|
||||||
|
"label": "Create Cache"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateRender",
|
||||||
|
"label": "Create Render"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateRenderSetup",
|
||||||
|
"label": "Create Render Setup"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateReview",
|
||||||
|
"label": "Create Review"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateRig",
|
||||||
|
"label": "Create Rig"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateSetDress",
|
||||||
|
"label": "Create Set Dress"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateUnrealStaticMesh",
|
||||||
|
"label": "Create Unreal - Static Mesh"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateVrayProxy",
|
||||||
|
"label": "Create VRay Proxy"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateVRayScene",
|
||||||
|
"label": "Create VRay Scene"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "CreateYetiRig",
|
||||||
|
"label": "Create Yeti Rig"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -151,6 +151,32 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "schema_template",
|
||||||
|
"name": "template_loader_plugin",
|
||||||
|
"template_data": [
|
||||||
|
{
|
||||||
|
"key": "ReferenceLoader",
|
||||||
|
"label": "Reference Loader"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "AudioLoader",
|
||||||
|
"label": "Audio Loader"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "GpuCacheLoader",
|
||||||
|
"label": "GpuCache Loader"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ImagePlaneLoader",
|
||||||
|
"label": "Imageplane Loader"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "MatchmoveLoader",
|
||||||
|
"label": "Matchmove Loader"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,71 +26,9 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "label",
|
"type": "label",
|
||||||
"label": "Collectors"
|
"label": "Validators"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ValidateCameraAttributes",
|
|
||||||
"label": "Validate Camera Attributes",
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "optional",
|
|
||||||
"label": "Optional"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ValidateModelName",
|
|
||||||
"label": "Validate Model Name",
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "label",
|
|
||||||
"label": "Path to material file defining list of material names to check. This is material name per line simple text file.<br/>It will be checked against named group <b>shader</b> in your <em>Validation regex</em>.<p>For example: <br/> <code>^.*(?P=<shader>.+)_GEO</code></p>"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "path-widget",
|
|
||||||
"key": "material_file",
|
|
||||||
"label": "Material File",
|
|
||||||
"multiplatform": true,
|
|
||||||
"multipath": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "text",
|
|
||||||
"key": "regex",
|
|
||||||
"label": "Validation regex"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ValidateAssemblyName",
|
|
||||||
"label": "Validate Assembly Name",
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"type": "dict",
|
"type": "dict",
|
||||||
"collapsible": true,
|
"collapsible": true,
|
||||||
|
|
@ -114,20 +52,7 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "dict",
|
|
||||||
"collapsible": true,
|
|
||||||
"key": "ValidateMeshHasOverlappingUVs",
|
|
||||||
"label": "ValidateMeshHasOverlappingUVs",
|
|
||||||
"checkbox_key": "enabled",
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "boolean",
|
|
||||||
"key": "enabled",
|
|
||||||
"label": "Enabled"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "dict",
|
"type": "dict",
|
||||||
"collapsible": true,
|
"collapsible": true,
|
||||||
|
|
@ -147,6 +72,169 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "collapsible-wrap",
|
||||||
|
"label": "Model",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "ValidateModelName",
|
||||||
|
"label": "Validate Model Name",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "Path to material file defining list of material names to check. This is material name per line simple text file.<br/>It will be checked against named group <b>shader</b> in your <em>Validation regex</em>.<p>For example: <br/> <code>^.*(?P=<shader>.+)_GEO</code></p>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "path-widget",
|
||||||
|
"key": "material_file",
|
||||||
|
"label": "Material File",
|
||||||
|
"multiplatform": true,
|
||||||
|
"multipath": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "regex",
|
||||||
|
"label": "Validation regex"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "ValidateTransformNamingSuffix",
|
||||||
|
"label": "ValidateTransformNamingSuffix",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "Validates transform suffix based on the type of its children shapes."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "raw-json",
|
||||||
|
"key": "SUFFIX_NAMING_TABLE",
|
||||||
|
"label": "Suffix Naming Table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "ALLOW_IF_NOT_IN_SUFFIX_TABLE",
|
||||||
|
"label": "Allow if suffix not in table"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "schema_template",
|
||||||
|
"name": "template_publish_plugin",
|
||||||
|
"template_data": [
|
||||||
|
{
|
||||||
|
"key": "ValidateColorSets",
|
||||||
|
"label": "ValidateColorSets"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshHasOverlappingUVs",
|
||||||
|
"label": "ValidateMeshHasOverlappingUVs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshArnoldAttributes",
|
||||||
|
"label": "ValidateMeshArnoldAttributes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshShaderConnections",
|
||||||
|
"label": "ValidateMeshShaderConnections"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshSingleUVSet",
|
||||||
|
"label": "ValidateMeshSingleUVSet"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshHasUVs",
|
||||||
|
"label": "ValidateMeshHasUVs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshLaminaFaces",
|
||||||
|
"label": "ValidateMeshLaminaFaces"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshNonManifold",
|
||||||
|
"label": "ValidateMeshNonManifold"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshUVSetMap1",
|
||||||
|
"label": "ValidateMeshUVSetMap1",
|
||||||
|
"docstring": "Validate model's default uv set exists and is named 'map1'.<br><br>In Maya meshes by default have a uv set named 'map1' that cannot be deleted. It can be renamed, however,<br> introducing some issues with some renderers. As such we ensure the first (default) UV set index is named 'map1'."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateMeshVerticesHaveEdges",
|
||||||
|
"label": "ValidateMeshVerticesHaveEdges"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateNoAnimation",
|
||||||
|
"label": "ValidateNoAnimation",
|
||||||
|
"docstring": "Ensure no keyframes on nodes in the Instance.<br>Even though a Model would extract without animCurves correctly this avoids getting different <br> output from a model when extracted from a different frame than the first frame. (Might be overly restrictive though)."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateNoNamespace",
|
||||||
|
"label": "ValidateNoNamespace"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateNoNullTransforms",
|
||||||
|
"label": "ValidateNoNullTransforms"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateNoUnknownNodes",
|
||||||
|
"label": "ValidateNoUnknownNodes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateNodeNoGhosting",
|
||||||
|
"label": "ValidateNodeNoGhosting"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateShapeDefaultNames",
|
||||||
|
"label": "ValidateShapeDefaultNames"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateShapeRenderStats",
|
||||||
|
"label": "ValidateShapeRenderStats"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateTransformZero",
|
||||||
|
"label": "ValidateTransformZero"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "schema_template",
|
||||||
|
"name": "template_publish_plugin",
|
||||||
|
"template_data": [
|
||||||
|
{
|
||||||
|
"key": "ValidateCameraAttributes",
|
||||||
|
"label": "Validate Camera Attributes",
|
||||||
|
"docstring": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateAssemblyName",
|
||||||
|
"label": "Validate Assembly Name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateAssRelativePaths",
|
||||||
|
"label": "ValidateAssRelativePaths"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "splitter"
|
"type": "splitter"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,180 @@
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "publish",
|
||||||
|
"label": "Publish plugins",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "Collectors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "PreCollectNukeInstances",
|
||||||
|
"label": "PreCollectNukeInstances",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "sync_workfile_version",
|
||||||
|
"label": "Sync Version from workfile"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "splitter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "Validators"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"key": "ValidateKnobs",
|
||||||
|
"label": "ValidateKnobs",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "raw-json",
|
||||||
|
"key": "knobs",
|
||||||
|
"label": "Knobs"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "schema_template",
|
||||||
|
"name": "template_publish_plugin",
|
||||||
|
"template_data": [
|
||||||
|
{
|
||||||
|
"key": "ValidateOutputResolution",
|
||||||
|
"label": "Validate Output Resolution"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateGizmo",
|
||||||
|
"label": "Validate Gizmo (Group)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateScript",
|
||||||
|
"label": "Validate script settings"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "ValidateNukeWriteBoundingBox",
|
||||||
|
"label": "Validate and Write Bounding Box"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "splitter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "Extractors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"key": "ExtractThumbnail",
|
||||||
|
"label": "ExtractThumbnail",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "raw-json",
|
||||||
|
"key": "nodes",
|
||||||
|
"label": "Nodes"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"key": "ExtractReviewDataLut",
|
||||||
|
"label": "ExtractReviewDataLut",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"key": "ExtractReviewDataMov",
|
||||||
|
"label": "ExtractReviewDataMov",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "viewer_lut_raw",
|
||||||
|
"label": "Viewer LUT raw"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "ExtractSlateFrame",
|
||||||
|
"label": "ExtractSlateFrame",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "viewer_lut_raw",
|
||||||
|
"label": "Viewer LUT raw"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "NukeSubmitDeadline",
|
||||||
|
"label": "NukeSubmitDeadline",
|
||||||
|
"is_group": true,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "deadline_priority",
|
||||||
|
"label": "deadline_priority"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "deadline_pool",
|
||||||
|
"label": "deadline_pool"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "deadline_pool_secondary",
|
||||||
|
"label": "deadline_pool_secondary"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "number",
|
||||||
|
"key": "deadline_chunk_size",
|
||||||
|
"label": "deadline_chunk_size"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "{key}",
|
||||||
|
"label": "{label}",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "list",
|
||||||
|
"key": "defaults",
|
||||||
|
"label": "Default Subsets",
|
||||||
|
"object_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "{key}",
|
||||||
|
"label": "{label}",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "list",
|
||||||
|
"key": "representations",
|
||||||
|
"label": "Representations",
|
||||||
|
"object_type": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"__default_values__": {
|
||||||
|
"docstring": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dict",
|
||||||
|
"collapsible": true,
|
||||||
|
"key": "{key}",
|
||||||
|
"label": "{label}",
|
||||||
|
"checkbox_key": "enabled",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "enabled",
|
||||||
|
"label": "Enabled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"key": "optional",
|
||||||
|
"label": "Optional"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "{docstring}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -46,8 +46,8 @@ class DictImmutableKeysWidget(BaseWidget):
|
||||||
self._ui_item_base()
|
self._ui_item_base()
|
||||||
label = self.entity.label
|
label = self.entity.label
|
||||||
|
|
||||||
self.widget_mapping = {}
|
self._parent_widget_by_entity_id = {}
|
||||||
self.wrapper_widgets_by_id = {}
|
self._added_wrapper_ids = set()
|
||||||
self._prepare_entity_layouts(
|
self._prepare_entity_layouts(
|
||||||
self.entity.gui_layout, self.content_widget
|
self.entity.gui_layout, self.content_widget
|
||||||
)
|
)
|
||||||
|
|
@ -65,7 +65,7 @@ class DictImmutableKeysWidget(BaseWidget):
|
||||||
for child in children:
|
for child in children:
|
||||||
if not isinstance(child, dict):
|
if not isinstance(child, dict):
|
||||||
if child is not self.checkbox_child:
|
if child is not self.checkbox_child:
|
||||||
self.widget_mapping[child.id] = widget
|
self._parent_widget_by_entity_id[child.id] = widget
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if child["type"] == "collapsible-wrap":
|
if child["type"] == "collapsible-wrap":
|
||||||
|
|
@ -79,9 +79,8 @@ class DictImmutableKeysWidget(BaseWidget):
|
||||||
"Unknown Wrapper type \"{}\"".format(child["type"])
|
"Unknown Wrapper type \"{}\"".format(child["type"])
|
||||||
)
|
)
|
||||||
|
|
||||||
self.widget_mapping[wrapper.id] = widget
|
self._parent_widget_by_entity_id[wrapper.id] = widget
|
||||||
self.wrapper_widgets_by_id[wrapper.id] = wrapper
|
|
||||||
self.add_widget_to_layout(wrapper)
|
|
||||||
self._prepare_entity_layouts(child["children"], wrapper)
|
self._prepare_entity_layouts(child["children"], wrapper)
|
||||||
|
|
||||||
def _ui_item_base(self):
|
def _ui_item_base(self):
|
||||||
|
|
@ -162,9 +161,12 @@ class DictImmutableKeysWidget(BaseWidget):
|
||||||
else:
|
else:
|
||||||
map_id = widget.entity.id
|
map_id = widget.entity.id
|
||||||
|
|
||||||
wrapper = self.widget_mapping[map_id]
|
wrapper = self._parent_widget_by_entity_id[map_id]
|
||||||
if wrapper is not self.content_widget:
|
if wrapper is not self.content_widget:
|
||||||
wrapper.add_widget_to_layout(widget, label)
|
wrapper.add_widget_to_layout(widget, label)
|
||||||
|
if wrapper.id not in self._added_wrapper_ids:
|
||||||
|
self.add_widget_to_layout(wrapper)
|
||||||
|
self._added_wrapper_ids.add(wrapper.id)
|
||||||
return
|
return
|
||||||
|
|
||||||
row = self.content_layout.rowCount()
|
row = self.content_layout.rowCount()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue