#! /usr/bin/python
import re
import time
from utilities.render_worker 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 BlenderRenderWorker(BaseRenderWorker):
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, args=None, render_all_frames=False, engine='BLENDER_EEVEE'):
super(BlenderRenderWorker, self).__init__(input_path=input_path, output_path=output_path, args=args)
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