Skip to content

Instantly share code, notes, and snippets.

@Theverat
Created May 15, 2018 16:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Theverat/e2cc13613471399691090dce63910133 to your computer and use it in GitHub Desktop.
Save Theverat/e2cc13613471399691090dce63910133 to your computer and use it in GitHub Desktop.
import bpy, os, sys, shutil
import numpy as np
file_extensions = {
"OPEN_EXR_MULTILAYER": ".exr",
"PNG": ".png",
}
file_format = "PNG"
sides = ['Left', 'Right']
test_index = 0
def render_stereo(dst_path):
folder = os.path.join(dst_path, 'Blender') if (dst_path is not '') else os.getcwd()
if not os.path.isdir(folder):
os.mkdir(folder)
print('---FOLDER: ', folder)
scene = bpy.data.scenes['Scene']
luxcore_spot_image = bpy.data.lamps['Spot'].luxcore.image
bpy_mapname = None if (luxcore_spot_image is None) else bpy.data.lamps['Spot'].luxcore.image.filepath
try:
for side in sides:
scene.camera = scene.objects['{} Camera'.format(side)]
name = side + "_%03d" % test_index
scene.render.filepath = os.path.join(folder, name)
scene.render.image_settings.file_format = file_format
bpy.ops.render.render(write_still=True)
side_out_folder = os.path.join(folder, side)
if not os.path.isdir(side_out_folder):
os.mkdir(side_out_folder)
ext = file_extensions[file_format]
shutil.move(os.path.join(folder, name + ext), os.path.join(folder, side, name + ext))
finally:
scene.render.filepath = os.path.join(dst_path, 'Blender') if (dst_path is not '') else os.getcwd()
print('---FILEPATH: ', scene.render.filepath)
return 0
def load_default_settings():
pass
def camera_reset():
scene = bpy.data.scenes['Scene']
old_location = scene.objects['Module'].location.copy()
old_rotation = scene.objects['Module'].rotation_euler.copy()
old = {}
for object in scene.objects:
if object.type == None:
old[object] = {
'location': object.location.copy(),
'rotation_euler': object.rotation_euler.copy(),
}
object.location -= old_location
object.location.rotate(old_rotation)
object.rotation_euler.rotate(old_rotation)
return old
def render_stereo_reset(dst_path):
print('\n\n\n---------------------------------------- BEGIN render_scene.py ----------------------------------------')
old = camera_reset()
try:
res = render_stereo(dst_path)
finally:
for obj, transform in old.items():
obj.location = transform['location']
obj.rotation_euler = transform['rotation_euler']
if res == 0:
print('***RENDER HAS BEEN COMPLETED SUCCESSFULLY***')
else:
print('***RENDER HAS FAILED***')
print('---------------------------------------- END render_scene.py ----------------------------------------')
class OBJECT_PT_renderstereo(bpy.types.Panel):
bl_label = "Render Stereo"
bl_space_type = "PROPERTIES"
bl_region_type = "WINDOW"
bl_context = "render"
is_left = True
def draw_header(self, context):
layout = self.layout
layout.label(text="", icon="RENDERLAYERS")
def draw(self, context):
layout = self.layout
row = layout.row()
split = row.split(percentage=0.5)
col_left = split.column()
col_right = split.column()
col_left.operator("render.stereo", text="Render")
col_right.operator("render.stereo_load_default_settings", text="Load Default Settings")
class OBJECT_OT_renderstereo(bpy.types.Operator):
bl_label = "Render Stereo"
bl_idname = "render.stereo"
bl_description = "Render Stereo"
def execute(self, context):
render_stereo_reset('')
return {'FINISHED'}
class OBJECT_OT_renderstereo_load_default_settings(bpy.types.Operator):
bl_label = "Load Default Settings"
bl_idname = "render.stereo_load_default_settings"
bl_description = "Load Default Settings"
def execute(self, context):
load_default_settings()
return {'FINISHED'}
def register():
bpy.utils.register_module(__name__)
def unregister():
bpy.utils.unregister_module(__name__)
def throw_error_and_exit(error_msg, exception_str=''):
from inspect import currentframe, getframeinfo
frame_info = getframeinfo(currentframe())
print('Error!')
print(frame_info.filename, frame_info.lineno)
print(error_msg)
print(exception_str)
exit()
def set_module_coord_frames(sim_params_path, interm_dir):
# Definitions for LuxCore2
bpy.data.scenes['Scene'].render.engine = 'LUXCORE'
bpy.data.lamps['Spot'].luxcore.gamma = 1
bpy.data.scenes['Scene'].luxcore.config.engine = 'PATH'
bpy.data.scenes['Scene'].luxcore.halt.enable = True
bpy.data.scenes['Scene'].luxcore.halt.samples = 2
blender_cams = {'Left Camera', 'Right Camera'}
for cam in blender_cams:
bpy.data.cameras[cam].luxcore.imagepipeline.tonemapper.type = 'TONEMAP_LINEAR'
bpy.data.cameras[cam].luxcore.imagepipeline.tonemapper.use_autolinear = False
bpy.data.cameras[cam].luxcore.imagepipeline.tonemapper.linear_scale = 0.00001
pattern_path = os.path.join(os.getcwd(),'pattern.png')
image_name = os.path.basename(pattern_path)
from bpy_extras import image_utils
img = image_utils.load_image(image_name, os.path.dirname(pattern_path))
bpy.data.lamps['Spot'].luxcore.image = img
def main():
print('Starting render_scene.py')
# extract the params of render_scene.py from all the params given from command line
argv = sys.argv
print(argv,len(argv))
set_module_coord_frames(argv[0], argv[1])
if 'no_render' not in argv:
render_stereo_reset('')
if __name__ == "__main__":
for i in range(100):
print(i)
global test_index
test_index = i
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment