Blender 2.9, construction paire impaire Python

blender 2.9, python. movie 1sec. Résolution 400 * 300px. Deux couleurs sont peintes en superposant de grands et petits carrés avec des nombres pairs et impairs. Déplacez-vous le long de la circonférence de la caméra. Je pensais que si les carrés de code couleur étaient disposés au hasard, cela ressemblerait à une architecture, mais comme les carrés sont trop inexpressifs, j'ai imité la forme de la véranda de l'appartement et j'ai superposé des carrés impairs et petits, pairs et grands. Apparence avec une certaine saveur architecturale avec peu de polygones. J'ai également essayé de coder par couleur le nombre total d'étages du bâtiment. Pour la vidéo, veuillez consulter [blender 2.9, python .... (Notez que l'article récent fonctionnait avec blender 2.9, mais il est étiqueté avec blender 2.8. Il n'a pas de balise 2.9. Autant que je l'ai touché, le script python semble passer de 2.8 à 2.9 avec presque aucun changement. ) bpy_nh27PNG.png

import bpy

# ========= DELETE ALL mesh, light, camera,2 lignes pour tout supprimer=========
for item in bpy.data.objects:
    bpy.data.objects.remove(item)

xy_bump = 1.05
#FThick = 0.4
def hex_to_rgb( hex_value ): #=== hex color code to RGB
    b = (hex_value & 0xFF) / 255.0
    g = ((hex_value >> 8) & 0xFF) / 255.0
    r = ((hex_value >> 16) & 0xFF) / 255.0
    return r, g, b

def add_material(obj, material_name, h):  #=== material to cube 
    material = bpy.data.materials.get(material_name)
    if material is None:
        material = bpy.data.materials.new(material_name)
    material.use_nodes = True
    principled_bsdf = material.node_tree.nodes['Principled BSDF']
    if principled_bsdf is not None:
        principled_bsdf.inputs[0].default_value = (*hex_to_rgb(h), 1)  
    obj.active_material = material
# =================== definition , create apartment
def create_apartment(x_origin, y_origin, z_rot, NumOfStories, xScale, yScale, FThick, odd_color, even_color):
    for i in range (0, 2*NumOfStories, 2):
        bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD', location=(x_origin, y_origin, i * FThick), rotation=(0.0, 0.0, z_rot), scale=(xScale, yScale, FThick))
        obj = bpy.context.object
#        add_material( obj, "color01", odd_color )  
        add_material( obj, "", odd_color )  
        bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD', location=(x_origin, y_origin, FThick + i * FThick), rotation=(0.0, 0.0, z_rot), scale=(xScale*xy_bump, yScale*xy_bump, FThick))
        obj = bpy.context.object
#        add_material( obj, "color02", even_color ) 
        add_material( obj, "", even_color )    
  
# ======== create now z_rot:rotation,  NumOfStories:floors, 
# create_apartment(x_origin, y_origin, z_rot, NumOfStories, xScale, yScale, FThick, odd_color, even_color):
create_apartment(-1, -1, 1/180*3.14, 8, 1, 2, 0.2, 0x2F2F2F, 0xffe4b5) #DARKSLATEGRAY#2F4F4F
create_apartment(-2, 2, 60/180*3.14, 15, 2, 1.8, 0.2, 0x2F2F2F, 0xffe4b5)  #DARKSLATEGRAY#2F4F4F
create_apartment(-1.5, 4, 60/180*3.14, 6, 1.5, 1.8, 0.2, 0x8b4513, 0xffe4b5)
create_apartment(-1, 7, 0/180*3.14, 3, 1.5, 3, 0.2, 0x800000, 0xA9A9A9)  #MAROON#800000 ,   #DARKGRAY#A9A9A9

# 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.08, 0.08, 0.03, 0) 
obj = bpy.context.view_layer.objects.active
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 = (20, -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=(6, 6, 15))
bpy.context.object.scale[0] = 15
bpy.context.object.scale[1] = 15
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.020"]
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.9, construction paire impaire Python
Pair ou impair
Extrusion Python Extrude de Blender 2.9
mixeur, python, escalier en colimaçon
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
mixeur, python, escalier en colimaçon, couleur
Construire un environnement virtuel Python
Blender 2.9, Python, spécification de couleur hexadécimale
Blender 2.8, Python, éclairage Spot
API Blender Python dans Houdini (Python 3)
Construire un environnement virtuel Python
Générez 8 * 8 (64) cubes avec Blender Python
Dessinez des ondes sinusoïdales avec Blender Python
Construire un environnement Python sur Mac
Construire un environnement Python sur Ubuntu
Blender 2.8, cube Python, éclairage, mouvement de la circonférence de la caméra
Exécutez mruby avec Python ou Blender
Créer un environnement virtuel avec Python 3
Utilisez Blender comme module Python
[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