[PYTHON] Créez un exemple de scène semblable à un jeu avec juste le script Blender 2.80

Comme une pratique du script Blender 2.8, nous allons créer une étape comme ** exemple de jeu **. image.png (Image vidéo)

image.png (Ceci est un vrai High Trestle Trail Bridge (Iowa))

Vidéo terminée

Nous prévoyons de faire quelque chose comme ça.

image.png

Code 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)

Importation de modules et réinitialisation de l'état actuel sans rien.

échafaud

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)

image.png

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

image.png

Échafaudage (cadre)

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

image.png

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

image.png

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.

Cadre tordu

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

image.png

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'].

Faire un rail

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

image.png

caméra

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,

image.png

Ça ressemble à ça.

Tout le code source

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

Créez un exemple de scène semblable à un jeu avec juste le script Blender 2.80
Créez un système stellaire avec le script Blender 2.80
Ajoutez simplement le pilote à la touche de forme avec mélangeur
Créer un environnement avec virtualenv
[Python] Récupère le répertoire d'exécution du script avec un chemin absolu
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Créez un alias pour Route53 vers CloudFront avec l'API AWS
[Python] Explique comment utiliser la fonction format avec un exemple
Déboguer le script avec l'éditeur Sakura
Créez une tranche d'âge avec les pandas
Obtenez la valeur de retour d'un script shell externe (ls) avec python3
Créer une application en classifiant avec Pygame
[Blender] Comment définir shape_key avec un script
Créer une visionneuse de traitement d'image avec PySimpleGUI
Imprimez simplement l'objet sélectionné dans Blender
Créez rapidement un fichier Excel avec Python #python
[Python] Arrondissez avec juste l'opérateur
Exemple de script pour afficher BoundingBox avec PIL
[Blender] Utilisez OpenGL depuis l'intérieur du script
Créer un écran de mise à jour avec Django Updateview
Créer une application à l'aide de l'API Spotify
[Python] Créez rapidement une API avec Flask
Générer une instance Excel compatible avec les compléments avec xlwings
Créez une application de mots anglais avec python
Créez une image diabolique avec le script de Blender
Créez un fichier msi évolutif avec cx_Freeze
Expliquons l'allocation d'actifs par le modèle Black Ritterman (avec un exemple d'exécution par Python)
Créez une application qui fonctionne bien avec les rapports des utilisateurs à l'aide de l'API COTOHA