update the naming convention for the render outputs

This commit is contained in:
Kayla Man 2023-02-17 16:20:26 +08:00
parent 0dbf111d05
commit 7109c6ea1a
7 changed files with 104 additions and 10 deletions

View file

@ -25,11 +25,17 @@ class RenderProducts(object):
def render_product(self, container):
folder = rt.maxFilePath
file = rt.maxFileName
folder = folder.replace("\\", "/")
setting = self._project_settings
render_folder = get_default_render_folder(setting)
filename, ext = os.path.splitext(file)
output_file = os.path.join(folder,
render_folder,
filename,
container)
output_file = os.path.join(folder, render_folder, container)
context = get_current_project_asset()
startFrame = context["data"].get("frameStart")
endFrame = context["data"].get("frameEnd") + 1

View file

@ -44,11 +44,15 @@ class RenderSettings(object):
def set_renderoutput(self, container):
folder = rt.maxFilePath
# hard-coded, should be customized in the setting
file = rt.maxFileName
folder = folder.replace("\\", "/")
# hard-coded, set the renderoutput path
setting = self._project_settings
render_folder = get_default_render_folder(setting)
output_dir = os.path.join(folder, render_folder)
filename, ext = os.path.splitext(file)
output_dir = os.path.join(folder,
render_folder,
filename)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# hard-coded, should be customized in the setting
@ -139,3 +143,22 @@ class RenderSettings(object):
target, renderpass = str(renderlayer_name).split(":")
aov_name = "{0}_{1}..{2}".format(dir, renderpass, ext)
render_elem.SetRenderElementFileName(i, aov_name)
def get_renderoutput(self, container, output_dir):
output = os.path.join(output_dir, container)
img_fmt = self._project_settings["max"]["RenderSettings"]["image_format"] # noqa
outputFilename = "{0}..{1}".format(output, img_fmt)
return outputFilename
def get_render_element(self):
orig_render_elem = list()
render_elem = rt.maxOps.GetCurRenderElementMgr()
render_elem_num = render_elem.NumRenderElements()
if render_elem_num < 0:
return
for i in range(render_elem_num):
render_element = render_elem.GetRenderElementFilename(i)
orig_render_elem.append(render_element)
return orig_render_elem

View file

