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.
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