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

- old
+ new

@@ -1,5 +1,23 @@ +import bpy +import argparse +import datetime +import bmesh +import random +import code +import math +import mathutils +import random +import uuid +import sys + +REFLECTOR_SCALE = 5 +REFLECTOR_STRENGTH = 12 +REFLECTOR_LOCATION_PADDING = 10 +PROPS_NUMBER = 100 +SHADERS = ['ShaderNodeBsdfGlossy', 'ShaderNodeBsdfDiffuse', 'ShaderNodeBsdfVelvet', 'ShaderNodeEmission'] +props = [] YELLOW = (1,0.7,0.1,1) def debug(): code.interact(local=dict(globals(), **locals())) sys.exit("Aborting execution") @@ -21,11 +39,11 @@ print('Camera now at location: ' + camera_location_string(camera) + ' / rotation: ' + camera_rotation_string(camera)) bpy.context.scene.render.filepath = filepath bpy.ops.render.render(write_still=True) def output_name(index, model_path): - return 'renders/' + os.path.splitext(model_path)[0].split('/')[1] + '_' + str(index) + '_' + str(datetime.date.today()) + '.png' + return './' + os.path.splitext(model_path)[0].split('/')[1] + '_' + str(index) + '_' + str(datetime.date.today()) + '.png' def rotate(model_object, index): model_object.rotation_euler[2] = math.radians(index * (360.0 / shots_number)) def rand_color_value(): @@ -45,15 +63,24 @@ def rand_color_vector(): return (rand_color_value(), rand_color_value(), rand_color_value(), 1) def rand_scale(): - return round(random.uniform(0, 0.15), 10) + return round(random.uniform(0, 0.2), 10) def rand_scale_vector(): - return(rand_scale(), rand_scale(), rand_scale()) + scale = rand_scale() + return(scale, scale, scale) +def unwrap_model(obj): + if obj == camera_object: + return False + context.scene.objects.active = obj + bpy.ops.object.mode_set(mode='EDIT') + bpy.ops.uv.unwrap() + bpy.ops.object.mode_set(mode='OBJECT') + def get_args(): parser = argparse.ArgumentParser() # get all script args _, all_arguments = parser.parse_known_args() double_dash_index = all_arguments.index('--') @@ -81,49 +108,52 @@ # 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) return material def random_texture(): - texture_path = os.path.expanduser('fixtures/textures/checkered_texture.jpg') - # new_texture = bpy.data.textures.new('ColorTex', type = 'IMAGE') + texture_folder_path = os.path.dirname(__file__).replace('lib/glitch3d/bpy', 'fixtures/textures/') + texture_path = texture_folder_path + random.choice(os.listdir(texture_folder_path)) 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('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]) - material.node_tree.links.new(texture_node.inputs['Vector'], uv_node.outputs['UV']) + material.node_tree.links.new(texture_node.outputs['Color'], bsdf_node.inputs['Color']) -def make_object_gold(object): +def make_object_gold(obj): 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 + glossy_node.inputs[1].default_value = 0.2 assign_node_to_output(material, glossy_node) - assign_material(object, material) + assign_material(obj, material) -def make_object_reflector(object): - object.scale = (REFLECTOR_SCALE, REFLECTOR_SCALE, REFLECTOR_SCALE) +def make_object_reflector(obj): + obj.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) + assign_material(obj, emissive_material) + +def texture_object(obj): + new_material = create_cycles_material() + assign_texture_to_material(new_material, random_texture()) + assign_material(obj, new_material) + +def duplicate_object(obj): + new_object = obj.copy() + new_object.data = obj.data.copy() + context.scene.objects.link(new_object) + return new_object