Merge pull request #316 from BigRoy/enhancement/maya_redshiftproxy_from_renderlayer

Maya: Fix RedshiftProxy export from renderlayer
This commit is contained in:
Ondřej Samohel 2024-04-22 10:20:58 +02:00 committed by GitHub
commit 01fa343706
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 10 deletions

View file

@ -19,7 +19,7 @@ from .lib import pairwise
@contextlib.contextmanager @contextlib.contextmanager
def _allow_export_from_render_setup_layer(): def allow_export_from_render_setup_layer():
"""Context manager to override Maya settings to allow RS layer export""" """Context manager to override Maya settings to allow RS layer export"""
try: try:
@ -102,7 +102,7 @@ def export_in_rs_layer(path, nodes, export=None):
cmds.disconnectAttr(src, dest) cmds.disconnectAttr(src, dest)
# Export Selected # Export Selected
with _allow_export_from_render_setup_layer(): with allow_export_from_render_setup_layer():
cmds.select(nodes, noExpand=True) cmds.select(nodes, noExpand=True)
if export: if export:
export() export()

View file

@ -5,7 +5,13 @@ import os
from maya import cmds from maya import cmds
from ayon_core.pipeline import publish from ayon_core.pipeline import publish
from ayon_core.hosts.maya.api.lib import maintained_selection from ayon_core.hosts.maya.api.lib import (
maintained_selection,
renderlayer
)
from ayon_core.hosts.maya.api.render_setup_tools import (
allow_export_from_render_setup_layer
)
class ExtractRedshiftProxy(publish.Extractor): class ExtractRedshiftProxy(publish.Extractor):
@ -18,6 +24,9 @@ class ExtractRedshiftProxy(publish.Extractor):
def process(self, instance): def process(self, instance):
"""Extractor entry point.""" """Extractor entry point."""
# Make sure Redshift is loaded
cmds.loadPlugin("redshift4maya", quiet=True)
staging_dir = self.staging_dir(instance) staging_dir = self.staging_dir(instance)
file_name = "{}.rs".format(instance.name) file_name = "{}.rs".format(instance.name)
file_path = os.path.join(staging_dir, file_name) file_path = os.path.join(staging_dir, file_name)
@ -60,14 +69,22 @@ class ExtractRedshiftProxy(publish.Extractor):
# Write out rs file # Write out rs file
self.log.debug("Writing: '%s'" % file_path) self.log.debug("Writing: '%s'" % file_path)
# Allow overriding what renderlayer to export from. By default force
# it to the default render layer. (Note that the renderlayer isn't
# currently exposed as an attribute to artists)
layer = instance.data.get("renderLayer", "defaultRenderLayer")
with maintained_selection(): with maintained_selection():
cmds.select(instance.data["setMembers"], noExpand=True) with renderlayer(layer):
cmds.file(file_path, with allow_export_from_render_setup_layer():
pr=False, cmds.select(instance.data["setMembers"], noExpand=True)
force=True, cmds.file(file_path,
type="Redshift Proxy", preserveReferences=False,
exportSelected=True, force=True,
options=rs_options) type="Redshift Proxy",
exportSelected=True,
options=rs_options)
if "representations" not in instance.data: if "representations" not in instance.data:
instance.data["representations"] = [] instance.data["representations"] = []