@ -5,8 +5,10 @@ import getpass
import requests
import pyblish.api
from pymxs import runtme as rt
from openpype.pipeline import legacy_io
from openpype.hosts.max.api.lib import get_current_renderer
from openpype.hosts.max.api.lib_rendersettings import RenderSettings
class MaxSubmitRenderDeadline(pyblish.api.InstancePlugin):
@ -26,6 +28,7 @@ class MaxSubmitRenderDeadline(pyblish.api.InstancePlugin):
group = None
deadline_pool = None
deadline_pool_secondary = None
framePerTask = 1
def process(self, instance):
context = instance.context
@ -55,10 +58,30 @@ class MaxSubmitRenderDeadline(pyblish.api.InstancePlugin):
anatomy_filled = anatomy_data.format(template_data)
template_filled = anatomy_filled["publish"]["path"]
filepath = os.path.normpath(template_filled)
filepath = filepath.replace("\\", "/")
self.log.info(
"Using published scene for render {}".format(filepath)
)
if not os.path.exists(filepath):
self.log.error("published scene does not exist!")
new_scene = self._clean_name(filepath)
# use the anatomy data for setting up the path of the files
orig_scene = self._clean_name(instance.context.data["currentFile"])
expected_files = instance.data.get("expectedFiles")
new_exp = []
for file in expected_files:
new_file = str(file).replace(orig_scene, new_scene)
new_exp.append(new_file)
instance.data["expectedFiles"] = new_exp
metadata_folder = instance.data.get("publishRenderMetadataFolder")
if metadata_folder:
metadata_folder = metadata_folder.replace(orig_scene,
new_scene)
instance.data["publishRenderMetadataFolder"] = metadata_folder
payload = {
"JobInfo": {
@ -78,7 +101,8 @@ class MaxSubmitRenderDeadline(pyblish.api.InstancePlugin):
"Frames": frames,
"ChunkSize": self.chunk_size,
"Priority": instance.data.get("priority", self.priority),
"Comment": comment
"Comment": comment,
"FramesPerTask": self.framePerTask
},
"PluginInfo": {
# Input
@ -131,8 +155,37 @@ class MaxSubmitRenderDeadline(pyblish.api.InstancePlugin):
self.log.info("Ensuring output directory exists: %s" %
dirname)
os.makedirs(dirname)
plugin_data = {}
if self.use_published:
old_output_dir = os.path.dirname(expected_files[0])
output_beauty = RenderSettings().get_renderoutput(instance.name,
old_output_dir)
output_beauty = output_beauty.replace(orig_scene, new_scene)
output_beauty = output_beauty.replace("\\", "/")
plugin_data["RenderOutput"] = output_beauty
renderer_class = get_current_renderer()
renderer = str(renderer_class).split(":")[0]
if (
renderer == "ART_Renderer" or
renderer == "Redshift_Renderer" or
renderer == "V_Ray_6_Hotfix_3" or
renderer == "V_Ray_GPU_6_Hotfix_3" or
renderer == "Default_Scanline_Renderer" or
renderer == "Quicksilver_Hardware_Renderer"
):
render_elem_list = RenderSettings().get_render_element()
for i, render_element in enumerate(render_elem_list):
render_element = render_element.replace(orig_scene, new_scene)
plugin_data["RenderElementOutputFilename%d" % i] = render_element
self.log.debug("plugin data:{}".format(plugin_data))
self.log.info("Scene name was switched {} -> {}".format(
orig_scene, new_scene
))
payload["JobInfo"].update(output_data)
payload["PluginInfo"].update(plugin_data)
self.submit(instance, payload)
@ -158,8 +211,13 @@ class MaxSubmitRenderDeadline(pyblish.api.InstancePlugin):
raise Exception(response.text)
# Store output dir for unified publisher (expectedFilesequence)
expected_files = instance.data["expectedFiles"]
self.log.info("exp:{}".format(expected_files))
output_dir = os.path.dirname(expected_files[0])
instance.data["toBeRenderedOn"] = "deadline"
instance.data["outputDir"] = output_dir
instance.data["deadlineSubmissionJob"] = response.json()
def rename_render_element(self):
pass
def _clean_name(self, path):
return os.path.splitext(os.path.basename(path))[0]

View file

@ -293,8 +293,8 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin):
"Group": self.deadline_group,
"Pool": instance.data.get("primaryPool"),
"SecondaryPool": instance.data.get("secondaryPool"),
"OutputDirectory0": output_dir
# ensure the outputdirectory with correct slashes
"OutputDirectory0": output_dir.replace("\\", "/")
},
"PluginInfo": {
"Version": self.plugin_pype_version,
@ -1000,6 +1000,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin):
"FTRACK_SERVER": os.environ.get("FTRACK_SERVER"),
}
submission_type = instance.data["toBeRenderedOn"]
if submission_type == "deadline":
# get default deadline webservice url from deadline module
self.deadline_url = instance.context.data["defaultDeadline"]

View file

@ -44,7 +44,8 @@
"chunk_size": 10,
"group": "none",
"deadline_pool": "",
"deadline_pool_secondary": ""
"deadline_pool_secondary": "",
"framePerTask": 1
},
"NukeSubmitDeadline": {
"enabled": true,

View file

@ -1,6 +1,6 @@
{
"RenderSettings": {
"default_render_image_folder": "renders/max",
"default_render_image_folder": "renders/3dsmax",
"aov_separator": "underscore",
"image_format": "exr"
}

View file

@ -249,6 +249,11 @@
"type": "text",
"key": "deadline_pool_secondary",
"label": "Deadline pool (secondary)"
},
{
"type": "number",
"key": "framePerTask",
"label": "Frame Per Task"
}
]
},