#! /usr/bin/python from utilities.generic_renderer import * SUPPORTED_FORMATS = ['TGA', 'RAWTGA', 'JPEG', 'IRIS', 'IRIZ', 'AVIRAW', 'AVIJPEG', 'PNG', 'BMP', 'HDR', 'TIFF', 'OPEN_EXR', 'OPEN_EXR_MULTILAYER', 'MPEG', 'CINEON', 'DPX', 'DDS', 'JP2'] class BlenderRenderer(Renderer): def version(self): version = None try: ver_out = subprocess.check_output([self.renderer_path(), '-v']).decode('utf-8') version = ver_out.splitlines()[0].replace('Blender', '').strip() except Exception as e: logger.error("Failed to get Blender version: {}".format(e)) return version renderer = 'Blender' render_engine = 'blender' supported_extensions = ['.blend'] install_paths = ['/Applications/Blender.app/Contents/MacOS/Blender'] def __init__(self, input_path, output_path, render_all_frames=False, engine='BLENDER_EEVEE'): super(BlenderRenderer, self).__init__(input_path=input_path, output_path=output_path) self.engine = engine # or 'CYCLES' self.format = 'JPEG' self.frame = 0 self.render_all_frames = render_all_frames # Stats self.current_frame = -1 self.memory_use = None self.time_elapsed = None self.time_remaining = None self.frame_percent_complete = 0.0 def generate_preview(self, blend_file): pass def _generate_subprocess(self): if self.format not in SUPPORTED_FORMATS: raise ValueError("Unsupported format for Blender: {}".format(self.format)) if self.render_all_frames: cmd = [self.renderer_path(), '-b', self.input, '-E', self.engine, '-o', self.output, '-F', self.format, '-a'] else: cmd = [self.renderer_path(), '-b', self.input, '-E', self.engine, '-o', self.output, '-F', self.format, '-f', str(self.frame)] return cmd def _parse_stdout(self, line): import re pattern = re.compile( r'Fra:(?P\d*).*Mem:(?P\S+).*Time:(?P