0

I'm using a script to generate and render a huge amount of scenes. The script is running just fine, but it seems to get slower and slower for each scene its rendering. (talking about the 5000th scene takes about twice as long as the first one) It feels like although I'm always deleting all the objects, something is stacking up...

for i in range(start, imcount+start):
 #delete all objects
 bpy.ops.object.select_all(action='SELECT')
 bpy.ops.object.delete(use_global=True)

#backgroundcolor bpy.data.worlds["World"].node_tree.nodes["Background"].inputs[0].default_value = (1, 1, 1, 1)

#add floor bpy.ops.mesh.primitive_plane_add(size=10000, location=(0, 0, 0))

#floor color r = random.uniform(0.5, 1) g = random.uniform(0.5, 1) b = random.uniform(0.5, 1) activeObject = bpy.context.active_object mat = bpy.data.materials.new(name="FloorMaterial") activeObject.data.materials.append(mat) bpy.context.object.active_material.diffuse_color = (r, g, b, 1)

#add light pointing on 0, 0, 0 from random direction a = random.uniform(0, 3.14/2) b = random.uniform(0, 3.14/2) r = -20math.sin(a) x = -rmath.sin(b) y = rmath.cos(b) z = 20math.cos(a) bpy.ops.object.light_add(type='SUN', location=(x, y, z), rotation=(a, 0, b), scale=(1, 1, 1)) bpy.context.object.data.energy = 10

#add 5 shapes for j in range(5):

#position
x = random.randint(-3, 3)
y = random.randint(-3, 3)
z = random.randint(0, 6)

#size
s1 = random.uniform(1, 3)
s2 = random.uniform(1, 3)

#type
type = random.randint(0, 3)        
if type == 0: #cube
    bpy.ops.mesh.primitive_cube_add(size=s1, location=(x, y, z), scale=(1, 1, 1))
elif type == 1: #cylinder
    bpy.ops.mesh.primitive_cylinder_add(radius=s1, depth=s2, location=(x, y, z), scale=(1, 1, 1))
elif type == 2: #cone
    bpy.ops.mesh.primitive_cone_add(radius1=s1, radius2=s2, depth=2, location=(x, y, z), scale=(1, 1, 1))
elif type == 3: #sphere
    bpy.ops.mesh.primitive_uv_sphere_add(radius=s1, location=(x, y, z), scale=(1, 1, 1))

#color
r = random.uniform(0, 0.3)
g = random.uniform(0, 0.3)
b = random.uniform(0, 0.3)
activeObject = bpy.context.active_object
mat = bpy.data.materials.new(name="Material"+str(j))
activeObject.data.materials.append(mat) 
bpy.context.object.active_material.diffuse_color = (r, g, b, 1)

#add camera pointing on 0, 0, 3 from random direction a = random.uniform(1, 3.14/2) b = random.uniform(0, 3.14/2) r = -20math.sin(a) x = -rmath.sin(b) y = rmath.cos(b) z = 20math.cos(a)+3 bpy.ops.object.camera_add(location=(x, y, z), rotation=(a, 0, b), scale=(1, 1, 1)) bpy.context.scene.camera = bpy.context.object mat1 = bpy.context.scene.camera.matrix_world

#render and save image 1 inpath = os.path.join(impath, "img_{:010d}_in".format(i) + ".png") bpy.context.scene.render.filepath = inpath bpy.ops.render.render(write_still = True)

#add camera2 pointing on 0, 0, 3 from random direction# adiff = random.uniform(-0.2, 0.2) bdiff = random.uniform(-1, 1) a = max(a + adiff, 0) b = b + bdiff r = -20math.sin(a) x = -rmath.sin(b) y = rmath.cos(b) z = 20math.cos(a)+3 bpy.ops.object.camera_add(location=(x, y, z), rotation=(a, 0, b), scale=(1, 1, 1)) bpy.context.scene.camera = bpy.context.object
mat2 = bpy.context.scene.camera.matrix_world

#render and save image 2 outpath = os.path.join(impath, "img_{:010d}_out".format(i) + ".png") bpy.context.scene.render.filepath = outpath bpy.ops.render.render(write_still = True)

#calculate tranformation matrix

mat = inv(mat1) * mat2

invmat1 = np.linalg.inv(mat1) mat = np.dot(invmat1, mat2) textfile = os.path.join(textpath, "img_{:010d}".format(i) + ".txt") with open(textfile,'w+') as f: for line in mat: np.savetxt(f, line, fmt='%.2f')

I have no clue why this is happening... Any ideas?? Is there something wrong about the way I'm deleting the objects? Thank you!

schdief

0 Answers0