Blender 2.8, Python, mouvement de la caméra, spécification de couleur aléatoire

Blender 2.8, création de vidéos 3D avec Python, Cette fois, nous allons déplacer la caméra le long de la circonférence, spécifier le matériau pour les couleurs aléatoires et la lumière du soleil. bpy_nh18g_scrn.png

Cliquez ici pour voir la vidéo blender 2.8, python movie 1 sec. 360kB. camera motion along a circle.

Si vous créez environ 100 bâtiments (simplement un carré), ce sera 682 Ko même à 800px * 600px en 1 seconde. Je n'arrive toujours pas à comprendre les spécifications de couleur et les conditions d'éclairage. Je pense que la couleur bleue du ciel se reflète dans l'ombre du bâtiment là où la lumière du soleil n'atteint pas.

Soit dit en passant, les conditions d'un bon programme (code source). Un bon programme que j'écris plusieurs fois, que j'oublie, que j'examine, que je réutilise et que je pense d'après mon expérience, c'est comme ça. ◎ Modérément commenté ◎ Les noms de variables sont significatifs en caractères anglais ou romains. ◎ La partie réglage est résumée afin qu'il soit facile de changer ultérieurement les variables (variable, paramètre). ◎ (Les lignes de commentaires inutiles telles que l'utilisation temporaire ont été supprimées) ◎ Écrivez la source de la copie à partir d'autres matériaux (même si elle disparaîtra à l'URL dans quelques années?)

# bpy_nh18 (random color, brown)2020/9/6ème dimanche (image fixe plaque plate brune et bâtiment vidéo marron)
import bpy
import random

# ========= DELETE ALL mesh, light, camera,2 lignes pour tout supprimer=========
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 (Contexte) 
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) #Regardez droit vers le bas à zéro zéro zéro.
# 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, mouvement de la caméra, spécification de couleur aléatoire
Blender 2.9, Python, spécification de couleur hexadécimale
mixeur, python, escalier en colimaçon, couleur
[python] Mémorandum de génération aléatoire
générateur de nombres aléatoires français avec python
Blender 2.8, cube Python, éclairage, mouvement de la circonférence de la caméra
[Blender x Python] Maîtrisons au hasard !!
Blender 2.9, test de couleur de la lumière d'arrière-plan Python
Extrusion Python Extrude de Blender 2.9