2
$\begingroup$

I am beginner in python script with blender. To start, I write a script to render a simple scene using the cycle engine and a fisheye camera. here is my script:

import bpy
from mathutils import *
from math import *
#delete the cube
bpy.ops.object.delete(use_global=False)
# Add a camera fish eye.
bpy.context.scene.render.engine = 'CYCLES'
bpy.ops.object.camera_add(view_align=True, location=(0, 0, 2.5), rotation=(0, 0, 0))
bpy.context.object.rotation_euler[0] = 0
bpy.context.object.rotation_euler[1] = 0
bpy.context.object.rotation_euler[2] = 0
bpy.context.object.data.type = 'PANO'
bpy.context.object.data.cycles.fisheye_lens = 2.7
bpy.context.object.data.cycles.fisheye_fov = 3.14159
bpy.context.object.data.sensor_width = 8.8
bpy.context.object.data.sensor_height = 6.6
#Add a lamp.
bpy.ops.object.lamp_add(type='POINT', radius=1, view_align=False, location=(0, 1.5, 2.5), 
layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
bpy.context.object.data.shadow_soft_size = 0.01
bpy.context.object.data.cycles.cast_shadow = True
#Import the model .mhx in the scene
bpy.ops.import_scene.makehuman_mhx(filepath="/Users/xxx/Documents/MakeHuman/v1/exports/scene1/person1.mhx")
#Set the rendering parameter
bpy.context.scene.render.resolution_x = 1360
bpy.context.scene.render.resolution_y = 1024
bpy.context.scene.render.resolution_percentage = 50
bpy.context.scene.frame_start = 1
bpy.context.scene.frame_end = 2
bpy.context.scene.frame_step = 1
bpy.context.scene.render.pixel_aspect_x = 1
bpy.context.scene.render.pixel_aspect_y = 1
bpy.context.scene.render.use_file_extension = True
bpy.context.scene.render.image_settings.color_mode ='RGBA'
bpy.context.scene.render.image_settings.file_format='PNG' 
bpy.context.scene.render.filepath = "/Users/xx/Desktop/pythonscript/"
bpy.context.scene.render.image_settings.compression = 90
##sampling;=path tracing 
bpy.context.scene.cycles.progressive = 'PATH'
bpy.context.scene.cycles.samples = 50
bpy.context.scene.cycles.max_bounces = 1
bpy.context.scene.cycles.min_bounces = 1
bpy.context.scene.cycles.glossy_bounces = 1
bpy.context.scene.cycles.transmission_bounces = 1
bpy.context.scene.cycles.volume_bounces = 1
bpy.context.scene.cycles.transparent_max_bounces = 1
bpy.context.scene.cycles.transparent_min_bounces = 1
bpy.context.scene.cycles.use_progressive_refine = True
bpy.context.scene.render.tile_x = 64
bpy.context.scene.render.tile_y = 64
#insert the walls
#1)the floor
bpy.ops.mesh.primitive_plane_add(radius=1, view_align=False, enter_editmode=False, location=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
bpy.context.object.dimensions[0] = 4
bpy.context.object.dimensions[1] = 4
bpy.context.object.dimensions[2] = 0
#1)Wall 1
bpy.ops.mesh.primitive_cube_add(view_align=False, enter_editmode=False, location=(0, 2, 1.25), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))
bpy.context.object.dimensions[0] = 4
bpy.context.object.dimensions[1] = 0.05
bpy.context.object.dimensions[2] = 2.5
bpy.context.object.location[2] = 1.25
bpy.context.object.location[1] = 2

#Render results
bpy.ops.render.render(animation=True)

I remark that the image rendered using the GUI and using the script are different.

GUI image

Script Image

$\endgroup$
2
$\begingroup$

You created a second camera, but you didn't assign it to be the camera for the scene:

--- /var/tmp/se1.py     2015-06-22 16:37:30.703514909 -0400
+++ /var/tmp/se2.py     2015-06-22 16:41:47.687236739 -0400
@@ -14,6 +14,7 @@
 bpy.context.object.data.cycles.fisheye_fov = 3.14159
 bpy.context.object.data.sensor_width = 8.8
 bpy.context.object.data.sensor_height = 6.6
+bpy.context.scene.camera = bpy.context.object
 #Add a lamp.
 bpy.ops.object.lamp_add(type='POINT', radius=1, view_align=False, location=(0, 1.5, 2.5), 
 layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False))

You might also want to set your frame_end=1 instead of 2.

Another strange thing about this script is that it keeps creating new objects, so you can't run it repeatedly in the same scene without weirdness (probably some Z fighting) as objects and lamps accumulate.

$\endgroup$
  • $\begingroup$ @I did not understand what do you mean by "you created a second camera". Keep in mind that the script is written in .py file and executed using this command blender --background --python script.py. I did not write the script using blender GUI. $\endgroup$ – BetterEnglish Jun 22 '15 at 20:53
  • $\begingroup$ If you leave out the --background you will get the blender UI and you can look at the outliner to see that there is a Camera and Camera.001 after running your script. If you really want to get rid of all the starting objects (cube, lamp, camera) you might want to stick a for obj in bpy.context.scene.objects: bpy.context.scene.objects.unlink(obj) at the start. $\endgroup$ – Mutant Bob Jun 22 '15 at 21:00
  • $\begingroup$ Sorry, I see. I have just deleted the cube and I keep the lamp and the camera $\endgroup$ – BetterEnglish Jun 22 '15 at 21:04
  • $\begingroup$ Why the cube does not have the dimensions fixed in the script? $\endgroup$ – BetterEnglish Jun 22 '15 at 21:09
  • $\begingroup$ Are you perhaps referring to the default cube that comes with the scene and is there before your script is run? Your script does not have any code that would alter that default cube. $\endgroup$ – Mutant Bob Jun 22 '15 at 21:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.