Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Maya Hardware support #1553

Merged
merged 2 commits into from
May 27, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions pype/hosts/maya/expected_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
"arnold": "Arnold",
"renderman": "Renderman",
"redshift": "Redshift",
"mayahardware2": "Maya Hardware"
}

# not sure about the renderman image prefix
Expand All @@ -85,6 +86,7 @@
"arnold": "defaultRenderGlobals.imageFilePrefix",
"renderman": "rmanGlobals.imageFileFormat",
"redshift": "defaultRenderGlobals.imageFilePrefix",
"mayahardware2": "defaultRenderGlobals.imageFilePrefix"
}


Expand Down Expand Up @@ -136,6 +138,9 @@ def get(self, renderer, layer):
if renderer.lower() == "renderman":
return self._get_files(ExpectedFilesRenderman(
layer, self._render_instance))
if renderer.lower() == "mayahardware2":
return self._get_files(ExpectedFilesMayaHardware(
layer, self._render_instance))

raise UnsupportedRendererException(
"unsupported {}".format(renderer)
Expand Down Expand Up @@ -917,6 +922,31 @@ def get_aovs(self):
return []


class ExpectedFilesMayaHardware(AExpectedFiles):
"""Expected files for Maya Hardware renderer.

Attributes:
aiDriverExtension (dict): Arnold AOV driver extension mapping.
Is there a better way?
renderer (str): name of renderer.

"""

def __init__(self, layer, render_instance):
"""Constructor."""
super(ExpectedFilesMayaHardware, self).__init__(layer, render_instance)
self.renderer = "mayahardware2"

def get_aovs(self):
"""Get all AOVs.

See Also:
:func:`AExpectedFiles.get_aovs()`

"""
return []


class AOVError(Exception):
"""Custom exception for determining AOVs."""

Expand Down
6 changes: 4 additions & 2 deletions pype/plugins/maya/create/create_render.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,15 +70,17 @@ class CreateRender(plugin.Creator):
'vray': 'vraySettings.fileNamePrefix',
'arnold': 'defaultRenderGlobals.imageFilePrefix',
'renderman': 'defaultRenderGlobals.imageFilePrefix',
'redshift': 'defaultRenderGlobals.imageFilePrefix'
'redshift': 'defaultRenderGlobals.imageFilePrefix',
'mayahardware2': 'defaultRenderGlobals.imageFilePrefix'
}

_image_prefixes = {
'mentalray': 'maya/<Scene>/<RenderLayer>/<RenderLayer>_<RenderPass>',
'vray': 'maya/<scene>/<Layer>/<Layer>',
'arnold': 'maya/<Scene>/<RenderLayer>/<RenderLayer>_<RenderPass>',
'renderman': 'maya/<Scene>/<layer>/<layer>_<aov>',
'redshift': 'maya/<Scene>/<RenderLayer>/<RenderLayer>_<RenderPass>'
'redshift': 'maya/<Scene>/<RenderLayer>/<RenderLayer>_<RenderPass>',
'mayahardware2': 'maya/<Scene>/<RenderLayer>/<RenderLayer>'
}

deadline_servers = {}
Expand Down
17 changes: 17 additions & 0 deletions pype/plugins/maya/publish/collect_render.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@

from maya import cmds
import maya.app.renderSetup.model.renderSetup as renderSetup
from maya.app.renderSetup.model.collection import RenderSettingsCollection

import pyblish.api

Expand Down Expand Up @@ -115,6 +116,9 @@ def process(self, context):

self.maya_layers = maya_render_layers

# Switch to defaultRenderLayer
self._rs.switchToLayerUsingLegacyName("defaultRenderLayer")

for layer in collected_render_layers:
try:
if layer.startswith("LAYER_"):
Expand Down Expand Up @@ -172,6 +176,19 @@ def process(self, context):
renderer = cmds.getAttr(
"defaultRenderGlobals.currentRenderer"
).lower()

# Find any overrides to the current renderer on the layer.
collections = maya_render_layers[expected_layer_name].getChildren()
for collection in collections:
if isinstance(collection, RenderSettingsCollection):
for override in collection.getChildren():
attribute_name = override.attributeName()
if attribute_name != "currentRenderer":
continue

renderer = override.getAttrValue()
continue

# handle various renderman names
if renderer.startswith("renderman"):
renderer = "renderman"
Expand Down
3 changes: 2 additions & 1 deletion pype/plugins/maya/publish/validate_render_single_camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
'vray': 'vraySettings.fileNamePrefix',
'arnold': 'defaultRenderGlobals.imageFilePrefix',
'renderman': 'defaultRenderGlobals.imageFilePrefix',
'redshift': 'defaultRenderGlobals.imageFilePrefix'
'redshift': 'defaultRenderGlobals.imageFilePrefix',
'mayahardware2': 'defaultRenderGlobals.imageFilePrefix'
}


Expand Down
14 changes: 12 additions & 2 deletions pype/plugins/maya/publish/validate_rendersettings.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,17 @@ class ValidateRenderSettings(pyblish.api.InstancePlugin):
'vray': 'vraySettings.fileNamePrefix',
'arnold': 'defaultRenderGlobals.imageFilePrefix',
'renderman': 'rmanGlobals.imageFileFormat',
'redshift': 'defaultRenderGlobals.imageFilePrefix'
'redshift': 'defaultRenderGlobals.imageFilePrefix',
'mayaHardware2': 'defaultRenderGlobals.imageFilePrefix'
}

ImagePrefixTokens = {

'arnold': 'maya/<Scene>/<RenderLayer>/<RenderLayer>_<RenderPass>',
'redshift': 'maya/<Scene>/<RenderLayer>/<RenderLayer>',
'vray': 'maya/<Scene>/<Layer>/<Layer>',
'renderman': '<layer>_<aov>.<f4>.<ext>'
'renderman': '<layer>_<aov>.<f4>.<ext>',
'mayaHardware2': 'maya/<Scene>/<RenderLayer>/<RenderLayer>'
}

# WARNING: There is bug? in renderman, translating <scene> token
Expand Down Expand Up @@ -151,6 +153,14 @@ def get_invalid(cls, instance):
cls.log.error("Wrong directory prefix [ {} ]".format(
dir_prefix))

elif renderer == "mayaHardware2":
if re.search(cls.R_AOV_TOKEN, prefix):
invalid = True
cls.log.error(
"Do not use AOV token [ {} ] - Maya Hardware does not "
"support AOVs.".format(prefix)
)

else:
multipart = cmds.getAttr("defaultArnoldDriver.mergeAOVs")
if multipart:
Expand Down