-
-
Save Theverat/e2cc13613471399691090dce63910133 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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