diff --git a/contrib/blender/odm_photo.py b/contrib/blender/odm_photo.py new file mode 100644 index 00000000..9eef207f --- /dev/null +++ b/contrib/blender/odm_photo.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +# Renders a photo. +# To generate a 360 panoramic photo: +# blender -b photo_360.blend --python odm_photo.py -- +# To generate a 360 3D panoramic photo: +# blender -b photo_vr.blend --python odm_photo.py -- +# NB: argument order matters! + +import sys +import bpy +import materials_utils + +surfaceShaderType = 'ShaderNodeEmission' +surfaceShaderName = 'Emission' + + +def main(): + + if len(sys.argv) < 5 or sys.argv[-2] != '--': + sys.exit('Please provide the ODM project path.') + + projectHome = sys.argv[-1] + + bpy.utils.register_module('materials_utils') + + bpy.ops.import_scene.obj(filepath=projectHome + + '/odm_texturing/odm_textured_model_geo.obj', + axis_forward='Y', axis_up='-Z') + + bpy.ops.xps_tools.convert_to_cycles_all() + + model = bpy.data.objects[-1] + minX = float('inf') + maxX = float('-inf') + minY = float('inf') + maxY = float('-inf') + minZ = float('inf') + maxZ = float('-inf') + for coord in model.bound_box: + x = coord[0] + y = coord[1] + z = coord[2] + minX = min(x, minX) + maxX = max(x, maxX) + minY = min(y, minY) + maxY = max(y, maxY) + minZ = min(z, minZ) + maxZ = max(z, maxZ) + + model.location[2] += minZ + + for m in bpy.data.materials: + nt = m.node_tree + nt.nodes.remove(nt.nodes['Color Mult']) + nt.nodes.remove(nt.nodes['Diffuse BSDF']) + nt.nodes.new(surfaceShaderType) + nt.links.new(nt.nodes['Material Output'].inputs[0], + nt.nodes[surfaceShaderName].outputs[0]) + nt.links.new(nt.nodes[surfaceShaderName].inputs[0], + nt.nodes['Diffuse Texture'].outputs[0]) + + blendName = bpy.path.display_name_from_filepath(bpy.data.filepath) + bpy.data.scenes['Scene'].render.filepath = projectHome + + '/odm_photo/odm_' + blendName + '.jpg' + bpy.ops.render.render(write_still=True) + + +if __name__ == '__main__': + main() diff --git a/contrib/blender/photo_360.blend b/contrib/blender/photo_360.blend new file mode 100644 index 00000000..9e450b6c Binary files /dev/null and b/contrib/blender/photo_360.blend differ diff --git a/contrib/blender/photo_vr.blend b/contrib/blender/photo_vr.blend new file mode 100644 index 00000000..e997ad75 Binary files /dev/null and b/contrib/blender/photo_vr.blend differ