[PYTHON] Erstellen Sie mit dem Blender 2.80-Skript eine beispielhafte spielähnliche Phase

Als Übung für das Blender 2.8-Skript erstellen wir eine Bühne wie ** Beispielspiel **. image.png (Bild Video)

image.png (Dies ist eine echte High Trestle Trail Bridge (Iowa))

Video abgeschlossen

Wir planen so etwas zu tun.

image.png

Quellcode

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.

Gerüst

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)

image.png

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

image.png

Gerüst (Rahmen)

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

image.png

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

image.png

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.

Verdrehter Rahmen

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

image.png

Da wir das schwarze Material bereits erstellt haben, können wir es wiederverwenden, indem wir es einfach mit mat = bpy.data.materials ['black'] aufrufen.

Mach eine Schiene

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

image.png

Kamera

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,

image.png

Es sieht aus wie das.

Alle Quellcode

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

Erstellen Sie mit dem Blender 2.80-Skript eine beispielhafte spielähnliche Phase
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
Fügen Sie einfach den Treiber mit dem Mixer zum Formschlüssel hinzu
Erstellen Sie eine Umgebung mit virtualenv
[Python] Ruft das Skriptausführungsverzeichnis mit einem absoluten Pfad ab
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Erstellen Sie mit der AWS-API einen Alias für Route53 zu CloudFront
[Python] Erklärt anhand eines Beispiels, wie die Formatierungsfunktion verwendet wird
Debuggen Sie das Skript mit Sakura Editor
Erstellen Sie eine Altersgruppe mit Pandas
Ruft den Rückgabewert eines externen Shell-Skripts (ls) mit python3 ab
Erstellen Sie eine Anwendung, indem Sie mit Pygame klassifizieren
[Blender] So legen Sie shape_key mit dem Skript fest
Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
Drucken Sie einfach das ausgewählte Objekt in Blender
Erstellen Sie schnell eine Excel-Datei mit Python #python
[Python] Runden Sie nur mit dem Operator ab
Beispielskript zum Anzeigen von BoundingBox mit PIL
[Blender] Verwenden Sie OpenGL aus dem Skript heraus
Erstellen Sie mit Django Updateview einen Update-Bildschirm
Erstellen Sie eine Anwendung mit der Spotify-API
[Python] Erstellen Sie schnell eine API mit Flask
Generieren Sie eine add-in-fähige Excel-Instanz mit xlwings
Erstellen Sie eine englische Wort-App mit Python
Erstellen Sie ein teuflisches Bild mit Blenders Skript
Erstellen Sie mit cx_Freeze eine aktualisierbare MSI-Datei
Lassen Sie uns die Asset-Allokation durch das Black Ritterman-Modell erklären (mit einem Ausführungsbeispiel von Python).
Erstellen Sie mithilfe der COTOHA-API eine App, die gut mit Berichten von Personen funktioniert