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
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