Comme une pratique du script Blender 2.8, nous allons créer une étape comme ** exemple de jeu **. (Image vidéo)
(Ceci est un vrai High Trestle Trail Bridge (Iowa))
Nous prévoyons de faire quelque chose comme ça.
import bpy
import numpy as np
#Réinitialiser le statu quo
for mat in bpy.data.materials:
bpy.data.materials.remove(mat)
for cam in bpy.data.cameras:
bpy.data.cameras.remove(cam)
for obj in bpy.data.objects:
bpy.data.objects.remove(obj)
for obj in bpy.context.scene.objects:
bpy.data.objects.remove(obj)
Importation de modules et réinitialisation de l'état actuel sans rien.
Je vais prendre pied pour le moment. Tout d'abord, le cube.
#Prenez pied
bpy.ops.mesh.primitive_cube_add(location=(0,0,-50))
bpy.context.object.scale = (2,2,50)
Créez un matériau et appliquez-le.
#Définir le matériau noir
bpy.data.materials.new(name = 'black')
mat = bpy.data.materials['black']
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes['Principled BSDF']
mat_node.inputs['Base Color'].default_value = (0,0,0,1)
mat_node.inputs['Metallic'].default_value = 1
mat_node.inputs['Specular'].default_value = 1
#Appliquer un matériau noir sur l'échafaudage
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
Faites un cadre. Utilisez le modificateur WIREFRAME
.
#Faire un cadre
bpy.ops.mesh.primitive_cube_add(location=(0,0,-50))
bpy.data.objects['Cube.001'].scale=(2,2,50)
bpy.ops.object.transform_apply(scale=True)
bpy.ops.object.modifier_add(type='WIREFRAME')
bpy.context.object.modifiers['Wireframe'].thickness = 0.05
Créez un matériau qui brille en bleu et appliquez-le au cadre.
#Set matériau luminescent (bleu)
bpy.data.materials.new(name = 'blue')
mat = bpy.data.materials['blue']
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes.new('ShaderNodeEmission')
mat_node.inputs['Color'].default_value = (0,0,1,1)
mat_node.inputs['Strength'].default_value = 500
matout = node_tree.nodes['Material Output']
node_tree.links.new(mat_node.outputs[0], matout.inputs[0])
#Appliquer un matériau luminescent (bleu) sur le cadre
mat = bpy.data.materials['blue']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
Si ʻuse_nodes est défini sur
True,
Principled BSDF est appliqué par défaut, mais si vous utilisez d'autres shaders, créez un nouveau nœud avec
node_tree.nodes.new` et liez-le au nœud de sortie. Je dois te laisser. Le traitement autour de cela est
mat_node = node_tree.nodes.new('ShaderNodeEmission')
Quand
node_tree.links.new(mat_node.outputs[0], matout.inputs[0])
Sera.
Je vais faire un cadre tordu qui s'étend au loin. Générez en tournant le plan et utilisez à nouveau WIREFRAME
.
#Faire un cadre tordu
for i in range(50):
bpy.ops.mesh.primitive_plane_add(size=15,location=(0,i*5+10,0),rotation=(np.pi/2,i/5,0))
bpy.ops.object.modifier_add(type='WIREFRAME')
bpy.context.object.modifiers['Wireframe'].thickness = 0.8
mat = bpy.data.materials['black']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
Puisque nous avons déjà créé le matériau noir, nous pouvons le réutiliser en l'appelant simplement avec mat = bpy.data.materials ['black']
.
Posons les rails rouges et bleus. Créez d'abord une version rouge du matériau lumineux.
#Set matériau luminescent (rouge)
bpy.data.materials.new(name = 'red')
mat = bpy.data.materials['red']
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes.new('ShaderNodeEmission')
mat_node.inputs['Color'].default_value = (1,0,0,1)
mat_node.inputs['Strength'].default_value = 100
matout = node_tree.nodes['Material Output']
node_tree.links.new(mat_node.outputs[0], matout.inputs[0])
Et j'ai refait un rail.
#Faire un rail
poslist = [
[ 4,0,-2],
[ 4,0, 2],
[-4,0,-2],
[-4,0, 2]
]
for pos in poslist:
bpy.ops.mesh.primitive_cube_add(size=1,location=pos)
bpy.context.object.scale = [0.2,800,0.2]
if bpy.context.object.location[2] > 1:
mat = bpy.data.materials['red']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
else:
mat = bpy.data.materials['blue']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
Enfin, allumez l'appareil photo.
#Régler la caméra
bpy.ops.object.camera_add(location=(2,-10,2))
bpy.data.objects['Camera'].rotation_euler = (np.pi*1/2, 0, 0)
bpy.data.cameras[0].lens = 20
Après cela, si vous effectuez un rendu avec un fond noir,
Ça ressemble à ça.
Combinez les précédents en une seule source.
import bpy
import numpy as np
#Réinitialiser le statu quo
for mat in bpy.data.materials:
bpy.data.materials.remove(mat)
for cam in bpy.data.cameras:
bpy.data.cameras.remove(cam)
for obj in bpy.data.objects:
bpy.data.objects.remove(obj)
for obj in bpy.context.scene.objects:
bpy.data.objects.remove(obj)
#Prenez pied
bpy.ops.mesh.primitive_cube_add(location=(0,0,-50))
bpy.context.object.scale = (2,2,50)
#Définir le matériau noir
bpy.data.materials.new(name = 'black')
mat = bpy.data.materials['black']
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes['Principled BSDF']
mat_node.inputs['Base Color'].default_value = (0,0,0,1)
mat_node.inputs['Metallic'].default_value = 1
mat_node.inputs['Specular'].default_value = 1
#Appliquer un matériau noir sur l'échafaudage
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
#Faire un cadre
bpy.ops.mesh.primitive_cube_add(location=(0,0,-50))
bpy.data.objects['Cube.001'].scale=(2,2,50)
bpy.ops.object.transform_apply(scale=True)
bpy.ops.object.modifier_add(type='WIREFRAME')
bpy.context.object.modifiers['Wireframe'].thickness = 0.050
#Set matériau luminescent (bleu)
bpy.data.materials.new(name = 'blue')
mat = bpy.data.materials['blue']
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes.new('ShaderNodeEmission')
mat_node.inputs['Color'].default_value = (0,0,1,1)
mat_node.inputs['Strength'].default_value = 500
matout = node_tree.nodes['Material Output']
node_tree.links.new(mat_node.outputs[0], matout.inputs[0])
#Appliquer un matériau luminescent (bleu) sur le cadre
mat = bpy.data.materials['blue']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
#Faire un cadre tordu
for i in range(50):
bpy.ops.mesh.primitive_plane_add(size=15,location=(0,i*5+10,0),rotation=(np.pi/2,i/5,0))
bpy.ops.object.modifier_add(type='WIREFRAME')
bpy.context.object.modifiers['Wireframe'].thickness = 0.8
mat = bpy.data.materials['black']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
#Set matériau luminescent (rouge)
bpy.data.materials.new(name = 'red')
mat = bpy.data.materials['red']
mat.use_nodes = True
node_tree = mat.node_tree
mat_node = node_tree.nodes.new('ShaderNodeEmission')
mat_node.inputs['Color'].default_value = (1,0,0,1)
mat_node.inputs['Strength'].default_value = 100
matout = node_tree.nodes['Material Output']
node_tree.links.new(mat_node.outputs[0], matout.inputs[0])
#Faire un rail
poslist = [
[ 4,0,-2],
[ 4,0, 2],
[-4,0,-2],
[-4,0, 2]
]
for pos in poslist:
bpy.ops.mesh.primitive_cube_add(size=1,location=pos)
bpy.context.object.scale = [0.2,800,0.2]
if bpy.context.object.location[2] > 1:
mat = bpy.data.materials['red']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
else:
mat = bpy.data.materials['blue']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
#Régler la caméra
bpy.ops.object.camera_add(location=(2,-10,2))
bpy.data.objects['Camera'].rotation_euler = (np.pi*1/2, 0, 0)
bpy.data.cameras[0].lens = 20
Recommended Posts