Exemplo n.º 1
0
def post_render_actions(node, actions, queue='3d'):
    # Proceed with post-render actions (debug, mp4, etc):
    # Debug images:
    post_renders = []
    if node.parm("debug_images").eval():
        for action in actions:
            # Valid only for Mantra renders;
            if not isinstance(action, MantraFarm):
               continue
            # Generate report per file:
            debug_render = BatchFarm(job_name = action.parms['job_name'] + "_debug", queue = queue)
            debug_render.debug_image(action.parms['output_picture'], 
                                     start = action.parms['start_frame'], 
                                     end   = action.parms['end_frame'])
            debug_render.node = action.node
            debug_render.insert_input(action)
            post_renders.append(debug_render)
            # Merge reports:
            merger   = BatchFarm(job_name = action.parms['job_name'] + "_mergeReports", queue = queue)
            ifd_path = os.path.join(os.getenv("JOB"), 'render/sungrid/ifd')
            merger.merge_reports(action.parms['output_picture'], ifd_path=ifd_path, resend_frames=node.parm('rerun_bad_frames').eval())
            merger.node = action.node
            merger.add_input(debug_render)
            post_renders.append(merger)

    # Make a movie from proxy frames:
    if node.parm("make_proxy").eval() and node.parm("make_movie").eval():
        for action in actions:
            # Valid only for Mantra renders:
            if not isinstance(action, MantraFarm):
                continue
            movie  = Batch.BatchFarm(job_name = action.parms['job_name'] + "_mp4", queue = queue)
            movie.make_movie(action.parms['output_picture'])
            movie.node = action.node
            movie.insert_input(action)
            post_renders.append(movie)

    return post_renders
Exemplo n.º 2
0
def mantra_render_with_tiles(action):
    '''Creates a series of Mantra jobs using the same ifds stream with different crop setting 
    and overwritten filename. Secondly generates merge job with general BatchFarm class for 
    joining tiles.'''
    tile_job_ids = []
    mantra_tiles = []
    tiles_x = action.rop.parm('vm_tile_count_x').eval()
    tiles_y = action.rop.parm('vm_tile_count_y').eval()

    parent_job_name = action.parms['job_name']
    for tile in range(tiles_x*tiles_y):
        mantra_farm = MantraFarm(action.node, action.rop, job_name = parent_job_name, \
            crop_parms = (tiles_x,tiles_y,tile))
        mantra_tiles.append(mantra_farm)

    # Tile merging job:
    merging_job_name = action.parms['job_name'] + '_merge'
    merger           = Batch.BatchFarm(job_name = merging_job_name, queue = str(action.node.parm('queue').eval()))
    merger.node      = action.node # NOTE: Only for debugging purposes, we don't rely on this overwise

    # Need to copy it here, as proxies can be made after tiles merging of course...
    merger.parms['make_proxy']  = bool(action.node.parm("make_proxy").eval())

    # Queue control
    merger.parms['output_picture'] = mantra_farm.parms['output_picture'] # This is for house keeping only

    # This prepares commandline to execute:
    merger.join_tiles(mantra_farm.parms['output_picture'],
                          mantra_farm.parms['start_frame'],
                          mantra_farm.parms['end_frame'],
                          tiles_x*tiles_y)

    action.insert_outputs(mantra_tiles)
    [tile.insert_output(merger) for tile in mantra_tiles] 
    # Returns tiles job and merging job. 
    return mantra_tiles, merger