[PYTHON] Erwecken Sie Ihr Leben mit Blender-Skripten prozedural zum Leben

image.png

Blenders Skript erstellt so etwas **, über das auf der Expo gesprochen wurde. Da es prozedural basierend auf Zufallszahlen generiert wird, ist es möglich, unzählige Muster zu generieren. Die Version von Blender ist 2.8.

Kugelgenerierung der ersten Stufe

image.png

import bpy
import numpy as np

#Stellen Sie hier rotes Material ein
bpy.data.materials.new(name = 'red')
mat_red = bpy.data.materials['red']
mat_red.use_nodes = False
mat_red.diffuse_color = (1,0,0,1)

#Kugelgenerierung
bpy.ops.mesh.primitive_uv_sphere_add(radius=1,location=(0,0,0))
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat_red

Wir werden eine rote Kugel erzeugen, indem wir ein Grundelement erzeugen und ein einfaches Material spezifizieren. Sie können eine UV-Kugel mit bpy.ops.mesh.primitive_uv_sphere_add erstellen.

Zweite Stufe: Verbreitung von Kugeln

Ich würde gerne unzählige rote Kugeln erstellen, aber ich habe das Gefühl, dass das Leben scheint, wenn es eine Art Kontinuität gibt, anstatt es nur mit einer for-Anweisung zu tun. Deshalb werde ich es hier mit einer rekursiven Funktion implementieren. Ich werde entscheiden. Eine rekursive Funktion ist ein Programm, das sich beim Kopieren selbst erstellt (sehr gut geeignet). image.png

import bpy
import numpy as np

#Stellen Sie hier rotes Material ein
bpy.data.materials.new(name = 'red')
mat_red = bpy.data.materials['red']
mat_red.use_nodes = False
mat_red.diffuse_color = (1,0,0,1)

def add_sphere(r,x,y,z,count):
    if count > 20: #Endlosschleife ohne diese
        return
    bpy.ops.mesh.primitive_uv_sphere_add(radius=r,location=(x,y,z))
    bpy.ops.object.material_slot_add()
    bpy.context.object.active_material=mat_red
    add_sphere(r,x+1,y,z,count+1) #Rufen Sie eine Kopie von sich
    return

add_sphere(1,0,0,0,1)

Eine Kugel wird durch eine Funktion namens "add_sphere" erzeugt, aber auch eine Funktion namens "add_sphere" wird hierauf aufgerufen. Aber es ist nicht genau dasselbe, es erzeugt eine Kopie, die x mal 1 von sich selbst entfernt ist. Es tritt eine Endlosschleife auf, in der die Kopie um eins weiter verschoben wird, und ein kontinuierlicher Prozess kann einfach beschrieben werden. Dies ist nur eine horizontale Bewegung, aber mit einem Befehl wie "add_sphere (1.1 * r, y, x + 1, z, count + 1)" sieht es folgendermaßen aus:

image.png

Sie können das Geheimnis des Lebens fühlen.

Stufe 3 Zufälligkeit hinzufügen

Dies ist jedoch zu regelmäßig und ich spüre die Brillanz nicht. Betrachtet man das Originalmaterial, so scheint es, dass mehrere rote Kugeln unterschiedlicher Größe zu einem Ring verbunden sind. Immerhin scheint ein Lebensgefühl zu entstehen, wenn es Unterschiede in der Größe gibt. Die Positionen des gegenseitigen Auftretens sollten auch so gestaltet sein, dass sie vom Elternteil zum Kind wachsen.

image.png

import bpy
import numpy as np #Numpy-Import hinzufügen

#Stellen Sie hier rotes Material ein
bpy.data.materials.new(name = 'red')
mat_red = bpy.data.materials['red']
mat_red.use_nodes = False
mat_red.diffuse_color = (1,0,0,1)

def add_sphere(r,x,y,z,count):
    if count > 20: #Endlosschleife ohne diese
        return
    bpy.ops.mesh.primitive_uv_sphere_add(radius=r,location=(x,y,z))
    bpy.ops.object.material_slot_add()
    bpy.context.object.active_material=mat_red
    #Geben Sie zufällig Längen- und Breitengrad an
    theta = np.random.rand()*np.pi*2
    phi = (np.random.rand()-0.5)*np.pi
    #Geben Sie neue Koordinaten an
    nr = r*(0.5 + np.random.rand())#Der Ball des Kindes ist die 0 des Elternteils.5 mal zu 1.5 mal
    nx = x+(r+nr)*np.cos(theta)*np.cos(phi)
    ny = y+(r+nr)*np.sin(theta)*np.cos(phi)
    nz = z+(r+nr)*np.sin(phi)
    add_sphere(nr,nx,ny,nz,count+1)#Rufen Sie eine Kopie von sich
    return

