lib/glitch3d/bpy/helpers.py in glitch3d-0.1.0 vs lib/glitch3d/bpy/helpers.py in glitch3d-0.1.1

- old
+ new

@@ -1,17 +1,22 @@ +YELLOW = (1,0.7,0.1,1) + +def debug(): + code.interact(local=dict(globals(), **locals())) + sys.exit("Aborting execution") + # Helper methods def look_at(camera_object, point): location_camera = camera_object.matrix_world.to_translation() location_point = point.matrix_world.to_translation() direction = location_point - location_camera rot_quat = direction.to_track_quat('-Z', 'Y') camera_object.rotation_euler = rot_quat.to_euler() def empty_materials(): - mats = bpy.data.materials - for mat in mats.keys(): - mats.remove(mats[mat]) + for material in bpy.data.materials.keys(): + bpy.data.materials.remove(object.data.materials[material]) def shoot(camera, model_object, filepath): look_at(camera, model_object) print('Camera now at location: ' + camera_location_string(camera) + ' / rotation: ' + camera_rotation_string(camera)) bpy.context.scene.render.filepath = filepath @@ -40,25 +45,25 @@ def rand_color_vector(): return (rand_color_value(), rand_color_value(), rand_color_value(), 1) def rand_scale(): - return round(random.uniform(0, 0.3), 10) + return round(random.uniform(0, 0.15), 10) +def rand_scale_vector(): + return(rand_scale(), rand_scale(), rand_scale()) + def get_args(): parser = argparse.ArgumentParser() - # get all script args _, all_arguments = parser.parse_known_args() double_dash_index = all_arguments.index('--') script_args = all_arguments[double_dash_index + 1: ] - # add parser rules parser.add_argument('-f', '--file', help="obj file to render") parser.add_argument('-n', '--shots-number', help="number of shots desired") parser.add_argument('-m', '--mode', help="quality mode: low | high") - parsed_script_args, _ = parser.parse_known_args(script_args) return parsed_script_args def camera_rotation_string(camera): return str(int(camera.rotation_euler.x)) + ' ' + str(int(camera.rotation_euler.y)) + ' ' + str(int(camera.rotation_euler.z)) @@ -72,26 +77,53 @@ def assign_node_to_output(material, new_node): assert material.use_nodes == True output_node = material.node_tree.nodes['Material Output'] material.node_tree.links.new(new_node.outputs[0], output_node.inputs['Surface']) +# Returns a new Cycles material with default DiffuseBsdf node linked to output def create_cycles_material(): material = bpy.data.materials.new('Object Material - ' + str(uuid.uuid1())) material.use_nodes = True - - nodes = material.node_tree.nodes - new_node = nodes.new(random.choice(SHADERS)) - - assign_node_to_output(material, new_node) + # nodes = material.node_tree.nodes + # new_node = nodes.new(random.choice(SHADERS)) + # assign_node_to_output(material, new_node) return material -def assign_random_texture_to_material(material): +def random_texture(): + texture_path = os.path.expanduser('fixtures/textures/checkered_texture.jpg') + # new_texture = bpy.data.textures.new('ColorTex', type = 'IMAGE') + return bpy.data.images.load(texture_path) + # rand.choice() + +def assign_texture_to_material(material, texture): assert material.use_nodes == True + # If its a default material bsdf_node = material.node_tree.nodes['Diffuse BSDF'] assign_node_to_output(material, bsdf_node) - texture_node = material.node_tree.nodes.new('ShaderNodeTexture') + texture_node = material.node_tree.nodes.new('ShaderNodeTexImage') + uv_node = material.node_tree.nodes.new('ShaderNodeUVMap') + # uv_node.uv_map = 'UV' + texture_node.image = texture material.node_tree.links.new(texture_node.outputs[0], bsdf_node.inputs[0]) - # code.interact(local=dict(globals(), **locals())) - texture_path = os.path.expanduser('fixtures/textures/25.jpg') - new_texture = bpy.data.textures.new('ColorTex', type = 'IMAGE') - new_texture.image = bpy.data.images.load(texture_path) - texture_node.texture = new_texture + material.node_tree.links.new(texture_node.inputs['Vector'], uv_node.outputs['UV']) + +def make_object_gold(object): + material = bpy.data.materials.new('Gold Material - ' + str(uuid.uuid1())) + material.use_nodes = True + glossy_node = material.node_tree.nodes.new('ShaderNodeBsdfGlossy') + glossy_node.inputs[0].default_value = YELLOW + # roughness + glossy_node.inputs[1].default_value = 0.1 + assign_node_to_output(material, glossy_node) + assign_material(object, material) + +def make_object_reflector(object): + object.scale = (REFLECTOR_SCALE, REFLECTOR_SCALE, REFLECTOR_SCALE) + emissive_material = bpy.data.materials.new('Emissive Material #' + str(index)) + emissive_material.use_nodes = True + emission_node = emissive_material.node_tree.nodes.new('ShaderNodeEmission') + # Set color + emission_node.inputs[0].default_value = rand_color_vector() + # Set strength + emission_node.inputs[1].default_value = REFLECTOR_STRENGTH + assign_node_to_output(emissive_material, emission_node) + assign_material(object, emissive_material)