Als Übung für das Blender 2.8-Skript erstellen wir eine Bühne wie ** Beispielspiel **. (Bild Video)
(Dies ist eine echte High Trestle Trail Bridge (Iowa))
Wir planen so etwas zu tun.
import bpy
import numpy as np
#Setzen Sie den Status Quo zurück
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)
Module importieren und den Status Quo zurücksetzen, wenn nichts anderes.
Ich werde vorerst Fuß fassen. Zuallererst der Würfel.
#Treten Sie ein
bpy.ops.mesh.primitive_cube_add(location=(0,0,-50))
bpy.context.object.scale = (2,2,50)
Erstellen Sie ein Material und wenden Sie es an.
#Schwarzes Material einstellen
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
#Tragen Sie schwarzes Material auf das Gerüst auf
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
Machen Sie einen Rahmen. Verwenden Sie den Modifikator "WIREFRAME".
#Machen Sie einen Rahmen
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
Erstellen Sie ein blau leuchtendes Material und wenden Sie es auf den Rahmen an.
#Lumineszenzmaterial einstellen (blau)
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])
#Tragen Sie Lumineszenzmaterial (blau) auf den Rahmen auf
mat = bpy.data.materials['blue']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
Wenn Sie "use_nodes" auf "True" setzen, wird standardmäßig "Principled BSDF" angewendet. Wenn Sie jedoch andere Shader verwenden möchten, erstellen Sie einen neuen Knoten mit "node_tree.nodes.new" und verknüpfen Sie ihn mit dem Ausgabeknoten. Ich muss dich lassen. Die Verarbeitung darum ist
mat_node = node_tree.nodes.new('ShaderNodeEmission')
Wann
node_tree.links.new(mat_node.outputs[0], matout.inputs[0])
Wird sein.
Ich werde einen verdrehten Rahmen machen, der sich weit weg erstreckt. Generieren Sie beim Drehen des Flugzeugs und verwenden Sie erneut "WIREFRAME".
#Machen Sie einen verdrehten Rahmen
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
Da wir das schwarze Material bereits erstellt haben, können wir es wiederverwenden, indem wir es einfach mit mat = bpy.data.materials ['black']
aufrufen.
Legen wir die roten und blauen Schienen. Erstellen Sie zunächst eine rote Version des Leuchtmaterials.
#Lumineszenzmaterial einstellen (rot)
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])
Und ich habe wieder eine Reling gemacht.
#Mach eine Schiene
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
Schalten Sie zum Schluss die Kamera ein.
#Kamera einstellen
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
Wenn Sie danach mit einem schwarzen Hintergrund rendern,
Es sieht aus wie das.
Kombinieren Sie die vorherigen zu einer Quelle.
import bpy
import numpy as np
#Setzen Sie den Status Quo zurück
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)
#Treten Sie ein
bpy.ops.mesh.primitive_cube_add(location=(0,0,-50))
bpy.context.object.scale = (2,2,50)
#Schwarzes Material einstellen
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
#Tragen Sie schwarzes Material auf das Gerüst auf
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
#Machen Sie einen Rahmen
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
#Lumineszenzmaterial einstellen (blau)
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])
#Tragen Sie Lumineszenzmaterial (blau) auf den Rahmen auf
mat = bpy.data.materials['blue']
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat
#Machen Sie einen verdrehten Rahmen
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
#Lumineszenzmaterial einstellen (rot)
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])
#Mach eine Schiene
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
#Kamera einstellen
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