Blender 2.8, Python, camera movement, random number color specification

Blender 2.8, 3D video making with Python, This time, we will move the camera along the circumference, specify the material for random numbers, and sunlight. bpy_nh18g_scrn.png

Click here for the video blender 2.8, python movie 1 sec. 360kB. camera motion along a circle.

If you make about 100 buildings (simply a rectangular parallelepiped), it will be 682kB even at 800px * 600px in 1 second. I still can't grasp the color specification and the light condition. I think that the blue color of the sky is reflected in the shadow of the building where the sunlight does not reach.

By the way, the conditions for a good program (source code). A good program that I write several times, forget, review, reuse, and think from my experience is like this. ◎ Moderately commented ◎ Variable names are in English or Roman letters and are meaningful. ◎ The setting parts are summarized so that variables (variable, parameter) can be easily changed later. ◎ (Unnecessary comment lines such as temporary use have been deleted) ◎ Write the citation source for the part copied from other materials (although it will disappear at the URL in a few years?)

# bpy_nh18 (random color, brown)2020/9/6th Sunday (still image brown flat plate and video brown building)
import bpy
import random

# ========= DELETE ALL mesh, light, camera,2 lines to delete all=========
for item in bpy.data.objects:
	bpy.data.objects.remove(item)



# ======================== add cubes, random resize , random color
for x in range(16):
    for y in range(16):
        bpy.ops.mesh.primitive_cube_add(size=2.0, location=(4*x-4, 5*y-5, 0.0))
        bpy.ops.transform.resize(value=(1.0, 1.0, (random.randint(2, 8))))
        obj = bpy.context.view_layer.objects.active
        mat = bpy.data.materials.new('Cube')
        r1=0.15+ 0.8*random.random()
        g1=0.07+ 0.3*random.random()
        b1=0.01+ 0.05*random.random()
        mat.diffuse_color = (r1, g1, b1, 0) #====== random BROWN COLOR
        obj.data.materials.append(mat)

# Add a plane for ground  ==================
bpy.ops.mesh.primitive_plane_add(size=200.0, align='WORLD', location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0) )
matp = bpy.data.materials.new('Plane')
matp.diffuse_color = (0.4, 0.2, 0.01, 0) 
obj.data.materials.append(matp)

#  ==================
# world - surface - background (background) 
bpy.data.worlds["World"].node_tree.nodes["Background"].inputs[0].default_value = (0.01, 0.15, 0.25, 1)
bpy.data.worlds["World"].node_tree.nodes["Background"].inputs[1].default_value = 0.7        

# ============== "light"
# create light datablock, set attributes
#light_data = bpy.data.lights.new(name="light_spot1", type='SPOT')
light_data = bpy.data.lights.new(name="light_spot1", type='SUN')
light_data.energy = 5
# create new object with our light datablock
light_object1 = bpy.data.objects.new(name="light_spot1", object_data=light_data)
# link light object
bpy.context.collection.objects.link(light_object1)
# make it active 
bpy.context.view_layer.objects.active = light_object1
#change location
light_object1.location = (-3, -10, 50)
light_object1.delta_rotation_euler = (1.3, 0, -0.3) #Look straight down at zero zero zero.
# update scene, if needed
dg = bpy.context.evaluated_depsgraph_get() 
dg.update()
# ================

#  ================== ================= camera movement

bpy.ops.curve.primitive_bezier_circle_add(enter_editmode=False, align='WORLD', location=(20, 20, 30))
bpy.context.object.scale[0] = 50
bpy.context.object.scale[1] = 50
bpy.ops.object.empty_add(type='CUBE', align='WORLD', location=(0,0,0))
bpy.ops.object.camera_add(enter_editmode=False, align='VIEW', location=(0,0,0), rotation=(0, 0, 0))

bpy.data.objects['Empty'].select_set(True)
bpy.data.objects['Camera'].select_set(True)

bpy.context.view_layer.objects.active = bpy.data.objects['Empty']
bpy.ops.object.parent_set(type='OBJECT')

bpy.data.objects['Camera'].select_set(False)
bpy.data.objects['Empty'].select_set(True)

bpy.ops.object.constraint_add(type='FOLLOW_PATH')
bpy.context.object.constraints["Follow Path"].target = bpy.data.objects["BezierCircle"]

bpy.context.object.constraints["Follow Path"].use_curve_follow = True
bpy.context.object.constraints["Follow Path"].use_fixed_location = True

bpy.data.objects['Empty'].select_set(False)
bpy.data.objects['Camera'].select_set(True)

bpy.ops.object.constraint_add(type='TRACK_TO')

#bpy.context.object.constraints["Track To"].target = bpy.data.objects["Cube.016"]
bpy.context.object.constraints["Track To"].target = bpy.data.objects["Cube.052"]
bpy.context.object.constraints["Track To"].up_axis = 'UP_Y'
bpy.context.object.constraints["Track To"].track_axis = 'TRACK_NEGATIVE_Z'  #5m00sec
#Camera Keyframe #(Insert keyframe to object's Offset Factor Python API - stack exchange)
bpy.data.objects['Camera'].select_set(False)
bpy.data.objects['Empty'].select_set(True)
bpy.context.scene.frame_current = 1
bpy.context.object.constraints["Follow Path"].offset_factor = 0
ob = bpy.context.object
# ob.constraints['Follow Path']
# bpy.data.objects['Empty'].constraints["Follow Path"]
# [bpy.data.objects['Empty'].constraints["Follow Path"]]
con = ob.constraints.get("Follow Path")
con.offset_factor = 0.0
con.keyframe_insert("offset_factor", frame=1)
con.offset_factor = 0.25
con.keyframe_insert("offset_factor", frame=8)
con.offset_factor = 0.50
con.keyframe_insert("offset_factor", frame=16)
con.offset_factor = 0.75
con.keyframe_insert("offset_factor", frame=23)
con.offset_factor = 0.99
con.keyframe_insert("offset_factor", frame=30)
# ==== END of camera movement

Recommended Posts

Blender 2.8, Python, camera movement, random number color specification
Blender 2.9, Python, hexadecimal color specification
blender, python, spiral staircase, color
[python] Random number generation memorandum
random French number generator with python
Blender 2.8, Python Cube, Lighting, Camera Circumference
[Blender x Python] Let's master random !!
Blender 2.9, Python background light color test
Blender 2.9 Python Extrude extrude