Blender 2.8, Python, Kamerabewegung, zufällige Farbspezifikation

Blender 2.8, 3D-Videoerstellung mit Python, Dieses Mal bewegen wir die Kamera entlang des Umfangs, geben das Material für zufällige Farben und Sonnenlicht an. bpy_nh18g_scrn.png

Klicken Sie hier für das Video blender 2.8, python movie 1 sec. 360kB. camera motion along a circle.

Wenn Sie ungefähr 100 Gebäude (einfach quadratisch) erstellen, sind es sogar bei 800px * 600px in 1 Sekunde 682kB. Ich kann die Farbspezifikation und die Lichtverhältnisse immer noch nicht erfassen. Ich denke, dass sich die blaue Farbe des Himmels im Schatten des Gebäudes widerspiegelt, in das das Sonnenlicht nicht gelangt.

Übrigens die Voraussetzungen für ein gutes Programm (Quellcode). Ein gutes Programm, das ich mehrmals schreibe, vergesse, überprüfe, wiederverwenden und aus meiner Erfahrung heraus denke, ist so. ◎ Mäßig kommentiert ◎ Variablennamen sind in englischen oder römischen Zeichen von Bedeutung. ◎ Der Einstellungsteil wird zusammengefasst, damit Variablen (Variable, Parameter) später leicht geändert werden können. ◎ (Unnötige Kommentarzeilen wie vorübergehende Verwendung wurden gelöscht) ◎ Schreiben Sie die Quelle der Kopie aus anderen Materialien (obwohl sie in einigen Jahren unter der URL verschwinden wird?)

# bpy_nh18 (random color, brown)2020/9/6. Sonntag (Standbild braune flache Platte und Video braunes Gebäude)
import bpy
import random

# ========= DELETE ALL mesh, light, camera,2 Zeilen, um alle zu löschen=========
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 (Hintergrund) 
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) #Schauen Sie direkt auf Null Null Null.
# 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, Kamerabewegung, zufällige Farbspezifikation
Blender 2.9, Python, hexadezimale Farbspezifikation
Mixer, Python, Wendeltreppe, Farbe
[Python] Memorandum über zufällige Generationen
Zufallsgenerator für französische Zahlen mit Python
Mixer 2.8, Python-Würfel, Beleuchtung, Bewegung des Kameraumfangs
[Blender x Python] Lass uns zufällig meistern !!
Blender 2.9, Python-Hintergrundlicht-Farbtest
Blender 2.9 Python Extrude extrudieren