add_sphere(1,0,0,0,1)

Stufe 4 Augäpfel hinzufügen

Ich werde einen niedlichen Augapfel hinzufügen. Es wäre schön, wenn ich die Textur einstellen könnte, aber hier werde ich nur mit Primitiven zeichnen.

image.png

Es scheint viel. Wenn Sie danach die Schattierung ein wenig anordnen und rendern, können Sie wie am Anfang ein leuchtendes Bild erzeugen.

Der Code enthält viele redundante Teile, daher habe ich einige davon als Funktionen vereinfacht.

import bpy
import numpy as np #Numpy-Import hinzufügen

#Das Schreiben von drei Materialeinstellungen ist langwierig, machen Sie es also zu einer Funktion
def create_material(color_name,r,g,b):
    bpy.data.materials.new(name = color_name)
    mat = bpy.data.materials[color_name]
    mat.use_nodes = False
    mat.diffuse_color = (r,g,b,1)
    return mat

mat_red = create_material('red',1,0,0)
mat_white = create_material('white',1,1,1)
mat_eye = create_material('eye',0,1.5,1)

#Das Schreiben von drei Koordinatenspezifikationen ist langwierig und daher teilweise funktionalisiert
def next_params(x,y,z,theta,phi,dist):
    nx = x + dist*np.cos(theta)*np.cos(phi)
    ny = y + dist*np.sin(theta)*np.cos(phi)
    nz = z + dist*np.sin(phi)
    return nx,ny,nz

#Das Schreiben von drei UV-Kugelgenerationen dauert lange, daher ist es teilweise funktionalisiert.
def create_sphere(r,x,y,z,mat):
    bpy.ops.mesh.primitive_uv_sphere_add(radius=r,location=(x,y,z))
    bpy.ops.object.material_slot_add()
    bpy.context.object.active_material=mat
    return

#Übrigens ist auch die Winkelerzeugung funktionalisiert
def create_angular():
    theta = np.random.rand()*np.pi*2
    phi = (np.random.rand()-0.5)*np.pi
    return theta,phi

def add_sphere(r,x,y,z,count):
    if count > 20: #Endlosschleife ohne diese
        return
    create_sphere(r,x,y,z,mat_red)
    theta,phi = create_angular()
    nr = r*(0.5 + np.random.rand())
    nx,ny,nz = next_params(x,y,z,theta,phi,r+nr)
    add_sphere(nr,nx,ny,nz,count+1)#Rufen Sie eine Kopie von sich
    #Weiße Augen erzeugen (dies ist nur eine Funktion)
    theta,phi = create_angular()
    nx,ny,nz = next_params(x,y,z,theta,phi,r/3)
    create_sphere(0.8*r,nx,ny,nz,mat_white)
    #Schüler erzeugen (dies ist nur eine Funktion)
    nx,ny,nz = next_params(x,y,z,theta,phi,r/2)
    create_sphere(0.65*r,nx,ny,nz,mat_eye)
    return

add_sphere(1,0,0,0,1)

5. Stufe Parametereinstellung

Sie können eine andere Schönheit des Lebens sehen, indem Sie es in der Mitte teilen oder den Ball des Kindes verkleinern.

image.png

Wenn Sie interessiert sind, kann es eine gute Idee sein, mit verschiedenen Parametern zu spielen. Beachten Sie jedoch, dass bei einer Änderung um "Anzahl> 20" die Anzahl der Objekte möglicherweise exponentiell zunimmt und Blender je nach Aufbau des Programms einfriert.

Recommended Posts

Erwecken Sie Ihr Leben mit Blender-Skripten prozedural zum Leben
[Blender] So erstellen Sie Blender-Skripte mehrsprachig
[Blender] So legen Sie shape_key mit dem Skript fest
So importieren Sie Ihr eigenes Modul mit jupyter
Erstellen Sie ein teuflisches Bild mit Blenders Skript
Schritte zum Installieren Ihrer eigenen Bibliothek mit pip
Memo zum Erstellen einer eigenen Box mit Peppers Python
Fügen Sie einfach den Treiber mit dem Mixer zum Formschlüssel hinzu
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Einmaliges Anmelden bei der Django-Anwendung mit AWS SSO