Пример #1
0
    def build(self):
        _nuke_proxy_template = "{d}/usr/custom/nuke/proxy_script_templates/nuke_proxy_v002.nk".format(d=self.dabrender)
        _nuke_version = "Nuke{}".format(config.CurrentConfiguration().nukeversion)
        _nuke_envkey = "nuke{}".format(config.CurrentConfiguration().nukeversion)
        _nuke_executable="/Applications/{n}/{n}.app/Contents/MacOS/{n}".format(n=_nuke_version)
        _nuke_range="{start}-{end}".format(start=self.startframe, end=self.endframe)
        _nukescriptbaseonly = os.path.basename(self.nukescriptfullpath)

        self.job = author.Job(title="Nuke Render Job: {} {}".format(self.renderusername, _nukescriptbaseonly),
                              priority=100,
                              envkey=[_nuke_envkey],
                              metadata="user={} realname={}".format(self.user,self.renderusername),
                              comment="LocalUser is {} {} {}".format(self.user, self.renderusername,
                                                                     self.renderusernumber),
                              service="NukeRender")


        # ############## 1 NUKE RENDER ###############
        parent = author.Task(title="Nuke Rendering",service="NukeRender")
        parent.serialsubtasks = 0

        if (self.endframe - self.startframe) < self.framechunks:
            self.framechunks = 1
            _chunkend = self.endframe
        else:
            _chunkend = self.startframe + self.framechunks

        _chunkstart = self.startframe

        while self.endframe >= _chunkstart:
            if _chunkend >= self.endframe:
                _chunkend = self.endframe

            t1 = "{}  {}-{}".format("Nuke Batch Render", _chunkstart, _chunkend)
            thischunk = author.Task(title=t1, service="NukeRender")

            commonargs = [_nuke_executable, "-x" ]
            userspecificargs = [
                utils.expandargumentstring(self.options),
            ]
            filespecificargs = [self.nukescriptfullpath, "{}-{}".format( _chunkstart, _chunkend)]

            finalargs = commonargs + userspecificargs + filespecificargs

            render = author.Command(argv=finalargs,
                                    service="NukeRender",
                                    envkey=[_nuke_envkey]
                                    )
            thischunk.addCommand(render)
            _chunkstart = _chunkend + 1
            _chunkend += self.framechunks
            parent.addChild(thischunk)

        self.job.addChild(parent)
Пример #2
0
    def build(self):
        _nuke_proxy_template = "{d}/usr/custom/nuke/proxy_script_templates/nuke_proxy_v002.nk".format(d=self.dabrender)
        _nuke_version = "Nuke{}".format(config.CurrentConfiguration().nukeversion)
        _nuke_envkey = "nuke{}".format(config.CurrentConfiguration().nukeversion)
        _nuke_executable="{n}".format(n=_nuke_version)
        _nukescriptbaseonly = os.path.basename(self.nukescriptfullpath)

        if self.testing:
            _service_Testing="Testing"
            _tier="admin"
        else:
            _service_Testing=""
            _tier="batch"

        self.job = author.Job(title="Nuke Render Job: {} {}".format(self.renderusername, _nukescriptbaseonly),
                              priority=100,
                              envkey=[_nuke_envkey,"ProjectX",
                                    "TYPE={}".format(self.envtype),
                                    "SHOW={}".format(self.envshow),
                                    "PROJECT={}".format(self.envproject),
                                    "SCENE={}".format(self.envscene),
                                    "SCENENAME={}".format(self.scenebasename)],
                              metadata="user={} realname={}".format(self.renderusernumber,self.renderusername),
                              comment="LocalUser is {} {} {}".format(
                                      self.renderusernumber, self.renderusername,self.renderusernumber),
                              tier=_tier,
                              projects=[str(self.projectgroup)],
                              tags=["theWholeFarm"],
                              service=_service_Testing)

        # ############## 1 NUKE RENDER ###############
        parent = author.Task(title="Nuke Rendering",service="NukeRender")
        parent.serialsubtasks = 0

        _totalframes=int(self.endframe-self.startframe+1)
        _chunks = int(self.framechunks)
        _framesperchunk=_totalframes
        if _chunks < _totalframes:
            _framesperchunk=int(_totalframes/_chunks)
        else:
            _chunks=1

        for i, chunk in enumerate(range(1,_chunks+1)):
            _offset=i*_framesperchunk
            _chunkstart=(self.startframe+_offset)
            _chunkend=(_offset+_framesperchunk)
            _chunkby=self.byframe
            logger.info("Chunk {} is frames {}-{}".format(chunk,_chunkstart,_chunkend))
            if chunk ==_chunks:
                _chunkend = self.endframe

            t1 = "{}  {}-{}".format("Nuke Batch Render", _chunkstart, _chunkend)
            thischunk = author.Task(title=t1, service="NukeRender")

            commonargs = [_nuke_executable]
            filespecificargs = ["-x", self.nukescriptfullpath, "{}-{}".format( _chunkstart, _chunkend)]
            if self.options:
                userspecificargs = [utils.expandargumentstring(self.options),]
                finalargs = commonargs + userspecificargs + filespecificargs
            else:
                finalargs = commonargs + filespecificargs

            render = author.Command(
                                    argv=finalargs,
                                    service="NukeRender",
                                    tags=["nuke",],
                                    envkey=[_nuke_envkey])
            thischunk.addCommand(render)
            parent.addChild(thischunk)

        self.job.addChild(parent)
