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