mixeur, python, escalier en colimaçon

Je l'ai fait avec l'idée de disposer des cubes en forme de spirale, de les éclairer et de tourner la caméra. Il y a 124 lignes au total, dont environ 20 sont les cubes. La partie éclairage et la partie caméra sont réutilisées à partir de celles fabriquées ailleurs. Je pense qu'il faut l'améliorer pour qu'il ressemble plus à un escalier. La vidéo 1 seconde est cette vidéo sur Twitter. bph38.png

# nh38 ==Spirale de 5 étages. 2020.11.14
import bpy
import math
# ========= DELETE ALL mesh, light, camera,2 lignes pour tout supprimer=========
for item in bpy.data.objects:
	bpy.data.objects.remove(item)
#==================Environ 20 rangées de cubes disposés en spirale
s_per_floor = 36 #s_per_floor: number of steps in each floor
#floors = 3 # floors==== number of floors (stories) 
floors = 5 # floors==== number of floors (stories)
floorheight = 3  # floorheight : height of each floor (meter)
xc = 2 # center x of double helix
yc = 2 # center y of double helix
zc = 0 # center z
radius1 = 5 

stepheight = floorheight / s_per_floor
totalsteps = floors * s_per_floor
for i in range(totalsteps):
    x1 = math.cos(6.28 * i / s_per_floor )*radius1 + xc
    y1 = math.sin(6.28 * i / s_per_floor )*radius1 + yc
    z1 = i *  stepheight +zc
    bpy.ops.mesh.primitive_cube_add(size=1, enter_editmode=False, align='WORLD', location=(x1, y1, z1), scale=(1, 1, 1), rotation=(0, 0, (6.28 * i / s_per_floor )))
#===================================

# ============== "light" spot1, spot2, spot3
# 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 = (5, -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()

light_data = bpy.data.lights.new(name="light_spot2", type='SPOT')
light_data.energy = 20000
# create new object with our light datablock
light_object2 = bpy.data.objects.new(name="light_spot2", object_data=light_data)
# link light object
bpy.context.collection.objects.link(light_object2)
# make it active 
bpy.context.view_layer.objects.active = light_object2
#change location
light_object2.location = (10, 10, 20)
light_object2.delta_rotation_euler = (0.1, 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()

light_data = bpy.data.lights.new(name="light_spot3", type='SPOT')
light_data.energy = 20000
# create new object with our light datablock
light_object3 = bpy.data.objects.new(name="light_spot3", object_data=light_data)
# link light object
bpy.context.collection.objects.link(light_object3)
# make it active 
bpy.context.view_layer.objects.active = light_object3
#change location
light_object3.location = (-5, 5, 20)
light_object3.delta_rotation_euler = (0.1, 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()
# ================ end of light

#  ================== = camera movement START
bpy.ops.curve.primitive_bezier_circle_add(enter_editmode=False, align='WORLD', location=(5, 5, 25))
bpy.context.object.scale[0] = 30
bpy.context.object.scale[1] = 30
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

mixeur, python, escalier en colimaçon
mixeur, python, escalier en colimaçon, couleur
Extrusion Python Extrude de Blender 2.9
Exécutez Blender avec python
mélangeur, python, comportement de la sphère
Blender 2.8, mise à l'échelle du cube Python
Faire fonctionner Blender avec Python
Blender 2.9, Python Building, Voiture, Vidéo
Blender 2.9, construction paire impaire Python
Blender 2.9, Python, spécification de couleur hexadécimale
Blender 2.8, Python, éclairage Spot
API Blender Python dans Houdini (Python 3)
Générez 8 * 8 (64) cubes avec Blender Python
Dessinez des ondes sinusoïdales avec Blender Python
Python
Blender 2.8, cube Python, éclairage, mouvement de la circonférence de la caméra
Exécutez mruby avec Python ou Blender
Installez Pytorch sur Blender 2.90 python sous Windows
Utilisez Blender comme module Python
Réponse du livre en spirale AOJ par Python (ALDS1 # 7 ~ # 12)
[Blender x Python] Maîtrisons au hasard !!
[Blender x Python] Maîtrisons la rotation !!
Accéder aux nœuds de shader de Blender depuis Python
Démarrez avec Python avec Blender
Blender 2.9, test de couleur de la lumière d'arrière-plan Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Créer un environnement pour Python intégré à Blender
[Blender x Python] Maîtrisons le matériel !!
Blender 2.82 ou version ultérieure + notes sur l'environnement de développement python
Pour référencer des variables d'environnement en Python dans Blender
Interpréteur Python dans Maya, Houdini, blender, Nuke
Fiche technique de l'accès aux données Blender Python Mesh
Blender 2.9, Python, sélectionnez plusieurs maillages par coordonnées
[Blender x Python] Commençons avec Blender Python !!