Пример #3
0
    def build(self):
        """
        Main method to build the job
        """
        ########### TESTING ##############
        # _threadsM=4
        _threadsPixarRender=4
        _threads_RfMRibGen=1
        _servicePixarRender=_service_RfMRibGen=_serviceMaya=None

        if self.testing:
            _service_Testing="Testing"
            _tier="admin"

        else:
            _service_Testing=""
            _tier="batch"

        _servicePixarRender="PixarRender"
        _serviceMaya="PixarRender"
        _service_RfMRibGen="RfMRibGen"
        _service_NukeRender="NukeRender"

        #############################


        # ################ 0 JOB ################
        self.job = author.Job(title="Renderman: {} {} {}-{}".format(
              self.renderusername,self.scenename,self.startframe,self.endframe),
              priority=10,
              envkey=[self.envkey_rms,"ProjectX",
                    "TYPE={}".format(self.envtype),
                    "SHOW={}".format(self.envshow),
                    "PROJECT={}".format(self.envproject),
                    "SCENE={}".format(self.envscene),
                    "SCENENAME={}".format(self.scenebasename)],
              metadata="user={} username={} usernumber={}".format(
                      self.user, self.renderusername,self.renderusernumber),
              comment="LocalUser is {} {} {}".format(self.user,self.renderusername,self.renderusernumber),
              projects=[str(self.projectgroup)],
              tier=_tier,
              tags=["theWholeFarm",],
              service=_service_Testing)

        self.job.newDirMap("/dabrender", "/Volumes/dabrender", "linux")
        self.job.newDirMap("/dabrender", "/Volumes/dabrender", "osx")
        self.job.newDirMap("/dabrender", "Z:", "windows")
        self.job.newDirMap("/Volumes/dabrender", "Z:", "windows")

        '''
        self.job.newDirMap("Z:","//Volumes/dabrender", "UNC")
        self.job.newDirMap("Z:","/Volumes/dabrender", "NFS")
         {{mayabatch} {maya} NFS}
         {{X:/} {//fileserver/projects/} UNC}
         {{X:/} {/fileserver/projects/} NFS}
         { { source } { destination } zone }
        '''


        # ############## 0 ThisJob #################
        task_thisjob = author.Task(title="Renderman Job")
        task_thisjob.serialsubtasks = 1

        # ############## 1 PREFLIGHT ##############
        task_preflight = author.Task(title="Preflight")
        task_preflight.serialsubtasks = 1
        task_thisjob.addChild(task_preflight)
        task_generate_rib_preflight = author.Task(title="Generate RIB Preflight")
        command_ribgen = author.Command(argv=["maya","-batch","-proj", utils.usedirmap(self.mayaprojectpath),
                                              "-command",
                                              "renderManBatchGenRibForLayer {layerid} {start} {end} {phase}".format(
                                                  layerid=0, start=self.startframe, end=self.endframe, phase=1),
                                              "-file", utils.usedirmap(self.mayascenefilefullpath)],
                                              tags=["maya", "rms", "theWholeFarm"],
                                              atleast=_threads_RfMRibGen,atmost=_threads_RfMRibGen,
                                              service=_service_RfMRibGen)
        task_generate_rib_preflight.addCommand(command_ribgen)
        task_preflight.addChild(task_generate_rib_preflight)
        task_render_preflight = author.Task(title="Render Preflight")

        command_render_preflight = author.Command(argv=[
                "prman","-t:{}".format(_threadsPixarRender), "-Progress", "-recover", "%r", "-checkpoint", "5m",
                "-cwd", utils.usedirmap(self.mayaprojectpath),
                "renderman/{}/rib/job/job.rib".format(self.scenebasename)],
                tags=["prman", "theWholeFarm"],
                atleast=_threadsPixarRender,atmost=_threadsPixarRender,
                service=_servicePixarRender)

        task_render_preflight.addCommand(command_render_preflight)
        task_preflight.addChild(task_render_preflight)

        # ############## 3 RIBGEN ##############
        task_render_allframes = author.Task(title="ALL FRAMES {}-{}".format(self.startframe, self.endframe))
        task_render_allframes.serialsubtasks = 1
        task_ribgen_allframes = author.Task(title="RIB GEN {}-{}".format(self.startframe, self.endframe))

        # divide the frame range up into chunks
        _totalframes=int(self.endframe-self.startframe+1)
        _chunks = int(self.ribgenchunks)
        _framesperchunk=_totalframes
        if _chunks < _totalframes:
            _framesperchunk=int(_totalframes/_chunks)
        else:
            _chunks=1

        # loop thru chunks
        for i,chunk in enumerate(range(1,_chunks+1)):
            _offset=i*_framesperchunk
            _chunkstart=(self.startframe+_offset)
            _chunkend=(_offset+_framesperchunk)
            logger.info("Chunk {} is frames {}-{}".format(chunk,_chunkstart,_chunkend))

            if chunk ==_chunks:
                _chunkend = self.endframe

            task_generate_rib = author.Task(title="RIB GEN chunk {} frames {}-{}".format(
                    chunk,_chunkstart, _chunkend ))
            command_generate_rib = author.Command(argv=[
                    "maya","-batch","-proj", utils.usedirmap(self.mayaprojectpath),"-command",
                    "renderManBatchGenRibForLayer {layerid} {start} {end} {phase}".format(
                            layerid=0, start=_chunkstart, end=_chunkend, phase=2),
                            "-file", utils.usedirmap(self.mayascenefilefullpath)],
                    tags=["maya", "rms", "theWholeFarm"],
                    atleast=int(_threads_RfMRibGen),atmost=int(_threads_RfMRibGen),
                    service=_service_RfMRibGen)
            task_generate_rib.addCommand(command_generate_rib)
            task_ribgen_allframes.addChild(task_generate_rib)

        task_render_allframes.addChild(task_ribgen_allframes)


        # ############### 4 RENDER ##############
        task_render_frames = author.Task(title="RENDER Frames {}-{}".format(self.startframe, self.endframe))
        task_render_frames.serialsubtasks = 0

        for frame in range(self.startframe, (self.endframe + 1), self.byframe):
            _shofile = "{proj}/{scenebase}.{frame:04d}.{ext}".format(
                proj=self.renderimages, scenebase=self.scenebasename, frame=frame, ext=self.outformat)
            _imgfile = "{proj}/{scenebase}.{frame:04d}.{ext}".format(
                proj=self.finaloutputimagebase, scenebase=self.scenebasename, frame=frame, ext=self.outformat)
            _statsfile = "{proj}/rib/{frame:04d}/{frame:04d}.xml".format(
                proj=self.rendermanpath, frame=frame)
            _ribfile = "{proj}/rib/{frame:04d}/{frame:04d}.rib".format(
                proj=self.rendermanpath, frame=frame)

            task_render_rib = author.Task(title="RENDER Frame %s" % frame, preview="sho {}".format(_shofile),
                                          metadata="statsfile={} imgfile={}".format(_statsfile, _imgfile))
            commonargs = ["prman", "-cwd", utils.usedirmap(self.mayaprojectpath)]

            rendererspecificargs = []

            # ################ handle image resolution formats ###########
            if self.resolution == "720p":
                self.xres, self.yres = 1280, 720
                rendererspecificargs.extend(["-res", "%s" % self.xres, "%s" % self.yres])
            elif self.resolution == "1080p":
                self.xres, self.yres = 1920, 1080
                rendererspecificargs.extend(["-res", "%s" % self.xres, "%s" % self.yres])
            elif self.resolution == "540p":
                self.xres, self.yres = 960, 540
                rendererspecificargs.extend(["-res", "%s" % self.xres, "%s" % self.yres])
            elif self.resolution == "108p":
                self.xres, self.yres = 192, 108
                rendererspecificargs.extend(["-res", "%s" % self.xres, "%s" % self.yres])

            if self.rendermaxsamples != "FROMFILE":
                rendererspecificargs.extend([ "-maxsamples", "{}".format(self.rendermaxsamples) ])
            if self.threadmemory != "FROMFILE":
                rendererspecificargs.extend([ "-memorylimit", "{}".format(self.threadmemory) ])
            # if self.rendermaxsamples != "FROMFILE":
            #     rendererspecificargs.extend([ "-maxsamples", "{}".format(self.rendermaxsamples) ])
            # if self.threads != "FROMFILE":
            #     rendererspecificargs.extend([ "-maxsamples", "{}".format(self.rendermaxsamples) ])


            rendererspecificargs.extend([
                # "-pad", "4",
                # "-memorylimit", self.threadmemory,  # mb
                "-t:{}".format(self.threads),
                "-Progress",
                "-recover", "%r",
                "-checkpoint", "5m",
                "-statslevel", "2",
                # "-maxsamples", "{}".format(self.rendermaxsamples)  # override RIB ray trace hider maxsamples
                # "-pixelvariance","3"      # override RIB PixelVariance
                # "-d", ""                  # dispType
                #                 -version          : print the version
                # "-progress    ",     : print percent complete while rendering
                # -recover [0|1]    : resuming rendering partial frames
                # -t:X              : render using 'X' threads
                # -woff msgid,...   : suppress error messages from provided list
                # -catrib file      : write RIB to 'file' without rendering
                # -ascii            : write RIB to ASCII format file
                # -binary           : write RIB to Binary format file
                # -gzip             : compress output file
                # -capture file     : write RIB to 'file' while rendering
                # -nobake           : disallow re-render baking
                # -res x y[:par]    : override RIB Format
                # -crop xmin xmax ymin ymax
                #                   : override RIB CropWindow
                # -maxsamples i     : override RIB ray trace hider maxsamples
                # -pixelvariance f  : override RIB PixelVariance
                # -d dispType       : override RIB Display type
                # -statsfile f      : override RIB stats file & level (1)
                # -statslevel i     : override RIB stats level
                # -memorylimit f    : override RIB to set memory limit ratio
                # -checkpoint t[,t] : checkpoint interval and optional exit time
            ])
            userspecificargs = [
                utils.expandargumentstring(self.options),
                "{}".format(_ribfile)
            ]
            finalargs = commonargs + rendererspecificargs + userspecificargs
            command_render = author.Command(argv=finalargs,
                                            #envkey=[self.envkey_prman],
                                            tags=["prman", "theWholeFarm"],
                                            atleast=int(self.threads),
                                            atmost=int(self.threads),
                                            service=_servicePixarRender)

            task_render_rib.addCommand(command_render)
            task_render_frames.addChild(task_render_rib)

        task_render_allframes.addChild(task_render_frames)
        task_thisjob.addChild(task_render_allframes)


        # ############## 5 PROXY ###############
        # using nuke as exr colour is handled correctly

        if self.makeproxy:

            #### using the proxy_run.py script
            try:
                _directory = "{p}/renderman/{s}/images".format( p=self.mayaprojectpath, s=self.scenebasename)
                _nuke_envkey = "proxynuke{}".format(config.CurrentConfiguration().nukeversion)
                _proxy_runner_cmd = ["proxy_run.py","-s",_directory]

                task_proxy = author.Task(title="Proxy Generation", service=_service_NukeRender)
                nukecommand = author.Command(argv=_proxy_runner_cmd,
                                      service="NukeRender",
                                      tags=["nuke", "theWholeFarm"],
                                      envkey=[_nuke_envkey])
                task_proxy.addCommand(nukecommand)
                task_thisjob.addChild(task_proxy)
            except Exception, proxyerror:
                logger.warn("Cant make a proxy {}".format(proxyerror))
