mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
Multiple Values
- support multiple values for render attributes. - support repairing the render attributes.
This commit is contained in:
parent
b47722b358
commit
812fa065cf
2 changed files with 60 additions and 32 deletions
|
|
@ -242,10 +242,6 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin):
|
||||||
cls.DEFAULT_PADDING, "0" * cls.DEFAULT_PADDING))
|
cls.DEFAULT_PADDING, "0" * cls.DEFAULT_PADDING))
|
||||||
|
|
||||||
# load validation definitions from settings
|
# load validation definitions from settings
|
||||||
validation_settings = (
|
|
||||||
instance.context.data["project_settings"]["maya"]["publish"]["ValidateRenderSettings"].get( # noqa: E501
|
|
||||||
"{}_render_attributes".format(renderer)) or []
|
|
||||||
)
|
|
||||||
settings_lights_flag = instance.context.data["project_settings"].get(
|
settings_lights_flag = instance.context.data["project_settings"].get(
|
||||||
"maya", {}).get(
|
"maya", {}).get(
|
||||||
"RenderSettings", {}).get(
|
"RenderSettings", {}).get(
|
||||||
|
|
@ -253,15 +249,54 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
instance_lights_flag = instance.data.get("renderSetupIncludeLights")
|
instance_lights_flag = instance.data.get("renderSetupIncludeLights")
|
||||||
if settings_lights_flag != instance_lights_flag:
|
if settings_lights_flag != instance_lights_flag:
|
||||||
cls.log.warning('Instance flag for "Render Setup Include Lights" is set to {0} and Settings flag is set to {1}'.format(instance_lights_flag, settings_lights_flag)) # noqa
|
cls.log.warning(
|
||||||
|
"Instance flag for \"Render Setup Include Lights\" is set to "
|
||||||
|
"{} and Settings flag is set to {}".format(
|
||||||
|
instance_lights_flag, settings_lights_flag
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
# go through definitions and test if such node.attribute exists.
|
# go through definitions and test if such node.attribute exists.
|
||||||
# if so, compare its value from the one required.
|
# if so, compare its value from the one required.
|
||||||
for attr, value in OrderedDict(validation_settings).items():
|
for attribute, data in cls.get_nodes(instance, renderer).items():
|
||||||
cls.log.debug("{}: {}".format(attr, value))
|
for node in data["nodes"]:
|
||||||
|
try:
|
||||||
|
render_value = cmds.getAttr(
|
||||||
|
"{}.{}".format(node, attribute)
|
||||||
|
)
|
||||||
|
except RuntimeError:
|
||||||
|
invalid = True
|
||||||
|
cls.log.error(
|
||||||
|
"Cannot get value of {}.{}".format(node, attribute)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if str(render_value) not in data["values"]:
|
||||||
|
invalid = True
|
||||||
|
cls.log.error(
|
||||||
|
"Invalid value {} set on {}.{}. Expecting "
|
||||||
|
"{}".format(
|
||||||
|
render_value, node, attribute, data["values"]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return invalid
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_nodes(cls, instance, renderer):
|
||||||
|
maya_settings = instance.context.data["project_settings"]["maya"]
|
||||||
|
validation_settings = (
|
||||||
|
maya_settings["publish"]["ValidateRenderSettings"].get(
|
||||||
|
"{}_render_attributes".format(renderer)
|
||||||
|
) or []
|
||||||
|
)
|
||||||
|
result = {}
|
||||||
|
for attr, values in OrderedDict(validation_settings).items():
|
||||||
|
cls.log.debug("{}: {}".format(attr, values))
|
||||||
if "." not in attr:
|
if "." not in attr:
|
||||||
cls.log.warning("Skipping invalid attribute defined in "
|
cls.log.warning(
|
||||||
"validation settings: '{}'".format(attr))
|
"Skipping invalid attribute defined in validation "
|
||||||
|
"settings: \"{}\"".format(attr)
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
node_type, attribute_name = attr.split(".", 1)
|
node_type, attribute_name = attr.split(".", 1)
|
||||||
|
|
@ -271,28 +306,13 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
if not nodes:
|
if not nodes:
|
||||||
cls.log.warning(
|
cls.log.warning(
|
||||||
"No nodes of type '{}' found.".format(node_type))
|
"No nodes of type \"{}\" found.".format(node_type)
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for node in nodes:
|
result[attribute_name] = {"nodes": nodes, "values": values}
|
||||||
try:
|
|
||||||
render_value = cmds.getAttr(
|
|
||||||
"{}.{}".format(node, attribute_name))
|
|
||||||
except RuntimeError:
|
|
||||||
invalid = True
|
|
||||||
cls.log.error(
|
|
||||||
"Cannot get value of {}.{}".format(
|
|
||||||
node, attribute_name))
|
|
||||||
else:
|
|
||||||
if str(value) != str(render_value):
|
|
||||||
invalid = True
|
|
||||||
cls.log.error(
|
|
||||||
("Invalid value {} set on {}.{}. "
|
|
||||||
"Expecting {}").format(
|
|
||||||
render_value, node, attribute_name, value)
|
|
||||||
)
|
|
||||||
|
|
||||||
return invalid
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def repair(cls, instance):
|
def repair(cls, instance):
|
||||||
|
|
@ -305,6 +325,10 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin):
|
||||||
"{aov_separator}", instance.data.get("aovSeparator", "_")
|
"{aov_separator}", instance.data.get("aovSeparator", "_")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for attribute, data in cls.get_nodes(instance, renderer).items():
|
||||||
|
for node in data["nodes"]:
|
||||||
|
lib.set_attribute(attribute, data["values"][0], node)
|
||||||
|
|
||||||
with lib.renderlayer(layer_node):
|
with lib.renderlayer(layer_node):
|
||||||
default = lib.RENDER_ATTRS['default']
|
default = lib.RENDER_ATTRS['default']
|
||||||
render_attrs = lib.RENDER_ATTRS.get(renderer, default)
|
render_attrs = lib.RENDER_ATTRS.get(renderer, default)
|
||||||
|
|
|
||||||
|
|
@ -369,7 +369,8 @@
|
||||||
"label": "Arnold Render Attributes",
|
"label": "Arnold Render Attributes",
|
||||||
"use_label_wrap": true,
|
"use_label_wrap": true,
|
||||||
"object_type": {
|
"object_type": {
|
||||||
"type": "text"
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -379,7 +380,8 @@
|
||||||
"label": "Vray Render Attributes",
|
"label": "Vray Render Attributes",
|
||||||
"use_label_wrap": true,
|
"use_label_wrap": true,
|
||||||
"object_type": {
|
"object_type": {
|
||||||
"type": "text"
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -389,7 +391,8 @@
|
||||||
"label": "Redshift Render Attributes",
|
"label": "Redshift Render Attributes",
|
||||||
"use_label_wrap": true,
|
"use_label_wrap": true,
|
||||||
"object_type": {
|
"object_type": {
|
||||||
"type": "text"
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -399,7 +402,8 @@
|
||||||
"label": "Renderman Render Attributes",
|
"label": "Renderman Render Attributes",
|
||||||
"use_label_wrap": true,
|
"use_label_wrap": true,
|
||||||
"object_type": {
|
"object_type": {
|
||||||
"type": "text"
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue