diff --git a/openpype/hosts/maya/plugins/publish/validate_rendersettings.py b/openpype/hosts/maya/plugins/publish/validate_rendersettings.py index c2ed1eeaf0..308612e42e 100644 --- a/openpype/hosts/maya/plugins/publish/validate_rendersettings.py +++ b/openpype/hosts/maya/plugins/publish/validate_rendersettings.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- """Maya validator for render settings.""" import re +from collections import OrderedDict from maya import cmds, mel @@ -213,6 +214,44 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin): cls.log.error("Expecting padding of {} ( {} )".format( cls.DEFAULT_PADDING, "0" * cls.DEFAULT_PADDING)) + # load validation definitions from settings + validation_settings = ( + instance.context.data["project_settings"]["maya"]["publish"]["ValidateRenderSettings"].get( + "{}_render_attributes".format(renderer)) + ) + from pprint import pprint + pprint(validation_settings) + # go through definitions and test if such node.attribute exists. + # if so, compare its value from the one required. + for attr, value in OrderedDict(validation_settings).items(): + # first get node of that type + cls.log.debug("{}: {}".format(attr, value)) + node_type = attr.split(".")[0] + attribute_name = ".".join(attr.split(".")[1:]) + nodes = cmds.ls(type=node_type) + + if not isinstance(nodes, list): + cls.log.warning("No nodes of '{}' found.".format(node_type)) + continue + + for node in nodes: + try: + render_value = cmds.getAttr( + "{}.{}".format(node, attribute_name)) + except RuntimeError as e: + invalid = True + cls.log.error( + "Cannot get value of {}.{}".format( + node, attribute_name)) + else: + if value != render_value: + invalid = True + cls.log.error( + ("Invalid value {} set on {}.{}. " + "Expecting {}").format( + render_value, node, attribute_name, value) + ) + return invalid @classmethod diff --git a/openpype/settings/defaults/project_settings/maya.json b/openpype/settings/defaults/project_settings/maya.json index 8600e49518..779b8bb3f3 100644 --- a/openpype/settings/defaults/project_settings/maya.json +++ b/openpype/settings/defaults/project_settings/maya.json @@ -135,6 +135,12 @@ "enabled": false, "attributes": {} }, + "ValidateRenderSettings": { + "arnold_render_attributes": [], + "vray_render_attributes": [], + "redshift_render_attributes": [], + "renderman_render_attributes": [] + }, "ValidateModelName": { "enabled": false, "material_file": { diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json index b737dcda70..4cabf5bb74 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_maya_publish.json @@ -81,6 +81,7 @@ "children": [ { "type": "dict-modifiable", + "store_as_list": true, "key": "arnold_render_attributes", "label": "Arnold Render Attributes", "use_label_wrap": true, @@ -90,6 +91,7 @@ }, { "type": "dict-modifiable", + "store_as_list": true, "key": "vray_render_attributes", "label": "Vray Render Attributes", "use_label_wrap": true, @@ -99,6 +101,7 @@ }, { "type": "dict-modifiable", + "store_as_list": true, "key": "redshift_render_attributes", "label": "Redshift Render Attributes", "use_label_wrap": true, @@ -108,6 +111,7 @@ }, { "type": "dict-modifiable", + "store_as_list": true, "key": "renderman_render_attributes", "label": "Renderman Render Attributes", "use_label_wrap": true,