Пример #4
0
    def build(self):
        """
        Main method to build the job
        """
        ########### TESTING ##############
        # _threadsM=4
        _threadsPixarRender=4
        _threads_RfMRibGen=4
        _threadsMaya=4
        _servicePixarRender=_service_RfMRibGen=_serviceMaya=None

        if self.testing:
            _service_Testing="Testing"
            _tier="admin"

        else:
            _service_Testing=""
            _tier="batch"

        _servicePixarRender="PixarRender"
        _serviceMaya="PixarRender"
        _service_RfMRibGen="RfMRibGen"
        _service_NukeRender="NukeRender"

        #############################


        # ################ 0 JOB ################
        self.job = author.Job(title="MentalRay: {} {} {}-{}".format(self.renderusername,
                                                                     self.scenename,self.startframe,self.endframe),
                              priority=10,
                              envkey=[self.envkey_maya,"ProjectX",
                                    "TYPE={}".format(self.envtype),
                                    "SHOW={}".format(self.envshow),
                                    "PROJECT={}".format(self.envproject),
                                    "SCENE={}".format(self.envscene),
                                    "SCENENAME={}".format(self.scenebasename)],
                              metadata="user={} username={} usernumber={}".format(self.user, self.renderusername,
                                                                                  self.renderusernumber),
                              comment="LocalUser is {} {} {}".format(self.user,
                                                                     self.renderusername,
                                                                     self.renderusernumber),
                              projects=[str(self.projectgroup)],

                              tier=_tier,
                              tags=[
                                     "theWholeFarm",
                                    ],
                              service=_service_Testing)

        self.job.newDirMap("/dabrender", "/Volumes/dabrender", "linux")
        self.job.newDirMap("/dabrender", "/Volumes/dabrender", "osx")
        self.job.newDirMap("/dabrender", "Z:", "windows")
        self.job.newDirMap("/Volumes/dabrender", "Z:", "windows")
        # self.job.newDirMap("Z:","//Volumes/dabrender", "UNC")
        # self.job.newDirMap("Z:","/Volumes/dabrender", "NFS")


        # ############## PARENT #################
        task_thisjob = author.Task(title="Maya Render Job", service="MayaMentalRay")
        task_thisjob.serialsubtasks = 1


        # ############## 1 PREFLIGHT ##############


        # ############## 3 RENDER ##############
        task_render = author.Task(title="Rendering",service="MayaMentalRay")
        task_render.serialsubtasks = 0

        if (self.endframe - self.startframe) < self.framechunks:
            self.framechunks = 1
            _chunkend = self.endframe
        else:
            _chunkend = self.startframe + self.framechunks

        _chunkstart = self.startframe

        while self.endframe >= _chunkstart:
            if _chunkend >= self.endframe:
                _chunkend = self.endframe

            t1 = "{}  {}-{}".format(self.renderername,_chunkstart, _chunkend)
            thischunk = author.Task(title=t1,
                                    service="MayaMentalRay")

            commonargs = [
                "Render",
                "-r", self.renderer,
                "-proj", self.mayaprojectpath,
                "-s", "{}".format(_chunkstart),
                "-e", "{}".format(_chunkend),
                "-b", self.byframe,
                "-rd", self.finaloutputpath,
                "-rt", self.threads,
                "-mem", self.threadmemory,
                "-im", self.mayascenenamebase,  # this is the name bit of below
                "-fnc", "3"  # this means name.#.ext
            ]

            rendererspecificargs = []

            if self.resolution == "720p":
                self.xres, self.yres = 1280, 720
                rendererspecificargs.extend(["-x", "%s" % self.xres])
                rendererspecificargs.extend(["-y", "%s" % self.yres])
                rendererspecificargs.extend(["-ard", "1.778"])
            elif self.resolution == "1080p":
                self.xres, self.yres = 1920, 1080
                rendererspecificargs.extend(["-x", "%s" % self.xres])
                rendererspecificargs.extend(["-y", "%s" % self.yres])
                rendererspecificargs.extend(["-ard", "1.778"])
            elif self.resolution == "540p":
                self.xres, self.yres = 960, 540
                rendererspecificargs.extend(["-x", "%s" % self.xres])
                rendererspecificargs.extend(["-y", "%s" % self.yres])
                rendererspecificargs.extend(["-ard", "1.778"])
            elif self.resolution == "108p":
                self.xres, self.yres = 192, 108
                rendererspecificargs.extend(["-x", "%s" % self.xres])
                rendererspecificargs.extend(["-y", "%s" % self.yres])
                rendererspecificargs.extend(["-ard", "1.778"])
            else:
                # dont define the resolutions or aspect - so use what is the file
                pass

            rendererspecificargs.extend([
                "-mem", "4000",
                "-v", "4",
                "-pad", "4",
                #"-of", "%s" % self.outformat,
                # the -of flag is fawlty for setting exr
                "-skipExistingFrames", "%s" % self.skipframes])

            userspecificargs = [
                utils.expandargumentstring(self.options),
                self.mayascenefilefullpath
            ]

            finalargs = commonargs + rendererspecificargs + userspecificargs
            render = author.Command(argv=finalargs,
                                    service="MayaMentalRay",
                                    tags=["maya", "theWholeFarm"],
                                    atmost=int(self.threads),
                                    atleast=int(self.threads),
                                    envkey=["maya{}".format(self.mayaversion)]
                                    )
            # thischunk.addCommand(env)
            thischunk.addCommand(render)
            _chunkstart = _chunkend + 1
            _chunkend += self.framechunks
            task_render.addChild(thischunk)

        task_thisjob.addChild(task_render)

        # ############## 4 PROXY ###############
        # using nuke as exr colour is handled correctly

        if self.makeproxy:

            #### using the proxy_run.py script
            try:
                _directory = "{p}/images/{s}".format( p=self.mayaprojectpath, s=self.mayascenenamebase)
                _nuke_envkey = "proxynuke{}".format(config.CurrentConfiguration().nukeversion)
                _proxy_runner_cmd = ["proxy_run.py","-s",_directory]

                task_proxy = author.Task(title="Proxy Generation", service="NukeRender")
                nukecommand = author.Command(argv=_proxy_runner_cmd,
                                      service="NukeRender",
                                      tags=["nuke", "theWholeFarm"],
                                      envkey=[_nuke_envkey])
                task_proxy.addCommand(nukecommand)
                task_thisjob.addChild(task_proxy)
            except Exception, proxyerror:
                logger.warn("Cant make a proxy {}".format(proxyerror))