mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
update the naming convention for the render outputs
This commit is contained in:
parent
0dbf111d05
commit
7109c6ea1a
7 changed files with 104 additions and 10 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -44,7 +44,8 @@
|
|||
"chunk_size": 10,
|
||||
"group": "none",
|
||||
"deadline_pool": "",
|
||||
"deadline_pool_secondary": ""
|
||||
"deadline_pool_secondary": "",
|
||||
"framePerTask": 1
|
||||
},
|
||||
"NukeSubmitDeadline": {
|
||||
"enabled": true,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"RenderSettings": {
|
||||
"default_render_image_folder": "renders/max",
|
||||
"default_render_image_folder": "renders/3dsmax",
|
||||
"aov_separator": "underscore",
|
||||
"image_format": "exr"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -249,6 +249,11 @@
|
|||
"type": "text",
|
||||
"key": "deadline_pool_secondary",
|
||||
"label": "Deadline pool (secondary)"
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"key": "framePerTask",
|
||||
"label": "Frame Per Task"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue