Hey all.

I'm trying to submit (with python) a job to deadline that will export vray 
scene to a specified location.
the next step will be to send another job with dependency to the previous 
job that will render those vray scenes files with vray standalone nodes.

i managed to send a job with the right parameters that look similar to the 
job submitted from deadline submitter but it doesn't seems to to take the 
output path for the vray scene from the parameter, instead it take the path 
from the render settings field.
sometimes it renders instead of exporting vray scene files, not sure why.
in addition it doesn't export vray scene file foe each render layers if the 
maya scene contains it (i'm using render layer legacy)

i'm using and old script i have to send jobs to deadline.
in order to send vray scene export jon i cahnge the 'Renderer' to 
'vrayExport' and specifiy the parameter 'VRayExportFile'
this is the job parameters:
[image: Screenshot 2023-04-10 140341.png]
maybe there is a better way to do it..


import subprocess
import pymel.core as pm
from maya import cmds
import sys
import os
import time


class DeadlineLayer:
    def __init__(self):
        self.version = cmds.about(version=True)
        self.scene_file = cmds.file(q=True, sn=True)
        self.project_path = 'example'
        self.camera = 'persp'
        self.priority = 50
        self.width = pm.getAttr("defaultResolution.width")
        self.height = pm.getAttr("defaultResolution.height")
        self.renderer_name = 
pm.getAttr("defaultRenderGlobals.currentRenderer")
        self.output_path = self.project_path + 'images/'
        self.vray_export_path = self.project_path + 'data/vray_scenes/'
        self.output_file_prefix = 'default_output_file_prefix'
        self.startFrame = str(int(pm.playbackOptions(q=True, min=True)))
        self.endFrame = str(int(pm.playbackOptions(q=True, max=True)))
        self.frame_range = self.startFrame + "-" + self.endFrame
        self.chunk_size = 1
        self.job_name = "default_job_name"
        self.output_directory = ''
        self.pool = 'none'
        self.group = ''
        self.batch_name = 'batch_name_default'
        self.plugin = 'MayaBatch'

    def maya_deadline_job(self, layer):
        """
        this function will collect scene file information and write a job 
file
        :return:
        """
        info_txt = 'Animation=1\n' \
                   'Renderer={}\n' \
                   'UsingRenderLayers=1\n' \
                   'RenderLayer={}\n' \
                   'RenderHalfFrames=0\n' \
                   'LocalRendering=0\n' \
                   'StrictErrorChecking=0\n' \
                   'MaxProcessors=0\n' \
                   'AntiAliasing=high\n' \
                   'Version={}\n' \
                   'Build=64bit\n' \
                   'ProjectPath={}\n' \
                   'ImageWidth={}\n' \
                   'ImageHeight={}\n' \
                   'OutputFilePath={}\n' \
                   'OutputFilePrefix={}\n' \
                   'VRayExportFile={}\n' \
                   'Camera={}\n' \
                   'Camera0={}\n' \
                   'Camera1=RENDERShape\n' \
                   'Camera2=frontShape\n' \
                   'Camera3=perspShape\n' \
                   'Camera4=sideShape\n' \
                   'Camera5=topShape\n' \
                   'UseLegacyRenderLayers=1\n' \
                   'IgnoreError211=0'.format(self.renderer_name,
                                             layer,
                                             self.version,
                                             self.project_path,
                                             self.width,
                                             self.height,
                                             self.output_path,
                                             self.output_file_prefix,
                                             self.vray_export_path,
                                             self.camera,
                                             self.camera,)
        maya_deadline_job_file = 
r'{}\maya_deadline_job.job'.format(os.getenv('TEMP'))
        with open(maya_deadline_job_file, 'w') as job_file:
            job_file.write(info_txt)
        return maya_deadline_job_file

    def maya_deadline_info(self, layer):
        """
        this function will collect maya deadline information and write a 
job file
        :return:
        """
        info_txt = 'Plugin={}\n' \
                   'BatchName={}\n' \
                   'Name={}\n' \
                   'Comment=Render Launch by Python\n' \
                   'Pool={}\n' \
                   'Group={}\n' \
                   'SecondaryPool=\n' \
                   'MachineLimit=0\n' \
                   'Priority={}\n' \
                   'OnJobComplete=Nothing\n' \
                   'TaskTimeoutMinutes=0\n' \
                   'MinRenderTimeMinutes=0\n' \
                   'ConcurrentTasks=1\n' \
                   'Department=\n' \
                   'Group=none\n' \
                   'LimitGroups=\n' \
                   'JobDependencies=\n' \
                   'InitialStatus=Active\n' \
                   'OutputFilename0={}\n' \
                   'Frames={}\n' \
                   'UserName={}\n' \
                   'ChunkSize={}'.format(self.plugin,
                                         self.batch_name,
                                         self.job_name,
                                         self.pool,
                                         self.group,
                                         self.priority,
                                         self.output_directory,
                                         self.frame_range,
                                         '',
                                         self.chunk_size
                                         )
        maya_deadline_info_file = 
r'{}\maya_deadline_info.job'.format(os.getenv('TEMP'))
        with open(maya_deadline_info_file, 'w') as job_file:
            job_file.write(info_txt)
        return maya_deadline_info_file

    def submit_to_deadline(self, layer):
        """
        this function will send current scene to deadline for rendering
        :return:
        """
        deadline_cmd = r"C:\Program 
Files\Thinkbox\Deadline10\bin\deadlinecommand.exe"
        job_file = self.maya_deadline_job(layer)
        info_file = self.maya_deadline_info(layer)
        command = '{deadline_cmd} "{info_file}" "{job_file}" 
"{self.scene_file}"'.format(**vars())
        process = subprocess.Popen(command, stdout=subprocess.PIPE)
        lines_iterator = iter(process.stdout.readline, b"")

submit_to_deadline('')


-- 
You received this message because you are subscribed to the Google Groups 
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to python_inside_maya+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/python_inside_maya/88c5d12d-5bce-4eaa-bfe2-151761d9627cn%40googlegroups.com.

Reply via email to